diff options
1474 files changed, 58600 insertions, 58603 deletions
diff --git a/.gitignore b/.gitignore index 061269bbd..e035516d1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,15 @@ # Common packaging directories -/bin/ -/build/ -/dist/ -/env/ -/lib/ -/lib64/ -/parts/ -/sdist/ -/var/ -/temp/ +bin/ +build/ +dist/ +env/ +lib/ +lib64/ +parts/ +sdist/ +var/ +temp/ +!/pyload/lib/ # Common directories .*/ @@ -27,8 +28,8 @@ userplugins/ /*.txt /*.xml /*.zip -/module/config/core.xml -/module/config/plugin.xml +/pyload/config/core.xml +/pyload/config/plugin.xml # Common MacOS & Windows files *.DS_Store @@ -78,7 +79,7 @@ eggs *.project *.pydevproject *.rej -/docs/_build/ -/pyload/ +_build/ +/module/ DLC_*.py paver-minilib.zip diff --git a/docs/access_api.rst b/docs/access_api.rst index ce78364b9..d83698aa3 100644 --- a/docs/access_api.rst +++ b/docs/access_api.rst @@ -13,12 +13,12 @@ First of all, you need to know what you can do with our API. It lets you do all retrieving download status, manage queue, manage accounts, modify config and so on. This document is not intended to explain every function in detail, for a complete listing -see :class:`Api <module.Api.Api>`. +see :class:`Api <pyload.Api.Api>`. Of course its possible to access the ``core.api`` attribute in plugins and hooks, but much more interesting is the possibillity to call function from different programs written in many different languages. -pyLoad uses thrift as backend and provides its :class:`Api <module.Api.Api>` as service. +pyLoad uses thrift as backend and provides its :class:`Api <pyload.Api.Api>` as service. More information about thrift can be found here http://wiki.apache.org/thrift/. @@ -26,7 +26,7 @@ Using Thrift ------------ Every thrift service has to define all data structures and declare every method which should be usable via rpc. -This file is located :file:`module/remote/thriftbackend/pyload.thrift`, its very helpful to inform about +This file is located :file:`pyload/remote/thriftbackend/pyload.thrift`, its very helpful to inform about arguments and detailed structure of return types. However it does not contain any information about what the functions does. Assuming you want to use the API in any other language than python than check if it is @@ -48,7 +48,7 @@ In case you want to use python, pyload has already all files included to access A basic script that prints out some information: :: - from module.remote.thriftbackend.ThriftClient import ThriftClient, WrongLogin + from pyload.remote.thriftbackend.ThriftClient import ThriftClient, WrongLogin try: client = ThriftClient(host="127.0.0.1", port=7227, user="User", password="yourpw") @@ -92,14 +92,14 @@ so pyLoad can authenticate you. Calling Methods =============== -In general you can use any method listed at the :class:`Api <module.Api.Api>` documentation, which is also available to +In general you can use any method listed at the :class:`Api <pyload.Api.Api>` documentation, which is also available to the thriftbackend. Access works simply via ``http://pyload-core/api/methodName``, where ``pyload-core`` is the ip address or hostname including the webinterface port. By default on local access this would be `localhost:8000`. The return value will be formatted in JSON, complex data types as dictionaries. -As mentionted above for a documentation about the return types look at the thrift specification file :file:`module/remote/thriftbackend/pyload.thrift`. +As mentionted above for a documentation about the return types look at the thrift specification file :file:`pyload/remote/thriftbackend/pyload.thrift`. ================== Passing parameters @@ -107,7 +107,7 @@ Passing parameters To pass arguments you have two choices. Either use positional arguments, eg ``http://pyload-core/api/getFileData/1``, where 1 is the FileID, or use keyword arguments -supplied via GET or POST ``http://pyload-core/api/getFileData?fid=1``. You can find the argument names in the :class:`Api <module.Api.Api>` +supplied via GET or POST ``http://pyload-core/api/getFileData?fid=1``. You can find the argument names in the :class:`Api <pyload.Api.Api>` documentation. It is important that *all* arguments are in JSON format. So ``http://pyload-core/api/getFileData/1`` is valid because diff --git a/docs/conf.py b/docs/conf.py index b5976d2fc..62ad33bb7 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -16,7 +16,7 @@ from os.path import dirname, join, abspath dir_name = join(dirname(abspath(""))) sys.path.append(dir_name) -sys.path.append(join(dir_name, "module", "lib")) +sys.path.append(join(dir_name, "pyload", "lib")) # If extensions (or modules to document with autodoc) are in another directory, @@ -128,7 +128,7 @@ html_theme = 'default' # The name of an image file (relative to this directory) to place at the top # of the sidebar. -html_logo = join(dir_name, "module", "web", "media", "default", "img", "pyload-logo-edited3.5-new-font-small.png") +html_logo = join(dir_name, "pyload", "web", "media", "default", "img", "pyload-logo-edited3.5-new-font-small.png") # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 diff --git a/docs/docs.conf b/docs/docs.conf index 0f30ab89e..fd2987784 100644 --- a/docs/docs.conf +++ b/docs/docs.conf @@ -3,12 +3,12 @@ [epydoc] -modules: pyload.py, pyload-cli.py, module +modules: pyload.py, pyload-cli.py, pyload output: html target: docs docformat: restructuredtext -exclude: module\.lib|module\.remote\.thriftbackend\.thriftgen|\.pyc|\.pyo|module\.plugins\.(accounts|container|crypter|hooks|hoster|internal|ocr) +exclude: pyload\.lib|pyload\.remote\.thriftbackend\.thriftgen|\.pyc|\.pyo|pyload\.plugins\.(accounts|container|crypter|hooks|hoster|internal|ocr) name: pyLoad Documentation url: http://docs.pyload.org diff --git a/docs/index.rst b/docs/index.rst index 757fd7537..ff40ff3cb 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -20,7 +20,7 @@ Contents: extend_pyload.rst module_overview.rst -.. currentmodule:: module +.. currentmodule:: pyload ================== diff --git a/docs/module_overview.rst b/docs/module_overview.rst index d51202c88..8cea3874b 100644 --- a/docs/module_overview.rst +++ b/docs/module_overview.rst @@ -4,14 +4,14 @@ Module Overview You can find an overview of some important classes here: .. autosummary:: - :toctree: module + :toctree: pyload - module.Api.Api - module.plugins.Plugin.Base - module.plugins.Plugin.Plugin - module.plugins.Crypter.Crypter - module.plugins.Account.Account - module.plugins.Hook.Hook - module.HookManager.HookManager - module.PyFile.PyFile - module.PyPackage.PyPackage + pyload.Api.Api + pyload.plugins.Plugin.Base + pyload.plugins.Plugin.Plugin + pyload.plugins.Crypter.Crypter + pyload.plugins.Account.Account + pyload.plugins.Hook.Hook + pyload.HookManager.HookManager + pyload.PyFile.PyFile + pyload.PyPackage.PyPackage diff --git a/docs/write_hooks.rst b/docs/write_hooks.rst index a088a3ed3..5508f5a0c 100644 --- a/docs/write_hooks.rst +++ b/docs/write_hooks.rst @@ -3,20 +3,20 @@ Hooks ===== -A Hook is a python file which is located at :file:`module/plugins/hooks`. -The :class:`HookManager <module.HookManager.HookManager>` will load it automatically on startup. Only one instance exists -over the complete lifetime of pyload. Your hook can interact on various events called by the :class:`HookManager <module.HookManager.HookManager>`, -do something complete autonomic and has full access to the :class:`Api <module.Api.Api>` and every detail of pyLoad. +A Hook is a python file which is located at :file:`pyload/plugins/hooks`. +The :class:`HookManager <pyload.HookManager.HookManager>` will load it automatically on startup. Only one instance exists +over the complete lifetime of pyload. Your hook can interact on various events called by the :class:`HookManager <pyload.HookManager.HookManager>`, +do something complete autonomic and has full access to the :class:`Api <pyload.Api.Api>` and every detail of pyLoad. The UpdateManager, CaptchaTrader, UnRar and many more are realised as hooks. Hook header ----------- -Your hook needs to subclass :class:`Hook <module.plugins.Hook.Hook>` and will inherit all of its method, make sure to check its documentation! +Your hook needs to subclass :class:`Hook <pyload.plugins.Hook.Hook>` and will inherit all of its method, make sure to check its documentation! All Hooks should start with something like this: :: - from module.plugins.Hook import Hook + from pyload.plugins.Hook import Hook class YourHook(Hook): __name__ = "YourHook" @@ -42,16 +42,16 @@ Interacting on Events The next step is to think about where your Hook action takes places. -The easiest way is to overwrite specific methods defined by the :class:`Hook <module.plugins.Hook.Hook>` base class. +The easiest way is to overwrite specific methods defined by the :class:`Hook <pyload.plugins.Hook.Hook>` base class. The name is indicating when the function gets called. -See :class:`Hook <module.plugins.Hook.Hook>` page for a complete listing. +See :class:`Hook <pyload.plugins.Hook.Hook>` page for a complete listing. -You should be aware of the arguments the Hooks are called with, whether its a :class:`PyFile <module.PyFile.PyFile>` -or :class:`PyPackage <module.PyPackage.PyPackage>` you should read its related documentation to know how to access her great power and manipulate them. +You should be aware of the arguments the Hooks are called with, whether its a :class:`PyFile <pyload.PyFile.PyFile>` +or :class:`PyPackage <pyload.PyPackage.PyPackage>` you should read its related documentation to know how to access her great power and manipulate them. A basic excerpt would look like: :: - from module.plugins.Hook import Hook + from pyload.plugins.Hook import Hook class YourHook(Hook): """ @@ -66,12 +66,12 @@ A basic excerpt would look like: :: Another and more flexible and powerful way is to use event listener. All hook methods exists as event and very useful additional events are dispatched by the core. For a little overview look -at :class:`HookManager <module.HookManager.HookManager>`. Keep in mind that you can define own events and other people may listen on them. +at :class:`HookManager <pyload.HookManager.HookManager>`. Keep in mind that you can define own events and other people may listen on them. For your convenience it's possible to register listeners automatical via the ``event_map`` attribute. It requires a `dict` that maps event names to function names or a `list` of function names. It's important that all names are strings :: - from module.plugins.Hook import Hook + from pyload.plugins.Hook import Hook class YourHook(Hook): """ @@ -92,7 +92,7 @@ It requires a `dict` that maps event names to function names or a `list` of func An advantage of the event listener is that you are able to register and remove the listeners at runtime. Use `self.manager.addEvent("name", function)`, `self.manager.removeEvent("name", function)` and see doc for -:class:`HookManager <module.HookManager.HookManager>`. Contrary to ``event_map``, ``function`` has to be a reference +:class:`HookManager <pyload.HookManager.HookManager>`. Contrary to ``event_map``, ``function`` has to be a reference and **not** a `string`. We introduced events because it scales better if there a a huge amount of events and hooks. So all future interaction will be exclusive @@ -102,12 +102,12 @@ available as event and not accessible through overwriting hook methods. However Providing RPC services ---------------------- -You may noticed that pyLoad has an :class:`Api <module.Api.Api>`, which can be used internal or called by clients via RPC. +You may noticed that pyLoad has an :class:`Api <pyload.Api.Api>`, which can be used internal or called by clients via RPC. So probably clients want to be able to interact with your hook to request it's state or invoke some action. Sounds complicated but is very easy to do. Just use the ``Expose`` decorator: :: - from module.plugins.Hook import Hook, Expose + from pyload.plugins.Hook import Hook, Expose class YourHook(Hook): """ @@ -118,7 +118,7 @@ Sounds complicated but is very easy to do. Just use the ``Expose`` decorator: :: def invoke(self, arg): print "Invoked with", arg -Thats all, it's available via the :class:`Api <module.Api.Api>` now. If you want to use it read :ref:`access_api`. +Thats all, it's available via the :class:`Api <pyload.Api.Api>` now. If you want to use it read :ref:`access_api`. Here is a basic example: :: #Assuming client is a ThriftClient or Api object @@ -128,11 +128,11 @@ Here is a basic example: :: Providing status information ---------------------------- -Your hook can store information in a ``dict`` that can easily be retrievied via the :class:`Api <module.Api.Api>`. +Your hook can store information in a ``dict`` that can easily be retrievied via the :class:`Api <pyload.Api.Api>`. Just store everything in ``self.info``. :: - from module.plugins.Hook import Hook + from pyload.plugins.Hook import Hook class YourHook(Hook): """ @@ -155,4 +155,4 @@ Example ------- Sorry but you won't find an example here ;-) - Look at :file:`module/plugins/hooks` and you will find plenty examples there. + Look at :file:`pyload/plugins/hooks` and you will find plenty examples there. diff --git a/docs/write_plugins.rst b/docs/write_plugins.rst index ff3be66d0..c2b25a934 100644 --- a/docs/write_plugins.rst +++ b/docs/write_plugins.rst @@ -3,11 +3,11 @@ Plugins ======= -A Plugin is a python file located at one of the subfolders in :file:`module/plugins/`. Either :file:`hoster`, :file:`crypter` +A Plugin is a python file located at one of the subfolders in :file:`pyload/plugins/`. Either :file:`hoster`, :file:`crypter` or :file:`container`, depending of it's type. There are three kinds of different plugins: **Hoster**, **Crypter**, **Container**. -All kind of plugins inherit from the base :class:`Plugin <module.plugins.Plugin.Plugin>`. You should know its +All kind of plugins inherit from the base :class:`Plugin <pyload.plugins.Plugin.Plugin>`. You should know its convenient methods, they make your work easier ;-) Every plugin defines a ``__pattern__`` and when the user adds urls, every url is matched against the pattern defined in @@ -19,7 +19,7 @@ Plugin header How basic hoster plugin header could look like: :: - from module.plugin.Hoster import Hoster + from pyload.plugin.Hoster import Hoster class MyFileHoster(Hoster): __name__ = "MyFileHoster" @@ -41,7 +41,7 @@ We head to the next important section, the ``process`` method of your plugin. In fact the ``process`` method is the only functionality your plugin has to provide, but its always a good idea to split up tasks to not produce spaghetti code. An example ``process`` function could look like this :: - from module.plugin.Hoster import Hoster + from pyload.plugin.Hoster import Hoster class MyFileHoster(Hoster): """ @@ -58,7 +58,7 @@ An example ``process`` function could look like this :: # download the file, destination is determined by pyLoad self.download(parsed_url) -You need to know about the :class:`PyFile <module.PyFile.PyFile>` class, since an instance of it is given as parameter to every pyfile. +You need to know about the :class:`PyFile <pyload.PyFile.PyFile>` class, since an instance of it is given as parameter to every pyfile. Some tasks your plugin should handle: proof if file is online, get filename, wait if needed, download the file, etc.. Wait times @@ -71,7 +71,7 @@ Captcha decrypting __________________ To handle captcha input just use ``self.decryptCaptcha(url, ...)``, it will be send to clients -or handled by :class:`Hook <module.plugins.Hook.Hook>` plugins +or handled by :class:`Hook <pyload.plugins.Hook.Hook>` plugins Crypter ------- @@ -81,7 +81,7 @@ Well, they work nearly the same, only that the function they have to provide is Example: :: - from module.plugin.Crypter import Crypter + from pyload.plugin.Crypter import Crypter class MyFileCrypter(Crypter): """ @@ -93,11 +93,11 @@ Example: :: self.packages.append(("pyLoad packages", urls, "pyLoad packages")) # urls list of urls -They can access all the methods from :class:`Plugin <module.plugins.Plugin.Plugin>`, but the important thing is they +They can access all the methods from :class:`Plugin <pyload.plugins.Plugin.Plugin>`, but the important thing is they have to append all packages they parsed to the `self.packages` list. Simply append tuples with `(name, urls, folder)`, where urls is the list of urls contained in the packages. Thats all of your work, pyLoad will know what to do with them. Examples -------- -Best examples are already existing plugins in :file:`module/plugins/`. +Best examples are already existing plugins in :file:`pyload/plugins/`. diff --git a/locale/af/LC_MESSAGES/django.po b/locale/af/LC_MESSAGES/django.po index f847c8fcf..e6f126a57 100644 --- a/locale/af/LC_MESSAGES/django.po +++ b/locale/af/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/af/LC_MESSAGES/pyLoad.po b/locale/af/LC_MESSAGES/pyLoad.po index ae1eec95b..d29dad5d0 100644 --- a/locale/af/LC_MESSAGES/pyLoad.po +++ b/locale/af/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "" -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "" -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/af/LC_MESSAGES/pyLoadCli.po b/locale/af/LC_MESSAGES/pyLoadCli.po index 1b0d1172a..6760512f1 100644 --- a/locale/af/LC_MESSAGES/pyLoadCli.po +++ b/locale/af/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "" diff --git a/locale/af/LC_MESSAGES/setup.po b/locale/af/LC_MESSAGES/setup.po index 8aae41ce1..a66cfd176 100644 --- a/locale/af/LC_MESSAGES/setup.po +++ b/locale/af/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "" diff --git a/locale/ar/LC_MESSAGES/django.po b/locale/ar/LC_MESSAGES/django.po index 6e67693ed..875577bad 100644 --- a/locale/ar/LC_MESSAGES/django.po +++ b/locale/ar/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "Ø·ÙÙÙØšØª ÙØ§ØšØªØŽØ§ Ø¬Ø¯ÙØ¯Ø©" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "ÙØ¶ÙØ§Ù Ø§ÙØ±Ø£ اÙÙØµÙ اÙÙ
ÙØ¬Ùد Ù٠اÙÙØ§ØšØªØŽØ§." -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "Ø£Ø¹ÙØ¯ ت؎غÙÙ pyLoad" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "اÙÙØ§Ù" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "ÙØ¬Ø" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "ت؎غÙÙ" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "Ø£Ù
ØªØ£ÙØ¯ Ù
٠أÙÙ ØªØ±ÙØ¯ Ø§ÙØ®Ø±Ùج Ù
Ù pyLoad Ø" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "أعد ؚدء Ø§ÙØ±Ø§ØšØ·" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "Ø§ØØ°Ù Ø§ÙØ±Ø§ØšØ·" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "أدخ٠اسÙ
ا٠ÙÙØØ²Ù
Ø©." -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "ÙØ¶Ùا٠اضغط عÙ٠اÙÙ
ÙÙØ¹ Ø§ÙØµØÙØ ÙÙÙØ§ØšØªØŽØ§." -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "ØØ¯Ø« خطأ." -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "اÙÙ
Ø¬ÙØ¯ ÙØ§Ø±Øº" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "ÙØŽÙ" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "ÙØ§ تتÙÙØ± ÙØ§ØšØªØŽØ§ ÙØ£ÙØ±Ø£ÙØ§." -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "ÙÙ
تتطاؚ٠ÙÙÙ
تا اÙÙ
Ø±ÙØ±." -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "ØÙÙÙØžÙت Ø§ÙØ¥Ø¹Ø¯Ø§Ø¯Ø§Øª" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "Ù
Ø¬ÙØ¯ Ø¬Ø¯ÙØ¯" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "Ø£Ù
ØªØ£ÙØ¯ Ù
٠أÙÙ ØªØ±ÙØ¯ إعادة ت؎غÙÙ pyLoadØ" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "Ø§ÙØªØžØ§Ø± %" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "Ø§ÙØªÙزÙÙØ§Øª اÙÙØŽØ·Ø©" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "اÙÙ
ÙØ²Ù" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "ÙØ§ØŠÙ
Ø© Ø§ÙØ¥Ùت؞ار" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "جاÙ
ع Ø§ÙØ±Ùاؚط" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "Ø§ÙØªÙزÙÙØ§Øª" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "Ø§ÙØ³Ø¬Ùات" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "Ø§ÙØ¶ØšØ·" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "اسÙ
" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "Ø§ÙØØ§ÙØ©" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "Ù
عÙÙÙ
ات" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "Ø§ÙØØ¬Ù
" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "Ø§ÙØªÙدÙ
" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "تسجÙÙ Ø§ÙØ¯Ø®ÙÙ" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "اسÙ
اÙÙ
ستخدÙ
" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "ÙÙÙ
Ø© اÙÙ
Ø±ÙØ±" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "ÙÙ
ÙØªØ·Ø§ØšÙ اسÙ
اÙÙ
ستخدÙ
ÙÙÙÙ
Ø© اÙÙ
Ø±ÙØ± اÙÙØ°Ø§Ù Ø£Ø¯Ø®ÙØªÙÙ
ا. Ø±Ø¬Ø§Ø¡Ù ØØ§ÙÙ Ù
Ø¬Ø¯ÙØ¯Ø§Ù." -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "ÙØ¥Ø¹Ø§Ø¯Ø© ضؚط ØšÙØ§Ùات اÙÙÙÙØ¬ Ø£Ù Ø¥Ø¶Ø§ÙØ© Ù
ستخدÙ
ÙÙÙØ°:" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "تÙ
Ù Ø§ÙØØ°Ù" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "ÙØŽÙت إعادة Ø§ÙØªØŽØºÙÙ" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "اÙÙ
Ø¬ÙØ¯:" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "ÙÙÙ
Ø© Ø§ÙØ³Ø±:" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "ØØ±Ùر Ø§ÙØØ²Ù
Ø©" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "ØØ±Ùر ØªÙØ§ØµÙÙ Ø§ÙØØ²Ù
Ø© Ø£Ø¯ÙØ§Ù." -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "اسÙ
Ø§ÙØØ²Ù
Ø©." -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "Ù
Ø¬ÙØ¯" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "اسÙ
اÙÙ
جÙÙØ¯ اÙÙØ±Ø¹ÙÙ ÙÙØ°Ù Ø§ÙØªÙزÙÙØ§Øª." -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "ÙØ§ØŠÙ
Ø© ÙÙÙ
ات Ø§ÙØ³Ø± اÙÙ
ستخدÙ
Ø© ÙÙÙ٠ضغط rar" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "Ø§ÙØªØ±Ø" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "اÙ
ØÙ" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "ÙÙØ¯ خرجت ØšÙØ¬Ø§Ø." -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "اÙÙ
سار" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "Ù
ÙØ·ÙÙÙ" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "ÙØ³ØšÙ" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "Ø§ÙØ§Ø³Ù
" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "Ø§ÙØØ¬Ù
" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "اÙÙÙØ¹" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "آخر تغÙÙØ±" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "اÙÙ
Ø¬ÙØ¯ Ø§ÙØ£Øš" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "ÙØ§ Ù
ØØªÙÙ" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "عاÙ
" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "اÙÙ
ÙØÙØ§Øª" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "Ø§ÙØØ³Ø§ØšØ§Øª" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "اختر ÙÙØ³Ù
ا٠Ù
٠اÙÙØ§ØŠÙ
Ø©" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "Ø§ÙØ§Ø¶Ø§Ùات" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "ØµØ§ÙØØ© ØØªÙ" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "اÙÙÙØª" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "Ø£ÙØµÙ عدد ÙÙØªÙزÙÙØ§Øª اÙÙ
تزاÙ
ÙØ©" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "ØØ°ÙØ" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "ØµØ§ÙØØ©" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "ØºÙØ± ØµØ§ÙØ" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "ÙØ¹Ù
" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "ÙØ§" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "Ø¥Ø¶Ø§ÙØ©" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "Ø¥Ø¶Ø§ÙØ© ØØ³Ø§Øš" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "أض٠Ù
عÙÙÙ
ات ØØ³Ø§ØšÙ ÙØªØ³ØªØ®Ø¯Ù
Ù
Ø²Ø§ÙØ§ Ø§ÙØØ³Ø§Øš اÙÙ
ØªÙØ¯ÙÙ
" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "اسÙ
ØØ³Ø§ØšÙ." -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "ÙÙÙ
Ø© Ø§ÙØ³Ø±Ù ÙÙØ°Ø§ Ø§ÙØØ³Ø§Øš." -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "ÙÙØ¹" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "اختر اÙÙ
ضÙÙ ÙØØ³Ø§ØšÙ." -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "اؚدأ" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "Ø§ÙØ³Ø§ØšÙ" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "Ø§ÙØªØ§ÙÙ" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "Ø§ÙØªÙÙ" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "أخؚار" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "Ø§ÙØ¯Ø¹Ù
" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "اÙÙØžØ§Ù
" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "ØšØ§ÙØ«ÙÙ:" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "ÙØžØ§Ù
Ø§ÙØªØŽØºÙÙ:" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "إصدار pyLoad:" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "Ù
Ø¬ÙØ¯ Ø§ÙØªØ«ØšÙت:" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "Ù
Ø¬ÙØ¯ Ø§ÙØ¥Ø¹Ø¯Ø§Ø¯Ø§Øª:" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "Ù
Ø¬ÙØ¯ Ø§ÙØªÙزÙÙØ§Øª:" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "اÙÙ
Ø³Ø§ØØ© Ø§ÙØØ±ÙØ©:" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "اÙÙÙÙØºØ©:" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "Ù
ÙÙØ° ÙØ§Ø¬ÙØ© Ø§ÙØŽÙÙØšÙØªÙØ©:" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "Ù
ÙÙØ° اÙÙØ§Ø¬ÙØ© Ø§ÙØšØ¹Ùدة:" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "ØšØ±ÙØ§Ù
ج Ø§ÙØ¥Ø¹Ø¯Ø§Ø¯" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "Ù
Ø¯ÙØ± اÙÙ
ÙÙØ§Øª" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "Ø£Ø¶Ù ØØ²Ù
Ø©" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "Ø§ÙØµÙ راؚطأ Ø£Ù Ø§Ø±ÙØ¹ ØØ§ÙÙØ§Ù. " -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "اسÙ
Ø§ÙØØ²Ù
Ø© Ø§ÙØ¬Ø¯Ùدة." -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "Ø±ÙØ§ØšØ·" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "Ø§ÙØµÙ Ø§ÙØ±Ùاؚط أ٠أÙÙ ÙØµÙ ÙÙØ§ Ø«Ù
اضغط زر٠استخراج Ø§ÙØ±Ùاؚط." -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "Ø±ØŽÙØ Ø§ÙØ±Ùاؚط" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "ÙÙÙ
Ø© سر أر؎ÙÙØ§Øª RAR" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "Ù
ÙÙ" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "Ø§Ø±ÙØ¹ ØØ§ÙÙØ§Ù." -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "اÙÙØ¬ÙØ©" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "اÙÙØµ" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "Ø¥ØºÙØ§Ù" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "ÙØ§Ø¬ÙØ© Ø§ÙØŽÙÙØšÙØªÙØ©" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "ÙØªÙÙÙØ± ØªØØ¯ÙØ« ÙÙØšØ±ÙاÙ
ج!" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "تÙ
Ù ØªØØ¯ÙØ« Ø§ÙØ¥Ø¶Ø§ÙØ©Ø ÙØ±Ø¬Ù إعادة ت؎غÙÙ Ø§ÙØšØ±ÙاÙ
ج!" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "ÙØ§ØšØªØŽØ§ ØªÙØªØžØ±" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "اخرج" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "Ø£Ø¯ÙØ±" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "اÙÙ
عÙÙÙ
ات" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "ÙØ±Ø¬Ù اÙÙÙÙØ¬!" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "تÙÙÙÙ" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "Ø§ÙØºØ§Ø¡" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "Ø§ÙØªÙزÙÙ:" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "إعادة Ø§ÙØ§ØªØµØ§Ù:" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "Ø§ÙØ³Ø±Ø¹Ø©:" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "اÙÙØŽØ·:" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "أعد تØÙ
ÙÙ Ø§ÙØµÙØØ©" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "ÙØÙ
ÙÙ" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "Ø§ÙØ¹Ùدة ÙØ£Ø¹ÙÙ" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "اخرج Ù
Ù pyLoad" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "أعد ت؎غÙÙ pyLoad" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "ÙØ¥Ø¶Ø§ÙØ© Ù
ستخدÙ
أ٠تغÙÙØ± ÙÙÙ
ات Ù
Ø±ÙØ± استخدÙ
:" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "ÙØ§Ù
Ù: ØØ³Ø§Øš اÙÙ
Ø¯ÙØ± Admin Ù٠دا؊Ù
Ø§Ù Ø§ÙØµÙاØÙات اÙÙØ§Ù
ÙØ©!" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "غÙÙØ± ÙÙÙ
Ø© Ø§ÙØ³Ø±Ù" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "اÙÙ
؎رÙ" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "Ø§ÙØ£Ø°ÙÙ" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "غÙÙØ±" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "أدخ٠ÙÙÙ
Ø© Ø§ÙØ³Ø±Ù Ø§ÙØØ§ÙÙÙØ© ÙØ§ÙØ¬Ø¯ÙØ¯Ø©." -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "اÙÙ
ستخدÙ
" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "ÙÙÙ
Ø© Ø§ÙØ³Ø±Ù Ø§ÙØØ§ÙÙØ©" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "ÙÙÙ
Ø© Ø³Ø±Ù Ø¬Ø¯ÙØ¯Ø©" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "ÙÙÙ
Ø© Ø§ÙØ³Ø±Ù Ø§ÙØ¬Ø¯Ùدة." -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "ÙÙÙ
Ø© Ø§ÙØ³Ø±Ù Ø§ÙØ¬Ø¯Ùدة (إعادة)" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "ÙØ¶Ùا٠أعد إدخا٠ÙÙÙ
Ø© Ø§ÙØ³Ø±Ù." -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "ÙØ§ ÙÙØ¬Ø¯ ÙØ¯ÙÙ ØµÙØ§ØÙات ÙÙÙØµÙÙ ÙÙØ°Ù Ø§ÙØµÙØÙ" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "Ù
Ø¬ÙØ¯ Ø§ÙØªØÙ
ÙÙØ§Øª ØºÙØ± Ù
ÙØ¬Ùد" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "ØºÙØ± Ù
ØØ¯Ùد" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "ØºÙØ± Ù
تÙÙØ±" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "ÙÙ
ؚت؎غÙÙ pyload.py -s ÙØªØšØ¯Ø§Ø¡ Ø§ÙØªØ«ØšÙت" diff --git a/locale/ar/LC_MESSAGES/pyLoad.po b/locale/ar/LC_MESSAGES/pyLoad.po index 7acb978f5..2f37f4a1b 100644 --- a/locale/ar/LC_MESSAGES/pyLoad.po +++ b/locale/ar/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "تÙ
Ø§Ø³ØªÙØšØ§Ù ا؎ارة اÙÙØ§Ø¡" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "ؚا٠ÙÙØ¯ ÙØ¹Ù
Ù ØØ§ÙÙØ§ ØšÙ
Ø¹Ø±Ù Ø§ÙØ¹Ù
ÙÙØ© %s" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "ÙØŽÙ Ù٠تغÙÙØ± اÙÙ
جÙ
ÙØ¹Ù: %s" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "ÙØŽÙ Ù٠تغÙÙØ± اÙÙ
ستخدÙ
: %s" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "Ù
Ø¬ÙØ¯ ÙÙØªÙØ§Ø±ÙØ±" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "ؚدء" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "استخداÙ
Ù
Ø¬ÙØ¯ اÙÙ
ÙØ²Ù: %s" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "Ù
Ø¬ÙØ¯ ÙÙÙ
ÙÙØ§Øª اÙÙ
Ø€ÙØªØ©" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "Ù
Ø¬ÙØ¯ ÙÙØªØÙ
ÙÙØ§Øª" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "OpenSSL ÙØ§ØªØµØ§Ù اÙ
Ù" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "ÙÙ٠اعدادت اÙÙ
ستخدÙ
اÙÙØ¯ÙÙ
اÙÙ ÙØ§Ø¹Ø¯Ø© Ø§ÙØšÙØ§ÙØ§Øª" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "ÙØ±Ø¬Ù Ø§ÙØªØ§Ùد Ù
Ù ØšÙØ§Ùات Ø§ÙØ¯Ø®Ù٠ؚستخداÙ
./pyload.py -u" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "تÙ
Ù
Ø³Ø Ø¬Ù
ÙØ¹ Ø§ÙØ±Ùاؚط" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "ÙÙØª Ø§ÙØªØÙ
ÙÙ: %" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "اÙÙ
ساØÙ Ø§ÙØØ±Ù: %s" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "ØªÙØ¹ÙÙ Ø§ÙØØ³Ø§ØšØ§Øª..." -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "ØªÙØ¹ÙÙ Ø§ÙØ§Ø¶Ø§Ùات..." -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "ؚا٠ÙÙØ¯ Ù
ØØ¯Ø« Ù ÙØ¹Ù
Ù" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "اعادة ت؎غÙ٠ؚا٠ÙÙØ¯" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "Ø§ØºÙØ§Ù ؚا٠ÙÙØ¯" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "Ø§ÙØªØ«ØšÙت %" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "ÙØ§ ÙÙ
ÙÙ Ø§ÙØ¬Ø§Ø¯ %(ÙØµÙ): %(اسÙ
)" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "ÙØ§ ÙÙ
ÙÙ Ø§ÙØŽØ§Ø¡ %(ÙØµÙ): %(اسÙ
)" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "جار٠اÙÙØ§Ù Ø§ÙØªØŽØºÙÙ..." -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "خطاء Ø§Ø«ÙØ§Ø¡ اÙÙØ§Ù Ø§ÙØªØŽØºÙÙ " -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "اÙÙØ§Ø¡ ؚا٠ÙÙØ¯ Ù
Ù Ø§ÙØ·Ø±ÙÙÙ" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "تÙ
Ø§ÙØ§ÙØªÙØ§Ø¡" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "ØºÙØ± Ù
تصÙ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "Ù
تصÙ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "ÙÙ ÙØ§ØŠÙ
Ø© Ø§ÙØ§Ùت؞ار" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "تخطÙ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "Ø§ÙØªØžØ§Ø±" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "Ù
Ø€ÙØª. ØºÙØ± Ù
تصÙ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "Ø§ÙØšØ¯Ø¡" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "ÙØŽÙ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "Ø§ÙØºØ§Ø¡" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "Ù٠ت؎ÙÙØ±" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "Ù
خصص" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "Ø¬Ø§Ø±Ù Ø§ÙØªÙزÙÙ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "تجÙÙØ²" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "ØºÙØ± Ù
عرÙÙ" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "Ø§ÙØªÙت Ø§ÙØØ²Ù
Ù: %s" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "خطاء Ù٠اÙÙØ§Ø¬ÙØ© Ø§ÙØ®ÙÙÙÙ ÙÙØšØ±ÙاÙ
ج " -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "ؚدء %(name)s: %(addr)s:%(port)s" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "ÙØŽÙ Ù٠تØÙ
Ù٠اÙÙØ§Ø¬ÙÙ Ø§ÙØ®ÙÙÙÙ ÙÙØšØ±ÙاÙ
ج %(name)s | %(error)s" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "Ø§ÙØªØžØ§Ø± %" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "ØŽÙØ§Ø¯Ø© SSL ØºÙØ± Ù
ÙØ¬ÙدÙ." -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "ÙØ£Ø³Ù, ÙÙØ¯ اÙÙÙÙØ§ Ø§ÙØ¯Ø¹Ù
ÙÙØšØ¯ØŠ % Ù
ؚا؎ر٠Ù
٠ؚا٠ÙÙØ¯ " -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" -msgstr "عÙÙØ§Øª Ø§ÙØ§Ø¹Ø¯Ø§Ø¯Ø§Øª Ù
ÙØ¬Ùدة Ù٠اÙÙ
Ø¬ÙØ¯ module/webui/servers " +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" +msgstr "عÙÙØ§Øª Ø§ÙØ§Ø¹Ø¯Ø§Ø¯Ø§Øª Ù
ÙØ¬Ùدة Ù٠اÙÙ
Ø¬ÙØ¯ pyload/webui/servers " -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "ÙØ§ÙÙ
Ù٠استخداÙ
%(خادÙ
), ÙÙ
ÙØªÙ
ØªØ«ØšÙØª python-flup!" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "ØªØØªØ§Ø¬ ÙØªØÙ
ÙÙ Ù ØªØ«ØšÙØª bjoern, https://github.com/jonashaag/bjoern" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" -msgstr "Ø§ÙØ³Ø® boern.so اÙÙ module/lib ا٠استخدÙ
setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" +msgstr "Ø§ÙØ³Ø® boern.so اÙÙ pyload/lib ا٠استخدÙ
setup.py install" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "ØšØ§ÙØ·ØšØ¹ ÙØ¬Øš ا٠تÙÙÙ Ù
عتاد عÙÙ ÙÙÙØ³ ÙØªØ¹Ø±Ù ÙÙ٠تثؚت Ø§ÙØšØ±Ø§Ù
ج" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "ÙØ°Ø§ اÙÙ
خدÙ
ÙØ§ ÙÙØ¯Ù
خدÙ
Ø© SSLØ ÙØ±Ø¬Ù اÙÙØžØ± Ù٠استخداÙ
ؚدÙÙØ§Ù Ù
٠ذÙÙ" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "ÙØ§ ÙÙØ¬Ø¯ ÙØ¯ÙÙ ØµÙØ§ØÙات ÙÙÙØµÙÙ ÙÙØ°Ù Ø§ÙØµÙØÙ" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "Ù
Ø¬ÙØ¯ Ø§ÙØªØÙ
ÙÙØ§Øª ØºÙØ± Ù
ÙØ¬Ùد" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "ØºÙØ± Ù
ØØ¯Ùد" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "ØºÙØ± Ù
تÙÙØ±" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "ÙÙ
ؚت؎غÙÙ pyload.py -s ÙØªØšØ¯Ø§Ø¡ Ø§ÙØªØ«ØšÙت" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "ÙØŽÙ Ø§ÙØªÙزÙ٠عÙ٠اجزاء, Ø§ÙØ¹Ùدة اÙÙ Ø§ÙØªÙزÙ٠عÙÙ Ø§ØªØµØ§Ù ÙØ§ØØ¯ | %s" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "ؚدء Ø§ÙØªÙزÙÙ: %s" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "تÙ
Ø§ÙØ§ÙØªÙØ§Ø¡ Ù
Ù Ø§ÙØªÙزÙÙ: %s" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "Ø§ÙØ§Ø¶Ø§ÙØ© %s ØªÙØªÙد اÙÙ ÙØžÙÙØ©." -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "تÙ
Ø§ÙØºØ§Ø¡ Ø§ÙØªÙزÙÙ: %s" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "تÙ
اعادة ت؎غÙÙ Ø§ÙØªÙزÙÙ: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "Ø§ÙØªÙزÙÙ ØºÙØ± Ù
تصÙ: %s" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "Ø§ÙØªÙزÙÙ ØºÙØ± Ù
تص٠Ù
Ø€ÙØªØ§: %s" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "ÙØŽÙ Ø§ÙØªÙزÙÙ: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "ÙØ§ÙÙ
Ù٠اÙÙØµÙ٠اÙÙ Ø§ÙØ®Ø§Ø¯Ù
ا٠اعادة Ø§ÙØ§ØªØµØ§Ù, Ø§ÙØ§Ùت؞ار 1 دÙÙÙØ© ٠اعادة اÙÙ
ØØ§ÙÙØ©." -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "تÙ
ØªØ®Ø·Ù Ø§ÙØªÙزÙÙ: %(name)s ؚسؚؚ %(plugin)s" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "ÙØŽÙ Ø¬ÙØš Ø§ÙÙ
عÙÙÙ
ات Ù %(name)s | %(err)s" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "ÙØŽÙ Ø§ÙØªÙعÙÙ %(name)s" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "Ø§ÙØ§Ø¶Ø§Ùات اÙÙ
ÙØ¹ÙØ©: %" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "Ø§ÙØ§Ø¶Ø§Ùات اÙÙ
Ø¹Ø·ÙØ©: %" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "ÙØŽÙ Ù٠اعادة Ø§ÙØ§ØªØµØ§Ù: %s" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "Ø§ÙØšØ±ÙاÙ
ج اÙÙØµÙ ÙØ§Ø¹Ø§Ø¯Ø© Ø§ÙØ§ØªØµØ§Ù ØºÙØ± Ù
تÙÙØ±!" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "ؚدء اعادة Ø§ÙØ§ØªØµØ§Ù" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "ÙØŽÙ Ù٠تÙÙÙØ° Ø§ÙØšØ±ÙاÙ
ج اÙÙØµÙ ÙØ§Ø¹Ø§Ø¯Ø© Ø§ÙØ§ØªØµØ§Ù!" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "تÙ
ت اعادة Ø§ÙØ§ØªØµØ§Ù, IP Ø¬Ø¯ÙØ¯: %s" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "ÙÙ
ÙØªØšÙÙ Ù
Ø³Ø§ØØ© ÙØ§ÙÙØ© عÙÙ Ø§ÙØ¬Ùاز" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "ÙØ§ ÙÙ
Ù٠تسجÙÙ Ø§ÙØ¯Ø®ÙÙ ØšÙØ°Ø§ Ø§ÙØØ³Ø§Øš %(user)s | %(msg)s" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "ÙÙÙ
Ø© Ù
Ø±ÙØ± خاط؊ة" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "Ø§ÙØØ³Ø§Øš %s ÙÙØ³ ÙÙØ© ÙÙ
ÙØ© ØšÙØ§Ùات ÙØ§ÙÙØ©, اعد Ø§ÙØªØÙÙ Ø®ÙØ§Ù 30 دÙÙÙØ©" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "Ø§ÙØªÙت Ù
دة Ø§ÙØØ³Ø§Øš %s, تØÙÙ Ù
رة اخر٠ÙÙ 1 ساعة" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "ÙÙØ¯ ÙØµÙت اÙÙ Ø§ÙØØ¯ Ø§ÙØ§Ùص٠ÙÙØªÙزÙÙ" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "خطأ ÙÙ Ø§Ø³ØªÙØ±Ø§Ø¯ %(name)s: %(msg)s" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "ÙØ§ Ù
ستضÙÙ Ù
ØÙ
Ù" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "ÙÙ
ØšØªÙØ¹ÙÙ Ø§ÙØªØÙ
Ù٠اÙÙ
ؚا؎ر ÙÙ ØØ³Ø§Øš Bitshare ÙØ¯ÙÙ" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "Ù
Ø·ÙÙØš ØªØµØ±ÙØ (اسÙ
Ù
ستخدÙ
: ÙÙÙ
Ø© Ù
Ø±ÙØ±)" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "Ø§ÙØ±Ø¬Ø§Ø¡ Ø¥Ø¯Ø®Ø§Ù ØØ³Ø§ØšÙ ÙÙ %s Ø£Ù Ø¥ÙØºØ§Ø¡ ØªÙØŽÙØ· ÙØ°Ø© Ø§ÙØ§Ø¶Ø§ÙØ©" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "ÙÙØ§Ù رÙ
ز HTML Ù٠اÙÙ
ÙÙØ§Øª اÙÙØªÙ تÙ
ØªÙØ²ÙÙÙØ§ (%s)...خطاء اعادة ØªÙØ¬ÙØ©ØØ³ÙÙ ÙØªÙ
اعادة ت؎غÙÙ Ø§ÙØªÙزÙÙ." -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "اÙÙ
ÙÙ ØºÙØ± Ù
تÙÙØ± Ù
Ø€ÙØªØ§" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "ضغط Ø§ÙØŽØšÙØ©: Ø§ÙØ§Ùت؞ار ØšÙÙ Ø§ÙØªÙزÙÙØ§Øª %d." -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "ضغط Ø§ÙØŽØšÙØ©: Ø§ÙØ§Ùت؞ار Ù
٠اج٠ÙÙÙ
Ø© Ø§ÙØªØÙÙ%d." -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "اÙÙ
Ù٠اÙÙØ°Ù تÙ
ØªÙØ²ÙÙØ© ÙØ§Ø±Øº" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "Ù
ÙØªØ§Ø ÙØ§ØÙØ© ؚرÙ
جة Ø§ÙØªØ·ØšÙÙØ§Øª ØºÙØ± ØµØ§ÙØ" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "%s: ÙÙ
ÙØªØšÙÙ ÙØ¯ÙÙ ØšÙØ§Ùات ÙØ§ÙÙØ©" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "تÙ
ØªØ¬Ø§ÙØ² Ø§ÙØšÙØ§ÙØ§Øª اÙÙ
تÙÙØ±Ø©" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "Rapidshare: ØšÙØ§Ùات اÙÙ
ØŽØ§Ø±ÙØ© (تØÙ
ÙÙ Ù
ؚا؎ر)" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "Ø¬Ø§Ø±Ù Ø§ÙØªØÙ
ÙÙ Ù
٠عÙÙØ§Ù Ø§ÙØ§ÙØªØ±ÙØª ÙØ°Ø§, Ø§ÙØªØžØ± Ù 60 ثاÙÙØ©" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "رÙ
ز تاÙÙØ¯ ØºÙØ± ØµØ§ÙØ, سÙÙ ÙØªÙ
اعادة Ø§ÙØªÙزÙÙ" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "RapidShareCom: ÙØ§ ÙÙØ¬Ø¯ Ù
Ø³Ø§ØØ§Øª ÙØ§Ø±ØºØ©" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "تØÙاج ÙØØ³Ø§Øš Ù
دÙÙØ¹ Ù
Ù Ø§Ø¬Ù ÙØ°Ø§ اÙÙ
ÙÙ" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "تÙ
Ø§ÙØ§ØšÙاغ ع٠اسÙ
اÙÙ
ÙÙ ØºÙØ± ØµØ§ÙØ" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "خطاء ØªÙØ²ÙÙØ§Øª Ù
ØªÙØ§Ø²ÙØ©, Ø§ÙØ§Ù Ø§ÙØªØžØ± 60 ثاÙÙØ©." -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "ÙÙ
ÙØªÙ
تسجÙÙ Ø§ÙØ¯Ø®ÙÙ." -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "ÙØŽÙ ÙÙ ÙÙ Ø§ÙØªØŽÙÙØ±" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "ÙØ§ ÙÙØ¬Ø¯ Ù
ÙØªØ§Ø Ù
ÙÙ Ù
ÙØ¯Ù
Ù٠عÙÙØ§Ù Ø§ÙØ§ÙØªØ±ÙØª" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "رÙ
ز خطاء:" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "*** تÙ
ØªØØ¯ÙØ« Ø§ÙØ§Ø¶Ø§Ùات, ÙØ±Ø¬Ù اعادة ت؎غÙ٠ؚا٠ÙÙØ¯ ***" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "تÙ
ØªØØ¯ÙØ« Ø§ÙØ§Ø¶Ø§Ùات ٠اعادة ت؎غÙÙÙØ§" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "ÙØ§ ÙÙØ¬Ø¯ ØªØØ¯Ùثات ÙÙØ§Ø¶Ø§Ùات" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "ÙØ§ÙÙØ¬Ø¯ ØªØØ¯Ùثات ٠ؚا٠ÙÙØ¯" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "*** ÙØ³Ø®Ù Ø¬Ø¯ÙØ¯Ù %s Ù
٠ؚا٠ÙÙØ¯ Ù
تÙÙØ±Ù ***" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "*** Ø§ØØµÙ عÙÙÙØ§ Ù
Ù ÙÙØ§: http://pyload.org/download ***" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "ØºÙØ± ÙØ§Ø¯Ø± عÙÙ Ø§ÙØ§ØªØµØ§Ù ØšØ§ÙØ®Ø§Ø¯Ù
Ù
Ù Ø§Ø¬Ù Ø§ÙØªØØ¯ÙØ«" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "ÙØ³Ø®Ù Ø¬Ø¯ÙØ¯Ø© Ù
Ù %(type)s|%(name)s : %(version).2f" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "ØØµÙ خطاء Ø¹ÙØ¯ Ø§ÙØªØØ¯ÙØ« %s" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "ÙØ³Ø®Ø© ØºÙØ± Ù
ØªØ·Ø§ØšÙØ©" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "Ø§ÙØªÙÙ Ø§ÙØªÙزÙÙ: %(name)s @ %(plugin)s " -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "Ø·ÙØš ÙÙÙ
Ø© تØÙÙ Ø¬Ø¯ÙØ¯: %s" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "اجؚ Øš 'c %s ÙØµ عÙÙ ÙÙÙ
Ø© Ø§ÙØªØÙÙ'" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "اضاÙÙ %s Ù
Ù HotFolder" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "ÙØ§ %s Ù
ثؚت" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "ÙØ§ ÙÙ
ÙÙ ØªÙØ¹ÙÙ %s" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "تÙ
Ø§ÙØªÙعÙÙ" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "ÙØ§ Ø§Ø¶Ø§ÙØ§Øª استخراج Ù
ÙØ¹ÙØ©" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "Ø§ÙØØ²Ù
Ù %s ÙÙ ÙØ§ØŠÙ
Ø© Ø§ÙØ§Ùت؞ار ÙÙØ§Ø³ØªØ®Ø±Ø§Ø¬ ÙØ§ØÙا" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "ØªÙØØµ Ø§ÙØØ²Ù
%s" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "استخراج اÙÙ %s" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "ÙÙ
ÙØªÙ
Ø§ÙØ¹Ø«Ùر عÙÙ Ù
ÙÙØ§Øª ÙÙØ§Ø³ØªØ®Ø±Ø§Ø¬" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "ÙÙ Ø§ÙØžØºØ·" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "Ù
ØÙ
Ù ØšÙÙÙ
Ø© Ù
Ø±ÙØ±" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "ÙÙÙ
Ø© Ù
Ø±ÙØ± خاط؊ة" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "ØØ°Ù %s اÙÙ
ÙÙØ§Øª" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "تÙ
Ø§ÙØ§ÙØªÙØ§Ø¡ Ù
Ù Ø§ÙØ§Ø³ØªØ®Ø±Ø§Ø¬" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "خطأ ÙÙ Ø§ÙØ£Ø±ØŽÙÙ" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "CRC ØºÙØ± Ù
تطاؚÙ" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "خطاء ØºÙØ± Ù
عرÙÙ" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "ÙØŽÙ ÙÙ ØªØØ¯Ùد اÙÙ
ستخدÙ
٠اÙÙ
جÙ
ÙØ¹Ø©" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "ضغط ٠تØÙ
ÙÙ: Ù
ÙÙØ° 9666 ÙÙØ¯ Ø§ÙØ§Ø³ØªØ®Ø¯Ø§Ù
" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "%sØ±ØµÙØ¯ Ù
تؚÙÙ" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "ÙØ§ÙÙ
Ù٠ارسا٠رد." -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "ØØ³Ø§ØšÙ ÙÙ CaptchaTrader ÙØ§ ÙØØªÙÙ Ø±ØµÙØ¯ ÙØ§ÙÙ" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "ÙÙ
ÙØªÙ
Ø§ÙØ¹Ø«Ùر عÙÙ ÙØ§ØŠÙ
Ø© Crypter" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "ÙØ§ØŠÙ
Ø© Crypter ÙØ§Ø±ØºØ©" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "Ø§ÙØªÙÙ Ø§ÙØªØÙ
ÙÙ: %(name)s @ %(plugin)s" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "ÙÙÙØ© تØÙÙ Ø¬Ø¯ÙØ¯Ø© Ù
Ù upload: %s :%s" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "ØØ³Ø§ØšÙ ÙÙØªØÙÙ 9kw.eu ÙØ§ ÙØØªÙ٠عÙÙ Ø±ØµÙØ¯ ÙØ§ÙÙ" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "Ø³ÙØ±ØšØª Ù
ثؚت Ù %s: " -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "Ø³ÙØ±ØšØª ØºÙØ± ÙØ§ØšÙ ÙÙØªÙÙÙØ°:" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "خطاء ÙÙ %(script)s: %(error)s" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "ÙÙ
ÙØªØšÙÙ ÙØ¯ÙÙ Ø±ØµÙØ¯ ÙØ§ÙÙ ÙÙ ØØ³Ø§Øš ExpertDecoders ÙØ¯ÙÙ" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "ÙØ±Ø¬Ù Ø§Ø¶Ø§ÙØ© ØØ³Ø§Øš rehost.to اÙÙØ§ Ø«Ù
اعاد٠ت؎غÙ٠ؚا٠ÙÙØ¯" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "%d Ø±ØµÙØ¯ Ù
تؚÙÙ" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "pil Ù tesseract ØºÙØ± Ù
ثؚت ÙÙØ§ÙÙØ¬Ø¯ عÙ
ÙÙ Ù
تص٠ÙÙÙ ÙÙÙ
Ø© Ø§ÙØªØÙÙ" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "ÙØŽÙ Ù٠اعداد اÙÙ
ستخدÙ
٠اÙÙ
جÙ
ÙØ¹Ù: %s" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "ÙØ§ÙÙØ¬Ø¯ عÙ
ÙÙ Ù
تص٠ÙÙ٠ت؎ÙÙØ± اÙÙØ§ØšØ§ØªØŽØ§" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "ØØ²Ù
Ù
ضاÙÙ %(اسÙ
) ØªØØªÙÙ %(عدد) Ø±ÙØ§ØšØ·" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "Ù
ضاÙÙ %(عدد) Ø±ÙØ§ØšØ· اÙÙ Ø§ÙØØ²Ù
Ù #%(ØØ²Ù
)" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "ÙÙ
ÙØªÙ
Ø§ÙØ¹Ø«Ùر عÙÙ Ù
ØØ±Ù js, ÙØ±Ø¬Ù ØªØ«ØšÙØª Spidermonkey, ossp-js, pyv8 ا٠rhino" diff --git a/locale/ar/LC_MESSAGES/pyLoadCli.po b/locale/ar/LC_MESSAGES/pyLoadCli.po index 68d792617..fabbb0d85 100644 --- a/locale/ar/LC_MESSAGES/pyLoadCli.po +++ b/locale/ar/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr " ÙØ§Ø¬ÙØ© سطر Ø§ÙØ£ÙاÙ
ر" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "%s Ø§ÙØªÙزÙÙØ§Øª:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr " Ø§ÙØ³Ø±Ø¹Ø©: " -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr " Ø§ÙØØ¬Ù
: " -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr " Ø§ÙØ§ÙØªÙØ§Ø¡ ÙÙ: " -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr " Ù
عرÙ: " -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "ÙÙ Ø§ÙØªØžØ§Ø±: " -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "Ø§ÙØØ§ÙØ©:" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "تÙ
Ø¥ÙÙØ§Ù Ù
Ø€ÙØªØ§Ù" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "ت؎غÙÙ" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "Ø§ÙØ³Ø±Ø¹Ø© Ø§ÙØ¥Ø¬Ù
اÙÙØ©" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "اÙÙ
ÙÙØ§Øª اÙÙ
ÙØ¬Ùدة ÙÙ ÙØ§ØŠÙ
Ø© Ø§ÙØ§Ùت؞ار" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "اÙÙ
جÙ
ÙØ¹" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "اÙÙØ§ØŠÙ
Ø©:" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr " Ø§Ø¶Ø§ÙØ© Ø±ÙØ§ØšØ·" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr " إدارة ÙØ§ØŠÙ
Ø© Ø§ÙØ§Ùت؞ار" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr " إدارة جاÙ
ع Ø§ÙØ±Ùاؚط" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr " (عدÙ
) اÙÙØ§Ù Ù
Ø€ÙØª ÙÙØ®Ø§Ø¯Ù
" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr " ÙØªÙ Ø§ÙØ®Ø§Ø¯Ù
" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr " Ø¥ÙÙØ§Ø¡" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "Ø§ÙØ±Ø¬Ø§Ø¡ استخداÙ
ØšÙØ§Ø¡ Ø§ÙØ¬Ù
ÙØ© Ø§ÙØªØ§ÙÙ: Ø¥Ø¶Ø§ÙØ© <Package name><link><link2> ..." -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "Ø§ÙØªØÙÙ %d Ù
Ù Ø§ÙØ±Ùاؚط:" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "اÙÙ
ÙÙ ØºÙØ± Ù
ÙØ¬Ùد." -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "تÙ
اÙÙØ§Ø¡ ؚا٠ÙÙØ¯" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "اطؚع ØØ§ÙØ© Ø§ÙØ®Ø§Ø¯Ù
" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "Ø§ÙØªØš Ø§ÙØªÙزÙÙØ§Øª اÙÙØªÙ ÙÙ ÙØ§ØŠÙ
Ø© Ø§ÙØ§Ùت؞ار" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "Ø§ÙØªØš Ø§ÙØªÙزÙÙØ§Øª اÙÙØªÙ Ù٠جاÙ
ع Ø§ÙØ±Ùاؚط" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "Ø§Ø¶Ø§ÙØ© ØØ²Ù
Ø© اÙÙ ÙØ§ØŠÙ
Ø© Ø§ÙØ§Ùت؞ار" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "Ø§Ø¶Ø§ÙØ© ØØ²Ù
Ø© Ø¥Ù٠جاÙ
ع Ø§ÙØ±Ùاؚط" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "ØØ°Ù اÙÙ
ÙÙØ§Øª Ù
Ù ÙØ§ØŠÙ
Ø© Ø§ÙØ§Ùت؞ار/جاÙ
ع Ø§ÙØ±Ùاؚط" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "ØØ°Ù ØØ²Ù
Ù
Ù ÙØ§ØŠÙ
Ø© Ø§ÙØ§Ùت؞ار/جاÙ
ع Ø§ÙØ±Ùاؚط" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "ÙÙÙ Ø§ÙØØ²Ù
Ù
Ù ÙØ§ØŠÙ
Ø© Ø§ÙØ§Ùت؞ار Ø¥Ù٠جاÙ
ع Ø§ÙØ±Ùاؚط Ø£Ù Ø§ÙØ¹Ùس ØšØ§ÙØ¹Ùس" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "إعادة ت؎غÙ٠اÙÙ
ÙÙØ§Øª" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "إعادة ت؎غÙÙ Ø§ÙØØ²Ù
" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "تØÙÙ Ù
Ù ØØ§ÙØ© Ø§ÙØ§ØªØµØ§ÙØ ÙØ¹Ù
Ù Ù
ع اÙÙ
ØØªÙ٠اÙÙ
ØÙÙ" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "Ø§ÙØªØÙÙ Ù
Ù ØØ§ÙØ© Ø§ÙØ§ØªØµØ§Ù Ù
٠اÙÙ
Ù٠اÙÙ
ØØªÙÙ" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "Ø¥ÙÙØ§Ù Ø§ÙØ®Ø§Ø¯Ù
Ù
Ø€ÙØªØ§" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "Ù
تاؚعة Ø§ÙØªÙزÙÙØ§Øª" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "تؚدÙ٠إÙÙØ§Ù/عدÙ
اÙÙØ§Ù Ø§ÙØ¥ÙÙØ§Ù اÙÙ
Ø€ÙØª" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "ÙØªÙ Ø§ÙØ®Ø§Ø¯Ù
" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "ÙØ§ØŠÙ
Ø© Ø§ÙØ£ÙاÙ
ر:" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "ÙØ§ ÙÙ
ÙÙ ÙØªØ§ØšØ© Ù
Ù٠اعدادات اÙÙ
ستخدÙ
" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "Ø§ÙØ¹ÙÙØ§Ù: " -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "اÙÙ
ÙÙØ°: " -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "اسÙ
اÙÙ
ستخدÙ
: " -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "ÙÙÙ
Ø© اÙÙ
Ø±ÙØ±: " -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "ØšÙØ§Ùات تسجÙÙ Ø§ÙØ¯Ø®Ù٠خاط؊ة." -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "ÙØ§ ÙÙ
ÙÙ Ø§ÙØŽØ§Ø¡ اتصا٠%(addr)s:%(port)s." -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "Ø£ÙØª ØšØØ§Ø¬Ø© Ø¥ÙÙ py-openssl ÙÙØ§ØªØµØ§Ù ØšÙØ°Ø§ Ø§ÙØ§Ø³Ø§Ø³ Ù
٠ؚا٠ÙÙØ¯." -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "اÙÙØ¶Ø¹ Ø§ÙØªØšØ§Ø¯Ù٠تÙ
تجاÙÙÙ ØÙØ« اÙÙ Ù
ررت ؚعض Ø§ÙØ§ÙاÙ
ر." -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "Ø¥Ø¶Ø§ÙØ© ØØ²Ù
Ø©:" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "أدخ٠اسÙ
ا٠ÙÙØØ²Ù
Ø© Ø§ÙØ¬Ø¯Ùدة" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "Ø§ÙØØ²Ù
Ø©: %s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "تØÙÙÙ Ø§ÙØ±Ùاؚط Ø§ÙØªÙ ØªØ±ÙØ¯ Ø¥Ø¶Ø§ÙØªÙا." -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "Ø§ÙØªØš %s Ø¹ÙØ¯ Ø§ÙØ§ÙØªÙØ§Ø¡." -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "تÙ
Ø§Ø¶Ø§ÙØ© Ø§ÙØ±Ùاؚط: " -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr " Ø§ÙØ¹Ùدة Ø¥Ù٠اÙÙØ§ØŠÙ
Ø© Ø§ÙØ±ØŠÙØ³ÙØ©" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "إدارة Ø§ÙØØ²Ù
:" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "إدارة Ø§ÙØ±Ùاؚط:" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "Ù
ا اÙÙØ°Ù ØªØ±ÙØ¯ ÙÙÙØ© Ø" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "Ù
ا اÙÙØ°Ù ØªØ±ÙØ¯ ØØ°ÙØ© Ø" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "Ù
ا اÙÙØ°Ù ØªØ±ÙØ¯ اعادة ت؎غÙÙØ© Ø" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "ØØ°Ù" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "ÙÙÙ" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "إعادة ت؎غÙÙ" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr " -Ø§ÙØ³Ø§ØšÙØ©" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr " -Ø§ÙØªØ§ÙÙ" diff --git a/locale/ar/LC_MESSAGES/setup.po b/locale/ar/LC_MESSAGES/setup.po index b9b466981..00bfae831 100644 --- a/locale/ar/LC_MESSAGES/setup.po +++ b/locale/ar/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "Ù
Ø±ØØšØ§ ØšÙÙ
ÙÙ Ù
ساعد اعداد ؚا٠ÙÙØ¯ ." -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "سÙÙ ÙØªÙ
ÙØØµ ÙØžØ§Ù
Ù ÙØ¹Ù
Ù ØªØ«ØšÙØª اÙÙÙ Ù
٠اج٠ت؎غÙ٠ؚا٠ÙÙØ¯." -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "اÙÙÙÙ
Ø© اÙÙ
ÙØ¬Ùدة ÙÙ Ø§ÙØ£ÙÙØ§Ø³ [] Ù٠دا؊Ù
ا٠اÙÙÙÙ
Ø© Ø§ÙØ§ÙØªØ±Ø§Ø¶ÙØ©Ø" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "ÙÙ ØØ§Ù ÙÙØª ÙØ§ ترغؚ Ù٠تغÙÙØ±Ùا Ø£Ù ÙÙØª ØºÙØ± Ù
ØªØ£ÙØ¯ Ù
Ù Ù
ا ØªØ®ØªØ§Ø±Ø ÙÙØ· اضغط أدخاÙ." -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "ÙØ§ ØªÙØ³Ù: ÙÙ
ÙÙ٠دا؊Ù
ا٠إعادة ت؎غÙÙ ÙØ°Ø§ اÙÙ
ساعد ؚستخداÙ
--setup Ø£Ù-s اÙÙ
عÙÙ
Ø©Ø Ø¹ÙØ¯ ؚدء ت؎غÙÙ pyload.py ." -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "ÙÙØ§ÙÙØ§Ø¡Ø ÙØ¹Ø¯Ù
Ø§ÙØ³Ù
Ø§Ø ÙÙ Ø§ÙØšØ¯ØŠ Ù
ع pyload.py تÙÙØ§ØŠÙا٠ؚعد Ø§ÙØ¢Ù." -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "Ø¹ÙØ¯Ù
ا تÙÙ٠عÙ٠استعداد ÙÙØªØÙÙ Ù
٠اÙÙØžØ§Ù
Ø Ø§Ø¶ØºØ· Ù
ÙØªØ§Ø Ø§ÙØ§Ø¯Ø®Ø§Ù." -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "ÙØ§Ø¬ÙØ© Ø§ÙØŽÙÙØšÙØªÙØ©" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "Ø§ÙØ§Ø³ØªÙ
رار ÙÙ Ø§ÙØªÙØµÙØšØ" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "ÙÙ ØªØ±ÙØ¯ ØªØºÙØ± Ù
ÙØ§Ù Ø§ÙØ§Ø¹Ø¯Ø§Ø¯Ø§ØªØ Ø§ÙØØ§ÙÙ ÙÙ %s" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "تغÙÙØ± Ù
سار Ø§ÙØ§Ø¹Ø¯Ø§Ø¯Ø" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "ÙÙ ØªØ±ÙØ¯ اعداد Ø§ÙØ§Ø¹Ø¯Ø§Ø¯Ø§Øª Ø§ÙØ£Ø³Ø§Ø³ÙØ© ÙØšÙØ§ÙØ§Øª Ø§ÙØ¯Ø®ÙÙØ" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "ÙØ°Ø§ Ù
Ø³ØªØØ³Ù Ù
Ù Ø§Ø¬Ù Ø§ÙØªØŽØºÙÙØ© Ø§ÙØ§ÙÙÙ." -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "ØµÙØ¹ Ø§ÙØ§Ø¹Ø¯Ø§Ø¯Ø§Øª Ø§ÙØ§Ø³Ø§Ø³ÙØ©Ø" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "ÙÙ ØªØ±ÙØ¯ اعداد sslØ" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "اعداد sslØ" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "ÙÙ ØªØ±ÙØ¯ اعداد ÙØ§ØÙØ© اÙÙÙØšØ" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "اعداد ÙØ§Ø¬ÙØ© اÙÙÙØšØ" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "تÙ
اÙÙØ§Ø¡ Ø§ÙØªØ«ØšÙت ØšÙØ¬Ø§Ø." -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "اضغ؞ Ù
ÙØªØ§Ø Ø§ÙØ§Ø¯Ø®Ø§Ù ÙÙØ§ÙÙØ§Ø¡ ٠اعادة ت؎غÙ٠ؚا٠ÙÙØ¯" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "# # Ø§ÙØ¥Ø¹Ø¯Ø§Ø¯ Ø§ÙØ£Ø³Ø§Ø³Ù # #" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "ØšÙØ§Ùات تسجÙÙ Ø§ÙØ¯Ø®ÙÙ Ø§ÙØªØ§ÙÙØ© ØµØ§ÙØØ© ÙÙØ§Ø¬ÙØ© سطر Ø§ÙØ§ÙاÙ
ر, ÙØ§Ø¬ÙØ© اÙÙ
ستخدÙ
Ù ÙØ§Ø¬ÙØ© اÙÙÙØš." -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "اسÙ
اÙÙ
ستخدÙ
" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "اÙÙØºØ©" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "Ø§ÙØ¹Ø¯Ø¯ Ø§ÙØ§ÙØµÙ Ø§ÙØªÙزÙÙØ§Øª اÙÙ
ØªÙØ§Ø²ÙÙØ© (Ø§ÙØªÙزÙÙØ§Øª ÙÙ ÙÙØ³ اÙÙÙØª)" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "استخداÙ
إعادة Ø§ÙØ§ØªØµØ§ÙØ" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "Ù
ÙÙØ¹ Ø§ÙØšØ±ÙاÙ
ج اÙÙØµÙ ÙØ§Ø¹Ø§Ø¯Ø© Ø§ÙØ§ØªØµØ§Ù" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "# # اعداد ÙØ§Ø¬ÙØ© اÙÙÙØš # #" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "ØªÙØŽÙØ· ÙØ§Ø¬ÙØ© اÙÙÙØšØ" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "عÙÙØ§Ù اÙÙØ§Ø¬ÙØ©, اذا ÙÙ
ت ؚستخداÙ
127.0.0.1 ا٠localhost, ÙØ§Ø¬ÙØ© اÙÙÙØš Ø³Ù٠تÙÙÙ ÙØ§ØšÙØ© ÙÙÙØµÙÙ Ù
ØÙÙØ§ ÙÙØ·." -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "عÙÙØ§Ù" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "اÙÙ
ÙÙØ°" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "ÙÙØ¯Ù
ؚا٠ÙÙØ¯ Ø®ÙØ§Ø¯Ù
Ù
تعددة ÙÙÙØ§Ø¬ÙØ© Ø§ÙØ®ÙÙÙØ©Ø Ø§ÙØ¢Ù ؚعد ØŽØ±ØØ§Ù Ù
ÙØ¬Ø²Ø§Ù." -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "ÙÙ
Ù٠استخداÙ
ÙØ§ ØšÙØ§Ø³Ø·Ø© Ø£ØšØ§ØªØŽÙØ lighttpdØ ÙØªØ·ÙØš Ù
Ù٠اعدادÙÙ
, ÙÙÙ ÙÙØ³Øª Ù
ÙÙ
Ø© سÙÙØ© جداÙ." -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "ÙÙ
ÙÙÙ Ø§ÙØØµÙ٠عÙÙØ© Ù
Ù ÙÙØ§ : https://github.com/jonashaag/bjoern, ÙÙ
ؚتجÙ
ÙØ¹Ø© ؚرÙ
Ø¬ÙØ§" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "Ø§ÙØªØšØ§Ù: Ù٠ؚعض Ø§ÙØØ§ÙØ§Øª اÙÙØ§Ø¯Ø±Ø© Ø§ÙØ®Ø§Ø¯Ù
اÙÙ
دÙ
ج ÙØ§ ÙØ¹Ù
ÙØ إذا ÙØ§ØØžØª ÙØ¬Ùد Ù
؎اÙÙ Ù
ع ÙØ§Ø¬ÙØ© اÙÙÙØš" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "عد Ø¥ÙÙ ÙÙØ§ ÙÙÙ
ØšØªØºÙØ± Ø§ÙØ®Ø§Ø¯Ù
Ù
دÙ
ج ÙØ°Ø§Ù٠اÙÙ
ذÙÙØ± ÙÙØ§." -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "خادÙ
" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "# # إعداد SSL # #" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "تÙÙÙØ° ÙØ°Ù Ø§ÙØ£ÙاÙ
ر Ù
Ù Ù
Ø¬ÙØ¯ اعداد ؚا٠ÙÙØ¯ ÙØ§Ùتاج ØŽÙØ§Ø¯Ø§Øª ssl:" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "اذا Ø§ÙØªÙÙØª ÙÙÙ ØŽÙØ¡ جر٠ؚ؎Ù٠صØÙØ, ØªØ³ØªØ·ÙØ¹ ØªÙØ¹ÙÙ ssl Ø§ÙØ§Ù." -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "ØªÙØ¹ÙÙ SSLØ" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "ØØ¯Ø¯ Ø§ÙØ¥Ø¬Ø±Ø§Ø¡" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "1-Ø¥ÙØŽØ§Ø¡/ØªØØ±Ùر اÙÙ
ستخدÙ
" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "2-ÙØ§ØŠÙ
Ø© اÙÙ
ستخدÙ
ÙÙ" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "3-Ø¥Ø²Ø§ÙØ© اÙÙ
ستخدÙ
" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "4-Ø¥ÙÙØ§Ø¡" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "اÙÙ
ستخدÙ
ÙÙ" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "اضغط Enter ÙÙØ¥ÙÙØ§Ø¡." -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "ÙØŽÙ Ø§ÙØ¥Ø¹Ø¯Ø§Ø¯ Ù
سار Ø§ÙØªÙÙÙÙ: %s" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "ÙÙÙ
Ø© اÙÙ
Ø±ÙØ±: " -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "ÙÙÙ
Ø© اÙÙ
Ø±ÙØ± ÙØµÙرة جداÙ. استخداÙ
4 رÙ
ÙØ² عÙÙ Ø§ÙØ§ÙÙ." -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "ÙÙÙ
Ø© اÙÙ
Ø±ÙØ± (Ù
رة أخرÙ): " -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "ÙÙ
تتطاؚ٠ÙÙÙ
تا اÙÙ
Ø±ÙØ±." -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "ÙØ¹Ù
" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "صØÙØ" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "ÙØ§" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "خاط؊ة" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "Ø§ÙØ¥Ø¯Ø®Ø§Ù ØºÙØ± ØµØ§ÙØ" diff --git a/locale/bn/LC_MESSAGES/django.po b/locale/bn/LC_MESSAGES/django.po index 9f320829d..759264ae6 100644 --- a/locale/bn/LC_MESSAGES/django.po +++ b/locale/bn/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/bn/LC_MESSAGES/pyLoad.po b/locale/bn/LC_MESSAGES/pyLoad.po index 002e93ad1..99e491023 100644 --- a/locale/bn/LC_MESSAGES/pyLoad.po +++ b/locale/bn/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "" -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "" -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/bn/LC_MESSAGES/pyLoadCli.po b/locale/bn/LC_MESSAGES/pyLoadCli.po index 945fc0276..dc7a6deaf 100644 --- a/locale/bn/LC_MESSAGES/pyLoadCli.po +++ b/locale/bn/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "" diff --git a/locale/bn/LC_MESSAGES/setup.po b/locale/bn/LC_MESSAGES/setup.po index da42f421a..cc40924e3 100644 --- a/locale/bn/LC_MESSAGES/setup.po +++ b/locale/bn/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "" diff --git a/locale/ca/LC_MESSAGES/django.po b/locale/ca/LC_MESSAGES/django.po index 2306240f8..e91b2fe3f 100644 --- a/locale/ca/LC_MESSAGES/django.po +++ b/locale/ca/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "Sol·licitud d'un nou Captcha" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "Si us plau introdueixi el text que apareix al captcha." -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "pyLoad ha estat reiniciat" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "apagat" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "Ãxit" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "encÚs" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "Estas segur que vols sortir del pyLoad?" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "Reiniciar Enllaç" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "Elimina enllaç" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "Introdueixi el nom del paquet." -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "Clica a la posició correcta del captcha." -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "S'ha produït un error." -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "El directori és buit" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "Ha fallat" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "No hi ha captchas per llegir." -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "Les contrasenyes no coincideixen." -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "Parà metres desats." -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "Nou directori" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "Estas segur que vols reiniciar pyLoad?" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "esperant %s" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "Descà rregues actives" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "Inici" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "Descà rregues" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "Registres" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "Configuració" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "Nom" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "Estat" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "Informació" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "Mida" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "Progrés" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "Inici de sessió" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "Nom d'usuari" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "Contrasenya" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "El teu usuari d'usuari i contrasenya no concorden. Torna-ho a provar." -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "Per reiniciar les teves dades de login o afegir usuari executa:" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "Eliminar acabat" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "Reiniciar fallit" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "Carpeta:" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "Contrasenya:" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "Editar paquet" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "Editar detalls del paquet segÃŒent." -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "Nom del paquet." -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "Carpeta" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "Nom de la subcarpeta per aquestes descà rregues." -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "Llista de contrasenyes emprades per l'unrar." -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "Enviar" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "Reiniciar" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "Has tancat la sessió correctament." -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "Ruta" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "absolut" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "relatiu" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "nom" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "mida" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "tipus" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "última modificació" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "directori pare" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "sense contingut" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "General" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "Comptes" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "Tria una secció del menú" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "Connector" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "Và lid fins" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "Trà fic restant" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "Temps" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "Max Paral·lel" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "Eliminar?" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "và lid" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "invà lid" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "sÃ" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "Afegir" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "Afegir compte" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "Introdueix les dades del teu compte per emprar les caracterÃstiques premium." -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "El seu nom d'usuari." -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "La contrasenya és per aquest compte." -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "Tipus" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "Tria proveïdor del teu compte." -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "Començar" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "anterior" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "segÃŒent" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "Fi" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "NotÃcies" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "Suport" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "Sistema" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "S.O.:" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "versió del pyLoad:" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "Carpeta de instal·lació:" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "Carpeta de configuració:" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "Carpeta de descà rregues:" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "Espai lliure:" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "Idioma:" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "Port de la interfÃcie Web:" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "Port de la interfÃcie remota:" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "Configuració" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "Gestor de Fitxers" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "Afegir paquet" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "Aferra els teus enllaços o puja un fitxer contenidor." -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "Nom del nou paquet." -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "Enllaços" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "Aferra els teus enllaços aquó o qualsevol text i pitja el botó de filtrat." -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "Filtra urls" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "Contrasenya per l'arxiu RAR" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "Fitxer" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "Puja un contenidor." -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "Destinació" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "Llegint captcha" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "El captcha." -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "Introdueix el text del captcha." -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "Tancar" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "InterfÃcie web" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "Hi ha una actualització de pyLoad disponible!" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "Plugins actualitzats, si us plau reinicia!" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "Esperant captcha" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "Sortir" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "Administrar" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "Informació" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "Si us plau fes login!" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "Aturar" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "Cancel·lar" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "Descà rrega:" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "Reconnectar:" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "Velocitat:" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "Actiu:" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "Recarregar pà gina" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "carregant" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "Tornar a l'inici" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "Sortir de pyLoad" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "Reiniciar pyLoad" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "Per afegir usuari o canviar contrasenya emprar:" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "Important: L'usuari administrador sempre te tots els permisos!" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "Canviar Contrasenya" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "Administrador" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "Permisos" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "canviar" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "Introdueixi la contrasenya actual i la desitjada." -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "Usuari" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "Contrasenya actual" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "Contrasenya nova" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "La nova contrasenya." -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "Nova contrasenya (repetir)" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "Siusplau repeteix la nova contrasenya." -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "No tens permisos per accedir a aquesta pà gina." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "No s'ha trobat el directori de descà rregues." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "il·limitat" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "no disponible" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "Executa pyload.py -s per accedir a l'instal·lació." diff --git a/locale/ca/LC_MESSAGES/pyLoad.po b/locale/ca/LC_MESSAGES/pyLoad.po index 5d58ff375..732ef9ec8 100644 --- a/locale/ca/LC_MESSAGES/pyLoad.po +++ b/locale/ca/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "S'ha rebut la senyal de Sortida" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "ja s'estat executant pyLoad amb el pid %s" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "Ha fallat el canvi de el grup: %s" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "Ha fallat el canvi d'usuari: %s" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "carpeta de registre" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "Començant" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "Emprant el directori d'inici: %s" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "pycrypto descodificarà el contenidor de fitxers" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "carpeta per fitxers temporals" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "carpeta de descà rregues" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "OpenSSL per connexions segures" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "Movent l'antiga configuració d'usuari a la DB" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "Comprova les teves dades de login amb ./pyload.py -u" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "Tots els enllaços eliminats" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "Temps de descà rrega: %s" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "Espai lliure: %s" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "Activant Comptes..." -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "Activant Plugins..." -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "pyLoad està en funcionament" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "reiniciant pyLoad" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "pyLoad està sortint" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "Instal·la %s" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "no s'ha pogut trobar %(desc)s: %(name)s" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "no s'ha pogut crear %(desc)s: %(name)s" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "apagant..." -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "ha succeït un error mentre s'apagava" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "matat pyLoad des de el Terminal" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "L'arxiu de la base de dades ha estat eliminat per una incompatiblitat de la versió." -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "El fitxer de la base de dades NO pot ser convertit." -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "La base de dades ha estat convertida de la v2 a la v3." -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "La base de dades ha estat convertida de la v3 a la v4." -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "Convertint l'antiga BD de Django" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "finalitzat" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "fora de lÃnia" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "en lÃnia" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "en cua" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "saltat" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "esperant" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "temporalment fora de lÃnia" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "començant" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "fallit" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "avortat" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "desxifrant" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "personalitzat" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "descarregant" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "processant" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "deconegut" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "Paquet finalitzat: %s" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "Emprant SSL ThriftBackend" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "Error al backend remot: %s" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "Iniciant %(name)s: %(addr)s:%(port)s" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "S'ha fallat la carrega del backend %(name)s | %(error)s" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "esperant %s" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "No s'han trobat els certificats SSL." -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "Ho sent molt, ja no permetem iniciar %s directament emprant pyLoad" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "Pots emprar el servidor amb fils que ofereix millor rendiment i ssl," -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "per suposat encara pots emprar el teu %s amb el servidor fastcgi de pyLoad" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" -msgstr "les configuracions d'exemple estan al directori module/webui/servers" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" +msgstr "les configuracions d'exemple estan al directori pyload/webui/servers" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "No s'ha pogut emprar %(server)s, python-flup no està instal·lat!" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "Error important el servidor lleuger: %s" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "Has de descarregar i compilar el bjoern. https://github.com/jonashaag/bjoern" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" -msgstr "Copia el fitxer boern.so a la carpeta module/lib o empra setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" +msgstr "Copia el fitxer boern.so a la carpeta pyload/lib o empra setup.py install" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "Per suposat haurà s d'estar familiaritzat amb GNU/Linux i sabre com compilar programes" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "El servidor està en mode multi-fil degut als problemes de rendiment a windows." -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "Aquest servidor no ofereix SSL, si us plau considera l'opció d'emprar el servidor amb fils" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "Iniciant el servidor incorporat: %(host)s:%(port)d" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "Iniciant el servidor web SSL amb fils: %(host)s:%(port)d" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "Iniciant el servidor web amb fils: %(host)s:%(port)d" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "Iniciant el servidor fastcgi: %(host)s:%(port)d" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "Iniciant el servidor web lleuger (bjoern): %(host)s:%(port)d" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "No tens permisos per accedir a aquesta pà gina." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "No s'ha trobat el directori de descà rregues." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "il·limitat" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "no disponible" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "Executa pyload.py -s per accedir a l'instal·lació." -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "Descà rrega per trossos fallida, tornant a la connexió única | %s" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "Iniciant descà rrega: %s" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "Descà rrega finalitzada: %s" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "El plugin %s troba a faltar una funció." -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "Descà rrega avortada: %s" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "Descà rrega reiniciada: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "La descà rrega està fora de lÃnia: %s" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "La descà rrega està temporalment fora de lÃnia: %s" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "Descà rrega fallida: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "No s'ha pogut connectar amb el servidor o la connexió s'ha reiniciat, esperant 1 minuts per tornar-ho a provar." -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "Descà rrega omitida: %(name)s due to %(plugin)s" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "Desxifrant comença en: %s" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "Desxifrat fallit: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "Re-intentant %s" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "Obtenint informació per %(name)s failed | %(err)s" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "Error executant ganxos: %s" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "L'activació de %(name)s ha fallat" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "Plugins activats: %s" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "Plugins desactivats: %s" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "Reconnexió fallida: %s" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "No s'ha trobat l'script de reconnexió!" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "Iniciant reconnexió" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "L'execució de l'script de reconnexió ha fallat!" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "Reconnectat, nova IP: %s" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "No queda suficient espai lliure al dispositiu" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "No s'ha pogut iniciar sessió amb el compte %(user)s | %(msg)s" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "Contrasenya Errònia" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "L'hora %s està en un format incorrecte, empra: 1:22-3:44" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "El compte %s no te suficient trà fic, es tornarà a comprovar d'aquà 30min" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "El compte %s està caducat, es tornarà a comprovar d'aquà 1h" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "LÃmit de descà rrega assolit" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "%s té un patró invà lid." -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "Error important %(name)s: %(msg)s" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "No s'ha carregat cap proveïdor" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "Activa la descà rrega directa al teu compte de Bitshare" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "LinkList no pot ser netejat." -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "Els ajustaments del compte han estat eliminats degut al nou format de la configuració." -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "Autorització requerida (usuari:contrasenya)" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "Si us plau, introdueixi el seu compte de %s o desactivar aquest plugin" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "Hi havia Codi HTML en el fitxer (%s) descarregat... error de re-direcció? Es re-iniciarà la descà rrega." -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "Fitxer temporalment no disponible" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "Netload: esperant entre descà rregues %d s." -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "Netload: esperant per captcha %d s." -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "El fitxer descarregat estava buit" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "Clau de API invà lida" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "%s: No queda suficient trà fic" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "Trà fic excedit" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "Rapidshare: Trà fic Compartit (descà rrega directa)" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "Ja s'està descarregant des de aquesta adreça IP, esperant 60 segons" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "Codi d'Autenticació invà lid, la descà rrega serà reiniciada" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "RapidShareCom: No hi ha espais lliures" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "Necessites un compte premium per aquest fitxer" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "Nom de fitxer informat invà lid" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "Error de descà rrega paral·lela, esperant 60s." -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "No connectat." -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "Desxifrat ha fallat" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "Cap clau de fitxer proporcionat a la URL" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "Codi d'error:" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "El fitxer no existeix." -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "* * * Plugins s'han actualitzat, si us plau reinicieu pyLoad * * *" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "Plugins actualitzats i recarregats" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "No hi ha actualitzacions de plugins disponibles" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "No hi ha actualitzacions del pyLoad" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "*** La nova Versió %s de pyLoad està disponible ***" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "*** Obtengui'l aquÃ: http://pyload.org/download ***" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "No es pot connectar al servidor per actualitzacions" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "Nova versió de %(type)s|%(name)s : %(version).2f" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "S'ha produït un error mentre s'actualitzava %s" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "La versió no coincideix" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "Descà rrega finalitzada: %(name)s @ %(plugin)s " -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "Nova petició de Captcha: %s" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "Constesta amb 'c %s text del captcha'" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "Si us plau, afegeiu el vostre compte premium.to i torneu a iniciar pyLoad" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "Afegit %s des de HotFolder" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "El %s no està instal·lat" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "No s'ha pogut activar %s" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "Activat" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "No hi han connectors d'extracció activats" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "El paquet %s s'ha posat a la cua per una posterior extracció" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "Revisa el paquet %s" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "Extreu a %s" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "No s'han trobat fitxers per extreure" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "extraient" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "Protegit amb contrasenya" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "Contrasenya incorrecta" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "Eliminant els fitxers %s" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "Extracció finalitzada" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "Error d'arxiu" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "El CRC no coincideix" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "Error desconegut" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "Configuració d'usuari i el grup ha fallat" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "Click'N'Load: El Port 9666 ja s'està en ús" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "%s crÚdits restants" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "No s'ha pogut enviar la resposta." -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "El teu compte de CaptchaTrader no te crÚdits suficients" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "Llista de Crypter no trobada" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "La llista de Crypter està buida" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "Descà rrega finalitzada : %(name)s @ %(plugin)s" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "Nou CaptchaID de cà rrega: %s : %s" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "El teu compte de 9kw.eu no te crÚdits suficients" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "Scripts instal·lats per %s: " -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "Script no executable:" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "Error en %(script)s: %(error)s" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "El teu compte de ExpertDecoders no te crÚdits suficients" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "Si us plau afegir el seu compte de rehost.to primer i reinicieu pyLoad" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "Si us plau afegiu un compte và lid premiumize.me primer i reinicieu pyLoad." -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "%d crÚdits restants" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "Pil i tesseract no estan instal·lats i no hi ha cap Client connectat per desxifrar captchas" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "Cap plugin ha pogut obtenir resultats apropiats d'aquest captcha en un temps assignat." -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "Aplicació d'Usuari i el Grup ha fallat: %s" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "No hi ha cap client connectat per des-encriptar el captcha" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "Afegit paquet %(name)s que conté les enllaços %(count)d" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "Afegits %(count)d enllaços al paquet #%(package)d " -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "No s'ha trobat cap motor js, si us plau instal·la Spidermonkey, ossp-js, pyv8 o rhino" diff --git a/locale/ca/LC_MESSAGES/pyLoadCli.po b/locale/ca/LC_MESSAGES/pyLoadCli.po index 995e05137..da383b6a7 100644 --- a/locale/ca/LC_MESSAGES/pyLoadCli.po +++ b/locale/ca/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr " LÃnia de Comandes" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "%s Baixades:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr " Velocitat: " -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr " Mida: " -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr " Acabarà en: " -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr " ID: " -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "esperant: " -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "Estat:" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "pausat" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "executant" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "velocitat Total" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "Fitxers en cua" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "Menú:" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr " Afegeix enllaços" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr " Gestiona Cua" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr " Gestiona Col·lector" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "ReprÚn/Pausa Servidor" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr " Mata Servidor" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr " Surt" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "Si us plau empreu aquesta sintaxi: add <Package name> <link> <link2> ..." -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "Comprovant %d enllaç(os):" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "El fitxer no existeix." -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "pyLoad ha finalitzat" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "Mostra estat del servidor" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "Mostra descà rregues en cua" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "Mostra descà rreges en el col·lector" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "Afegeix paquet a la cua" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "Afegeix paquet al col·lector" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "Elimina Fitxers de la Cua/Col·lector" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "Elimina Paquets de la Cua/Col·lector" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "Mou Paquets de la Cua al Col·lector o viceversa" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "Reinicia fitxers" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "Reinicia paquets" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "Comprova l'estat online, funciona amb contenidor local" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "Comprova l'estat online d'un fitxer contenidor" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "Pausa el servidor" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "continua les descà rregues" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "Canvia pausa/reprÚn" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "mata servidor" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "Llista de comandes:" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "No s'ha pogut escriure el fitxer de configuració d'usuari" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "Necessites py-openssl per connectar-te al nucli del pyLoad." -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "Adreça: " -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "Nom d'usuari: " -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "Contrasenya: " -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "Dades d'accés incorrectes." -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "No s'ha pogut establir la connexió a %(addr)s:%(port)s." -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "Necessites py-openssl per connectar-te al nucli del pyLoad." -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "Mode interactiu ignorat ja que has especificat algunes comandes." -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "Afegeix Paquet:" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "Introdueix el nom per el nou paquet" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "Paquet: %s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "Analitza dels enllaços que vols introduir." -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "Introdueix %s en acabar." -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "Enllaços afegits: " -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr " torna al menú principal" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "Gestiona Paquets:" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "Gestiona Enllaços:" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "QuÚ vols moure?" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "QuÚ vols eliminar?" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "QuÚ vols reiniciar?" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "Tria el que vols fer o introdueix un número de paquet." -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "elimina" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "mou" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "reinicia" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr " - anterior" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr " - segÃŒent" diff --git a/locale/ca/LC_MESSAGES/setup.po b/locale/ca/LC_MESSAGES/setup.po index 0ad9ba08a..8f6fbeb8c 100644 --- a/locale/ca/LC_MESSAGES/setup.po +++ b/locale/ca/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "s" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "Benvingut a l'Assistent de Configuració de pyLoad." -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "Es comprovarà el teu equip i es farà una configuració bà sica per executar pyLoad." -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "El valor entre claudà tors [] sempre és el valor per defecte," -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "en cas de no voler canviar-ho o si estas insegur de que triar simplement pitja enter." -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "No oblidis: Sempre pots tornar a l'assistent amb els parà metres --setup o -s quan inicies el pyload.py ." -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "Si tens cap problema amb l'assistent pitja Control-C," -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "per avortar i no permetre que s'iniciï automà ticament amb pyload.py ." -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "Quan estiguis llest per la comprovació del sistema pitja enter." -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "Necessites pycurl, squlit i python 2.5, 2.6 o 2.7 per executar pyLoad." -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "Si us plau corregeix aixo i torna a executar el pyLoad." -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "L'assistent ara es tancarà ." -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "La comprovació del sistema ha acabat, pitja enter per veure l'informe de l'estat." -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "## Estat ##" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "desxifrant contenidor" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "connexió SSL" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "desxifrat automà tic de captcha" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "InterfÃcie web" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "extensió Click'N'Load" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "Funcionalitats disponibles:" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "Funcionalitats no disponibles: " -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "py-crytop no disponible" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "Això es necessari si vols desxifrar els contenidors de fitxers." -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "SSL no disponible" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "Això es necessari si vols establir connexions segures amb el nucli o la interfÃcie web." -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "Si només voleu accedir a pyLoad localment el SSL no és necessari." -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "reconeixedor de Captchas no disponible" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "Només necessari per alguns proveïdors com a usuari gratuït." -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "GUI no disponible" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "La InterfÃcie Grà fica d'Usuari." -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "no s'ha trobat el motor JavaScript" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "Es necessari algun d'aquests paquets per els enllaços Click'N'Load. Instal.la Spidermonkey, ossp-js, pyv8 o rhino" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "Ara pots avortar la instal·lació i arreglar les dependÚncies, si aixà ho prefereixes." -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "Continuar amb la instal·lació?" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "Vols canviar la ruta de configuració? Actualment és %s" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "Si estas emprant pyLoad en un servidor o en una partició a un dispositiu flash intern és una bona idea canviar-ho." -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "Canviar la ruta de configuració?" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "Vols configurar les dades d'accés i la configuració bà sica?" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "Això és recomanant en la primera execució." -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "Establir una configuració bà sica?" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "Vols configurar el SSL?" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "Configurar SSL?" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "Vols configurar l'interÃicie web?" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "Configurar interfÃcie web?" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "Configuració finalitzada satisfactòriament." -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "Pitja enter i reinicia pyLoad" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "## Comprovació del Sistema ##" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "La teva versió de python és massa nova. Si us plau empra Python 2.6/2.7" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "La teva versió de python és massa antiga. Si us plau empra com a mÃnim Python 2.5" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "Versió de Python: OK" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "La teva versió %s de jinja2 es massa antiga." -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "Pots continuar tranquil·lament encara que la interfÃcie web no funcioni," -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "si us plau actualitza o desinstal·la-ho, pylLoad ja inclou una biblioteca jinja2." -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "Motor JS" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "## Configuració bà sica ##" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "Les dades d'accés segÃŒents són và lides per CLI, GUI i la interfÃcie web." -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "Nom d'usuari" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "Els clients externs (GUI, CLI i altres) necessiten accés remot a través de la xarxa per funcionar." -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "No obstant, si només vos emprar la interfÃcie web pots deshabilitar-lo per estalviar memòria ram." -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "Activar accés remot" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "Idioma" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "Directori de descà rregues" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "Nombre mà xim de descà rregues paral·leles" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "Emprar el reconnectar?" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "Ubicació de l'script de reconnexió" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "## Configuració de la interfÃcie Web ##" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "Activar interfÃcie web?" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "Adreça d'escolta, si empres 127.0.0.1 o localhost la interfÃcie web només serà accessible localment." -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "Adreça" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "Port" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "pyLoad ofereix uns quants backends, ara se'n farà una breu explicació." -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "El servidor per defecte es la millor opció si no saps quin triar." -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "Aquest servidor ofereix SSL i es una bona alternativa a l'integrat." -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "Pots emprar apache, lighttpd, però requereixen ser configurats i no sempre és una tasca fà cil." -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "Una alternativa escrita en C, requereix libev i coneixements de GNU/Linux." -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "Aconsegueix-lo aquÃ: https://github.com/jonashaag/bjoern, compila'l" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" -msgstr "i copia bjoren.so a module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" +msgstr "i copia bjoren.so a pyload/lib" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "Atenció: En alguns casos estranys el servidor integrat no funciona, ho notareu amb problemes a la interfÃcie web" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "torna aquà i canvia el servidor integrat per el servidor amb fils." -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "Servidor" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "## Configuració SSL ##" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "Executa aquesta comanada des de la carpeta de configuració de pyLoad per fer els certificats SSL:" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "Si has acabat i tot ha anat bé ara podrà s activar el SSL." -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "Activar SSL?" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "Tria una opció" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "1 - Crear/editar usuari" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "2 - Llistar usuaris" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "3 - Eliminar usuari" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "4 - Sortir" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "Usuaris" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "Configurant nova ruta de configuració, la configuració actual no serà transferida!" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "Ruta de configuració" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "Ruta de configuració canviada, la instal·lació es tancarà , si us plau reinicia per continuar." -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "Pitja enter per sortir." -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "L'ajustament de la ruta de configuració ha fallat: %s" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "%s: perdut" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "Contrasenya: " -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "La contrasenya és massa curta. Utilitzeu almenys 4 carà cters." -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "Contrasenya (altre cop): " -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "Les contrasenyes no coincideixen." -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "sÃ" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "cert" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "c" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "fals" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "Entrada invà lida" diff --git a/locale/cli.pot b/locale/cli.pot index e6cd0a1e3..db8033d31 100644 --- a/locale/cli.pot +++ b/locale/cli.pot @@ -17,283 +17,283 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "" diff --git a/locale/core.pot b/locale/core.pot index 177ac109c..47550a6aa 100644 --- a/locale/core.pot +++ b/locale/core.pot @@ -17,882 +17,882 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: module/Core.py:181 +#: pyload/Core.py:181 msgid "Received Quit signal" msgstr "" -#: module/Core.py:302 +#: pyload/Core.py:302 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:316 +#: pyload/Core.py:316 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:326 +#: pyload/Core.py:326 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:328 +#: pyload/Core.py:328 msgid "folder for logs" msgstr "" -#: module/Core.py:339 +#: pyload/Core.py:339 msgid "Starting" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:349 +#: pyload/Core.py:349 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:352 +#: pyload/Core.py:352 msgid "folder for temporary files" msgstr "" -#: module/Core.py:357 +#: pyload/Core.py:357 msgid "folder for downloads" msgstr "" -#: module/Core.py:360 +#: pyload/Core.py:360 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:364 +#: pyload/Core.py:364 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:367 +#: pyload/Core.py:367 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:370 +#: pyload/Core.py:370 msgid "All links removed" msgstr "" -#: module/Core.py:401 +#: pyload/Core.py:401 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:411 +#: pyload/Core.py:411 #, python-format msgid "Free space: %s" msgstr "" -#: module/Core.py:431 +#: pyload/Core.py:431 msgid "Activating Accounts..." msgstr "" -#: module/Core.py:437 +#: pyload/Core.py:437 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:440 +#: pyload/Core.py:440 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:459 +#: pyload/Core.py:459 msgid "restarting pyLoad" msgstr "" -#: module/Core.py:463 +#: pyload/Core.py:463 msgid "pyLoad quits" msgstr "" -#: module/Core.py:520 +#: pyload/Core.py:520 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:556 +#: pyload/Core.py:556 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:558 +#: pyload/Core.py:558 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:579 +#: pyload/Core.py:579 msgid "shutting down..." msgstr "" -#: module/Core.py:596 +#: pyload/Core.py:596 msgid "error while shutting down" msgstr "" -#: module/Core.py:660 +#: pyload/Core.py:660 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:36 +#: pyload/threads/ServerThread.py:36 msgid "SSL certificates not found." msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:42 +#: pyload/threads/ServerThread.py:42 #, python-format msgid "" "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:43 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:43 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:58 +#: pyload/threads/ServerThread.py:58 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "" "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:60 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:60 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:61 +#: pyload/threads/ServerThread.py:61 msgid "" "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:64 +#: pyload/threads/ServerThread.py:64 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:127 +#: pyload/webui/app/pyload.py:127 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:195 +#: pyload/webui/app/pyload.py:195 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:264 module/webui/app/pyload.py:271 +#: pyload/webui/app/pyload.py:264 pyload/webui/app/pyload.py:271 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:509 +#: pyload/webui/app/pyload.py:509 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "" "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:103 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:103 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:90 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:90 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:243 +#: pyload/plugins/Account.py:243 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:269 +#: pyload/plugins/Account.py:269 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:276 +#: pyload/plugins/Account.py:276 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:126 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:126 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:132 +#: pyload/plugins/internal/MultiHoster.py:132 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:38 +#: pyload/plugins/accounts/BitshareCom.py:38 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:64 +#: pyload/plugins/container/LinkList.py:64 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:23 -#: module/plugins/hoster/RealdebridCom.py:40 -#: module/plugins/hoster/FreeWayMe.py:39 module/plugins/hoster/ZeveraCom.py:21 -#: module/plugins/hoster/UnrestrictLi.py:52 -#: module/plugins/hoster/Vipleech4uCom.py:30 -#: module/plugins/hoster/Premium4Me.py:27 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/SimplyPremiumCom.py:52 -#: module/plugins/hoster/MegaDebridEu.py:46 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/LinksnappyCom.py:29 -#: module/plugins/hoster/DebridItaliaCom.py:39 -#: module/plugins/hoster/RPNetBiz.py:28 -#: module/plugins/hoster/MultiDebridCom.py:40 -#: module/plugins/hoster/ReloadCc.py:26 module/plugins/hoster/OverLoadMe.py:38 -#: module/plugins/hoster/RehostTo.py:25 -#: module/plugins/hoster/PremiumizeMe.py:24 -#: module/plugins/hooks/RPNetBiz.py:45 +#: pyload/plugins/hoster/SimplydebridCom.py:23 +#: pyload/plugins/hoster/RealdebridCom.py:40 +#: pyload/plugins/hoster/FreeWayMe.py:39 pyload/plugins/hoster/ZeveraCom.py:21 +#: pyload/plugins/hoster/UnrestrictLi.py:52 +#: pyload/plugins/hoster/Vipleech4uCom.py:30 +#: pyload/plugins/hoster/Premium4Me.py:27 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/SimplyPremiumCom.py:52 +#: pyload/plugins/hoster/MegaDebridEu.py:46 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/LinksnappyCom.py:29 +#: pyload/plugins/hoster/DebridItaliaCom.py:39 +#: pyload/plugins/hoster/RPNetBiz.py:28 +#: pyload/plugins/hoster/MultiDebridCom.py:40 +#: pyload/plugins/hoster/ReloadCc.py:26 pyload/plugins/hoster/OverLoadMe.py:38 +#: pyload/plugins/hoster/RehostTo.py:25 +#: pyload/plugins/hoster/PremiumizeMe.py:24 +#: pyload/plugins/hooks/RPNetBiz.py:45 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:98 +#: pyload/plugins/hoster/FilesMailRu.py:98 #, python-format msgid "" "There was HTML Code in the Downloaded File (%s)...redirect error? The " "Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:145 -#: module/plugins/hoster/NetloadIn.py:169 +#: pyload/plugins/hoster/NetloadIn.py:145 +#: pyload/plugins/hoster/NetloadIn.py:169 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:182 +#: pyload/plugins/hoster/NetloadIn.py:182 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:213 +#: pyload/plugins/hoster/NetloadIn.py:213 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:251 +#: pyload/plugins/hoster/NetloadIn.py:251 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/MegaDebridEu.py:49 +#: pyload/plugins/hoster/MegaDebridEu.py:49 #, python-format msgid "Impossible to connect to %s" msgstr "" -#: module/plugins/hoster/MegaDebridEu.py:89 +#: pyload/plugins/hoster/MegaDebridEu.py:89 #, python-format msgid "Impossible to debrid %s" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:99 +#: pyload/plugins/hoster/RapidshareCom.py:99 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:126 -#: module/plugins/hoster/RapidshareCom.py:193 +#: pyload/plugins/hoster/RapidshareCom.py:126 +#: pyload/plugins/hoster/RapidshareCom.py:193 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:130 +#: pyload/plugins/hoster/RapidshareCom.py:130 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:198 +#: pyload/plugins/hoster/RapidshareCom.py:198 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:201 +#: pyload/plugins/hoster/RapidshareCom.py:201 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:203 +#: pyload/plugins/hoster/RapidshareCom.py:203 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:100 +#: pyload/plugins/hoster/FileserveCom.py:100 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:216 +#: pyload/plugins/hoster/FileserveCom.py:216 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:97 +#: pyload/plugins/hooks/UpdateManager.py:97 msgid "Not able to connect server to get updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:111 +#: pyload/plugins/hooks/UpdateManager.py:111 msgid "No pyLoad version available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:118 +#: pyload/plugins/hooks/UpdateManager.py:118 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:119 +#: pyload/plugins/hooks/UpdateManager.py:119 msgid "*** Get it here: https://github.com/pyload/pyload/releases ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:170 +#: pyload/plugins/hooks/UpdateManager.py:170 #, python-format msgid "New version of [%(type)s] %(name)s (v%(oldver)s -> v%(newver)s)" msgstr "" -#: module/plugins/hooks/UpdateManager.py:180 -#: module/plugins/hooks/UpdateManager.py:185 +#: pyload/plugins/hooks/UpdateManager.py:180 +#: pyload/plugins/hooks/UpdateManager.py:185 #, python-format msgid "Error when updating plugin %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:185 +#: pyload/plugins/hooks/UpdateManager.py:185 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/UpdateManager.py:196 +#: pyload/plugins/hooks/UpdateManager.py:196 #, python-format msgid "Removed blacklisted plugin: [%(type)s] %(name)s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:204 +#: pyload/plugins/hooks/UpdateManager.py:204 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:206 +#: pyload/plugins/hooks/UpdateManager.py:206 msgid "*** Plugins have been updated, pyLoad will be restarted now ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:211 +#: pyload/plugins/hooks/UpdateManager.py:211 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:81 +#: pyload/plugins/hooks/HotFolder.py:81 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:94 +#: pyload/plugins/hooks/ExtractArchive.py:94 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:96 -#: module/plugins/hooks/ExtractArchive.py:101 +#: pyload/plugins/hooks/ExtractArchive.py:96 +#: pyload/plugins/hooks/ExtractArchive.py:101 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:106 +#: pyload/plugins/hooks/ExtractArchive.py:106 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:108 +#: pyload/plugins/hooks/ExtractArchive.py:108 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:120 +#: pyload/plugins/hooks/ExtractArchive.py:120 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:143 +#: pyload/plugins/hooks/ExtractArchive.py:143 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:184 +#: pyload/plugins/hooks/ExtractArchive.py:184 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:199 +#: pyload/plugins/hooks/ExtractArchive.py:199 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:206 +#: pyload/plugins/hooks/ExtractArchive.py:206 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:217 +#: pyload/plugins/hooks/ExtractArchive.py:217 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:238 +#: pyload/plugins/hooks/ExtractArchive.py:238 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:246 +#: pyload/plugins/hooks/ExtractArchive.py:246 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:253 +#: pyload/plugins/hooks/ExtractArchive.py:253 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:259 +#: pyload/plugins/hooks/ExtractArchive.py:259 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:261 +#: pyload/plugins/hooks/ExtractArchive.py:261 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:265 +#: pyload/plugins/hooks/ExtractArchive.py:265 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:317 +#: pyload/plugins/hooks/ExtractArchive.py:317 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:70 -#: module/plugins/hooks/Captcha9kw.py:60 -#: module/plugins/hooks/ExpertDecoders.py:51 +#: pyload/plugins/hooks/CaptchaTrader.py:70 +#: pyload/plugins/hooks/Captcha9kw.py:60 +#: pyload/plugins/hooks/ExpertDecoders.py:51 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:118 +#: pyload/plugins/hooks/CaptchaTrader.py:118 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:136 +#: pyload/plugins/hooks/CaptchaTrader.py:136 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:45 +#: pyload/plugins/hooks/LinkdecrypterCom.py:45 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:59 +#: pyload/plugins/hooks/LinkdecrypterCom.py:59 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:94 +#: pyload/plugins/hooks/Captcha9kw.py:94 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:130 +#: pyload/plugins/hooks/Captcha9kw.py:130 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:96 +#: pyload/plugins/hooks/ExpertDecoders.py:96 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:50 +#: pyload/plugins/hooks/PremiumizeMe.py:50 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:70 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:70 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "" "Pil and tesseract not installed and no Client connected for captcha " "decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "" "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or " "rhino" diff --git a/locale/cs/LC_MESSAGES/django.po b/locale/cs/LC_MESSAGES/django.po index deaf35622..1136362de 100644 --- a/locale/cs/LC_MESSAGES/django.po +++ b/locale/cs/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "Nová captcha" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "ProsÃm pÅeÄtÄte text captchy." -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "pyLoad restartován" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "vypnuto" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "ÃspÄch" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "zapnuto" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "Opravdu chcete ukonÄit pyLoad?" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "Restartovat odkaz" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "Smazat odkaz" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "ProsÃm zadejte jméno balÃÄku." -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "ProsÃm, kliknÄte na správnou pozici captchy." -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "Nastala chyba." -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "SloÅŸka je prázdná" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "Selhalo" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "Ŝádné Captchy k pÅeÄtenÃ." -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "Hesla se neshodujÃ." -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "Nastavenà uloÅŸeno." -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "Nová sloÅŸka" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "Opravdu chcete restartovat pyLoad?" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "cekam %s" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "Aktivnà StahovánÃ" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "Domů" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "StahovánÃ" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "Logy" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "Konfigurace" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "Jméno" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "Stav" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "Informace" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "Velikost" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "Postup" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "PÅihlásit se" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "UÅŸivatelské jméno" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "Heslo" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "VaÅ¡e uÅŸivatelské jméno a heslo se neshodujà s údaji v databázi. ProsÃm zkuste to znovu." -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "Pro reset vaÅ¡ich pÅihlaÅ¡ovacÃch údajů nebo pÅidánà uÅŸivatele spusÅ¥te:" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "Smazat dokonÄené" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "Restartovat nezdaÅené" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "SloÅŸka:" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "Heslo:" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "Upravit BalÃÄek" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "NÃÅŸe upravte vlastnosti balÃÄku." -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "Jméno balÃÄku." -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "SloÅŸka" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "Jméno podsloÅŸky pro toto stahovánÃ." -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "Seznam hesel pouÅŸitÜch pro unrar." -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "Odeslat" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "Byli jste úspÄÅ¡nÄ odhlášeni." -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "Cesta" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "absolutnÃ" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "relativnÃ" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "jméno" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "velikost" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "typ" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "naposledy upraveno" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "nadÅazenÜ adresáÅ" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "şádnÜ obsah" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "Obecné" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "Pluginy" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "ÃÄty" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "Vyberte sekci z menu" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "DoplnÄk" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "PlatnÜ do" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "ZbÜvá traffic" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "Äas" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "Max SouÄasnÄ" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "Smazat?" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "platnÜ" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "neplatnÜ" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "ano" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "ne" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "PÅidat" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "PÅidat ÃÄet" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "Pro pÅÃstup k prémiovÜm funkcÃm vloÅŸte vaÅ¡e pÅÃstupová data." -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "VaÅ¡e uÅŸivatelské jméno." -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "Heslo pro tento úÄet." -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "Typ" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "Vyberte filehosting vaÅ¡eho úÄtu." -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "pÅedchozÃ" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "dalÅ¡Ã" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "Konec" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "Novinky" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "Podpora" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "Systém" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "pyLoad verze:" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "SloÅŸka instalace:" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "SloÅŸka nastavenÃ:" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "SloÅŸka stahovánÃ:" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "Volné MÃsto:" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "Jazyk:" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "Port Vzdaleneho Rozhrani:" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "NastavenÃ" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "SouborovÜ ManaÅŸer" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "PÅidat BalÃÄek" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "VloÅŸte vaÅ¡e odkazy nebo uploadnÄte kontejner." -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "Jméno nového balÃÄku." -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "Odkazy" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "Sem vloÅŸte vaÅ¡e odkazy nebo jakÜkoli text a stisknÄte tlaÄÃtko filtrovat." -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "Filtrovat URL" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "Heslo pro archiv RAR" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "Soubor" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "Upload kontejneru." -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "CÃl" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "Ätenà captchy" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "Captcha." -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "VloÅŸte text captchy." -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "ZavÅÃt" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "Webové rozhranÃ" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "pyLoad Aktualizace k dispozici!" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "Pluginy aktualizovány, restartuj pyLoad!" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "Captcha Äeká" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "Odhlásit" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "Administrace" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "Informace" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "PÅihlaÅ¡te se prosÃm!" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "Zastavit" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "ZruÅ¡it" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "StahovánÃ:" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "Rychlost:" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "AktivnÃ:" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "Obnovit stránku" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "naÄÃtám" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "Nahoru" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "UkonÄit pyLoad" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "Restartovat pyLoad" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "Pro pÅidánà uÅŸivatele nebo zmÄnu hesla pouÅŸijte:" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "DůleÅŸité: Admin má vÅŸdy plná práva!" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "ZmÄnit heslo" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "OprávnÄnÃ" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "zmÄnit" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "Zadejte aktuálnà a poÅŸadované heslo." -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "UÅŸivatel" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "Aktuálnà heslo" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "Nové heslo" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "Nové heslo." -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "Nové heslo (znovu)" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "ProsÃm zadej nové heslo znovu." -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "Pro zobrazeni teto stranky nemate opravneni." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "Adresar pro stahovani nenalezen." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "neomezenÜ" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "neni k dispozici" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "Pro setup spustte pyload.py -s." diff --git a/locale/cs/LC_MESSAGES/pyLoad.po b/locale/cs/LC_MESSAGES/pyLoad.po index 386dfb739..842f2fc6b 100644 --- a/locale/cs/LC_MESSAGES/pyLoad.po +++ b/locale/cs/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "Prijat Quit signal" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "pyLoad je jiz spusten pod pid %s" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "Zmena skupiny selhala: %s" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "Zmena uzivatele selhala: %s" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "slozka pro logy" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "Spoustim" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "Nastaven domovsky adresar: %s" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "pycrypto pro dekodovani kontejnerovych souboru" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "slozka pro docasne soubory" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "slozka pro stahovani" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "OpenSSL pro zabezpecene pripojeni" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "Presunuji stara nastaveni uzivatele do DB." -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "Prosim zkontrolujte sve prihlasovaci udaje pres ./pyload.py -u" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "VÅ¡echny odkazy odstranÄny" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "Cas stahovani: %s" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "Volne misto: %s" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "Aktivuji Ucty..." -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "Aktivuji Pluginy..." -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "pyLoad je spusten" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "restartuji pyLoad" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "pyLoad se ukonci" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "Instalujte %s" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "nelze najit %(desc)s: %(name)s" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "nelze vytvorit %(desc)s: %(name)s" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "vypinani..." -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "chyba pri vypinani" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "pyLoad zastaven z terminalu" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "Databaze souboru byla smazana pro nekompatibilni verzi." -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "Databáze nemůşe bÜt pÅevedena" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "Databaze byla konvertovana z v2 na v3." -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "Databaze byla konvertovana z v3 na v4." -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "Konvertuji starou databazi Django" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "hotovo" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "ve fronte" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "preskoceno" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "ceka" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "doc. nedostupne" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "spoustim" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "selhalo" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "zruseno" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "dekoduji" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "vlastni" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "stahuji" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "zpracovavam" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "neznamy" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "Balicek dokoncen: %s" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "Pouzivam SSL ThriftBackend" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "Vzdalena chyba systemu: %s" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "Zahajuji %(name)s: %(addr)s:%(port)s" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "Spousteni backendu %(name)s selhalo | %(error)s" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "cekam %s" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "Certifikaty SSL nenalezeny." -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "Omlouvame se, ale spousteni %s v ramci pyLoad jiz neni podporovano" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "Je mozne pouzit server podporujici vlakna, ktery nabizi dobry vykon a ssl," -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "a samozrejme je take mozne pouzit vas jiz existujici %s se serverem fastcgi pyLoadu" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" -msgstr "vzorove konfiguracni soubory jsou umisteny v adresari module/webui/servers" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" +msgstr "vzorove konfiguracni soubory jsou umisteny v adresari pyload/webui/servers" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "Nelze pouzit %(server)s, python-flup neni nainstalovan!" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "Chyba pri importu lightweight serveru: %s" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "MusÃte si stáhnout a zkompilovat bjoern, https://github.com/jonashaag/bjoern" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" -msgstr "Zkopirujte soubor boern.so do adresare module/lib nebo pouzijte setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" +msgstr "Zkopirujte soubor boern.so do adresare pyload/lib nebo pouzijte setup.py install" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "Samozrejme budete potrebovat znalost linuxu a kompilace software" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "Server nyni pracuje s vlakny i pres zname obtize s vykonem na Windows" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "Tento server nenabizi SSL, zvazte pouziti rezimu s vlakny" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "Spoustim vestaveny Webserver: %(host)s:%(port)d" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "Spoustim SSL webserver: %(host)s:%(port)d" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "Spoustim webserver: %(host)s:%(port)d" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "Spoustim fastcgi server: %(host)s:%(port)d" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "Startuji lightweight server (bjoern): %(host)s:%(port)d" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "Pro zobrazeni teto stranky nemate opravneni." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "Adresar pro stahovani nenalezen." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "neomezenÜ" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "neni k dispozici" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "Pro setup spustte pyload.py -s." -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "Stahovánà Äástà selhalo, pÅecházÃm na jediné pÅipojenà | %s" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "Zahajuji stahovani: %s" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "Stahovani dokonceno: %s" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "V pluginu %s chybi funkce." -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "Stahovani zruseno: %s" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "Stahovani obnoveno: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "Zdroj stahovani je offline: %s" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "Zdroj stahovani je docasne nedostupny: %s" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "Stahovani selhalo: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "K hostiteli se nelze pripojit, nebo bylo pripojeni resetovano, cekam 1 minutu do dalsiho pokusu." -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "Stahovani preskoceno: %(name)s v dusledku %(plugin)s" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "Zacina dekodovani: %s" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "Dekodovani selhalo: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "Zkousim znovu %s" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "Ziskavani informaci pro %(name)s selhalo | %(err)s" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "Chyba pri provadeni zaveseni: %s" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "Aktivace %(name)s selhala" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "Aktivovane pluginy: %s" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "Deaktivovat pluginy: %s" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "Reconnect selhal: %s" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "Skript pro reconnect nenalezen!" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "Spoustim reconnect" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "Provadeni skriptu pro Reconnect selhalo!" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "Reconnectnuto, nova IP: %s" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "Nenà dostatek mÃsta na zaÅÃzenÃ" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "NezdaÅÃlo se pÅihlášenà k úÄtu %(user)s | %(msg)s" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "Å patné heslo" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "Vas cas %s ma nespravny format, pouzijte 1:22-3:44" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "ÃÄet %s nemá nedostatek trafficu, dalšà kontrola za 30min" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "ÃÄet %s vyprÅ¡el, dalšà kontrola za 1h" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "DosaÅŸen limit pro stahovánÃ" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "%s ma neplatny vzor." -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "Chyba pri importu %(name)s: %(msg)s" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "NenaÄten şádnÜ plugin Hoster" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "Aktivovat pÅÃmé stahovánà na vaÅ¡em Bitshare accountu" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "LinkList nemohl byt vyprazdnen." -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "Pro novy format konfiguracniho souboru bylo nastaveni uctu smazano." -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "Je vyÅŸadována autorizace (username:password)" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "ProsÃm vloÅŸte svůj %s úÄet nebo tento plugin deaktivujte" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "Ve staÅŸeném souboru (%s) byl nalezen HTML kód... Chyba pÅesmÄrovánÃ? Stahovánà bude restartováno." -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "Soubor nenà doÄasnÄ k dispozici" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "Netload: Äekánà mezi stahovánÃm %d s." -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "Netload: Äekám na captchu %d s." -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "StaÅŸenÜ soubor byl prázdnÜ" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "NeplatnÜ API klÃÄ" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "%s: NezbÜvá dostateÄnÜ traffic" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "PÅekroÄen Traffic" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "RapidShare: Traffic Share (pÅÃmé staÅŸenÃ)" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "Z této ip adresy jiÅŸ stahovánà probÃhá, Äekám 60 sekund" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "Å patnÜ autentizaÄnà kód, stahovánà bude restartováno" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "RapidShareCom: Ŝádné volné sloty" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "Pro tento soubor potÅebujete prémiovÜ úÄet" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "Ohlášeno neplatné jméno souboru" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "Chyba soubÄÅŸného stahovánÃ, Äekám 60s." -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "Nejste pÅihlášeni." -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "DeÅ¡ifrovánà selhalo" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "URL neobsahuje klÃÄ souboru" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "Kód chyby:" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "Soubor neexistuje." -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "*** Pluginy byly aktualizovány, prosÃm restartujte pyLoad ***" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "Pluginy aktualizovány a znovu naÄteny" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "Ŝádné aktualizace rozÅ¡ÃÅenÃ" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "Ŝádné aktualizace pro pyLoad" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "*** Je dostupná nové verze pyLoad (%s) ***" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "*** ZÃskejte ji zde: http://pyload.org/download ***" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "Nelze se pÅipojit k update serveru" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "Nová verze %(type)s|%(name)s : %(version).2f" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "Chyba pÅi aktualizaci %s" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "Nesprávná verze" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "Stahovánà dokonÄeno: %(name)s @ %(plugin)s " -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "NovÜ poÅŸadavek na Captchu: %s" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "OdpovÄzte \"c %s text z captchy\"" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "NejdÅÃve prosÃm pÅidejte váš premium.to úÄet a restartujte pyLoad" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "PÅidán %s ze sledované sloÅŸky" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "%s nenà nainstalován" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "Nelze aktivovat %s" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "AktivnÃ" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "Nejsou aktivovány şádné rozbalovacà pluginy" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "BalÃÄek %s zaÅazen do fronty pro pozdÄjšà rozbalenÃ" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "Kontrola balÃÄku %s" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "Rozbalit do %s" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "Nenalezeny şádné soubory k rozbalenÃ" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "rozbaluji" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "ChránÄno heslem" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "Chybné heslo" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "MaÅŸu %s souborů" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "Rozbalenà dokonÄeno" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "Chyba archivu" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "CRC nesouhlasÃ" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "Neznámá chyba" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "Nastavenà UÅŸivatele a Skupiny selhalo" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "Click'N'Load: Port 9666 se jiÅŸ pouÅŸÃvá" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "%s kreditů zbÜvá" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "Nelze odeslat odpovÄÄ." -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "Na vaÅ¡em CaptchaTrader úÄtu nenà dostatek kreditu" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "Seznam pluginů Crypter nenalezen" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "Seznam pluginů Crypter je prázdnÜ" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "Stahovánà dokonÄeno: %(name)s @ %(plugin)s" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "Nové CaptchaID z uploadu: %s : %s" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "Na vaÅ¡em captcha úÄtu 9kw.eu nenà dostatek kreditu" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "Nainstalované skripty pro %s: " -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "Skript nenà spustitelnÜ:" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "Chyba v %(script)s: %(error)s" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "Na vaÅ¡m ExpertDecoders úÄtu nenà dostatek kreditu" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "NejdÅÃve prosÃm pÅidejte váš rehost.to úÄet a restartujte pyLoad" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "NejdÅÃve prosÃm pÅidejte váš premiumize.me úÄet a restartujte pyLoad." -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "ZbÜvá %d kreditů" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "Pil a tesseract nejsou nainstalovány a nenà pÅipojen şádnÜ klient pro rozpoznávánà Captchy" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "Zadny plugin nedodal vysledek Captchy v prijatelnem case." -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "Nastavenà uÅŸivatele a skupiny se nezdaÅilo: %s" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "Neni pripojen zadny klient pro dekodovani Captchy" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "Pridan balicek %(name)s obsahujici %(count)d odkazu" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "Do balicku #%(package)d pridano %(count)d odkazu " -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "Nenalezen zadny js engine, prosim naistalujte Spidermonkey, ossp-js, pyv8 nebo rhino" diff --git a/locale/cs/LC_MESSAGES/pyLoadCli.po b/locale/cs/LC_MESSAGES/pyLoadCli.po index 02483efb5..bd97917d6 100644 --- a/locale/cs/LC_MESSAGES/pyLoadCli.po +++ b/locale/cs/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr " PÅÃkazová Åádka" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "%s StahovánÃ:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr " Rychlost: " -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr " Velikost: " -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr " DokonÄeno za: " -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "Äeká: " -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "Stav:" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "pozastaveno" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "probÃhá" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "celková rychlost" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "Souborů ve frontÄ" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "Celkem" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr " PÅidat Odkazy" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr " Správa fronty" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr " Správa SbÄraÄe" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr " Pozastavit/Spustit server" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr " UkonÄit server" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr " Konec" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "ProsÃm pouÅŸijte tuto syntaxi: add <Jmeno balicku> <odkaz> <odkaz2> ..." -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "Kontroluji %d odkazů:" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "Soubor neexistuje." -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "pyLoad byl ukonÄen" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "VypÃÅ¡e stav serveru" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "VypÃÅ¡e stahovánà ve frontÄ" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "VypÃÅ¡e stahovánà ve sbÄraÄi" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "PÅidá balÃÄek do fronty" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "PÅidá balÃÄek do sbÄraÄe" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "Smazat soubory z fronty/sbÄraÄe" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "Smazat balÃÄky z fronty/sbÄraÄe" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "PÅesun balÃÄku z fronty do sbÄraÄe nebo naopak" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "Restart souborů" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "Restart balÃÄků" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "Zkontrolovat stav online - funguje s mÃstnÃm zásobnÃkem" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "Zkontroluje online stav souboru ze zásobnÃku" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "Pozastavit server" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "pokracovat ve stahovani" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "Prepnout pozastaveni/beh" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "ukoncit server" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "Seznam prikazu:" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "Nemohu zapsat nastavenà uÅŸivatele" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "Pro pripojeni k tomuto jadru pyLoad je vyzadovano py-openssl." -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "Adresa: " -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "Uzivatelske jmeno: " -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "Heslo: " -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "Prihlasovaci udaje jsou chybne." -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "Nelze vytvorit pripojeni k %(addr)s:%(port)s." -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "K pripojeni na toto pyLoad jadro potrebujete py-openssl." -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "Byly zadany prikazy, interaktivni mod je ignorovan." -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "PÅidat BalÃÄek:" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "Zadej název nového balÃÄku" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "BalÃÄek: %s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "Analyzuje odkazy které chcete pÅidat." -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "Pokud jste hotovi, napiÅ¡te %s" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "PÅidáno odkazů: " -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr " zpÄt do hlavnÃho menu" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "Správa balÃÄků:" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr " Spravovat Odkazy:" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "Co chcete pÅesunout?" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "Co chcete smazat?" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "Co chcete restartovat?" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "Vyberte si, co chcete dÄlat, nebo zadejte ÄÃslo balÃÄku." -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "smazat" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "pÅesunout" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "restartovat" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr " - pÅedchozÃ" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr " - dalÅ¡Ã" diff --git a/locale/cs/LC_MESSAGES/setup.po b/locale/cs/LC_MESSAGES/setup.po index 25c99bd7a..f5b2ae040 100644 --- a/locale/cs/LC_MESSAGES/setup.po +++ b/locale/cs/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "a" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "Vitejte v konfiguracnim pruvodci programu pyLoad." -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "Zkontroluje vas system a provede zakladni nastaveni pro spusteni programu pyLoad." -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "Hodnota v zavorkach [] je vzdy vychozi," -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "v pripade, ze ji nechcete zmenit nebo si nejste jisti co vybrat, jen stisknete enter." -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "Nezapomente: Tohoto pruvodce muzete kdykoli sputit znovu pouzitim parametru --setup nebo -s pri startu pyload.py ." -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "Pokud mate s pruvodcem jakekoli problemy, stisknete CTRL-C" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "pro zruseni a zamezeni jeho automatickeho spusteni pri dalsim startu pyload.py ." -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "Az budete pripraveni na kontrolu systemu, stisknete enter." -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "Pro beh pyLoad je potreba pycurl a python verze 2.5, 2.6 nebo 2.7." -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "Prosim odstrante problem a znovu spustte pyLoad." -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "Setup bude nyni ukoncen." -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "Kontrola systemu ukoncena, stisknete enter pro zobrazeni zpravy o stavu." -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "## Stav ##" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "dekodovani kontejneru" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "pripojeni ssl" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "automaticke rozpoznavani captchy" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "Webové rozhranÃ" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "rozsirene Click'N'Load" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "Dostupne funkce:" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "Chybejici funkce: " -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "py-crypto nedostupne" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "Toto potrebujede k dekodovani souboru kontejneru." -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "SSL nedostupne" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "Je potreba k vytvoreni zabezpeceneho pripojeni k jadru nebo webovemu rozhrani." -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "Pokud budete pyLoad pouzivat pouze lokalne, ssl neni nutne." -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "rozpoznavani Caprtchy nedostupne" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "Je potreba jen pro nektere filehostingy pro neplaceny pristup." -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "Gui nedostupne" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "Graficke Uzivatelske Rozhrani" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "nenalezeno zadne jadro JavaScriptu" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "Toto budete potrebovat pro nektere Click'N'Load linky. Naistalujte Spidermonkey, ossp-js, pyv8 nebo rhino" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "Pokud chcete, muzete nyni zrusit instalaci a opravit nektere zavislosti." -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "Pokracovat v instalaci?" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "Chcete zmenit cestu k nastaveni? Stavajici je %s" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "Pokud pouzivate pyLoad na serveru, nebo je domovsky oddil na vnitrni flash, muze byt dobre ji zmenit." -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "Zmenit cestu k nastaveni?" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "Chcete nastavit prihlasovaci udaje a zakladni volby?" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "Doporuceno pri prvnim spusteni." -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "Vytvorit zakladni nastaveni?" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "Prejete si nastavit ssl?" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "Nastavit ssl?" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "Prejete si nastavit webove rozhrani?" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "Nastavit webove rozhrani?" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "Nastaveni uspesne dokonceno." -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "Stiknete enter pro ukonceni a restartujte pyLoad" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "## Kontrola Systemu ##" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "Vase verze pythonu je prilis nova, prosim pouzijte verzi 2.6/2.7" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "Vase verze pythonu je prilis stara, prosim pouzijte alespon Python 2.5" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "Verze Pythonu: OK" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "Vase nainstalovana verze %s jinja2 je prilis stara." -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "Muzete bezpecne pokracovat, nicmene pokud bude webove rozhani nefunkcni," -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "bude treba ji upgradovat nebo odistalovat, pyLoad jiz obsahuje knihovnu jinja2." -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "jadro JS" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "## Zakladni nastaveni ##" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "Nasledujici prihlasovaci udaje jsou platne pro CLI, GUI a webove rozhrani." -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "UÅŸivatelské jméno" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "Externà klientské aplikace (napÅ. GUI a CLI) vyÅŸadujà vzdálenÜ pÅÃstup pro fungovanà pÅes sÃÅ¥." -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "Pokud vÅ¡ak chcete pouÅŸÃvat pouze webové rozhranÃ, můşete jej zakázat a uÅ¡etÅit tak pamÄÅ¥." -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "Povolit vzdálenÜ pÅÃstup" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "Jazyk" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "Slozka pro stahovani" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "Max soubeznych stahovani" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "Pouzivat Reconnect?" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "Umisteni skriptu pro Reconnect" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "## Nastaveni Weboveho rozhrani ##" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "Aktivovat webove rozhrani?" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "Adresa pro naslouchani, pokud pouzijete 127.0.0.1 nebo localhost, bude webove rozhrani pristupne pouze lokalne." -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "Adresa" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "Port" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "pyLoad nabizi mnoho vezri administrace, nize kratke vysvetleni." -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "Vychozi server, nejlepsi volba, pokud nevite, ktery vybrat." -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "Tento server nabizi SSl a je dobrou alternativou k vestavenemu." -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "Muze byt pouzit apachem, lighttpd, vyzaduje vsak nastaveni, ktere nemusi byt snadne." -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "Velmi svizna alternativa napsana v C, vyzaduje znalost linuxu a libev." -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "Stahnete jej zde: https://github.com/jonashaag/bjoern a zkompilujte" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" -msgstr "a zkopirujte bjoern.so do adresare module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" +msgstr "a zkopirujte bjoern.so do adresare pyload/lib" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "Pozor: V nekterych zvlastnich pripadech neni vestaveny server funkcni. Pokud mate problemy s webovym rozhranim," -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "vratte se sem a zmente vestaveny server za server s vlakny." -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "Server" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "## Nastaveni SSL ##" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "Pro vytvoreni ssl certifikatu spustte tyto prikazy v konfiguracni slozce pyLoad:" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "Pokud jste skoncili a vse probehlo v poradku, muzete aktivovat SSL." -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "Aktivovat SSL?" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "Zvolte akci" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "1 - Vytvorit/Upravit uzivatele" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "2 - Seznam uzivatelu" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "3 - Odstranit uzivatele" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "4 - Konec" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "Uzivatele" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "Nastavuji novou cestu ke konfiguracnim souborum, stavajici konfigurace nebude prenesena!" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "Cesta ke konfiguracnim souborum" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "Cesta ke konfiguracnim souborum byla zmenena, instalace se nyni ukonci, pro pokracovani ji prosim restartujte." -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "Stisknete enter pro ukonceni." -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "Nastaveni cesty ke konfiguracnim souborum selhalo: %s" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "%s: chybi" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "Heslo: " -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "Heslo je pÅÃliÅ¡ krátké. PouÅŸijte nejménÄ 4 znaky." -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "Heslo (znovu): " -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "Hesla se neshodujÃ." -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "ano" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "pravda" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "p" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "ne" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "nepravda" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "n" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "Neplatne zadani" diff --git a/locale/da/LC_MESSAGES/django.po b/locale/da/LC_MESSAGES/django.po index 786082c8e..b131d9408 100644 --- a/locale/da/LC_MESSAGES/django.po +++ b/locale/da/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "Ny Captcha anmodning" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "LÊs venligst teksten i captcha" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "pyLoad genstartet" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "Succes" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "Er du virkelig sikker pÃ¥ du vil lukke pyLoad?" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "Genstart Link" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "Slet link" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "Indtast venligst et pakkenavn" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "Tryk venligst pÃ¥ den hÞjre captcha" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "Fejl opstod" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "Mappen er tom" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "Ingen Captcha at lÊse" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "Adgangskoden stemte ikke overens" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "Indstillinger gemt." -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "Ny mappe" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "Er du sikker pÃ¥ du vil genstarte pyLoad?" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "Aktive hentninger" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "Hjem" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "Logfiler" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "Konfiguration" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "Fremskridt" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "Dit brugernavn og adgangskode stemte ikke overens. PrÞv venligst igen." -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "For at nulstille dine logind data eller tilfÞje en bruger kÞr:" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "Slet afsluttede" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "Genstart mislykkedes" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "Mappe:" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "Adgangskode:" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "Redigér pakke" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "Redigér pakke detaljerne nedenfor." -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "Pakkens navn." -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "Navnet pÃ¥ disse nedhentnigers undermappe." -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "Liste over adgangskoder brugt til unrar." -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "Nulstil" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "Du er logget ud med succes." -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "Sti" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "absolut" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "relativ" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "navn" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "stÞrrelse" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "indtast" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "sidst Êndret" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "forrige mappe" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "intet indhold" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "VÊlg en sektion fra menuen" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "Gyldig indtil" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "Trafik tilbage" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "Tid" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "Maks paralelle" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "Slet?" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "ikke gyldig" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "ja" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "nej" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "Indtast dine konto data for at benytte premium egenskaber." -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "Dit brugernavn." -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "Adgangskoden til denne konto." -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "VÊlg udbyderen for din konto" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "forrige" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "nÊste" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "Slut" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "Nyheder" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "Installations mappe:" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "Konfigurations mappe:" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "Download mappe:" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "Fri plads:" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "Sprog:" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "Webinterface port:" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "Fjerninterface port:" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "FilManager" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "TilfÞj pakke:" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "IndsÊt dine links eller overfÞr en beholder." -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "Navnet pÃ¥ den nye pakke" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "IndsÊt dine links eller hvilkensomhelst tekst her og tryk filtrer knappen." -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "Filtrér urls" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "Adgangskode for RAR-arkiv" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "Fil" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "OverfÞr en beholder." -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "Captcha lÊser" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "Captcha'en" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "Tekst" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "IndsÊt teksten i captcha'en" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "Webbrugerflade" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "TilgÊngelig pyLoad opdatering!" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "Plugins blev opdateret, genstart venligst!" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "Captcha venter" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "Log af" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "Administrér" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "info" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "Log venligst ind!" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "Genstart:" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "Hastighed:" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "Aktiv:" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "Genhent side" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "indlÊser" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "Tilbage til toppen" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "Luk pyLoad" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "Genstart pyLoad" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "For at tilfÞje bruger eller Êndre adgangskode brug:" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "Vigtigt: Admin brugere har altid alle rettigheder" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "Skift adgangskode" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "Rettigheder" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "skift" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "Indtast din nuvÊrende og Þnskede adgangskode " -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "Bruger" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "NuvÊrende adgangskode" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "Ny adgangskode" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "Den nye adgangskode." -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "Ny adgangskode (gentag)" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "Gentag venligst den nye adgangskode." -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "ikke tilgÊngelig" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/da/LC_MESSAGES/pyLoad.po b/locale/da/LC_MESSAGES/pyLoad.po index 84f0e21a3..8b0ccab04 100644 --- a/locale/da/LC_MESSAGES/pyLoad.po +++ b/locale/da/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "Starter" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "mappe til midlertidige filer" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "OpenSSL til sikker forbindelse" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "Fri plads: %s" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "Aktiverer konti..." -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "genstarter pyLoad" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "pyLoad afslutter" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "Installér %s" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "lukker ned..." -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "fejl ved nedlukning" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "drÊbte pyLoad fra terminal" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "Starter" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "ikke tilgÊngelig" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/da/LC_MESSAGES/pyLoadCli.po b/locale/da/LC_MESSAGES/pyLoadCli.po index 303155034..c87fd85ab 100644 --- a/locale/da/LC_MESSAGES/pyLoadCli.po +++ b/locale/da/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "%s Hentes:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "Hastighed:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "StÞrrelse:" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "FÊrdig om:" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "ID:" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "Venter:" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "TilfÞj Links" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "Genoptag/Pause Server" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "Afslut Server" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "Afslut" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "Brug venligst denne syntaks: add <Pakkens Navn> <link> <link2> ..." -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "pyLoad var afslutte" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "Udskriver server status" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "Flyt pakker fra kÞ til samler og opmvendt" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "Genstart filer" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "Genstart pakker" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "Pause serveren" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "FortsÊt hentning" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "Pause/Genoptag" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "Afslut server" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "Kommando liste" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "Kunne ikke skrive til bruger config filen" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "Du mangler py-openssl for at tilslutte til denne pyLoad Kerne" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "Adresse:" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "Port:" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "Brugernavn:" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "Kode:" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "Login oplysninger er forkerte" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "Can ikke etablere forbindelse til %(addr)s:%(port)s." -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "Du mangler py-openssl for at tilslutte til denne pyLoad Kerne" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "Interaktiv tilstand ignoreres da du gik nogle kommandoer." -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "IndsÊt de links du Þnsker at tilfÞje" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "Skriv %s nÃ¥r du er fÊrdig." -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "Links tilfÞjet:" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "tilbage til hovedmenu" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "HÃ¥ndtér pakker:" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "HÃ¥ndtér Links:" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "Hvad vil du flytte?" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "Hvad vil du slette?" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "Hvad vil du genstarte?" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "slet" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "flyt" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "genstart" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "- forrige " -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "- nÊste" diff --git a/locale/da/LC_MESSAGES/setup.po b/locale/da/LC_MESSAGES/setup.po index 8ae55af99..a14bdf05f 100644 --- a/locale/da/LC_MESSAGES/setup.po +++ b/locale/da/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "Webbrugerflade" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "Kode:" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "Adgangskoden stemte ikke overens" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "ja" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "nej" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "" diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index cdcf10c1d..f40ad98a7 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "Neue CAPTCHA-Anfrage" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "Bitte lies den Text auf dem Captcha." -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "pyLoad wurde neu gestartet" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "aus" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "Erfolgreich" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "ein" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "Bist du sicher, dass du pyLoad beenden möchtest?" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "Link neu starten" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "Link löschen" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "Bitte gib einen Paketnamen ein." -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "Bitte klicke auf die richtige Position im Captcha." -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "Ein Fehler ist aufgetreten." -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "Ordner ist leer" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "Fehlgeschlagen" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "Keine CAPTCHA's verfÃŒgbar." -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "Passwörter stimmen nicht ÃŒberein." -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "Einstellungen gespeichert" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "Neuer Ordner" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "Sicher, dass du pyLoad neustarten willst?" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "Warte %s" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "Aktiv" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "Start" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "Warteschlange" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "Linksammler" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "Downloads" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "Log" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "Einstellungen" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "Name" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "Status" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "Informationen" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "GröÃe" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "Fortschritt" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "Anmeldung" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "Benutzername" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "Passwort" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "Dein Benutzername und/oder Passwort sind falsch. Bitte versuche es noch einmal." -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "Um deine Login-Informationen zu resetten oder un einen Benutzer hinzuzufÃŒgen, starte:" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "Fertige löschen" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "Fehlgeschlagene neustarten" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "Ordner:" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "Passwort:" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "Paket bearbeiten" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "Bearbeiten Sie hier die Paketdetails." -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "Name des Pakets." -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "Verzeichnis" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "Name des Unterordners fÃŒr diese Downloads." -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "Liste der Passwörter, welche fÃŒr das Entpacken genutzt werden." -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "Ãbernehmen" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "Abbrechen" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "Du wurdest erfolgreich abgemeldet." -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "Pfad" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "absolut" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "relativ" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "Name" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "GröÃe" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "Typ" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "zuletzt verÀndert" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "ÃŒbergeordnetes Verzeichnis" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "kein Inhalt" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "Allgemein" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "Zusatzprogramme" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "Konten" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "WÀhle einen Abschnitt aus dem MenÃŒ." -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "Erweiterung" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "Premium" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "GÃŒltig bis:" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "Verbleibender Traffic:" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "Zeit:" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "Max Parallel" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "Löschen?" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "gÃŒltig" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "ungÃŒltig" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "ja" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "nein" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "HinzufÃŒgen" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "Konto hinzufÃŒgen" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "Gib deine Benutzerdaten ein, um die Premiumfunktionen zu nutzen." -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "Dein Benutzername." -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "Das Password fÃŒr diesen Account." -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "Typ" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "WÀhle den Hoster fÃŒr dein Benutzerkonto." -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "Starten" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "zurÃŒck" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "weiter" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "Ende" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "Neuigkeiten" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "Support" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "System" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "Python:" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "Betriebssystem:" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "pyLoad Version:" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "Installationsordner:" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "Konfigurationsordner:" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "Downloadordner:" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "Freier Speicherplatz:" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "Sprache:" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "Webinterface Port:" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "Remoteinterface Port:" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "Konfiguration" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "Dateimanager" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "Paket hinzufÃŒgen" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "Links einfÃŒgen oder Container hochladen." -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "Name des neuen Pakets." -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "Links" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "FÃŒge deine Links oder einen Text hier ein und drÃŒck den 'Filter' Knopf" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "Links filtern" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "Passwörter fÃŒr RAR-Dateien" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "Datei" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "Container hochladen." -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "Ziel" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "Captchas lesen" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "Captcha" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "Das Captcha." -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "Text" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "Gib den Text aus dem Captcha ein." -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "SchlieÃen" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "WeboberflÀche" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "pyLoad Update verfÃŒgbar!" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "Plugins aktualisiert, bitte pyLoad neustarten!" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "Captchas verfÃŒgbar" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "Abmelden" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "Administrieren" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "Info" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "Bitte anmelden!" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "Stoppen" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "Abbrechen" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "Download:" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "Erneut verbinden:" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "Geschwindigkeit:" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "Aktiv:" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "Aktualisieren" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "lade" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "Nach oben" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "pyLoad beenden" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "pyLoad neustarten" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "Um Benutzer hinzuzufÃŒgen oder Passwörter zu Àndern benutze:" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "Wichtig: Admin User haben immer alle Berechtigungen!" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "Passwort Àndern" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "Admin" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "Berechtigungen" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "Àndern" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "Gib dein momentanes und dein neues Passwort ein." -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "Benutzer" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "Momentanes Passwort" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "Neues Passwort" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "Das neue Passwort." -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "Neues Passwort (wiederholen)" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "Bitte wiederhole das neue Passwort." -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "Sie haben nicht die Berechtigung diese Seite zu besuchen." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "Downloadverzeichnis nicht gefunden." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "unbegrenzt" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "nicht verfÃŒgbar" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "Starte pyload.py -s um auf dieses Setup zuzugreifen." diff --git a/locale/de/LC_MESSAGES/pyLoad.po b/locale/de/LC_MESSAGES/pyLoad.po index 1b402845a..61c5eaa15 100644 --- a/locale/de/LC_MESSAGES/pyLoad.po +++ b/locale/de/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "Signal zum Beenden erhalten" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "pyLoad ist bereits gestartet mit der pid %s" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "Fehler beim Ãndern der Gruppe: %s" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "Fehler beim Ãndern des Benutzers: %s" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "Ordner fÃŒr Logs" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "starte" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "Benutze Home-Verzeichnis: %s" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "pyCrypto um Containerdateien zu öffnen" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "Ordner fÃŒr temporÀre Dateien" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "Downloadordner" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "OpenSSL fÃŒr eine sichere Verbindung" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "Migriere alte Benutzereinstellungen in die Datenbank..." -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "Bitte ÃŒberprÃŒfe deine Login-Informationen mit './pyload.py -u'" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "Alle Links entfernt" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "Downloadzeit: %s" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "Freier Speicher: %sGB" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "Aktiviere Konten..." -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "Aktiviere Plugins..." -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "pyLoad ist gestartet und lÀuft" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "starte pyLoad neu" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "pyLoad wird beendet" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "Installiere %s" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "konnte %(desc)s nicht finden: %(name)s" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "konnte %(desc)s nicht erstellen: %(name)s" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "Beenden..." -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "Fehler beim Beenden" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "pyLoad vom Terminal beendet" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "Link Datenbank wurde aufgrund inkompatibler Version gelöscht." -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "Link Datenbank konnte nicht konvertiert werden." -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "Datenbank wurde von v2 nach v3 konvertiert." -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "Datenbank wurde von v3 nach v4 konvertiert." -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "Konvertiere alte Django DB" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "Fertig" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "Offline" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "Online" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "eingereiht" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "ÃŒbersprungen" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "wartend" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "kurzzeitig offline" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "starte" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "fehlgeschlagen" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "abgebrochen" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "entschlÃŒsseln" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "benutzerdefiniert" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "downloade" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "verarbeite" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "unbekannt" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "Paket fertiggestellt: %s" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "Nutze SSL Thrift Backend" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "Fehler beim Fernzugriff: %s" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "Starte %(name)s: %(addr)s:%(port)s" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "Konnte Backend %(name)s nicht laden | %(error)s" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "Warte %s" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "SSL Zertifikat nicht gefunden." -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "Entschuldigung! Wir haben den Support fÃŒr das Starten von %s direkt in pyLoad eingestellt" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "Du kannst den multithreaded-server benutzen, welcher eine gute Performance, SSL und" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "natÃŒrlich kannst du weiterhin deine existierende %s mit pyLoads fastcgi server benutzen" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" -msgstr "Beispiel-Konfigurationsdateien befinden sich in dem Verzeichnis 'module/webui/servers'" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" +msgstr "Beispiel-Konfigurationsdateien befinden sich in dem Verzeichnis 'pyload/webui/servers'" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "Kann %(server)s nicht benutzen, weil python-flup nicht installiert ist!" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "Fehler beim Laden vom lightweight Server: %s" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "Du musst 'bjoern' herunterladen und kompilieren, https://github.com/jonashaag/bjoern" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" -msgstr "Kopiere 'boern.so' in 'module/lib' oder benutze 'setup.py install'" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" +msgstr "Kopiere 'boern.so' in 'pyload/lib' oder benutze 'setup.py install'" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "NatÃŒrlich musst musst etwas Ahnung von Linux haben und wie man Software kompiliert" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "Der 'threaded' Server wird wegen Performance Problemen unter Windows benutzt." -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "SSL funktioniert mit diesem Server nicht, benutze bitte alternativ den 'threaded' Server" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "Starte den eingebauten Webserver: %(host)s:%(port)d" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "Starte den threaded SSL Webserver: %(host)s:%(port)d" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "Starte den threaded Webserver: %(host)s:%(port)d" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "Starte fastcgi Webserver: %(host)s:%(port)d" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "Starte bjoern Webserver: %(host)s:%(port)d" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "Sie haben nicht die Berechtigung diese Seite zu besuchen." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "Downloadverzeichnis nicht gefunden." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "unbegrenzt" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "nicht verfÃŒgbar" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "Starte pyload.py -s um auf dieses Setup zuzugreifen." -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "Eine Download Verbindung ist fehlggeschlagen, Falle zurÃŒck auf eine Verbindung | %s" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "Starte Download: %s" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "Download fertiggestellt: %s" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "Dem Plugin %s fehlt eine Funktion." -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "Download abgebrochen: %s" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "Download erneut gestartet: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "Download ist nicht verfÃŒgbar: %s" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "Download ist vorÃŒbergehend nicht verfÃŒgbar: %s" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "Download fehlgeschlagen: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "Verbindungsaufbau zum Host fehlgeschlagen oder die Verbindung wurde zurÃŒckgesetzt. Erneuter Versuch in 1 Minute..." -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "Download %(name)s wegen %(plugin)s ÃŒbersprungen" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "Decrypting startet: %s" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "Decrypting fehlgeschlagen: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "Wiederhole %s" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "Holen von Informationen fÃŒr %(name)s fehlgeschlagen | %(err)s" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "Fehler beim ausfÃŒhren des Hook: %s" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "Konnte %(name)s nicht aktivieren" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "Aktivierte Plugins: %s" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "Deaktivierte Plugins: %s" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "erneute Verbindung fehlgeschlagen: %s" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "Skript fÃŒr erneute Verbindung nicht gefunden!" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "versuche erneute Verbindung" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "Fehler beim AusfÃŒhren des Skriptes fÃŒr die erneute Verbindung!" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "Verbindung erneut aufgebaut, IP: %s" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "Auf dem GerÀt ist nicht mehr genÃŒgend Speicherplatz vorhanden" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "Fehler beim Anmelden mit Konto %(user)s | %(msg)s" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "Falsches Passwort" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "Ihre Zeit %s hat ein falsches Format, nutzen Sie dieses: 1:22-3:44" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "Konto %s hat nicht genÃŒgend Traffic, erneuter Versuch in 30 min" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "Konto %s ist abgelaufen, erneuter Versuch in 1Std" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "Downloadlimit erreicht" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "%s hat ein ungÃŒltiges Muster." -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "Fehler beim Importieren von %(name)s: %(msg)s" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "Kein Hoster geladen" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "Aktiviere direkten Download in deinem Bitshare Account" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "links.txt konnte nicht geleert werden." -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "Account-Einstellungen aufgrund neuem Konfigurationsformat gelöscht." -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "Authorisierung erforderlich (Benutzername:Passwort)" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "Bitte gib deine %s Kontodaten ein oder deaktiviere dieses Plugin" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "Es gab HTML-Code in der heruntergeladen Datei (%s)... Umleitungsfehler? Der Download wird neu gestartet." -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "Datei zur Zeit nicht verfÃŒgbar" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "Netload: warte zwischen den Downloads %d s." -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "Netload: Warte auf Captcha %d s." -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "Die heruntergeladene Datei ist leer" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "API SchlÃŒssel ungÃŒltig" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "%s: Nicht genÃŒgend Traffic ÃŒbrig" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "Traffic ÃŒberschritten" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "Rapidshare: Traffic Share (direkter Download)" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "Von dieser IP Adresse wird bereits heruntergeladen, warte 60 Sekunden" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "UngÃŒltiger Authorization-Code, Download wird neugestartet" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "RapidShareCom: Keine freien Slots" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "Du benötigst ein Premium-Konto fÃŒr diese Datei" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "Dateiname als ungÃŒltig gemeldet" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "Parallel-Download Fehler, warte 60s." -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "Nicht eingeloggt." -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "EntschlÃŒsselung fehlgeschlagen" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "FÃŒr die Datei wurde kein SchlÃŒssel in der URL ÃŒbertragen" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "Fehler Code:" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "Datei existiert nicht." -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "*** Plugins wurden aktualisiert, bitte starte pyLoad neu ***" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "Plugins aktualisiert und neu geladen" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "Keine Plugin-Updates verfÃŒgbar" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "Keine Updates fÃŒr pyLoad" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "*** Neue pyLoad Version %s verfÃŒgbar ***" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "*** Download hier: http://pyload.org/download ***" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "Konnte keine Verbindung zum Server herstellen, um auf Updates zu prÃŒfen" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "Neue Version von %(type)s | %(name)s : %(version).2f" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "Fehler beim Aktualisieren von %s" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "Versionskonflikt" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "Download fertig: %(name)s @ %(plugin)s " -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "Neue Captcha Anfrage: %s" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "Beantworte Captcha mit \"c %s Text\"" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "Bitte fÃŒge erst dein premium.to Konto hinzu und starte pyLoad neu" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "%s aus HotFolder hinzugefÃŒgt" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "Kein %s installiert" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "Konnte %s nicht aktivieren" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "Aktiviert" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "Keine Entpacken-Plugins aktiviert" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "Paket %s eingereiht fÃŒr spÀteres entpacken" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "ÃberprÃŒfe Paket %s" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "Entpacke nach %s" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "Keine Dateien zum entpacken gefunden" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "entpacke" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "PasswortgeschÃŒtzt" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "Falsches Passwort" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "Lösche %s Dateien" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "Entpacken abgeschlossen" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "Archiv-Fehler" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "CRC Fehler" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "Unbekannter Fehler" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "Setzen von Benutzer und Gruppe fehlgeschlagen" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "Click'N'Load: Port 9666 wird bereits verwendet" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "%s Credits verbleibend" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "Konnte keine Antwort senden." -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "Dein CaptchaTrader Konto hat nicht genÃŒgend Credits" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "Liste von Cryptern nicht gefunden" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "Liste von Cryptern ist leer" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "Download abgeschlossen: %(name)s @ %(plugin)s" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "Neue CaptchaID von Upload: %s : %s" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "Dein Captcha 9kw.eu Account hat nicht genÃŒgend Credits" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "Installierte Skripte fÃŒr %s: " -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "Script nicht ausfÃŒhrbar:" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "Fehler in %(script)s: %(error)s" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "Dein ExpertDecoders Account hat nicht genÃŒgend Credits" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "Bitte fÃŒgen Sie zuerst Ihr rehost.to Konto hinzu und starten Sie pyLoad danach neu" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "Bitte fÃŒge erst ein gÃŒltiges premiumize.me Konto hinzu und starte pyLoad neu." -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "%d Credits verbleibend" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "Pil und Tesseract sind nicht installiert und kein Client ist verbunden fÃŒr Captcha-Entzifferung" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "Es konnte in angemessener zeit kein Captcha-Ergebnis durch dies Plugins ermittelt werden." -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "Benutzer und Gruppe setzen fehlgeschlagen: %s" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "Kein Client verbunden zum eingeben des Captchas" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "Paket %(name)s mit %(count)d Links hinzugefÃŒgt" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "%(count)d Links wurden zum Paket #%(package)d hinzugefÃŒgt " -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "Keine JS Engine erkannt. Bitte installiere entweder Spidermonkey, ossp-js, pyv8 oder rhino" diff --git a/locale/de/LC_MESSAGES/pyLoadCli.po b/locale/de/LC_MESSAGES/pyLoadCli.po index 86b59213c..2e4bd9056 100644 --- a/locale/de/LC_MESSAGES/pyLoadCli.po +++ b/locale/de/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr " Kommandozeile" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "%s Downloads:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr " Geschwindigkeit: " -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr " GröÃe: " -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr " Fertig in: " -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr " ID: " -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "wartend: " -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "Status:" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "pausiert" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "lÀuft" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "Gesamtgeschwindigkeit" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "Dateien in Warteschlange" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "Gesamt" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "MenÃŒ:" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr " Links hinzufÃŒgen" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr " Warteschlange verwalten" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr " Linksammler anpassen" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr " Server fortsetzen/pausieren" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr " Server beenden" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr " Beenden" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "Bitte benutze folgende Syntax: add <Package name> <link> <link2> ..." -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "ÃberprÃŒfe %d Links:" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "Datei existiert nicht." -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "pyLoad wurde beendet" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "Zeigt den Server-Status" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "Zeigt die Warteschlange" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "Zeigt den Linksammler" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "FÃŒgt Paket der Warteschlange hinzu" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "FÃŒgt Paket zum Linksammler hinzu" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "Löscht Dateien aus der Warteschlange/Linksammler" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "Löscht Pakete aus der Warteschlange/Linksammler" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "Verschiebt Pakete aus der Warteschlange in den Linksammler oder umgekehrt" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "Dateien neustarten" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "Pakete neustarten" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "ÃberprÃŒfe Onlinestatus, funktioniert mit lokalen Containern" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "Onlinestatus eines Containers prÃŒfen" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "pausiert den Server" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "Downloads fortsetzen" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "Pause/Fortsetzen" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "Server beenden" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "Liste aller Befehle:" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "Konnte Benutzer-Konfigurationsdatei nicht schreiben" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "Du benötigst py-openssl um dich zu diesem pyLoad Server verbinden zu können." -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "Adresse: " -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "Port: " -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "Benutzername: " -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "Passwort: " -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "Logindaten sind falsch." -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "Konnte keine Verbindung zu %(addr)s:%(port)s aufbauen." -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "Du benötigst py-openssl um dich zu diesem pyLoad Server verbinden zu können." -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "Befehle im interaktiven Modus werden ignoriert, wenn zusÀtzliche Befehle ÃŒbergeben wurden." -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "Paket hinzufÃŒgen:" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "Gib einen Namen fÃŒr das neue Paket ein" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "Paket: %s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "Kopiere die Links, die du hinzufÃŒgen willst." -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "DrÃŒcke %s wenn du fertig bist." -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "HinzugefÃŒgte Links: " -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr " ZurÃŒck zum MenÃŒ" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "Pakete verwalten:" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "Links verwalten:" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "Was möchtest du verschieben?" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "Was möchtest du löschen?" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "Was möchtest du neustarten?" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "WÀhle, was du machen möchtest oder gib eine Paketnummer an." -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "löschen" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "verschieben" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "neustarten" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr " - vorige Seite" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr " - nÀchste Seite" diff --git a/locale/de/LC_MESSAGES/setup.po b/locale/de/LC_MESSAGES/setup.po index ac026d48c..41992ce3b 100644 --- a/locale/de/LC_MESSAGES/setup.po +++ b/locale/de/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "j" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "n" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "Willkommen im pyLoad Konfigurations Assistenten." -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "Er wird dein System prÃŒfen und einige Grundeinstellungen vornehmen um pyLoad ausfÃŒhren zu können," -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "Der Wert in Klammern [] ist immer der Standardwert," -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "Falls du sie nicht Àndern möchtest oder unsicher bist, drÃŒcke einfach Enter." -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "Beachte: Du kannst diesen Assistenten jederzeit wieder mit dem --setup oder -s Parameter starten." -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "Falls du beenden willst, drÃŒcke STRG-C," -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "um abzubrechen und ihn nicht mehr automatisch zu starten." -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "Wenn du fÃŒr die SystemÃŒberprÃŒfung bereit bist, drÃŒcke Enter." -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "Du brauchst pycurl, sqlite und python 2.5, 2.6 oder 2.7 um pyLoad zu starten." -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "Bitte korrigiere das und starte pyLoad neu." -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "Das Setup wird sich nun beenden." -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "System-Check beendet, drÃŒcke Enter um deinen Status Bericht zu sehen." -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "## Status ##" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "Container decrypting" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "SSL Verbindung" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "Automatisches Captcha einlesen" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "GUI" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "WeboberflÀche" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "erweitertes Click'N'Load" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "VerfÃŒgbare Funktionen:" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "Fehlende Funktionen: " -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "kein py-crypto verfÃŒgbar" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "Du brauchst es, um Container Dateien zu öffnen." -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "Kein SSL verfÃŒgbar" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "Wird gebraucht falls du eine SSL Verbindung zu Core oder Webinterface einstellen willst." -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "Falls du nur lokal zugreifen willst, ist SSL ÃŒberflÃŒssig." -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "keine Captcha Erkennung verfÃŒgbar" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "Wird fÃŒr einige Hoster als Freeuser benötigt." -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "GUI nicht verfÃŒgbar" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "Die Grafische Benutzer OberflÀche." -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "keine JavaScript Engine gefunden" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "Du benötigst das fÃŒr einige Click'n'Load links. Installiere Spidermonkey, ossp-js, pyv8 oder rhino" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "Du kannst das Setup nun abbrechen und AbhÀngigkeiten fixen, falls du willst." -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "Mit Setup fortfahren?" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "Möchtest du den Pfad zu den Konfigurationsdateien Àndern? Jetziger ist %s" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "Falls du pyLoad auf einem Server benutzt, oder die home Partition auf einem internen Flashspeicher liegt, wÀr es eine gute Idee ihn zu Àndern." -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "Konfigurationspfad Àndern?" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "Wollen Sie die Anmeldedaten und Grundeinstellungen festlegen?" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "Wird fÃŒr den ersten Start empfohlen." -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "Grundeinstellungen vornehmen?" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "Willst du SSL konfigurieren?" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "SSL konfigurieren?" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "Willst du das Webinterface konfigurieren?" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "Webinterface konfigurieren?" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "Setup erfolgreich beendet." -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "DrÃŒcke Enter zum beenden und starte pyLoad neu" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "## System Check ##" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "Deine python version ist zu neu, benutze python 2.6/2.7" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "Deine Python Version ist zu alt, benutze mindestens 2.5" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "Python Version: OK" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "Ihre installierte Version %s von jinja2 scheint veraltet zu sein." -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "Sie können problemlos fortfahren, sollte jedoch das Webinterface nicht funktionieren," -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "sollten Sie es upgrade oder deinstallieren, pyload bringt eine ausreichende jinja2 Bibliothek mit." -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "JS engine" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "## Grundeinstellungen ##" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "Die folgenden Anmeldedaten sind fÃŒr CLI, GUI und Webinterface gÃŒltig." -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "Benutzername" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "Externe Clients (GUI, CLI und andere) benötigen Fernzugriff, um via Netzwerk zugreifen zu können." -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "Solltest Du jedoch nur das Webinterface nutzen, kannst Du Ihn deaktivieren, um den Speicherverbrauch zu verringern." -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "Aktiviere Fernzugriff" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "Sprache" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "Download Ordner" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "Maximale parallele Downloads" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "Benutze Reconnect?" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "Reconnect Script Pfad" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "## Webinterface Setup ##" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "Aktiviere Webinterface?" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "Adresse des Webservers. Falls du 127.0.0.1 oder localhost eintrÀgst wird das Webinterface nur lokal erreichbar sein." -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "Adresse" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "Port" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "pyLoad verfÃŒgt ÃŒber verschiedene Webserver, eine kurze ErklÀrung folgt." -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "Standardserver, beste Wahl wenn du nicht weiÃt welchen du wÀhlen sollst." -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "Dieser Server unterstÃŒtzt SSL und ist eine gute Alternative zu builtin." -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "Kann von apache, lighttpd benutzt werden. Muss konfiguriert werden, welches aber nicht sehr einfach ist." -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "Sehr schnelle Alternative geschrieben in C, benötigt libev und Linux-Kenntnisse." -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "Downloaden von: https://github.com/jonashaag/bjoern, danach kompilieren." -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" -msgstr "und kopiere die bjoern.so nach module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" +msgstr "und kopiere die bjoern.so nach pyload/lib" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "Achtung: In manchen FÀllen funktioniert der builtin Server nicht, wenn du Probleme mit dem Webinterface bemerkst." -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "komme zurÃŒck und Àndere den builtin server zu threaded hier" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "Server" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "## Einstellungen fÃŒr SSL ##" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "FÃŒhren Sie die folgenden Kommandos im pyLoad Konfigurationsordner aus, um ein SSL-Zertifikate zu erstellen:" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "Falls du fertig bist und alles erfolgreich war, kannst du nun SSL aktivieren." -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "SSL aktivieren?" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "Aktion wÀhlen" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "1 - Erstelle/Bearbeite Nutzer" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "2 - Liste Nutzer auf" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "3 - Entferne Nutzer" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "4 - Verlassen" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "Benutzer" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "Setze neuen Config Pfad, momentane Konfiguration wird nicht ÃŒbernommen!" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "Config Pfad" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "Config Pfad geÀndert, Setup wird nun beenden, bitte starte neu um weiterzumachen." -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "DrÃŒcke Enter zum Beenden." -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "Fehler beim Setzen des Pfades fÃŒr die Konfiguration: %s" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "%s: OK" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "%s: fehlt" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "Passwort: " -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "Passwort zu kurz. Benutze mindestens 4 Zeichen." -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "Passwort (bestÀtigen): " -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "Passwörter stimmen nicht ÃŒberein." -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "ja" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "ja" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "j" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "nein" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "nein" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "n" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "UngÃŒltige Eingabe" diff --git a/locale/django.pot b/locale/django.pot index 39b39aded..277108e5b 100644 --- a/locale/django.pot +++ b/locale/django.pot @@ -17,673 +17,673 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 #, python-format msgid "New pyLoad version %s available!" msgstr "" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "" -#: module/webui/app/pyload.py:127 +#: pyload/webui/app/pyload.py:127 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:195 +#: pyload/webui/app/pyload.py:195 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:264 module/webui/app/pyload.py:271 +#: pyload/webui/app/pyload.py:264 pyload/webui/app/pyload.py:271 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:509 +#: pyload/webui/app/pyload.py:509 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/el/LC_MESSAGES/django.po b/locale/el/LC_MESSAGES/django.po index f292fcb89..c7fc04fc0 100644 --- a/locale/el/LC_MESSAGES/django.po +++ b/locale/el/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "ÎίÏηÏη για ΜÎο Captcha" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "ΠαÏÎ±ÎºÎ±Î»Ï ÎŽÎ¹Î±Î²Î¬ÏÏε Ïο κείΌεΜο ÏÏο captcha." -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "ÎγιΜε εÏαΜεκκίΜηÏη ÏÏο pyLoad " -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "αΜεΜεÏγÏ" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "ÎÏιÏÏ
Ïία" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "εΜεÏγÏ" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "ÎίÏÏε ÏίγοÏ
Ïοι ÏÏι ΞÎλεÏε Μα ÏεÏΌαÏίÏεÏε Ïο pyLoad ;" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "ÎÏαΜεκκίΜηÏη ÏÏ
ΜΎÎÏΌοÏ
" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "ÎιαγÏαÏή ÏÏ
ΜΎÎÏΌοÏ
" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "ΠαÏÎ±ÎºÎ±Î»Ï ÎµÎ¹ÏάγεÏε ÎΜα ÏΜοΌα για Ïο ÏακÎÏο" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "ΠαÏÎ±ÎºÎ±Î»Ï ÏαÏήÏÏε ÏÏη ÏÏÏÏή ΞÎÏη captcha" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "ΠαÏοÏ
ÏιάÏÏηκε ÎΜα ÏÏάλΌα" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "Î ÏÎ¬ÎºÎµÎ»Î¿Ï ÎµÎ¯ÎœÎ±Î¹ άΎειοÏ" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "ÎÏÎÏÏ
ÏαΜ" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "ÎεΜ Ï
ÏάÏÏοÏ
Μ Captchas για αΜάγΜÏÏη." -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "Îι κÏΎικοί ΎεΜ ÏαιÏιάζοÏ
Μ" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "Îι ÏÏ
ΞΌίÏÎµÎ¹Ï Î±ÏοΞηκεÏÏηκαΜ" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "ÎÎÎ¿Ï ÏάκελοÏ" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "ÎίÏαÏÏε ÏίγοÏ
Ïοι ÏÏι ΞÎλεÏε Μα κάΜεÏε εÏαΜεκκίΜηÏη ÏÏο pyLoad ;" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "αΜαΌοΜή %s" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "ÎΜεÏγÎÏ ÎεÏαÏοÏÏÏÏÎµÎ¹Ï " -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "ÎÏÏική" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "ÎήÏειÏ" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "ÎÏÏεία καÏαγÏαÏήÏ" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "ΡÏ
ΞΌίÏειÏ" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "ÎΜοΌα" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "ÎαÏάÏÏαÏη" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "ΠληÏοÏοÏία" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "ÎÎγεΞοÏ" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "Î ÏÏοΎοÏ" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "ΣÏΜΎεÏη" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "ÎΜοΌα ΧÏήÏÏη" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "ÎÏΎικÏÏ ÏÏÏÏβαÏηÏ" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "΀ο ÏΜοΌα ÏÏήÏÏη και ο κÏΎικÏÏ ÏÏÏÏβαÏÎ·Ï ÎŽÎµÎœ ÏαιÏιάζοÏ
Μ. ÎοκιΌάÏÏε ΟαΜά." -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "Îια Μα εÏαΜαÏÎÏεÏε Ïα ÏÏοιÏεία ειÏÏΎοÏ
ή για Μα ÏÏοÏΞÎÏÏε ÏÏήÏÏη ÏÏÎΟÏε: " -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "ÎιαγÏαÏή ΀ελείÏÏε" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "ÎÏαΜεκκίΜηÏη ÎÏÎÏÏ
Ïε" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "ΊάκελοÏ:" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "ÎÏΎικÏÏ Î ÏÏÏβαÏηÏ:" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "ÎÏεΟεÏγαÏία ΠακÎÏοÏ
" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "ÎÏεΟεÏγαÏÏείÏε λεÏÏοΌÎÏÎµÎ¹ÎµÏ ÏοÏ
ÏακÎÏοÏ
ÏαÏακάÏÏ. " -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "΀ο ÏΜοΌα ÏοÏ
ÏακÎÏοÏ
." -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "ΊάκελοÏ" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "ÎΜοΌα Ï
ÏοÏακÎλοÏ
για αÏ
ÏÎÏ ÏÎ¹Ï ÎŒÎµÏαÏοÏÏÏÏειÏ." -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "ÎίÏÏα κÏΎικÏΜ ÏοÏ
ÏÏηÏιΌοÏοιοÏΜÏαι για Ïο unrar." -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "Î¥Ïοβολή" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "ÎÏαΜαÏοÏά" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "ÎÏοÏÏ
ΜΎεΞήκαÏε εÏιÏÏ
ÏήÏ." -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "ÎιαΎÏοΌή" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "αÏÏλÏ
Ïη" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "ÏÏεÏική" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "ÏΜοΌα" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "ÎŒÎγεΞοÏ" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "ÏÏÏοÏ" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "ÏελεÏ
Ïαία αλλαγή" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "γοΜικÏÏ ÏάκελοÏ" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "ÏÏÏÎ¯Ï ÏεÏιεÏÏΌεΜο" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "ÎεΜικά" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "Î ÏÏÏΞεÏα" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "ÎογαÏιαÏΌοί" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "ÎÏιλÎΟÏε αÏÏ Ïο menu" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "Î ÏÏÏΞεÏα" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "ÎγκÏ
Ïο εÏÏ" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "ÎΜαÏοΌείΜοÏ
Ïα κίΜηÏη" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "ΧÏÏΜοÏ" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "ÎÎγιÏÏÎ¿Ï Î±ÏιΞΌÏÏ ÏαÏ
ÏÏÏÏοΜÏΜ" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "ÎιαγÏαÏή;" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "ÎγκÏ
Ïο" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "άκÏ
Ïο" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "Μαι" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "ÏÏι" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "Î ÏοÏΞήκη" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "Î ÏοÏΞήκη ÎογαÏιαÏΌοÏ" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "ÎιÏάγεÏε Ïα ÏÏοιÏεία ÏοÏ
λογαÏιαÏÎŒÎ¿Ï ÏÎ±Ï Î³Î¹Î± Μα ÏÏηÏιΌοÏοιήÏεÏε Ïα εÏιÏλÎοΜ ÏαÏακÏηÏιÏÏικά." -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "΀ο ÏΜοΌα ÏÏήÏÏη ÏαÏ." -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "ΠκÏΎικÏÏ ÏÏήÏÏÎ·Ï Î³Î¹Î± αÏ
ÏÏΜ Ïο λογαÏιαÏÎŒÏ." -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "΀ÏÏοÏ" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "ΧÏηÏιΌοÏοιήÏÏε άλλο hoster για ÏοΜ λογαÏιαÏÎŒÏ ÏαÏ. " -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "ÎκκίΜηÏη" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "ÏÏοηγ." -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "εÏÏÎŒ." -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "΀ÎλοÏ" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "ÎÎα" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "Î¥ÏοÏÏήÏιΟη" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "ΣÏÏÏηΌα" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "ÎκΎοÏη pyLoad: " -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "ÎŠÎ¬ÎºÎµÎ»Î¿Ï ÎγκαÏάÏÏαÏηÏ: " -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "ÎŠÎ¬ÎºÎµÎ»Î¿Ï Î¡Ï
ΞΌίÏεÏΜ: " -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "ÎŠÎ¬ÎºÎµÎ»Î¿Ï ÎήÏηÏ: " -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "ÎλεÏΞεÏÎ¿Ï Î§ÏÏοÏ: " -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "ÎλÏÏÏα: " -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "ÎÏÏα Webinterface: " -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "ÎÏÏα ÎÏοΌακÏÏ
ÏÎŒÎÎœÎ·Ï Î ÏÏÏβαÏηÏ: " -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "ÎγκαÏάÏÏαÏη" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "ÎιαÏείÏιÏη ÎÏÏείÏΜ" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "Î ÏοÏΞήκη ΠακÎÏοÏ
" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "ÎÏικολλήÏÏε ÏÏ
ΜΎÎÏΌοÏ
Ï Î· ÏοÏÏÏÏÏε αÏÏείο container." -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "΀ο ÏΜοΌα ÏοÏ
ΜÎοÏ
ÏακÎÏοÏ
." -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "ΣÏΜΎεÏΌοι" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "ÎÏικολλήÏÏε ÏοÏ
Ï ÏÏ
ΜΎÎÏΌοÏ
Ï ÏÎ±Ï ÎµÎŽÏ Î® οÏοιοΎήÏοÏε κείΌεΜο και ÏαÏήÏÏε Ïο ÏλήκÏÏο ÏίλÏÏοÏ
." -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "ΊιλÏÏάÏιÏΌα urls" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "ÎÏΎικÏÏ Î³Î¹Î± AÏÏείο RAR" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "AÏÏείο" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "ÎΜεβάÏÏε αÏÏείο container." -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "Î ÏοοÏιÏÎŒÏÏ" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "ÎΜάλÏ
Ïη Captcha" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "΀ο captcha." -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "ÎείΌεΜο" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "ÎιÏάγεÏε Ïο κείΌεΜο ÏοÏ
ÏαίΜεÏαι ÏÏο captcha." -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "ÎλείÏιΌο" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "ÎιεÏαÏή ιÏÏοÏ" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "Î¥ÏάÏÏει ΎιαΞÎÏιΌη αΜαβάΞΌιÏη για Ïο pyLoad!" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "΀α ÏÏÏÏΞεÏα αΜαβαΞΌίÏÏηκαΜ, ÏαÏακαλοÏΌε κάΜÏε εÏαΜεκκίΜηÏη!" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "ΠεÏιΌÎΜει Captcha" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "ÎÏοÏÏΜΎεÏη" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "ÎιαÏείÏιÏη" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "ΠληÏοÏοÏίεÏ" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "ΠαÏÎ±ÎºÎ±Î»Ï Î£Ï
ΜΎεΞείÏε!" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "ÎιακοÏή" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "ÎκÏÏÏÏη" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "ÎήÏη:" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "ÎÏαΜαÏÏΜΎεÏη:" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "΀αÏÏÏηÏα:" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "ÎΜεÏγÏ:" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "ÎÏαΜαÏÏÏÏιÏη ÏελίΎαÏ" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "ÏοÏÏÏΜει " -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "ÎÏιÏÏÏοÏή ÏÏηΜ κοÏÏ
Ïή" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "ΣÏαΌάÏηΌα ÏοÏ
pyLoad" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "ÎÏαΜεκκίΜηÏη ÏοÏ
pyLoad" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "Îια Μα ÏÏοÏΞÎÏεÏε ÏÏήÏÏÎµÏ Î® Μα αλλάΟεÏε κÏΎικοÏÏ ÏÏÏÏβαÏÎ·Ï ÏÏηÏιΌοÏοιήÏεÏε: " -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "ÎÏιÏήΌαΜÏη: Î ÎιαÏειÏιÏÏÎ®Ï ÎÏει ÏάΜÏα Ïλα Ïα ΎικαιÏΌαÏα!" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "Îλλαγή ÎÏÎŽÎ¹ÎºÎ¿Ï Î ÏÏÏβαÏηÏ" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "ÎιαÏειÏιÏÏήÏ" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "ÎικαιÏΌαÏα" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "αλλαγή" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "ÎιÏάγεÏε Ïο ÏαÏÏΜ και Ïο εÏιΞÏ
ΌηÏÏ ÎºÏÎŽÎ¹ÎºÏ ÏÏήÏÏη." -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "ÎΜοΌα ÏÏήÏÏη" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "ΠαÏÏΜ κÏΎικÏÏ ÏÏήÏÏη" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "ÎÎÎ¿Ï ÎºÏΎικÏÏ ÏÏήÏÏη" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "ΠΜÎÎ¿Ï ÎºÏΎικÏÏ ÏÏήÏÏη." -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "ÎÎÎ¿Ï ÎºÏΎικÏÏ ÏÏήÏÏη (εÏαΜάληÏη)" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "ΠαÏÎ±ÎºÎ±Î»Ï ÎµÏαΜαλάβεÏε Ïο ΜÎο κÏÎŽÎ¹ÎºÏ ÏÏήÏÏη." -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "ÎεΜ ÏÎ±Ï ÎµÏιÏÏÎÏεÏε η ÏÏÏÏβαÏη Ïε αÏ
Ïή Ïη ÏελίΎα" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "ΠκαÏÎ¬Î»Î¿Î³Î¿Ï ÎŒÎµÏαÏοÏÏÏÏεÏΜ ΎεΜ βÏÎΞηκε" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "αÏεÏιÏÏιÏÏο" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "Όη ΎιαΞÎÏιΌο" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "ÎκÏελÎÏÏε ÏηΜ εΜÏολή pyload.py -s για ÏÏÏÏβαÏη ÏÏηΜ εγκαÏάÏÏαÏη." diff --git a/locale/el/LC_MESSAGES/pyLoad.po b/locale/el/LC_MESSAGES/pyLoad.po index c292ac965..cb4826ca9 100644 --- a/locale/el/LC_MESSAGES/pyLoad.po +++ b/locale/el/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "ÎλήÏΞη ÏήΌα εγκαÏάλειÏηÏ" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "΀ο pyLoad εκÏελείÏαι ήΎη Όε pid %s" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "ÎÏοÏÏ
Ïία Î±Î»Î»Î±Î³Î®Ï Î¿ÎŒÎ¬ÎŽÎ±Ï: %s" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "ÎÏοÏÏ
Ïία Î±Î»Î»Î±Î³Î®Ï ÏÏήÏÏη: %s" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "ÏÎ¬ÎºÎµÎ»Î¿Ï Î³Î¹Î± αÏÏεία καÏαγÏαÏήÏ" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "Σε εκκίΜηÏη" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "ΧÏήÏη Î³Î¿ÎœÎ¹ÎºÎ¿Ï ÎºÎ±ÏαλÏγοÏ
: %s" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "Ïο pycrypto Ξα αÏοκÏΎικοÏοιήÏει Ïα ÏεÏιÎÏοΜÏα αÏÏεία" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "ÏÎ¬ÎºÎµÎ»Î¿Ï Î³Î¹Î± ÏÏοÏÏÏιΜά αÏÏεία" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "ÏÎ¬ÎºÎµÎ»Î¿Ï Î³Î¹Î± καÏεβαÏÎŒÎΜα" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "OpenSSL για αÏÏαλή ÏÏΜΎεÏη" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "ΠαÏÎ±ÎºÎ±Î»Ï ÎµÎ»ÎγΟÏε Ïα ÏÏοιÏεία ÏÏΜΎεÏÎ·Ï ÎŒÎµ Ïη ÏÏήÏη ÏοÏ
./pyload.py -u" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "Îλοι οι ÏÏ
ΜΎεÏΌοι αÏαιÏÎΞηκαΜ" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "ΧÏÏÎœÎ¿Ï ÎºÎ±ÏεβάÏΌαÏοÏ: %s" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "ÎλÎÏ
ΞεÏÎ¿Ï ÏÏÏÎ¿Ï ÏÏο ΎίÏκο: %s" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "ÎΜεÏγοÏοίηÏη ÎογαÏιαÏÎŒÏΜ..." -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "ÎΜεÏγοÏοίηÏη Î ÏÏÏΞεÏÏΜ..." -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "΀ο pyLoad είΜαι εΜεÏÎ³Ï ÎºÎ±Î¹ εκÏελείÏαι " -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "Ïο pyLoad εÏαΜεκκιΜείÏαι" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "Ïο pyLoad ÏÏαΌαÏάει" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "ÎγκαÏάÏÏαÏη %s" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "ΎεΜ βÏεΞηκε(καΜ) %(desc)s: %(name)s" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "ΎεΜ ΎιΌιοÏ
ÏγήΞηκε(καΜ) %(desc)s: %(name)s" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "κλείÏιΌο..." -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "ÏÏάλΌα καÏα Ïο κλείÏιΌο" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "Ïο pyLoad ÏÏαΌαÏήΞηκε αÏο Ïο ΀εÏΌαÏικο" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "ÏελείÏÏε" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "αÏοÏÏ
ΜΎεΌÎΜοÏ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "ÏÏ
ΜΎεΌÎΜοÏ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "ÏÏηΜ οÏ
Ïά" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "ÏÏοÏÏεÏάÏÏηκε" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "Ïε αΜαΌοΜή" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "ÏÏοÏÏÏιΜά ÏÏÏÎ¯Ï ÏÏΜΎεÏη" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "ΟεκιΜάει" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "αÏÎÏÏ
Ïε" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "ΌαÏαιÏΞηκε" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "αÏοκÏÏ
ÏÏογÏαÏείÏαι" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "ÏÏοÏαÏΌοÏÎŒÎΜο" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "Ïε λήÏη" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "Ïε εΟÎλιΟη" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "άγΜÏÏÏο" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "ÎλοκλήÏÏÏη ÏακÎÏοÏ
: %s" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "ΣÏάλΌα αÏοΌακÏÏ
ÏÎŒÎΜοÏ
backend: %s" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "ÎίΜεÏαι εκκίΜηÏη %(name)s: %(addr)s:%(port)s" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "ÎÏÎÏÏ
Ïε η ÏÏÏÏÏÏη ÏοÏ
backend %(name)s | %(error)s" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "αΜαΌοΜή %s" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "ÎεΜ βÏÎΞηκαΜ ÏιÏÏοÏοιηÏικά SSL." -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "ÎÏοÏείÏε Μα ÏÏηÏιΌοÏοιήÏεÏε ÏοΜ threaded server ÏοÏ
ÏÏοÏÏÎÏει καλή αÏÏΎοÏη και ssl," -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" -msgstr "ÏαÏαΎείγΌαÏα αÏÏείÏΜ ÏÏ
ΞΌίÏεÏΜ βÏίÏκοΜÏαι ÎŒÎÏα ÏÏο Ïάκελο module/webui/servers" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" +msgstr "ÏαÏαΎείγΌαÏα αÏÏείÏΜ ÏÏ
ΞΌίÏεÏΜ βÏίÏκοΜÏαι ÎŒÎÏα ÏÏο Ïάκελο pyload/webui/servers" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "ÎÏοÏÏ
Ïία ÏÏήÏÎ·Ï ÏοÏ
%(server)s, ΎεΜ είΜαι εγκαÏεÏÏηΌÎΜο Ïο ÏακÎÏο python-flup!" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "ΧÏειάζεÏαι Μα καÏεβλαÏεÏε και Μα ÏÏ
ΜÏάΟεÏε Ïο bjoern, https://github.com/jonashaag/bjoern" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "Îα ÏÏ
Ïικά και ÏÏειάζεÏε Μα είÏÏε Î¿Î¹ÎºÎµÎ¯Î¿Ï ÎŒÎµ Ïα linux και Μα ΟÎÏεÏε ÏÏÏ ÎœÎ± ÏÏ
ΜÏάÏÏεÏαι λογιÏΌικÏ" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "ΠΎιακοΌιÏÏÎ®Ï Î¬Î»Î»Î±ÎŸÎµ Ïε threaded, λÏÎ³Ï ÎºÎ¬ÏοιÏΜ γΜÏÏÏÏΜ ÏÏοβληΌάÏÏΜ αÏÏΎοÏÎ·Ï ÏÏα windows." -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "ÎÏ
ÏÏÏ Î¿ ΎιακοΌιÏÏÎ®Ï ÎŽÎµÎœ ÏÏοÏÏÎÏει SSL, αΜÏί για αÏ
ÏÏΜ ÏαÏÎ±ÎºÎ±Î»Ï ÏκεÏÏείÏε ÏηΜ ÏεÏίÏÏÏÏη ÏÏήÏÎ·Ï ÏοÏ
threaded" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "ÎκκίΜηÏη ÏοÏ
εΜÏÏΌαÏÏÎŒÎΜοÏ
ΎιακοΌιÏÏή web: %(host)s:%(port)d" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "ÎκκίΜηÏη ÏοÏ
threaded SSL ΎιακοΌιÏÏή web: %(host)s:%(port)d" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "ÎκκίΜηÏη ÏοÏ
threaded ΎιακοΌιÏÏή web: %(host)s:%(port)d" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "ÎκκίΜηÏη ÏοÏ
ΎιακοΌιÏÏή fastcgi: %(host)s:%(port)d" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "ÎεΜ ÏÎ±Ï ÎµÏιÏÏÎÏεÏε η ÏÏÏÏβαÏη Ïε αÏ
Ïή Ïη ÏελίΎα" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "ΠκαÏÎ¬Î»Î¿Î³Î¿Ï ÎŒÎµÏαÏοÏÏÏÏεÏΜ ΎεΜ βÏÎΞηκε" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "αÏεÏιÏÏιÏÏο" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "Όη ΎιαΞÎÏιΌο" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "ÎκÏελÎÏÏε ÏηΜ εΜÏολή pyload.py -s για ÏÏÏÏβαÏη ÏÏηΜ εγκαÏάÏÏαÏη." -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "ΠλήÏη ÏÏΜ κοΌΌαÏιÏΜ αÏÎÏÏ
Ïε, εÏιÏÏÏοÏή Ïε καÏάÏÏαÏη ÎŒÎ¿ÎœÎ®Ï ÏÏΜΎεÏÎ·Ï | %s" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "ΠλήÏη ΟεκιΜά: %s" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "ΠλήÏη ολοκληÏÏΞηκε: %s" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "ΣÏο ÏÏÏÏΞεÏο %s λείÏει Όια λειÏοÏ
Ïγία." -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "ΠλήÏη ΌαÏαιÏΞηκε: %s" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "ΠλήÏη εÏαΜεκκιΜήΞηκε: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "ΠλήÏη είΜαι εκÏÏÏ ÏÏΜΎεÏηÏ: %s" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "ΠλήÏη είΜαι ÏÏοÏÏÏιΜά εκÏÏÏ ÏÏΜΎεÏηÏ: %s" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "ΠλήÏη αÏÎÏÏ
Ïε: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "ÎÏοÏÏ
Ïία ÏÏΜΎεÏÎ·Ï ÎŒÎµ Ïο ΎιακοΌιÏÏή ή ΎιακοÏή ÏÏΜΎεÏηÏ, αΜαΌοΜή 1 λεÏÏÏ ÏÏιΜ γίΜει κι άλλη ÏÏοÏÏάΞεια." -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "ÎγιΜε ÏαÏάλειÏη ÏÏη λήÏη: %(name)s εΟαιÏÎ¯Î±Ï ÏοÏ
%(plugin)s" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "ΠαΜάκÏηÏη ÏληÏοÏοÏιÏΜ για Ïο %(name)s αÏÎÏÏ
Ïε | %(err)s" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "ÎÏοÏÏ
Ïία εΜεÏγοÏοίηÏÎ·Ï %(name)s " -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "ÎΜεÏγοÏοιηΌÎΜα ÏÏÏÏΞεÏα: %s" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "ÎÏεΜεÏγοÏοίηÏη ÏÏÏÏΞεÏÏΜ: %s" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "ÎÏαΜαÏÏΜΎεÏη αÏÎÏÏ
Ïε %s" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "ÎεΜ βÏÎΞηκε αÏÏείο εΜÏολÏΜ για εÏαΜαÏÏΜΎεÏη!" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "ÎεκιΜάει η εÏαΜαÏÏΜΎεÏη" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "ÎÏοÏÏ
Ïία εκÏÎλεÏÎ·Ï Î±ÏÏείοÏ
εΜÏολÏΜ εÏαΜαÏÏΜΎεÏηÏ!" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "ÎÏαΜαÏÏ
ΜΎÎΞηκε, ΜÎα ΎιÎÏ
ΞÏ
ΜÏη IP: %s" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "ÎεΜ ÎÏει αÏοΌείΜει αÏκεÏÏÏ ÏÏÏÎ¿Ï ÏÏηΜ ÏÏ
ÏκεÏ
ή" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "ÎÏοÏÏ
Ïία ÏÏΜΎεÏÎ·Ï ÎŒÎµ ÏοΜ λογαÏιαÏÎŒÏ %(user)s | %(msg)s" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "ÎÎ¬ÎžÎ¿Ï ÎºÏΎικÏÏ" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "ΣÏοΜ λογαÏιαÏÎŒÏ %s ΎεΜ ÎÏει αÏοΌείΜει αÏκεÏή κίΜηÏη ΎεΎοΌÎΜÏΜ, Ξα γίΜει Ïάλι ÎλεγÏÎ¿Ï Ïε 30 λεÏÏά" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "ΠλογαÏιαÏÎŒÏÏ %s ÎÏει λήΟει, Ξα γίΜει ΟαΜά ÎλεγÏÎ¿Ï Ïε 1 ÏÏα" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "ΊÏάÏαÏε ÏÏο ÎŒÎγιÏÏο ÏÏιο λήÏεÏΜ" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "ΣÏάλΌα καÏά ÏηΜ ειÏαγÏγή %(name)s: %(msg)s" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "ÎεΜ ÏοÏÏÏΞηκε κάÏÎ¿Î¹Î¿Ï hoster" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "ÎΜεÏγοÏοιήÏÏε ÏÎ¹Ï Î±ÏεÏ
ÎžÎµÎ¯Î±Ï Î»Î®ÏÎµÎ¹Ï ÏÏοΜ Bitshare λογαÏιαÏÎŒÏ ÏαÏ" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "ÎÏαιÏείÏαι ÏιÏÏοÏοίηÏη (ÏΜοΌα ÏÏήÏÏη:κÏΎικÏÏ)" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "ΠαÏÎ±ÎºÎ±Î»Ï ÎµÎ¹ÏάγεÏε Ïο λογαÏιαÏÎŒÏ ÏÎ±Ï %s ή αÏεΜεÏγοÏοιήÏÏε αÏ
ÏÏ Ïο ÏÏÏÏΞεÏο" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "Î¥ÏήÏÏε κÏÎŽÎ¹ÎºÎ±Ï HTML ÏÏο αÏÏείο ÏοÏ
ΌεÏαÏοÏÏÏΞηκε (%s)...ÏÏÏβληΌα αΜακαÏεÏΞÏ
ΜÏÎ·Ï Î¯ÏÏÏ; ΠΌεÏαÏÏÏÏÏÏη Ξα εÏαΜεκκιΜήÏει." -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "΀ο αÏÏείο είΜαι ÏÏοÏÏÏιΜά Όη ΎιαΞÎÏιΌο" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "Netload: αΜαΌοΜή ΌεÏÎ±ÎŸÏ ÏÏΜ λήÏεÏΜ %d s." -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "Netload: αΜαΌοΜή για captcha %d s." -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "΀ο ληÏΞÎΜ αÏÏείο ήÏαΜ άΎειο" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "΀ο κλειΎί API ΎεΜ είΜαι ÎγκÏ
Ïο" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "%s: ÎεΜ αÏÎΌειΜε αÏκεÏή κίΜηÏη ΎεΎοΌÎΜÏΜ" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "Î¥ÏÎÏβαÏη οÏίοÏ
κίΜηÏÎ·Ï ÎŽÎµÎŽÎ¿ÎŒÎΜÏΜ" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "Rapidshare: Traffic Share (αÏεÏ
ÎžÎµÎ¯Î±Ï Î»Î®Ïη)" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "ÎαÏεβάζεÏε ήΎη αÏÏ Î±Ï
Ïή Ïη ΎιεÏΞÏ
ΜÏη ÎΡ, αΜαΌοΜή 60 ΎεÏ
ÏεÏολÎÏÏÏΜ" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "Îη ÎγκÏ
ÏÎ¿Ï ÎºÏÎŽÎ¹ÎºÎ±Ï , η λήÏη Ξα γίΜει εÏαΜεκκίΜηÏη" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "RapidShareCom: ÎεΜ Ï
ÏάÏÏοÏ
Μ ελÎÏ
ΞεÏα slots" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "ΧÏειάζεÏÏε ÎΜαΜ λογαÏιαÏÎŒÏ premium για αÏ
ÏÏ Ïο αÏÏείο" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "΀ο ÏΜοΌα αÏÏείοÏ
αΜαÏÎÏΞηκε ÏÏ ÎŒÎ· ÎγκÏ
Ïο" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "ΣÏάλΌα ÏαÏ
ÏÏÏÏÎ¿ÎœÎ·Ï Î»Î®ÏηÏ, αΜαΌοΜή 60s." -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "ÎεΜ ÎÏεÏε ÏÏ
ΜΎεΞεί." -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "ΠαÏοκÏÏ
ÏÏογÏάÏηÏη αÏÎÏÏ
Ïε" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "ΠΎιεÏΞÏ
ΜÏη URL ΎεΜ ÏαÏείÏε καΜÎΜα κλειΎί αÏÏείοÏ
" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "ÎÏΎικÏÏ ÏÏάλΌαÏοÏ:" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "΀ο αÏÏείο ΎεΜ Ï
ÏάÏÏει" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "*** ΀α ÏÏÏÏΞεÏα ÎÏοÏ
Μ αΜαβαΞΌιÏÏεί, ÏαÏÎ±ÎºÎ±Î»Ï ÎµÏαΜεκκιΜήÏÏε Ïο pyLoad ***" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "΀α ÏÏÏÏΞεÏα αΜαβαΞΌίÏÏηκαΜ και ΟαΜαÏοÏÏÏΞηκαΜ" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "ÎεΜ Ï
ÏάÏÏοÏ
Μ αΜαβαΞΌίÏÎµÎ¹Ï Î³Î¹Î± Ïα ÏÏÏÏΞεÏα" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "ÎεΜ βÏÎΞηκε αΜαβάΞΌιÏη για Ïο pyLoad" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "*** ÎίΜαι ΎιαΞÎÏιΌη Όια καιΜοÏÏια ÎκΎοÏη (%s) ÏοÏ
pyLoad ***" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "*** ÎαÏεβάÏÏε αÏο εΎÏ: http://pyload.org/download ***" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "ÎÎŽÏ
ΜαΌία ÏÏΜΎεÏÎ·Ï ÏÏοΜ κεΜÏÏÎ¹ÎºÏ ÎŽÎ¹Î±ÎºÎ¿ÎŒÎ¹ÏÏή για ÎλεγÏο εΜηΌεÏÏÏεÏΜ" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "ÎÎα ÎκΎοÏη ÏοÏ
%(type)s | %(name)s : %(version).2f" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "ΣÏάλΌα καÏά ÏηΜ αΜαβάΞΌιÏη ÏοÏ
%s" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "ÎÏÏ
ÎŒÏÏΜία ÎκΎοÏηÏ" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "ΠλήÏη ολοκληÏÏΞηκε: %(name)s @ %(plugin)s " -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "ÎίÏηÏη για ΜÎο Captcha: %s" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "ÎÏάΜÏηÏη Όε 'c %s κείΌεΜο για Ïο captcha'" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "ΠαÏÎ±ÎºÎ±Î»Ï ÏÏοÏΞÎÏÏε ÏÏÏÏα ÏοΜ λογαÏÎ¹Î±ÎŒÏ ÏÎ±Ï ÏÏο premium.to και εÏαΜεκκιΜήÏÏε Ïο pyLoad" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "Î ÏοÏÏÎΞηκε Ïο %s αÏÏ HotFolder" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "ÎεΜ ÎÏει εγκαÏαÏÏαΞεί Ïο %s" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "ÎÏοÏÏ
Ïία εΜεÏγοÏοίηÏÎ·Ï ÏοÏ
%s" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "ÎΜεÏγοÏοιήΞηκε" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "ÎεΜ ÎÏοÏ
Μ εΜεÏγοÏοιηΞεί ÏÏÏÏΞεÏα για αÏοÏÏ
ÎŒÏίεÏη" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "΀ο ÏακÎÏο %s ÎÏει ÎŽÏοΌολογηΞεί για αÏοÏÏ
ÎŒÏίεÏη αÏγÏÏεÏα" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "ÎλεγÏÎ¿Ï ÏοÏ
ÏακÎÏοÏ
%s" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "ÎÏοÏÏ
ÎŒÏίεÏη ÏÏο %s" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "ÎεΜ βÏÎΞηκαΜ αÏÏεία για αÏοÏÏ
ÎŒÏίεÏη" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "αÏοÏÏ
ÎŒÏιÎζεÏαι" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "Î ÏοÏÏαÏεÏ
ÎŒÎΜο Όε κÏΎικÏ" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "ÎÎ¬ÎžÎ¿Ï ÎºÏΎικÏÏ" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "ÎιαγÏαÏή %s αÏÏείÏΜ" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "ΠαÏοÏÏ
ÎŒÏίεÏη ÏελείÏÏε" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "ΣÏάλΌα ÏÏο ÏÏ
ÎŒÏιεÏÎŒÎΜο αÏÏείο" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "ÎÏÏ
ÎŒÏÏΜία CRC" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "ÎγΜÏÏÏο ΣÏάλΌα" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "ΠοÏιÏÎŒÏÏ ÏοÏ
ΧÏήÏÏη και ÏÎ·Ï ÎÎŒÎ¬ÎŽÎ±Ï Î±ÏÎÏÏ
ÏαΜ" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "Click'N'Load: ΠΞÏÏα 9666 ÏÏηÏιΌοÏοιείÏαι ήΎη" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "αÏοΌÎΜοÏ
Μ %s ÏÏΜÏοι" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "ÎÏοÏÏ
Ïία αÏοÏÏÎ¿Î»Î®Ï Î±ÏάΜÏηÏηÏ." -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "ΠλογαÏιÏÎŒÏÏ ÏÎ±Ï CaptchaTrader ΎεΜ ÎÏει αÏκεÏοÏÏ ÏÏΜÏοÏ
Ï" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "ΠλίÏÏα Crypter ΎεΜ βÏÎΞηκε" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "ΠλίÏÏα Crypter είΜαι κεΜή" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "ΠλήÏη ολοκληÏÏΞηκε: %(name)s @ %(plugin)s" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "ÎÎο CaptchaID αÏÏ Ïη ΌεÏαÏÏÏÏÏÏη: %s : %s" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "ΠλογαÏιαÏÎŒÏÏ ÏÎ±Ï Captcha 9kw.eu ΎεΜ ÎÏει αÏκεÏοÏÏ ÏÏΜÏοÏ
Ï" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "ÎγκαÏεÏÏηΌÎΜα αÏÏεία εΜÏολÏΜ για Ïο %s: " -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "΀ο αÏÏείο εΜÏολÏΜ ΎεΜ είΜαι εκÏελÎÏιΌο:" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "ΣÏάλΌα ÏÏο %(script)s: %(error)s" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "ΠλογαÏιαÏÎŒÏÏ ÏÏο ExpertDecoders ΎεΜ ÎÏει αÏκεÏοÏÏ ÏÏΜÏοÏ
Ï" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "ΠαÏÎ±ÎºÎ±Î»Ï ÏÏοÏΞÎÏÏε ÏÏÏÏα ÏοΜ λογαÏÎ¹Î±ÎŒÏ ÏÎ±Ï ÏÏο rehost.to και εÏαΜεκκιΜήÏÏε Ïο pyLoad" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "ΠαÏÎ±ÎºÎ±Î»Ï ÏÏοÏΞÎÏÏε ÏÏÏÏα ÎΜαΜ ÎγκÏ
Ïο λογαÏÎ¹Î±ÎŒÏ ÏÏο premiumize.me και εÏαΜεκκιΜήÏÏε Ïο pyLoad." -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "αÏοΌÎΜοÏ
Μ %d ÏÏΜÏοι" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "΀ο PIL και Ïο tesseract ΎεΜ είΜαι εγκαÏαÏÏηΌÎΜα και ΎεΜ Ï
ÏάÏÏει ÏÏÏγÏαΌΌα-ÏελάÏÎ·Ï ÏÏ
ΜΎεΌÎÎœÎ¿Ï Î³Î¹Î± αÏοκÏÏ
ÏÏογÏάÏηÏη captcha" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "Î ÏÏΞΌιÏη ÏÏηÏÏÏΜ και οΌάΎÏΜ αÏÎÏÏ
Ïε: %s" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "Î ÏοÏÏÎΞηκαΜ %(count)d ÏÏΜΎεÏΌοι ÏÏο ÏακÎÏο #%(package)d " -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "ÎαΌία ΌηÏαΜή js ΎεΜ βÏÎΞηκε, ÏαÏÎ±ÎºÎ±Î»Ï ÎµÎ³ÎºÎ±ÏαÏÏήÏεÏε Όια αÏο ÏÎ¹Ï ÏαÏακάÏÏ Spidermonkey, ossp-js, pyv8, rhino " diff --git a/locale/el/LC_MESSAGES/pyLoadCli.po b/locale/el/LC_MESSAGES/pyLoadCli.po index 52d49be62..bec3abe08 100644 --- a/locale/el/LC_MESSAGES/pyLoadCli.po +++ b/locale/el/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "ÎιαÏÏΜΎεÏη ÎÏÎ±ÎŒÎŒÎ®Ï ÎΜÏολÏΜ" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "%s ÎήÏειÏ:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "΀αÏÏÏηÏα:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "ÎÎγεΞοÏ:" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "ÎλοκλήÏÏÏη Ïε: " -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "αΜαΌοΜή: " -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "ÎαÏάÏÏαÏη:" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "Ïε ÏαÏÏη" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "εκÏελείÏαι" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "ÏÏ
Μολική ÏαÏÏÏηÏα" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "ÎÏÏεία ÏÏηΜ οÏ
Ïά" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "ΣÏΜολο" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr " ÎεΜοÏ:" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr " Î ÏοÏΞήκη ΣÏ
ΜΎÎÏÎŒÏΜ" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr " ÎιαÏείÏιÏη ÎÏ
ÏάÏ" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr " ÎιαÏείÏιÏη ΣÏ
λλÎκÏη " -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr " ÎΜεÏγοÏοίηÏη/ÎÎŽÏαΜοÏοίηÏη" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr " ΀εÏΌαÏιÏÎŒÏÏ ÎιακοΌιÏÏή" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr " ÎΟοΎοÏ" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "ΧÏήÏη Όε: add <Package name> <link> <link2> ..." -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "ÎλεγÏÎ¿Ï %d ÏÏ
ΜΎÎÏÎŒÏΜ:" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "΀ο αÏÏείο ΎεΜ Ï
ÏάÏÏει." -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "΀ο pyLoad ÏεÏΌαÏίÏÏηκε" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "ÎÎŒÏαΜίζει ÏηΜ καÏάÏÏαÏη ÏοÏ
ΎιακοΌιÏÏή" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "ÎÎŒÏαΜίζει ÏÎ¹Ï Î»Î®ÏÎµÎ¹Ï Ïε οÏ
Ïά" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "ÎÎŒÏαΜίζει ÏÎ¹Ï Î»Î®ÏÎµÎ¹Ï ÏÏο ÏÏ
λλÎκÏη" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "Î ÏοÏΞÎÏει Ïο ÏακÎÏο ÏÏηΜ οÏ
Ïά" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "Î ÏοÏΞÎÏει Ïο ÏακÎÏο ÏÏο ÏÏ
λλÎκÏη" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "ÎιαγÏαÏή αÏÏείοÏ
αÏÏ ÎÏ
Ïά/ΣÏ
λλεκÏη" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "ÎιαγÏαÏή ÏακÎÏÏΜ αÏÏ ÎÏ
Ïά/ΣÏ
λλÎκÏη" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "ÎεÏακίΜηÏη ÏακÎÏÏΜ αÏÏ ÏηΜ ÎÏ
Ïά ÏÏο ΣÏ
λλÎκÏη και αΜÏίÏÏÏοÏα" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "ÎÏαΜεκκίΜηÏη αÏÏείÏΜ" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "ÎÏαΜεκκίΜηÏη ÏακÎÏÏΜ" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "ÎλεγÏÎ¿Ï ÎºÎ±ÏάÏÏαÏÎ·Ï ÏÏΜΎεÏηÏ. ÎειÏοÏ
Ïγεί Όε ÏοÏικά container" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "ÎλεγÏÎ¿Ï ÎºÎ±ÏάÏÏαÏÎ·Ï ÏÏΜΎεÏÎ·Ï ÎµÎœÏÏ Î±ÏÏείοÏ
container" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "ΠαÏÏη ÏοÏ
ΎιακοΌιÏÏή" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "ÏÏ
ΜÎÏιÏη λήÏεÏΜ" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "ÎΜαλλαγή ÏαÏÏηÏ/εκÏÎλεÏηÏ" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "ÏεÏΌαÏιÏÎŒÏÏ ÎŽÎ¹Î±ÎºÎ¿ÎŒÎ¹ÏÏή" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "ÎίÏÏα εΜÏολÏΜ:" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "ÎÎŽÏ
ΜαΌία εγγÏαÏÎ®Ï ÏοÏ
αÏÏείοÏ
ÏÏ
ΞΌίÏεÏΜ ÏοÏ
ÏÏήÏÏη" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "ÎÏαιÏείÏαι Ïο py-openssl για ÏÏΜΎεÏη Ïε αÏ
ÏÏΜ Ïο pyLoad Core." -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "ÎιεÏΞÏ
ΜÏη:" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "ÎÏÏα:" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "ÎΜοΌα ÏÏήÏÏη:" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "ÎÏΎικÏÏ ÏÏήÏÏη:" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "΀α ÏÏοιÏεία ÏÏΜΎεÏÎ·Ï ÎµÎ¯ÎœÎ±Î¹ λάΞοÏ." -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "ÎÎŽÏ
ΜαΌία ÏÏΜΎεÏÎ·Ï ÏÏη ΎιεÏΞÏ
ΜÏη %(addr)s:%(port)s." -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "ÎÏαιÏείÏαι Ïο py-openssl για ÏÏΜΎεÏη Ïε αÏ
ÏÏΜ ÏοΜ pyLoad Core." -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "H αλληλεÏιΎÏαÏÏική λειÏοÏ
Ïγία αγΜοήΞηκε εÏÏÏοΜ ÎŽÏÏαÏε κάÏÎ¿Î¹ÎµÏ ÎµÎœÏολÎÏ." -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "Î ÏοÏΞήκη ΠακÎÏοÏ
:" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "ÎιÏάγεÏε ÏΜοΌα για Ïο καιΜοÏÏγιο ÏακÎÏο" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "ΠακÎÏο: %s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "ÎΜάλÏ
Ïη ÏÏΜ ÏÏ
ΜΎÎÏÎŒÏΜ ÏοÏ
ΞÎλεÏε Μα ÏÏοÏΞÎÏεÏε. " -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "ΠληκÏÏολογείÏÏε %s ÏÏαΜ ÏελειÏÏεÏε. " -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "ΣÏΜΎεÏΌοι ÏοÏ
ÏÏοÏÏÎΞηκαΜ:" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "εÏιÏÏÏοÏή ÏÏο αÏÏÎ¹ÎºÏ ÎŒÎµÎœÎ¿Ï" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "ÎιαÏείÏιÏη ÏακÎÏÏΜ:" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "ÎιαÏείÏιÏη ΣÏ
ΜΎÎÏÎŒÏΜ:" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "΀ι ΞÎλεÏε Μα ΌεÏακιΜήÏεÏε;" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "΀ί ΞÎλεÏε Μα ΎιαγÏάÏεÏε;" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "΀ί ΞÎλεÏε Μα εÏαΜεκκιΜήÏεÏε;" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "ÎÏιλÎΟÏε εΜÎÏγεια ή ÏληκÏÏολογήÏÏε αÏÎ¹ÎžÎŒÏ ÏακÎÏοÏ
." -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "ΎιαγÏαÏή" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "ΌεÏακίΜηÏη" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "εÏαΜεκκίΜηÏη" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr " - ÏÏοηγοÏΌεΜο" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr " - εÏÏΌεΜο" diff --git a/locale/el/LC_MESSAGES/setup.po b/locale/el/LC_MESSAGES/setup.po index 0f9903201..0a5ba97a6 100644 --- a/locale/el/LC_MESSAGES/setup.po +++ b/locale/el/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "ÎαλÏÏ Î®Î»ÎžÎ±Ïε ÏÏο ÎÎ¿Î·ÎžÏ Î¡ÏΞΌιÏÎ·Ï ÏοÏ
pyLoad" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "Îα γίΜει ÎλεγÏÎ¿Ï ÎºÎ±Î¹ βαÏική ÏÏΞΌιÏη ÏοÏ
ÏÏ
ÏÏήΌαÏÏÏ ÏαÏ, ÏÏÏε Μα εκÏελεÏÏεί Ïο pyLoad." -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "Î ÏιΌή ÏÏÎ¹Ï Î±Î³ÎºÏÎ»ÎµÏ [] είΜαι ÏάΜÏα η ÏÏοεÏιλεγΌÎΜη ÏιΌή," -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "Ïε ÏεÏίÏÏÏÏη ÏοÏ
ΎεΜ εÏιΞÏ
ΌείÏε αλλαγή ή αΌÏιβάλλεÏε για ÏηΜ εÏιλογή ÏαÏ, αÏλά ÏαÏήÏÏε enter. " -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "ÎηΜ ΟεÏΜάÏε: ÎÏοÏείÏε ÏάΜÏα Μα εκÏελÎÏεÏε ΟαΜά ÏοΜ ÎοηΞÏ, ειÏάγοΜÏÎ±Ï Ïη ÏαÏάΌεÏÏο --setup ή -s, καÏά ÏηΜ εκÏÎλεÏη ÏοÏ
pyload.py ." -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "ÎΜ αΜÏιΌεÏÏÏίÏεÏε ÏÏοβλήΌαÏα Όε Ïο ÎοηΞÏ, ÏαÏήÏÏε CTRL-C," -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "για Μα εγκαÏαλείÏεÏε και Μα αÏοÏÏÎÏεÏε ÏηΜ αÏ
ÏÏΌαÏη εκÏÎλεÏή ÏοÏ
." -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "ÎÏαΜ είÏÏε ÎÏÎ¿Î¹ÎŒÎ¿Ï Î³Î¹Î± ÏοΜ ÎλεγÏο ÏοÏ
ÏÏ
ÏÏήΌαÏοÏ, ÏαÏήÏÏε enter." -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "ÎÏαιÏοÏΜÏαι Ïα pycurl, sqlite και python 2.5, 2.6 ή 2.7 για Μα εκÏελÎÏεÏε Ïο pyLoad." -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "ΠαÏÎ±ÎºÎ±Î»Ï ÎºÎ¬ÎœÎµÏε ÏÎ¹Ï ÎŽÎ¹Î¿ÏΞÏÏÎµÎ¹Ï ÎºÎ±Î¹ εκÏελÎÏÏε ΟαΜά Ïο pyLoad." -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "ΠεγκαÏάÏÏαÏη Ξα ÏεÏΌαÏιÏÏεί." -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "Î ÎλεγÏÎ¿Ï ÏοÏ
ÏÏ
ÏÏήΌαÏÎ¿Ï Î¿Î»Î¿ÎºÎ»Î·ÏÏΞηκε, ÏαÏήÏÏε Ïο enter για Μα ΎείÏε Ïα αÏοÏελÎÏΌαÏα." -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "## ÎαÏάÏÏαÏη ##" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "αÏοκÏÏ
ÏÏογÏάÏηÏη ÏεÏιεÏÏΌεΜοÏ
" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "ÏÏΜΎεÏη ssl" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "αÏ
ÏÏΌαÏη αÏοκÏÏ
ÏÏογÏάÏηÏη captcha" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "ÎιεÏαÏή ιÏÏοÏ" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "ΧαÏακÏηÏιÏÏικά ΎιαΞÎÏιΌα:" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "ΧαÏακÏηÏιÏÏικά ÏοÏ
λείÏοÏ
Μ:" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "ΎεΜ είΜαι ΎιαΞÎÏιΌο Ïο py-crypto" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "ÎÏ
ÏÏ Î±ÏαιÏείÏαι αΜ ΞÎλεÏε Μα αÏοκÏÏ
ÏÏογÏαÏήÏεÏε αÏÏεία container." -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "ΎεΜ είΜαι ΎιαΞÎÏιΌο Ïο SSL" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "ÎÏ
ÏÏ Î±ÏαιÏείÏαι για ÏηΜ ÏÏαγΌαÏοÏοίηÏη αÏÏÎ±Î»Î®Ï ÏÏΜΎεÏÎ·Ï ÎŒÎµ ÏοΜ ÏÏ
ÏήΜα ή Ïο Webιnterface." -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "ÎΜ ΞÎλεÏε Μα ÎÏεÏε ÏÏÏÏβαÏη ÎŒÏΜο ÏοÏικά ÏÏο pyLoad, Ïο ssl ΎεΜ είΜαι ÏÏήÏιΌο." -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "ΎεΜ Ï
ÏάÏÏει ΎιαΞÎÏιΌη αΜαγΜÏÏιÏη Captcha" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "ΧÏειάζεÏαι ÎŒÏΜο αÏÏ ÎŒÎµÏικοÏÏ ÎŽÎ¹Î±ÎºÎ¿ÎŒÎ¹ÏÏÎÏ ÎŽÎ¹Î±ÎŒÎ¿Î¹ÏαÏÎŒÎ¿Ï Î±ÏÏείÏΜ και ÏαΜ ÎŽÏÏεάΜ ÏÏήÏÏηÏ." -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "΀ο GUI ΎεΜ είΜαι ΎιαΞÎÏιΌο" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "΀ο ÎÏαÏÎ¹ÎºÏ Î ÎµÏιβάλλοΜ ΧÏήÏÏη." -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "ΎεΜ βÏÎΞηκε ΌηÏαΜή JavaScript" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "Îα Ïο ÏÏειαÏÏείÏε για ΌεÏικοÏÏ ÏÏ
ΜΎÎÏΌοÏ
Ï Click'N'Load. ÎγκαÏαÏÏήÏÏε Spidermonkey, ossp-js, pyv8 ή rhino" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "ÎΜ ΞÎλεÏε ÎŒÏοÏείÏε Μα ακÏ
ÏÏÏεÏε ÏηΜ εγκαÏάÏÏαÏη ÏÏÏα και Μα ΎιοÏΞÏÏεÏε κάÏÎ¿Î¹ÎµÏ ÎµÎŸÎ±ÏÏήÏειÏ." -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "ΣÏ
ΜÎÏιÏη Όε ÏηΜ εγκαÏάÏÏαÏη;" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "ÎÎλεÏε Μα αλλάΟεÏε Ïη ΎιαΎÏοΌή ÏοÏ
αÏÏείοÏ
αÏοΞήκεÏ
ÏÎ·Ï ÏÏΜ ÏÏ
ΞΌίÏεÏΜ; Î ÏÏÎÏοÏ
Ïα είΜαι %s" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "ÎΜ ÏÏηÏιΌοÏοιήÏε Ïο pyLoad Ïε εΟÏ
ÏηÏεÏηÏή ή Ïο ΎιαΌÎÏιÏΌα home βÏίÏκεÏαι Ïε εÏÏÏεÏική ΌΜήΌη flash, Ξα ήÏαΜ καλή ιΎÎα Μα Ïο αλλάΟεÏε." -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "Îλλαγή ΎιαΎÏÎ¿ÎŒÎ®Ï Î±ÏοΞήκεÏ
ÏÎ·Ï Î±ÏÏείοÏ
ÏÏ
ΞΌίÏεÏΜ;" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "ÎÎλεÏε Μα οÏίÏεÏε ÏÏοιÏεία ÏÏΜΎεÏÎ·Ï ÎºÎ±Î¹ Μα κάΜεÏε ÏÎ¹Ï Î²Î±ÏικÎÏ ÏÏ
ΞΌίÏειÏ;" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "ÎÏ
ÏÏ ÏÏ
ΜιÏÏάÏαι για ÏηΜ ÏÏÏÏη εκÏÎλεÏη." -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "ÎηΌιοÏ
Ïγία βαÏÎ¹ÎºÎ®Ï ÏÏΞΌιÏηÏ;" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "ÎÎλεÏε Μα ÏÏ
ΞΌίÏεÏε Ïο SSL;" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "ΡÏΞΌιÏη SSL;" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "ÎÎλεÏε Μα ÏÏ
ΞΌίÏεÏε Ïο ÏεÏιβάλλοΜ Web;" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "ΡÏΞΌιÏη ÏοÏ
Web Interface;" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "ΠεγκαÏάÏÏαÏη ολοκληÏÏΞηκε Όε εÏιÏÏ
Ïία." -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "ΠαÏήÏÏε Enter για Μα εΟÎλΞεÏε και Μα εÏαΜεκκιΜήÏεÏε Ïο pyLoad" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "## ÎλεγÏÎ¿Ï Î£Ï
ÏÏήΌαÏÎ¿Ï ##" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "Î ÎκΎοÏη ÏÎ·Ï python ÏοÏ
ÏÏηÏιΌοÏοιείÏε είΜαι ÏÎ¿Î»Ï ÎœÎα, ÏαÏÎ±ÎºÎ±Î»Ï ÏÏηÏιΌοÏοιήÏÏε Python 2.6/2.7" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "Î ÎκΎοÏη ÏÎ·Ï python ÏοÏ
ÏÏηÏιΌοÏοιείÏε είΜαι ÏÎ¿Î»Ï Ïαλιά, ÏαÏÎ±ÎºÎ±Î»Ï ÏÏηÏιΌοÏοιήÏÏε ÏοÏ
λάÏιÏÏοΜ Python 2.5" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "ÎκΎοÏη Python: ÎÎ" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "Î ÎκΎοÏη %s ÏοÏ
jinja2 ÏοÏ
ÎÏεÏε εγκαÏεÏÏηΌÎΜη ÏαίΜεÏαι ÏÎ¿Î»Ï Ïαλιά." -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "ÎÏοÏείÏε Μα ÏÏ
ΜεÏίÏÏε, αλλά αΜ ΎεΜ ΎοÏ
λεÏει Ïο Web Interface," -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "ÏαÏÎ±ÎºÎ±Î»Ï Î±ÎœÎ±Î²Î±ÎžÎŒÎ¯ÏÏε Ïο ή αÏεγκαÏαÏÏήÏÏε Ïο, Ïο pyLoad ÏÏ
ÎŒÏεÏιλαΌβάΜει Όια εÏαÏκή βιβλιοΞήκη jinja2." -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "ÎηÏαΜή JS" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "## ÎαÏική ÎγκαÏάÏÏαÏη ##" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "΀α ακÏλοÏ
Ξα ÏÏοιÏεία ÏÏΜΎεÏÎ·Ï ÎµÎ¯ÎœÎ±Î¹ ÎγκÏ
Ïα για Ïη ÎÏαΌΌή ÎΜÏολÏΜ, Ïο GUI και Ïο ÏεÏιβάλλοΜ Web." -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "ÎΜοΌα ΧÏήÏÏη" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "Îι εΟÏÏεÏικοί ÏελάÏÎµÏ (για Ïο GUI, Ïη ÎÏαΌΌή εΜÏολÏΜ ή άλλο) ÏÏειάζοΜÏαι αÏοΌακÏÏ
ÏÎŒÎΜη ÏÏÏÏβαÏη για Μα λειÏοÏ
ÏγήÏοÏ
Μ ÎŒÎÏÏ ÎŽÎ¹ÎºÏÏοÏ
." -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "ÎÎŒÏÏ, αΜ ΞÎλεÏε Μα Μα ÏÏηÏιΌοÏοιήÏεÏε ΌοΜο Ïο Web Interface, ÎŒÏοÏείÏε Μα Ïο αÏεΜεÏγοÏοιήÏεÏε για Μα γλÏ
ÏÏÏεÏε RAM." -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "ÎΜεÏγοÏοίηÏη αÏοΌακÏÏ
ÏÎŒÎÎœÎ·Ï ÏÏÏÏβαÏηÏ" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "ÎλÏÏÏα" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "ÎŠÎ¬ÎºÎµÎ»Î¿Ï ÎŒÎµÏαÏοÏÏÏÏεÏΜ" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "ÎÎγιÏÏÎ¿Ï Î±ÏιΞΌÏÏ ÏαÏ
ÏÏÏÏοΜÏΜ λήÏεÏΜ" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "ΧÏήÏη ÎÏαΜαÏÏΜΎεÏηÏ;" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "΀οÏοΞεÏία αÏÏείοÏ
εΜÏολÏΜ εÏαΜαÏÏΜΎεÏηÏ" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "## ÎγκαÏάÏÏαÏη ΠεÏιβάλλοΜÏÎ¿Ï Web ##" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "ÎΜεÏγοÏοίηÏη ÏεÏιβάλλοΜÏÎ¿Ï Web;" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "ÎιεÏΞÏ
ΜÏη ÏοÏ
Ξα \"ακοÏει\". ÎΜ ÏÏηÏιΌοÏοιήÏεÏε 127.0.0.1 ή localhost, Ïο ÏεÏιβάλλοΜ Web Ξα είΜαι ÏÏοÏβάÏιΌο ÎŒÏΜο ÏοÏικά." -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "ÎιεÏΞÏ
ΜÏη" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "ÎÏÏα" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "΀ο pyLoad ÏÏοÏÏÎÏει αÏκεÏoÏÏ ÎŽÎ¹Î±ÎºÎ¿ÎŒÎ¹ÏÏÎÏ Ï
ÏοÏÏήÏιΟηÏ. ÎκολοÏ
Ξεί ÏÏΜÏοΌη εÏεΟήγηÏη." -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "Î ÏοεÏιλεγΌÎÎœÎ¿Ï ÎŽÎ¹Î±ÎºÎ¿ÎŒÎ¹ÏÏήÏ, η καλÏÏεÏη εÏιλογή αΜ ΎεΜ γΜÏÏίζεÏε ÏοιοΜ Μα ΎιαλÎΟεÏε." -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "ÎÏ
ÏÏÏ Î¿ ΎιακοΌιÏÏÎ®Ï Ï
ÏοÏÏηÏίζει SSL και είΜαι καλή εΜαλλακÏική λÏÏη Ïε ÏÏÎÏη Όε ÏοΜ ÏÏοεÏιλεγΌÎΜο." -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "ÎÏοÏεί Μα ÏÏηÏιΌοÏοιήΞεί αÏÏ ÏοΜ apache και Ïο lighttpd, αÏαιÏείÏαι ÏαÏαΌεÏÏοÏοίηÏη, η οÏοία ΎεΜ είΜαι ÏÎ¿Î»Ï ÎµÏκολη." -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "Î Î¿Î»Ï Î³ÏήγοÏη εΜαλλακÏική λÏÏη, γÏαΌΌÎΜη Ïε C, αÏαιÏεί libev και γΜÏÏÎµÎ¹Ï linux." -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "ÎαÏεβάÏÏε Ïο αÏÏ ÎµÎŽÏ: https://github.com/jonashaag/bjoern, κάΜÏε Ïο compile," -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" -msgstr "και αΜÏιγÏάÏÏε Ïο bjoern.so ÏÏο module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" +msgstr "και αΜÏιγÏάÏÏε Ïο bjoern.so ÏÏο pyload/lib" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "Î ÏοÏοÏή: Σε ÏÏÎ¬ÎœÎ¹ÎµÏ ÏεÏιÏÏÏÏÎµÎ¹Ï Î¿ ÏÏοεÏιλεγΌÎÎœÎ¿Ï ÎŽÎ¹Î±ÎºÎ¿ÎŒÎ¹ÏÏÎ®Ï ÎŽÎµÎœ ΎοÏ
λεÏει. ÎΜ ÏαÏαÏηÏήÏεÏε ÏÏοβλήΌαÏα Όε Ïο Web Interface," -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "εÏιÏÏÏÎÏÏε ÎµÎŽÏ ÎºÎ±Î¹ αλλάΟÏε ÏοΜ Όε ÏοΜ threaded." -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "ÎιακοΌιÏÏήÏ" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "## ÎγκαÏάÏÏαÏη SSL ##" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "ÎκÏελÎÏÏε αÏ
ÏÎÏ ÏÎ¹Ï ÎµÎœÏολÎÏ Î±ÏÏ ÏοΜ Ïάκελο ÏαÏαΌεÏÏοÏοίηÏÎ·Ï ÏοÏ
pyLoad για Μα ΎηΌιοÏ
ÏγήÏεÏε ÏιÏÏοÏοιηÏικά SSL:" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "ÎΜ ÏελειÏÏαÏε και Ïλα ÏήγαΜ καλÏÏ, ÏÏÏα ÎŒÏοÏείÏε Μα εΜεÏγοÏοιήÏεÏε Ïο SSL." -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "ÎΜεÏγοÏοίηÏη SSL;" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "ÎÏιλÎΟÏε εΜÎÏγεια" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "1 - ÎηΌιοÏ
Ïγία/ÎÏεΟεÏγαÏία ÏÏήÏÏη" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "2 - ÎίÏÏα ÏÏηÏÏÏΜ" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "3 - ÎιαγÏαÏή ÏÏήÏÏη" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "4 - ΀εÏΌαÏιÏÎŒÏÏ" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "ΧÏήÏÏεÏ" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "ÎÏιÏÎŒÏÏ ÎºÎ±Î¹ÎœÎ¿ÏÏÎ¹Î±Ï ÎŽÎ¹Î±ÎŽÏÎ¿ÎŒÎ®Ï ÏÏ
ΞΌίÏεÏΜ, ΎεΜ Ξα ΌεÏαÏεÏΞοÏΜ οι ÏÏÎÏοÏ
ÏÎµÏ ÏÏ
ΞΌίÏειÏ!" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "ÎιαΎÏοΌή αÏÏείοÏ
ÏÏ
ΞΌίÏεÏΜ" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "ΠΎιαΎÏοΌή ÏÏ
ΞΌίÏεÏΜ οÏίÏÏηκε, η εγκαÏάÏÏαÏη ÏÏÏα Ξα κλείÏει, ÏαÏÎ±ÎºÎ±Î»Ï ÎºÎ¬ÎœÏε εÏαΜεκκίΜηÏη για Μα ÏÏ
ΜεÏίÏÏε." -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "ΠαÏήÏÏε Enter για ÎΟοΎο." -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "ΠοÏιÏÎŒÏÏ ÏÎ·Ï ÎŽÎ¹Î±ÎŽÏÎ¿ÎŒÎ®Ï ÏÏ
ΞΌίÏεÏΜ αÏÎÏÏ
Ïε: %s" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "%s: λείÏει" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "ÎÏΎικÏÏ ÏÏήÏÏη:" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "ΠκÏΎικÏÏ ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Ï ÎŒÎ¹ÎºÏÏÏ. ΧÏηÏιΌοÏοιήÏÏε ÏοÏ
λάÏιÏÏοΜ 4 ÏαÏακÏήÏεÏ." -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "ÎÏΎικÏÏ (ΟαΜά):" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "Îι κÏΎικοί ΎεΜ ÏαιÏιάζοÏ
Μ" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "Μαι" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "ÏÏÏÏÏ" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "ÏÏι" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "λάΞοÏ" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "ÎαΜΞαÏÎŒÎΜη ειÏαγÏγή" diff --git a/locale/eo/LC_MESSAGES/django.po b/locale/eo/LC_MESSAGES/django.po index 3758d96c9..beb7646ec 100644 --- a/locale/eo/LC_MESSAGES/django.po +++ b/locale/eo/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/eo/LC_MESSAGES/pyLoad.po b/locale/eo/LC_MESSAGES/pyLoad.po index a4012d712..23f1b78f1 100644 --- a/locale/eo/LC_MESSAGES/pyLoad.po +++ b/locale/eo/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "" -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "" -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/eo/LC_MESSAGES/pyLoadCli.po b/locale/eo/LC_MESSAGES/pyLoadCli.po index d098a93a2..10d313833 100644 --- a/locale/eo/LC_MESSAGES/pyLoadCli.po +++ b/locale/eo/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "" diff --git a/locale/eo/LC_MESSAGES/setup.po b/locale/eo/LC_MESSAGES/setup.po index 259ad8543..6eb3fbddd 100644 --- a/locale/eo/LC_MESSAGES/setup.po +++ b/locale/eo/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "" diff --git a/locale/es/LC_MESSAGES/django.po b/locale/es/LC_MESSAGES/django.po index 4c928537a..dd1a7f293 100644 --- a/locale/es/LC_MESSAGES/django.po +++ b/locale/es/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "Solicitud de nuevo Captcha" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "Por favor lee el texto en el captcha." -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "pyLoad se reinició" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "apagado" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "Ãxito" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "encendido" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "¿Estás seguro de que quieres salir de pyLoad?" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "Reiniciar enlace" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "Borrar enlace" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "Por favor, introduce un nombre de paquete." -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "Por favor, haz clic en la posición del captcha correcto." -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "Se produjo un error." -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "La carpeta está vacÃa" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "Fallidos" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "No hay captchas." -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "Las contraseñas no coinciden." -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "Ajustes guardados." -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "Nueva carpeta" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "¿Estás seguro de que quieres reiniciar pyLoad?" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "esperando a %s" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "Descargas activas" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "Inicio" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "Cola" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "Recolector" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "Descargas" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "Registros" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "Configuración" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "Nombre" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "Estado" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "Información" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "Tamaño" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "Progreso" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "Iniciar sesión" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "Usuario" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "Contraseña" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "Tu nombre de usuario y contraseña no coinciden. Por favor inténtalo de nuevo." -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "Para reiniciar tus datos de inicio de sesión o añadir un usuario ejecuta:" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "Borrar terminados" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "Reiniciar Fallidos" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "Carpeta:" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "Contraseña:" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "Editar paquete" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "Editar los detalles del paquete siguiente." -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "Nombre del paquete." -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "Carpeta" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "Nombre de la subcarpeta para estas descargas." -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "Lista de contraseñas usadas para unrar." -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "Enviar" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "Reiniciar" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "Se ha cerrado sesión correctamente." -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "Ruta" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "absoluta" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "relativa" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "nombre" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "tamaño" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "tipo" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "última modificación" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "directorio padre" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "sin contenido" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "General" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "Complementos" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "Cuentas" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "Elige una sección del menú" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "Plugin" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "Premium" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "Válido hasta" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "Tráfico restante" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "Tiempo" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "Máx. en Paralelo" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "¿Borrar?" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "válido" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "inválido" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "sÃ" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "no" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "Añadir" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "Agregar cuenta" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "Introduce los datos de tu cuenta para usar caracterÃsticas premium." -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "Tu nombre de usuario." -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "La contraseña para esta cuenta." -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "Tipo" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "Elige el proveedor de alojamiento para tu cuenta." -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "Iniciar" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "anterior" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "siguiente" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "Fin" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "Novedades" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "Soporte" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "Sistema" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "Python:" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "S.O.:" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "versión de pyLoad:" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "Carpeta de instalación:" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "Carpeta de configuración:" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "Carpeta de descarga:" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "Espacio Libre:" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "Idioma:" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "Puerto de interfaz web:" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "Puerto de interfaz remota:" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "Configuración" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "Administrador de archivos" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "Añadir paquete" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "Pega tus enlaces o carga un archivo contenedor." -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "Nombre del nuevo paquete." -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "Enlaces" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "Pega tus enlaces o cualquier texto aquà y pulsa el botón filtrar." -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "Filtrar urls" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "Contraseña para el archivo-RAR" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "Archivo" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "Cargar contenedor." -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "Destino" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "Leyendo captcha" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "Captcha" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "El captcha." -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "Texto" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "Introduzca el texto en el captcha." -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "Cerrar" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "Interfaz web" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "¡Actualización de pyLoad disponible!" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "Plugins actualizados, ¡por favor reinicia!" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "Esperando captcha" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "Salir" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "Administrar" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "Información" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "¡Por favor, inicie sesión!" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "Parar" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "Cancelar" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "Descarga:" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "Reconectar:" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "Velocidad:" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "Activo:" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "Recargar" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "cargando" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "Volver al principio" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "Salir de pyLoad" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "Reiniciar pyLoad" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "Para añadir un usuario o cambiar contraseñas usa:" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "Importante: ¡El usuario Admin tiene siempre todos los permisos!" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "Cambiar Contraseña" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "Admin" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "Permisos" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "cambiar" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "Introduce tu contraseña actual y la deseada." -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "Usuario" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "Contraseña actual" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "Nueva contraseña" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "La nueva contraseña." -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "Nueva contraseña (repetir)" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "Por favor, repite la nueva contraseña." -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "No tienes permiso para acceder a esta página." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "No se encuentra el directorio de descarga." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "ilimitado" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "no disponible" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "Ejecuta pyload.py -s para acceder a la instalación." diff --git a/locale/es/LC_MESSAGES/pyLoad.po b/locale/es/LC_MESSAGES/pyLoad.po index 6f94da4ff..bd029162f 100644 --- a/locale/es/LC_MESSAGES/pyLoad.po +++ b/locale/es/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "Señal de salida recibida" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "pyLoad ya está ejecutándose con pid %s" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "Cambio de grupo fallido: %s" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "Cambio de usuario fallido: %s" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "carpeta para los registros" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "Iniciando" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "Usando directorio de inicio: %s" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "pycrypto va a decodificar archivos contenedores" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "carpeta para archivos temporales" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "carpeta de descargas" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "OpenSSL para conexión segura" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "Moviendo la configuración antigua de usuario a la BD" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "Por favor, comprueba tus datos de inicio de sesión con ./pyload.py -u" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "Se han eliminado todos los enlaces" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "Tiempo de descarga: %s" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "Espacio libre: %s" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "Activando Cuentas..." -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "Activando Plugins..." -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "pyLoad está funcionando" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "reiniciando pyLoad" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "pyLoad se cierra" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "Instalar %s" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "no se pudo encontrar %(desc)s: %(name)s" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "no se pudo crear %(desc)s: %(name)s" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "apagando..." -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "ha ocurrido un error mientras se apagaba" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "pyload terminado desde el Terminal" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "El archivo de la base de datos fue eliminado por ser de una versión incompatible." -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "El archivo de la base de datos NO pudo convertirse." -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "La base de datos se convirtió de la v2 a la v3." -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "La base de datos se convirtió de la v3 a la v4." -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "Convirtiendo la BD Django antigua" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "Terminado" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "sin conexión" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "en lÃnea" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "en cola" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "omitido" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "esperando" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "temp. sin conexión" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "comenzando" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "fallido" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "abortado" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "descifrando" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "personalizado" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "descargando" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "procesando" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "desconocido" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "Paquete terminado: %s" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "Usando SSL ThriftBackend" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "Error de backend remoto: %s" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "Iniciando %(name)s: %(addr)s:%(port)s" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "Fallo al cargar servidor %(name)s | %(error)s" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "esperando a %s" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "Certificados SSL no encontrados." -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "Lo sentimos, ya no admitimos iniciar %s directamente en pyLoad" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "Puedes utilizar el servidor con hilos que ofrece un buen rendimiento y ssl," -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "por supuesto puedes usar aún tu %s existente con el servidor fastcgi de pyLoad" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" -msgstr "las configuraciones de ejemplo se encuentran en el directorio module/webui/servers" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" +msgstr "las configuraciones de ejemplo se encuentran en el directorio pyload/webui/servers" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "¡No puedes usar %(server)s, python-flup no está instalado!" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "Error importando servidor ligero: %s" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "Debes descargar y compilar bjoern, https://github.com/jonashaag/bjoern" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" -msgstr "Copia el módulo boern.so a la carpeta module/lib o usa la instalación setup.py" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" +msgstr "Copia el módulo boern.so a la carpeta pyload/lib o usa la instalación setup.py" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "Por supuesto debes estar familiarizado con linux y saber cómo compilar software" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "Servidor en modo threaded, debido a problemas de rendimiento en Windows." -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "Este servidor no ofrece SSL, considera el usar el servidor con hilos en su lugar" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "Iniciando servidor web incorporado: %(host)s:%(port)d" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "Iniciando servidor web SSL con hilos : %(host)s:%(port)d" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "Iniciando servidor web con hilos: %(host)s:%(port)d" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "Iniciando servidor fastcgi: %(host)s:%(port)d" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "Iniciando servidor web ligero (bjoern): %(host)s:%(port)d" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "No tienes permiso para acceder a esta página." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "No se encuentra el directorio de descarga." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "ilimitado" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "no disponible" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "Ejecuta pyload.py -s para acceder a la instalación." -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "Descarga por trozos fallida, recurro a una única conexión | %s" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "Iniciando descarga: %s" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "Descarga finalizada: %s" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "Plugin %s no encuentra una función." -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "Descarga abortada: %s" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "Descarga reiniciada: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "Descarga está fuera de servicio: %s" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "La descarga está temporalmente fuera de servicio: %s" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "Descarga fallida: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "No pude conectar al servidor o conexión reiniciada, esperando 1 minuto y reintentando." -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "Descarga omitida: %(name)s debido a %(plugin)s" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "Descifrado comienza en: %s" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "Descifrado fallido: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "Reintentando %s" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "Obtención de información para %(name)s fallida | %(err)s" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "Error ejecutando enlaces: %s" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "Falló la activación de %(name)s" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "Plugins activos: %s" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "Plugins desactivados: %s" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "Reconexión Fallida: %s" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "¡Script de reconexión no encontrado!" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "Iniciando reconexión" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "¡Fallo al ejecutar script de reconexión!" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "Reconectado, nueva dirección IP: %s" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "No hay suficiente espacio libre en el dispositivo" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "No pude iniciar sesión con cuenta %(user)s | %(msg)s" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "Contraseña Incorrecta" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "La hora %s tiene un formato incorrecto, use: 1:22-3:44" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "La cuenta %s no tiene tráfico suficiente, se comprobará otra vez en 30min" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "La cuenta %s ha expirado, comprobando de nuevo en 1 hora" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "Limite de descargas alcanzado" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "%s tiene un patrón inválido." -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "Error importando %(name)s: %(msg)s" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "No se cargó ningún proveedor" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "Activa descarga directa en tu cuenta de Bitshare" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "LinkList no puede ser limpiado." -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "Ajustes de cuenta eliminados, debido al nuevo formato de la configuración." -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "Autorización requerida (usuario:contraseña)" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "Por favor, introduce tu cuenta de %s o desactiva este plugin" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "HabÃa Código HTML en el archivo Descargado (%s)... ¿error de redireccionamiento? La Descarga se reiniciará." -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "Archivo no disponible temporalmente" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "Netload: esperando entre descargas %d s." -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "Netload: esperando captcha %d s." -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "El archivo descargado estaba vacÃo" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "Clave de API inválida" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "%s: No hay suficiente tráfico" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "Tráfico excedido" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "Rapidshare: Tráfico compartido (descarga directa)" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "Ya estás descargando desde esta dirección IP, esperando 60 segundos" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "Código de autenticación inválido, la descarga se reiniciará" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "RapidShareCom: No quedan espacios disponibles" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "Necesitas una cuenta premium para este archivo" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "Nombre de archivo inválido" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "Error con descargas en paralelo, esperando 60s." -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "No has iniciado sesión." -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "Error de descifrado" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "No se proporcionó archivo de clave en la URL" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "Código de error:" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "El archivo no existe." -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "*** Los plugins se han actualizado, por favor reinicie pyLoad ***" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "Plugins actualizados y cargados de nuevo" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "No hay disponibles actualizaciones de plugins" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "No hay actualizaciones de pyLoad" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "*** Nueva versión %s de pyLoad disponible ***" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "*** Descarguela aquÃ: http://pyload.org/download ***" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "No se puede conectar con el servidor para actualizar" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "Nueva versión de %(type)s|%(name)s : %(version).2f" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "Error mientras se actualizaba %s" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "No coincide la versión" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "Descarga finalizada: %(name)s @ %(plugin)s " -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "Nueva Petición de Captcha: %s" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "Conteste con 'c %s texto al captcha'" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "Por favor, añada primero su cuenta premium.to y reinicie pyLoad" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "Añadido %s desde HotFolder" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "%s no instalado" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "No se puede activar %s" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "Activado" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "No se ha activado ningún plugin de extracción" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "Paquete %s encolado para su posterior extracción" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "Comprobar paquete %s" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "Extraer a %s" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "No se encontraron archivos para extraer" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "extrayendo" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "Protegido con contraseña" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "Contraseña errónea" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "Borrando archivos %s" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "Extracción finalizada" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "Error de Archivo" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "El CRC no coincide" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "Error Desconocido" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "Error de configuración de usuario y grupo" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "Click'N'Load: Puerto 9666 ya está en uso" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "%s créditos restantes" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "No se ha podido enviar la respuesta." -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "Su cuenta de CaptchaTrader no tiene créditos suficientes" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "No se ha encontrado lista de cifradores" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "La lista de cifradores está vacÃa" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "Descarga finalizada: %(name)s @ %(plugin)s" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "Nuevo CaptchaID desde carga: %s: %s" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "Su Cuenta Captcha 9kw.eu no tiene suficientes créditos" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "Código instalado para %s: " -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "Código no ejecutable:" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "Error en %(script)s: %(error)s" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "Su cuenta de ExpertDecoders no suficientes créditos" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "Por favor, añada primero su cuenta rehost.to y reinicie pyLoad" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "Por favor, agrega primero una cuenta válida de premiumize.me y reinicia pyLoad." -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "%d créditos restantes" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "Pil y tesseract no están instalados y no hay cliente conectado para descifrar captcha" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "No se obtuvieron resultados para el captcha en el tiempo asignado de ninguno de los plugins." -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "Configuración de usuario y grupo fallida: %s" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "No hay cliente conectado para descifrar el captcha" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "Paquete %(name)s agregado que contiene %(count)d enlaces" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "Agregados %(count)d enlaces al paquete #%(package)d " -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "No se detectó ningún motor de js, por favor instale Spidermonkey, ossp-js, pyv8 o rhino" diff --git a/locale/es/LC_MESSAGES/pyLoadCli.po b/locale/es/LC_MESSAGES/pyLoadCli.po index 1e9fc0af6..527f03c05 100644 --- a/locale/es/LC_MESSAGES/pyLoadCli.po +++ b/locale/es/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr " Interfaz de LÃnea de Comandos" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "%s Descargas:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr " Velocidad: " -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr " Tamaño: " -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr " Finalizado el: " -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr " ID: " -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "esperando: " -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "Estado:" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "pausado" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "ejecutando" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "Velocidad total" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "Ficheros en cola" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "Total" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "Menú:" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr " Añadir enlaces" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr " Administrar Cola" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr " Administrar Recolector" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr " Detener/Reanudar Servidor" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr " Parar servidor" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr " Salir" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "Por favor usa esta sintaxis: add <Package name> <link> <link2> ..." -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "Comprobando %d enlace(s):" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "El archivo no existe." -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "pyLoad ha finalizado" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "Muestra el estado del servidor" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "Muestra las descargas en cola" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "Muestra las descargas en recolector" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "Agregar paquetes a la cola" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "Agrega un paquete al recolector" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "Borrar Archivos de la Cola/Recolector" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "Borrar Paquetes de la Cola/Recolector" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "Mover Paquetes de la Cola al Recolector o viceversa" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "Reiniciar archivos" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "Reiniciar paquetes" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "Comprobar el estado en-linea, trabaja con el contenedor local" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "Comprueba el estado en-linea de un contenedor" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "Pausar el servidor" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "continuar descargas" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "Alternar detener/reanudar" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "parar servidor" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "Lista de comandos:" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "No se puede escribir el archivo de configuración del usuario" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "Necesitas py-openssl para conectar a este Núcleo pyLoad." -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "Dirección: " -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "Puerto: " -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "Usuario: " -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "Contraseña: " -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "Los datos de inicio de sesión son incorrectos." -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "No se puede establecer la conexión a %(addr)s:%(port)s." -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "Necesitas py-openssl para conectar a este núcleo pyLoad." -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "Modo interactivo ignorado ya que pasaste algunas órdenes." -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "Agregar Paquete:" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "Introduce un nombre para el paquete nuevo" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "Paquete: %s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "Analizar los enlaces que quieres añadir." -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "Teclea %s cuando acabes." -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "Enlaces añadidos: " -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr " volver al menú principal" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "Administrar Paquetes:" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "Administrar Enlaces:" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "¿Qué quieres mover?" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "¿Qué quieres borrar?" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "¿Qué quieres reiniciar?" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "Elige lo que quieres hacer o introduce el número de paquete." -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "borrar" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "mover" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "reiniciar" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr " - anterior" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr " - siguiente" diff --git a/locale/es/LC_MESSAGES/setup.po b/locale/es/LC_MESSAGES/setup.po index 9595559bb..223755467 100644 --- a/locale/es/LC_MESSAGES/setup.po +++ b/locale/es/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "s" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "Bienvenido al Asistente de Configuración de pyLoad." -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "Se revisará tu sistema y se hará una configuración básica para ejecutar pyLoad." -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "El valor entre corchetes [] siempre es el valor por defecto," -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "en caso que no quieras cambiarlo o no estés seguro de que opción elegir, solo presiona entrar." -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "No lo olvides: siempre puedes volver a ejecutar este asistente con el parámetro --setup ó -s, cuando inicies pyload.py ." -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "Si tienes algún problema con el asistente presiona Ctrl-C," -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "para abortar y no permitirle volver a iniciarse automáticamente con pyload.py ." -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "Cuando estés listo para la revisión del sistema, presiona entrar." -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "Necesitas pycurl, sqlite y python 2.5, 2.6 ó 2.7 para ejecutar pyLoad." -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "Por favor corrige esto y vuelve a ejecutar pyLoad." -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "El asistente de la instalación se cerrará." -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "La revisión del sistema ha finalizado, presiona entrar para ver el informe de estado." -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "## Estado ##" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "descifrando contenedor" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "conexión SSL" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "descifrado automático de captcha" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "GUI" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "Interfaz web" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "extensión Click'N'Load" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "CaracterÃsticas disponibles:" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "CaracterÃsticas no disponibles: " -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "py-crypto no disponible" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "Necesario si quieres descifrar archivos contenedores." -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "SSL no disponible" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "Esto es necesario si quieres establecer una conexión segura con el núcleo o la interfaz web." -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "SSL no es útil si solamente quieres acceder a pyLoad localmente." -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "reconocimiento de captcha no disponible" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "Solo necesario para algunos servidores y como usuario gratuito." -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "GUI no disponible" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "El Interfaz de Usuario Gráfica." -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "motor de JavaScript no encontrado" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "Necesario para algunos enlaces Click'N'Load. Instala Spidermonkey, ossp-js, pyv8 o rhino" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "Puedes cancelar el asistente ahora y corregir algunas dependencias si quieres." -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "¿Desea continuar con el asistente?" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "¿Quiere cambiar la ruta de configuración? Actualmente es %s" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "Si usas pyLoad en un servidor o la partición primaria reside en una memoria flash interna, puede ser buena idea cambiarla." -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "¿Cambiar la ruta de configuración?" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "¿Quiere configurar los datos de acceso y la configuración básica?" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "Esto se recomienda en la primera ejecución." -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "¿Realizar la configuración básica?" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "¿Quiere configurar SSL?" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "¿Configurar SSL?" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "¿Quiere configurar la interfaz web?" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "¿Configurar la interfaz web?" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "Configuración finalizada con éxito." -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "Pulse entrar para salir y reiniciar pyLoad" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "## Revisión del sistema ##" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "Tu versión de python es demasiado nueva, por favor usa Python 2.6/2.7" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "Tu versión de python es demasiado antigua, por favor usa al menos Python 2.5" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "Versión de Python: OK" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "Tu versión %s jinja2 instalada parece demasiado antigua." -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "Puedes continuar de manera segura aunque la interfaz web no funciona," -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "por favor actualÃcela o desinstálela, pyLoad incluye una biblioteca jinja2 suficiente." -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "Motor JS" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "## Configuración básica ##" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "Los siguientes datos de acceso son válidos para CLI, GUI e interfaz web." -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "Usuario" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "Los clientes externos (GUI, CLI u otros) necesitan acceso remoto para trabajar a través de la red." -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "No obstante, si sólo quieres utilizar interfaz web puedes deshabilitarlo para ahorrar ram." -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "Activar acceso remoto" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "Idioma" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "Directorio de descargas" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "Máximas descargas paralelas" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "¿Usar reconectar?" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "Ubicación del script de reconexión" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "## Configuración de la Interfaz Web ##" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "¿Activar interfaz web?" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "Dirección de escucha, si usas 127.0.0.1 o localhost, la interfaz web solo podrá ser accesible localmente." -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "Dirección" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "Puerto" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "lapyLoad ofrece varios backends de servidor después de una breve explicación." -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "Servidor por defecto, la mejor opción si no sabes cual elegir." -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "Este servidor ofrece SSL y es una buena alternativa al integrado." -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "Puede ser usado por apache, lighttpd, requiere que lo configures, lo cual no es una tarea fácil." -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "Una alternativa muy rápida escrita en C, requiere libev y conocimientos de linux." -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "Obtenlo de aquÃ: https://github.com/jonashaag/bjoern, compÃlalo" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" -msgstr "y copia bjoern.so a module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" +msgstr "y copia bjoern.so a pyload/lib" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "Atención: En algunos casos raros el servidor integrado no funciona, si notas problemas con la interfaz web" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "vuelve aquà y cambia el servidor integrado por el servidor con hilos." -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "Servidor" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "## Configuración de SSL ##" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "Ejecuta estos comandos desde la carpeta de configuración pyLoad para crear los certificados ssl:" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "Si has terminado y todo acabo bien, podrás activar ssl ahora." -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "¿Activar SSL?" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "Elige una acción" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "1 - Crear/Editar usuario" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "2 - Listado de usuarios" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "3 - Eliminar usuario" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "4 - Salir" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "Usuarios" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "Configurando nuevo directorio de configuración, ¡la configuración actual no sera transferida!" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "Directorio de configuración" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "Directorio de configuración cambiado, la instalación se cerrara, por favor reinicia para continuar." -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "Presiona Entrar para salir." -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "Ajuste del directorio de configuración fallido: %s" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "%s: OK" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "%s: perdido" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "Contraseña: " -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "La contraseña es demasiado corta. Use al menos 4 sÃmbolos." -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "Contraseña (de nuevo): " -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "Las contraseñas no coinciden." -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "sÃ" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "verdadero" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "v" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "no" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "falso" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "Entrada no válida" diff --git a/locale/fa/LC_MESSAGES/django.po b/locale/fa/LC_MESSAGES/django.po index d53772faa..7d167ef88 100644 --- a/locale/fa/LC_MESSAGES/django.po +++ b/locale/fa/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/fa/LC_MESSAGES/pyLoad.po b/locale/fa/LC_MESSAGES/pyLoad.po index c2455afea..41ff60bc7 100644 --- a/locale/fa/LC_MESSAGES/pyLoad.po +++ b/locale/fa/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "" -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "" -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/fa/LC_MESSAGES/pyLoadCli.po b/locale/fa/LC_MESSAGES/pyLoadCli.po index 279daef1b..dd7471605 100644 --- a/locale/fa/LC_MESSAGES/pyLoadCli.po +++ b/locale/fa/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr " سرعت: " -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr " ØØ¬Ù
: " -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr " ØŽÙØ§Ø³Ù: " -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "ÙØ¶Ø¹Ûت:" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "در ØØ§Ù اجرا" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "سرعت Ú©Ù" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "ÙØ§ÛÙâÙØ§Û درÙ٠صÙ" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "Ù
جÙ
ÙØ¹" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "Ù
ÙÙ:" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr " اضاÙ٠کرد٠ÙÛÙÚ©" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr " ØšØ³ØªÙ Ø³Ø±ÙØ±" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr " Ø®Ø±ÙØ¬" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "ÙØ§ÛÙ ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯." -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "ØšØ³ØªÙ Ø³Ø±ÙØ±" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "ÙÛØ³Øª Ø¯Ø³ØªÙØ±Ø§Øª:" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "ÙØ§ÛÙ ÙŸÛÚ©Ø±ØšÙØ¯Û کارؚر ÙÙ
ÛâØªÙØ§Ùد ÙÙØŽØªÙ ØŽÙØ¯" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "آدرس: " -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "درگاÙ: " -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "ÙØ§Ù
کارؚرÛ: " -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "رÙ
ز Ø¹ØšÙØ±: " -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "Ø§Ø·ÙØ§Ø¹Ø§Øª ÙØ±Ùد ا؎تؚا٠است." -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "ØšØ±Ø§Û Ø§ØªØµØ§Ù ØšÙ ÙØ³ØªÙâÛ pyLoad ØšÙ py-openssl ÙÛØ§Ø² Ø¯Ø§Ø±ÛØ¯." -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "ÙÛÙÚ©âÙØ§Û اضاÙ٠؎دÙ: " -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "ØØ°Ù" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "Ø§ÙØªÙاÙ" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "راÙâØ§ÙØ¯Ø§Ø²Û Ù
جدد" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr " - ÙØšÙÛ" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr " - ؚعدÛ" diff --git a/locale/fa/LC_MESSAGES/setup.po b/locale/fa/LC_MESSAGES/setup.po index 2a1c9ad75..e9ad35a8a 100644 --- a/locale/fa/LC_MESSAGES/setup.po +++ b/locale/fa/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "رÙ
ز Ø¹ØšÙØ±: " -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "" diff --git a/locale/fi/LC_MESSAGES/django.po b/locale/fi/LC_MESSAGES/django.po index 04089267b..8dac03ec6 100644 --- a/locale/fi/LC_MESSAGES/django.po +++ b/locale/fi/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/fi/LC_MESSAGES/pyLoad.po b/locale/fi/LC_MESSAGES/pyLoad.po index 857d06854..f50353be9 100644 --- a/locale/fi/LC_MESSAGES/pyLoad.po +++ b/locale/fi/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "" -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "" -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/fi/LC_MESSAGES/pyLoadCli.po b/locale/fi/LC_MESSAGES/pyLoadCli.po index 6b2c3e606..d98e4636c 100644 --- a/locale/fi/LC_MESSAGES/pyLoadCli.po +++ b/locale/fi/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "KomentorivikÀyttöliittymÀ" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "%s lataa:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "Nopeus:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "Koko:" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "Valmistunut:" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "Tunnus:" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "odotetaan:" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "Valikko:" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "LisÀÀ linkkejÀ" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr " Jonon hallinta" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr " KerÀÀjÀn hallinta" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "Linkkien hallinta" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "" diff --git a/locale/fi/LC_MESSAGES/setup.po b/locale/fi/LC_MESSAGES/setup.po index 32aba57dd..f7fe897c7 100644 --- a/locale/fi/LC_MESSAGES/setup.po +++ b/locale/fi/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "" diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 09089992d..af432befa 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "Nouvelle demande de captcha" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "Merci de lire le texte du captcha." -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "PyLoad redémarré" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "Eteint" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "SuccÚs" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "Allumé" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "Ãtes-vous vraiment sûr de vouloir quitter pyLoad?" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "Relancer le lien" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "Effacer le lien" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "Merci d'entrer un nom de package." -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "Veuillez cliquer sur le cÃŽté droit du captcha." -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "Une erreur est survenue." -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "Le dossier est vide" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "Ãchoué" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "Aucun captcha à lire." -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "Les mots de passe ne correspondent pas." -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "ParamÚtres enregistrés." -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "Nouveau répertoire" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "Ãtes-vous sûr de vouloir redémarrer pyLoad?" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "attend %s" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "Téléchargements actifs" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "Page principale" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "File d'attente " -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "Paquets" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "Téléchargements" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "Configuration" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "Nom" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "Status" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "Taille" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "Progression" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "Identifiant" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "Nom utilisateur" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "Mot de passe" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "Votre nom d'utilisateur et votre mot de passe ne correspondent pas. Veuillez réessayer." -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "Pour changer votre mot de passe ou ajouter un nouvel utilisateur, exécutez : " -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "Supprimer les liens terminés" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "Redémarrer les liens échoués" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "Dossier :" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "Mot de passe :" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "Modifier le paquet" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "Editer les détails du paquet ci-dessous." -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "Le nom du paquet." -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "Dossier" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "Nom du sous-dossier pour ces téléchargements." -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "Liste des mots de passes utilisés pour décompresser." -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "Valider" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "Réinitialiser" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "Vous êtes désormais déconnecté." -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "Chemin" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "absolu" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "relatif" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "nom" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "taille" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "derniÚre modification" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "dossier parent" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "pas de contenu" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "Général" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "Comptes" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "Sélectionnez une section à partir du menu" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "Plugin" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "Valide jusqu'au" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "Trafic restant" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "Temps" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "Nombre maximum en parallÚle" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "Supprimer ? " -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "valide" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "invalide" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "oui" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "non" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "Ajouter" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "Ajouter un compte" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "Entrez vos informations de compte pour utiliser les fonctionnalités premium." -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "Votre nom d'utilisateur." -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "Le mot de passe pour ce compte." -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "Choisissez l'hébergeur pour ce compte." -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "Démarrer" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "préc" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "suiv" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "Fin" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "Nouvelles" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "SystÚme" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "Python :" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "OS :" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "Version de pyLoad :" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "Dossier d'Installation :" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "Dossier de configuration :" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "Dossier de téléchargement :" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "Espace libre :" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "Langue :" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "Port de l'interface web :" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "Port de l'interface à distance :" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "Configurer" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "Gestionnaire de fichiers" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "Ajouter un paquet" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "Recopiez vos liens ou envoyez un conteneur." -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "Le nom du nouveau paquet." -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "Liens" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "Collez vos liens ici ou n'importe quel texte, et cliquez sur le bouton « Filtrer les URL »." -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "Filtrer les URL" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "Mot de passe de l'archive RAR" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "Fichier" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "Envoyer un conteneur." -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "Destination" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "Lecture du catcha" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "Le captcha." -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "Texte" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "Veuillez taper le texte du captcha." -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "Fermer" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "Interface web" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "Mise à jour de pyLoad disponible !" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "Plugins mis à jour, redémarrez !" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "Captcha en attente" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "Déconnexion" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "Administration" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "Information" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "Veuillez vous connecter !" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "Arrêter" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "Annuler" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "Téléchargement :" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "Reconnexion :" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "Vitesse :" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "Actif :" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "Recharger la page" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "chargement" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "Revenir en haut" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "Quitter pyLoad" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "Redémarrer pyLoad" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "Pour ajouter un utilisateur ou modifier un mot de passe, utilisez :" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "Important : L'utilisateur Admin a tous les droits !" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "Modifier le mot de passe" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "modifier" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "Entrez votre mot de passe actuel et celui souhaité." -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "Utilisateur" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "Mot de passe actuel" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "Nouveau mot de passe" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "Le nouveau mot de passe." -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "Nouveau mot de passe (répéter)" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "S'il vous plaît répétez le nouveau mot de passe." -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "Vous n'avez pas la permission d'accéder à cette page." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "Répertoire de téléchargement introuvable." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "Illimité" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "non disponible" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "Lancez pyload.py -s pour accéder au paramétrage." diff --git a/locale/fr/LC_MESSAGES/pyLoad.po b/locale/fr/LC_MESSAGES/pyLoad.po index cd55bd545..fe56c2bfa 100644 --- a/locale/fr/LC_MESSAGES/pyLoad.po +++ b/locale/fr/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "Signal d'arrêt reçu" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "pyLoad est déjà lancé avec le pid %s" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "Echec lors du changement de groupe: %s" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "Echec lors du changement d'utilisateur: %s" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "dossier des logs" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "Démarrage" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "Utilisation du dossier principal : %s" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "pycrypto pour décoder les fichiers conteneurs" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "dossier des fichiers temporaires" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "dossier des téléchargements" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "OpenSSL pour les connexions sécurisées" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "Déplacement des anciennes configurations utilisateur vers la BDD" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "Vérifiez vos identifiants avec ./pyload.py -u" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "Tous les liens ont été supprimés" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "Temps de téléchargement : %s" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "Espace libre : %s" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "Activation des comptes ..." -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "Activation des Extensions..." -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "pyLoad est opérationnel" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "redémarrage de pyLoad" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "pyLoad se termine" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "Installation %s" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "impossible de trouver %(desc)s: %(name)s" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "impossible de créer %(desc)s: %(name)s" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "arrêt..." -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "erreur lors de l'arrêt" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "pyLoad a été tué depuis le Terminal" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "La base de données des fichiers est incompatible et a été supprimé." -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "La base de données NE peut PAS être convertie." -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "La base de données a été convertie de la v2 vers la v3." -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "La base de données a été convertie de la v3 vers la v4." -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "Conversion de l'ancienne BDD Django" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "fini" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "hors ligne" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "en ligne" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "en file d'attente" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "ignoré" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "en attente" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "temp. hors ligne" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "démarrage" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "échoué" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "annulé" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "décryptage" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "personnalisé" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "téléchargement en cours" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "traitement en cours" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "inconnu" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "Paquet terminé : %s" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "Utilise SSL ThriftBackend" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "Erreur du backend distant: %s" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "Démarre %(name)s: %(addr)s:%(port)s" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "Ãchec du chargement du backend %(name)s | %(error)s" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "attend %s" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "Certificats SSL non trouvés." -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "Désolé, nous avons arrêté le support du démarrage de %s directement dans pyLoad" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "Vous pouvez utiliser le serveur \"threaded\" qui offre de bonnes performances et le ssl," -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "bien sur vous pouvez toujours utiliser vos %s existants avec pyLoads fastcgi server" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" -msgstr "les exemples de configurations sont localisés dans le répertoire module/webui/servers" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" +msgstr "les exemples de configurations sont localisés dans le répertoire pyload/webui/servers" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "Ne peut utiliser %(server)s, python-flup n'est pas installé!" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "Erreur lors de l'importation du serveur léger : %s" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "Vous devez télécharger et compiler bjoern, https://github.com/jonashaag/bjoern" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" -msgstr "Copiez le fichier boern.so dans le dossier module/lib, ou utilisez setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" +msgstr "Copiez le fichier boern.so dans le dossier pyload/lib, ou utilisez setup.py install" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "Ãvidemment vous devez être familier avec Linux et savoir comment compiler un logiciel" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "Serveur placé en mode âthreadedâ, en raison de problÚmes de performances connus sous Windows." -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "Ce serveur ne permet pas la connexion SSL, vous devriez envisager d'utiliser le mode âthreadedâ à la place" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "Démarrage serveur web interne: %(host)s:%(port)d" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "Démarrage serveur web SSL : %(host)s:%(port)d" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "Démarrage serveur web : %(host)s:%(port)d" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "Démarrage serveur webfastcgi : %(host)s:%(port)d" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "Démarrage du serveur léger (bjoern) : %(host)s:%(port)d" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "Vous n'avez pas la permission d'accéder à cette page." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "Répertoire de téléchargement introuvable." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "Illimité" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "non disponible" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "Lancez pyload.py -s pour accéder au paramétrage." -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "Téléchargement par blocs échoué, repli vers une seule connexion | %s" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "Le téléchargement commence : %s" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "Téléchargement terminé : %s" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "Il manque une fonction au plugin %s." -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "Abandon du téléchargement : %s" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "Téléchargement redémarré : %(name)s | %(msg)s" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "Le téléchargement est hors-ligne : %s" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "Le téléchargement est temporairement hors ligne: %s" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "Téléchargement échoué : %(name)s | %(msg)s" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "Impossible de se connecter à l'hÃŽte ou connexion perdue, prochain essai dans une minute." -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "Téléchargement ignoré : %(name)s à cause de %(plugin)s" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "Démarrage du décryptage : %s" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "Décryptage échoué : %(name)s | %(msg)s" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "Nouvelle tentative en cours %s" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "Ãchec de la collecte des infos pour %(name)s | %(err)s" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "Erreur de l'exécution du hook : %s" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "Impossible d'activer %(name)s" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "Plugins activés: %s" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "Plugins désactivés: %s" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "La reconnexion a échoué : %s" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "Script de reconnexion non trouvé !" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "Lancement de la reconnexion" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "Echec d'exécution du script de reconnexion !" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "Reconnecté, nouvelle IP : %s" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "Il n'y a pas assez de place sur le périphérique" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "Impossible de s'identifier avec le compte %(user)s | %(msg)s" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "Mauvais mot de passe" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "Votre heure %s utilise un format incorrect, utilisez 1:22-3:44" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "Le compte %s n'a pas assez de trafic, re-vérification dans 30 minutes" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "Le compte %s a expiré, re-vérification dans 1H" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "Limite de téléchargement atteinte" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "%s a un format invalide." -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "Erreur d'importation %(name)s : %(msg)s" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "Aucun hébergeur chargé" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "Activez le téléchargement direct dans votre compte Bitshare" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "Le fichier links.txt ne peut être vidé." -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "Paramétrage du compte supprimé, du fait d'un nouveau format de configuration." -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "Autorisation requise (identifiant:mot de passe)" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "Veuillez entrer votre compte %s ou désactivez ce plugin" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "Il y avait du code HTML dans le fichier téléchargé (%s)... erreur de redirection ? Le téléchargement va redémarrer." -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "Fichier temporairement indisponible" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "Netload : attente de %d s entre chaque téléchargements." -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "Netload : attendre le captcha pendant %d s." -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "Le fichier téléchargé est vide" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "La clé de l'API est invalide" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "%s : il ne reste pas assez de trafic" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "Le trafic a été dépassé" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "Rapidshare : partage du trafic (téléchargement direct)" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "Un téléchargement est déjà en cours depuis cette adresse, 60 secondes d'attente" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "Code d'authentification invalide, le téléchargement va redémarrer" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "RapidShareCom : aucun slot disponible" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "Vous avez besoin d'un compte premium pour ce fichier" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "Le nom du fichier est invalide" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "Erreur de téléchargement parallÚle, attente pendant 60 secondes." -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "Vous n'êtes pas identifiés." -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "Le déchiffrement à échoué" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "Aucune clé de fichier fournie dans l'URL" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "Code d'erreur :" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "Le fichier n'existe pas." -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "*** Les plugins ont été mis à jour, veuillez redémarrer pyLoad ***" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "Plugins mis à jour et rechargés" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "Aucune mise à jour pour les plugins" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "Aucune mise à jour pour pyLoad" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "*** Nouvelle version %s disponible de pyLoad ***" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "*** Téléchargez-le ici : http://pyload.org/download ***" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "Incapable de se connecter au serveur pour les mises à jour" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "Nouvelle version de %(type)s | %(name)s : %(version).2f" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "Erreur lors de la mise à jour de %s" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "Les versions discordent" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "Téléchargement terminé : %(name)s @ %(plugin)s " -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "Nouvelle demande de captcha : %s" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "Répondre avec ' le texte c %s sur le captcha'" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "Veuillez tout d'abord ajouter votre compte premium.to et redémarrez pyLoad" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "Ajout de %s à partir du HotFolder" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "%s non installé" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "Impossible d'activer %s" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "Activé" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "Pas de plugin d'extraction activé" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "Le paquet %s est mis dans la file d'attente pour une extraction ultérieure" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "Vérification du paquet %s" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "Extraction vers %s" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "Aucun fichier trouvé pour l'extraction" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "extraction en cours" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "Mot de passe protégé" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "Mot de passe incorrect" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "Suppression de %s fichiers" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "Extraction terminée" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "Erreur d'archive" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "CRC différents" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "Erreur inconnue" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "La définition de l'utilisateur et du groupe a échoué" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "Click'N'Load : port 9666 déjà en cours d'utilisation" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "%s crédits restants" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "Impossible d'envoyer une réponse." -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "Votre compte CaptchaTrader n'a pas assez de crédits" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "Liste des crypteurs non trouvée" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "La liste des crypteurs est vide" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "Téléchargement fini : %(name)s @ %(plugin)s" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "Nouveau CaptchaID de l'upload: %s : %s" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "Votre compte de captcha 9kw.eu n'a pas assez de crédits" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "Scripts installés pour %s : " -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "Script non exécutable :" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "Erreur dans %(script)s : %(error)s" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "Votre compte ExpertDecoders n'a pas assez de crédits" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "Veuillez d'abord ajouter votre compte rehost.to et redémarrez pyLoad" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "Veuillez d'abord ajouter un compte valide premiumize.me et redémarrez pyLoad." -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "%d crédits restants" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "Pil et tesseract ne sont pas installés et il n'y a pas de client connecté pour le déchiffrement des captcha" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "Pas de résultats pour le captcha obtenu dans le temps impartis par aucun des plugins." -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "La définition de l'utilisateur et du groupe a échoué :: %s" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "Pas de Client connecté pour le décryptage captcha" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "Ajout package %(name)s contenant %(count)d liens" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "Ajout de %(count)d liens au paquet #%(package)d " -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "Aucun moteur JS détecté, s'il vous plaît installez soit SpiderMonkey, ossp-js, pyv8 ou rhino" diff --git a/locale/fr/LC_MESSAGES/pyLoadCli.po b/locale/fr/LC_MESSAGES/pyLoadCli.po index 43075a3a1..9fd31d4cd 100644 --- a/locale/fr/LC_MESSAGES/pyLoadCli.po +++ b/locale/fr/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr " Interface en ligne de commande" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "%s téléchargement(s) :" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr " Vitesse : " -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr " Taille : " -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr " Fini dans : " -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr " ID : " -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "en attente : " -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "Statut:" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "en pause" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "en cours" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "Vitesse totale" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "Fichiers en attente" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "Menu :" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr " Ajouter des liens" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "Gérer la file d'attente" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "Gérer le collecteur" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "Mettre en pause/Restaurer le serveur" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr " Stopper le serveur" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr " Quitter" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "Utilisez cette syntaxe : add <Nom paquet> <lien> <lien2> ..." -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "Vérification de %d liens :" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "Le fichier n'existe pas." -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "pyLoad a quitté" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "Affiche le statut du serveur" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "affiche les téléchargements en file d'attente" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "affiche les téléchargements dans le collecteur" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "Ajouter le paquet à la file d'attente" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "Ajouter le paquet au collecteur" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "Supprimer les fichiers de la file d'attente/du collecteur" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "Supprimer les paquets de la file d'attente/du collecteur" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "Déplacer les paquets de la file d'attente au collecteur ou vice versa" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "Redémarrer les fichiers" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "Redémarrer les paquets" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "Vérifie le statut en ligne (fonctionne avec un conteneur local)" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "Vérifie le statut en ligne d'un fichier conteneur" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "Mettre le serveur en pause" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "continuer les téléchargements" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "Basculer pause/reprendre" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "stopper le serveur" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "Liste des commandes :" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "Impossible d'écrire le fichier de configuration" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "Vous avez besoin de py-openssl pour vous connecter à ce Core pyLoad." -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "Adresse: " -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "Port : " -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "Nom d'utilisateur: " -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "Mot de passe : " -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "Les identifiants sont incorrects." -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "Impossible d'établir la connexion à %(addr)s:%(port)s." -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "Vous avez besoin de py-openssl pour vous connecter au moteur de Pyload." -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "Mode interactif ignoré jusqu'à ce que vous entriez des commandes." -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "Ajouter un paquet:" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "Entrez un nom pour le nouveau paquet" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "Paquet : %s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "Analyse des liens que vous voulez ajouter." -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "Tapez %s une fois fini." -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "Liens ajoutés : " -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr " retour au menu principal" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "Gérer les paquets:" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "Gérer les liens:" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "Que voulez-vous déplacer ?" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "Que voulez-vous supprimer ?" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "Que voulez-vous redémarrer ?" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "Choisissez ce que vous voulez faire ou entrez le numéro du paquet." -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "supprimer" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "déplacer" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "redémarrer" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr " - précédent" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr " - suivant" diff --git a/locale/fr/LC_MESSAGES/setup.po b/locale/fr/LC_MESSAGES/setup.po index 5afb2617a..bdb5c1cd8 100644 --- a/locale/fr/LC_MESSAGES/setup.po +++ b/locale/fr/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "o" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "Bienvenue dans l'Assistant de Configuration de pyLoad." -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "Votre systÚme va être vérifié et subir un réglage de base afin de lancer pyLoad." -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "La valeur entre crochets [] est toujours la valeur par défaut," -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "dans le cas où vous ne voulez pas la changer ou vous ne savez pas quoi choisir, appuyez sur entrée." -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "N'oubliez pas : vous pouvez toujours relancer cet assistant avec l'option --setup ou -s, lorsque vous démarrez pyload.py ." -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "Si vous avez un problÚme avec cet assistant appuyer sur CTRL-C," -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "pour annuler et ne plus le laisser démarrer automatiquement avec pyload.py ." -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "Lorsque vous êtes prêt pour la vérification du systÚme, appuyez sur entrée." -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "Vous avez besoin de pycurl, sqlite et python 2.5, 2.6 ou 2.7 pour exécuter pyLoad." -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "Merci d'effectuer les corrections nécessaires et de relancer pyLoad." -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "Le configurateur va se fermer." -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "Vérification du systÚme fini, appuyer sur entrée pour voir votre rapport de status." -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "décryptage des conteneurs" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "connexion ssl" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "décryptage automatique des catchas" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "Interface web" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "extension Click'N'Load" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "Fonctions disponibles :" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "Fonctions indisponibles : " -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "py-crypto n'est pas disponible" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "Vous en avez besoin si vous souhaitez décrypter les fichiers conteneurs." -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "SSL n'est pas disponible" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "Vous en avez besoin si vous souhaitez établir une connexion sécurisé avec le logiciel principal ou l'interface web." -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "Si vous souhaitez accéder à pyLoad uniquement en local, ssl n'est pas utile." -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "La Reconnaissance des catchas n'est pas disponible" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "Ceci est nécessaire uniquement pour certains hÃŽtes en tant qu'utilisateur gratuit." -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "Interface graphique non disponible" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "L'Interface Graphique." -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "pas de moteur JavaScript trouvé" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "Vous en aurez besoin pour certains liens Click'N'Load. Installez SpiderMonkey, ossp-js, pyv8 ou Rhino" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "Si vous le souhaitez, vous pouvez maintenant sortir du configurateur et corriger certaines dépendances." -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "Poursuivre l'installation ?" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "Vous voulez changer le chemin de la configuration ? Le chemin actuel est %s" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "Si vous utilisez pyLoad sur un serveur ou si la partition home se trouve sur un disque flash il est conseillé de le modifier." -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "Changer le chemin de la configuration?" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "Vous voulez configurer les données de connexion et les paramÚtres de base ?" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "Ceci est recommandé pour la premiÚre exécution." -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "Faire le réglage de base ?" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "Vous voulez configurer ssl?" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "Configurer ssl?" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "Vous voulez configurer l'interface Web?" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "Configurer l'interface Web?" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "Installation terminée avec succÚs." -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "Appuyez sur entrée pour quitter et redémarrer pyLoad" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "## Vérification du SystÚme ##" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "Votre version de python est trop récente, Merci d'utiliser Python 2.6/2.7" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "Votre version de python est trop ancienne, merci d'utiliser au moins Python 2.5" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "Version de Python : OK" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "Vous avez installé jinja2 version %s, elle semble trop ancienne." -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "Vous pouvez continuer en toute sécurité mais si l'interface web ne fonctionne pas," -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "mettez à jour ou désinstallez la, pyLoad inclus une librairie jinja2 suffisante." -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "moteur JS" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "## Configuration de base ##" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "Les données de connexion suivantes sont valables pour le CLI, GUI et l'interface Web." -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "Nom utilisateur" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "Les clients externes (GUI, CLI ou autre) nécessitent un accÚs distant pour fonctionner sur le réseau." -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "Cependant, si vous souhaitez uniquement utiliser l'interface web vous pouvez le désactiver pour économiser la RAM." -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "Activer l'accÚs distant" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "Langue" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "Dossier de téléchargement" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "Téléchargements parallÚles max" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "Utiliser la reconnexion ?" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "Emplacement du script de reconnexion" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "## Configuration de l'interface Web ##" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "Activer l'interface Web?" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "Adresse d'écoute, si vous utilisez 127.0.0.1 ou localhost, l'interface Web sera accessible uniquement localement." -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "Adresse" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "Port" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "pyLoad offre plusieurs serveur d'arriÚre plan, suivez maintenant une brÚve explication." -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "Serveur par défaut ; c'est le meilleur choix si vous ne savez pas lequel choisir." -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "Ce serveur permet l'utilisation de SSL ; c'est une bonne alternative à builtin." -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "Peut être utilisé par apache, lighttpd, mais vous oblige à les configurer, ce qui n'est pas trÚs facile." -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "Une alternative trÚs rapide écrite en C, nécessite libev et des connaissances en linux." -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "Télécharger le ici : https://github.com/jonashaag/bjoern, compilez-le" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" -msgstr "et copiez bjoern.so vers module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" +msgstr "et copiez bjoern.so vers pyload/lib" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "Attention : dans certain cas le serveur intégré ne marche pas, si vous avez des problÚmes avec l'interface web" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "revenez ici et changez le serveur de âintégréâ à âthreadedâ." -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "Serveur" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "## Configuration de SSL ##" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "Exécutez ces commande depuis le répertoire de configuration de pyLoad pour générer les certificats SSL :" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "Si vous avez terminé et que tout s'est bien passé, vous pouvez activer le ssl maintenant." -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "Activer le SSL ?" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "Sélectionnez une action" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "1 - Créer/modifier l'utilisateur" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "2 - Lister les utilisateurs" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "3 - Supprimer un utilisateur" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "4 - Quitter" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "Utilisateurs" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "Définition d'un nouveau dossier de configuration, la configuration actuelle ne sera pas transférée !" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "Dossier de configuration" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "Dossier de configuration modifié, l'assistant va se fermer, veuillez le relancer ensuite." -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "Appuyez sur entrée pour quitter." -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "La définition du dossier de configuration a échoué : %s" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "%s : OK" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "%s : absent" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "Mot de passe : " -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "Le mot de passe est trop court. Utilisez au moins 4 caractÚres." -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "Mot de passe (encore) : " -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "Les mots de passe ne correspondent pas." -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "oui" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "vrai" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "v" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "non" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "faux" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "Entrée non valide" diff --git a/locale/ga/LC_MESSAGES/django.po b/locale/ga/LC_MESSAGES/django.po index a4a148192..617ce8b23 100644 --- a/locale/ga/LC_MESSAGES/django.po +++ b/locale/ga/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/ga/LC_MESSAGES/pyLoad.po b/locale/ga/LC_MESSAGES/pyLoad.po index c86006569..e3c89cc40 100644 --- a/locale/ga/LC_MESSAGES/pyLoad.po +++ b/locale/ga/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "" -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "" -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/ga/LC_MESSAGES/pyLoadCli.po b/locale/ga/LC_MESSAGES/pyLoadCli.po index e383ae6f0..67003e6d9 100644 --- a/locale/ga/LC_MESSAGES/pyLoadCli.po +++ b/locale/ga/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "" diff --git a/locale/ga/LC_MESSAGES/setup.po b/locale/ga/LC_MESSAGES/setup.po index 006a7f1de..a03a53855 100644 --- a/locale/ga/LC_MESSAGES/setup.po +++ b/locale/ga/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "" diff --git a/locale/gl/LC_MESSAGES/django.po b/locale/gl/LC_MESSAGES/django.po index 50f453f9e..44713bac7 100644 --- a/locale/gl/LC_MESSAGES/django.po +++ b/locale/gl/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "Solicitude de Novo Captcha" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "Por favor lea o texto do captcha." -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "pyLoad reiniciouse" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "Ãxito" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "Está seguro de que quere saÃr de pyLoad?" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "Reiniciar Ligazón" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "Borrar Ligazón" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "Por favor, introduza un nome ó paquete." -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "Por favor, prema á dereita do captcha." -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "Produciuse un erro." -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "O cartafol está baleiro" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "Fallou" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "Non hai Captchas para ler." -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "Os contrasinais non coinciden." -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "Parámetros gardados." -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "Novo cartafol" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "Está seguro de que quere reiniciar pyLoad?" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "esperando %s" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "Descargas Activas" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "Inicio" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "Descargas" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "Rexistros" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "Configuración" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "Información" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "Progreso" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "O seu nome de usuario e contrasinal non coinciden. Por favor, inténteo de novo." -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "Para reiniciar os seus datos de inicio de sesión ou engadir un usuario, execute:" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "Borrar Terminados" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "Reiniciar Falidos" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "Cartafol:" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "Contrasinal:" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "Editar Paquete" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "Editar os detalles do seguinte paquete." -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "Nome do paquete." -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "Nome do subcartafol para estas descargas." -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "Lista de contrasinais usadas para descomprimir." -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "Reiniciar" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "Pechouse a sesión correctamente." -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "Ruta" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "absoluto" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "relativo" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "nome" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "tamaño" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "tipo" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "última modificación" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "directorio pai" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "sen contido" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "Engadidos" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "Elixa unha selección do menú" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "Válido ata" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "Tráfico restante" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "Tempo" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "Máx. en Paralelo" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "Borrar?" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "inválido" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "sÃ" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "non" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "Engadir Conta" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "Introduza os datos da súa conta para usar caracterÃsticas premium." -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "O seu nome de usuario." -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "O contrasinal para esta conta." -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "Tipo" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "Elixa un servidor para a súa conta." -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "Iniciar" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "anterior" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "seguinte" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "Fin" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "Novidades" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "Soporte" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "Sistema" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "S.O.:" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "versión de pyLoad:" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "Cartafol de Instalación:" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "Cartafol de Configuración:" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "Cartafol de Descarga:" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "Espazo Libre:" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "Idioma:" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "Porto da Interface Web:" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "Porto da Interface Remota:" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "Instalar" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "Administrador de ficheiros" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "Engadir Paquete" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "Pegue as súas ligazóns ou suba un contedor de ligazóns." -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "Nome do novo paquete." -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "Ligazóns" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "Pegue as súas ligazóns ou calquera texto aquà e prema o botón de filtrar." -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "Filtrar urls" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "Contrasinal para o arquivo RAR" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "Ficheiro" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "Cargar un contedor de ligazóns." -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "Lendo captcha" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "O captcha." -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "Texto" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "Introduza o texto no captcha." -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "Interface web" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "Hai unha actualización de pyLoad dispoñible!" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "Engadidos actualizados, por favor reinicia!" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "Esperando captcha" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "SaÃr" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "Administrar" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "Información" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "Por favor, inicie sesión!" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "Deter" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "Descarga:" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "Volverse a conectar:" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "Velocidade:" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "Activo:" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "Recargar páxina" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "cargando" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "Volver ó principio" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "SaÃr de pyLoad" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "Reiniciar pyLoad" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "Para engadir un usuario ou cambiar contrasinais empregue:" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "Importante: O usuario Administrador sempre ten todos os permisos!" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "Cambiar Contrasinal" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "Administrador" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "Permisos" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "cambiar" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "Introduza o seu contrasinal actual e a desexado." -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "Usuario" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "Contrasinal actual" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "Novo contrasinal" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "O novo contrasinal." -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "Novo contrasinal (repetir)" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "Por favor, repita o seu novo contrasinal." -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "Non ten permisos para acceder a esta páxina." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "Non se encontra o directorio de descarga." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "non dispoñible" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "Execute pyload.py -s para acceder á instalación." diff --git a/locale/gl/LC_MESSAGES/pyLoad.po b/locale/gl/LC_MESSAGES/pyLoad.po index aadbdf35c..bca98364f 100644 --- a/locale/gl/LC_MESSAGES/pyLoad.po +++ b/locale/gl/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "Sinal de saÃda recibida" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "pyLoad xa está executándose con pid %s" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "Cambio de grupo falido: %s" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "Cambio de usuario falido: %s" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "cartafol para os rexistros" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "Comezando" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "Usando directorio de inicio: %s" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "pycrypto para descodificar contedores de ligazóns" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "cartafol para ficheiros temporais" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "cartafol para as descargas" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "OpenSSL para conexión segura" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "Movendo a antiga configuración de usuario á BD" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "Por favor, comprobe os seus datos de inicio de sesión con ./pyload.py -u" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "Todas as ligazóns foron eliminadas" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "Tempo de descarga: %s" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "Espazo libre: %s" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "Activando Contas..." -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "Activando Engadidos..." -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "pyLoad está funcionando" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "reiniciando pyLoad" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "pyLoad pechouse" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "Instalar %s" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "non se puido atopar %(desc)s: %(name)s" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "no se puido crear %(desc)s: %(name)s" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "apagando..." -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "produciuse un erro mentres se apagaba" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "pyload terminado dende o Terminal" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "O ficheiro da base de datos eliminouse por ser dunha versión incompatible." -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "O ficheiro da base de datos NON se puido converter." -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "A base de datos converteuse da v2 á v3." -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "A base de datos converteuse da v3 á v4." -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "Convertendo a antiga BD Django" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "finalizado" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "fora de liña" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "en liña" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "na cola" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "omitido" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "esperando" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "temporalmente fora de servicio" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "comezando" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "falido" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "abortado" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "descifrando" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "personalizado" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "descargando" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "procesando" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "descoñecido" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "Paquete finalizado: %s" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "Usando SSL ThriftBackend" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "Erro remoto do motor: %s" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "Iniciando %(name)s: %(addr)s:%(port)s" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "Fallou ó cargar o motor %(name)s | %(error)s" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "esperando %s" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "Certificados SSL non encontrados." -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "SentÃmolo, pero retirámolo soporte para iniciar %s directamente en pyLoad" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "Pode empregar o servidor con fÃos que ofrece un bo rendemento e ssl," -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "por suposto pode seguir empregando o seu %s existente co servidor fastcgi de pyLoad" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" -msgstr "as configuracións de exemplo encóntranse no directorio module/webui/servers" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" +msgstr "as configuracións de exemplo encóntranse no directorio pyload/webui/servers" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "Non pode usar %(server)s, python-flup non está instalado!" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "Erro importando servidor lixeiro: %s" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "Debe descargar e compilar bjoern, https://github.com/jonashaag/bjoern" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" -msgstr "Copie o módulo boern.so ó cartafol module/lib ou use a instalación setup.py" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" +msgstr "Copie o módulo boern.so ó cartafol pyload/lib ou use a instalación setup.py" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "Evidentemente, debe estar familiarizado con linux e saber como compilar software" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "Servidor en modo threaded, debido a problemas de rendemento coñecidos en windows." -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "Este servidor non ofrece SSL, por favor considere usar o servidor con fÃos no seu lugar" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "Iniciando servidor web incorporado: %(host)s:%(port)d" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "Iniciando servidor web SSL con fÃos: %(host)s:%(port)d" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "Iniciando servidor web con fÃos: %(host)s:%(port)d" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "Iniciando servidor fastcgi: %(host)s:%(port)d" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "Iniciando servidor web lixeiro (bjoern): %(host)s:%(port)d" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "Non ten permisos para acceder a esta páxina." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "Non se encontra o directorio de descarga." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "non dispoñible" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "Execute pyload.py -s para acceder á instalación." -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "Descarga por partes falida, conexión única de emerxencia| %s" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "Iniciando descarga: %s" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "Descarga finalizada: %s" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "O engadido %s non atopa ningunha función." -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "Descarga cancelada: %s" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "Descarga reiniciada: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "A descarga está fóra de servizo: %s" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "A descarga está temporalmente fora de servizo: %s" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "Descarga falida: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "No se puido conectar ó servidor ou conexión reiniciada, esperando 1 minuto e tentando de novo." -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "Descarga omitida: %(name)s debido a %(plugin)s" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "Comeza o descifrado: %s" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "Descifrado falido: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "Reintentando %s" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "A Obtención de información para %(name)s fallou | %(err)s" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "Erro executando as ligazóns: %s" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "Fallou a activación de %(name)s" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "Engadidos activados: %s" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "Engadidos desactivados: %s" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "Reconexión Falida: %s" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "Non se atopou o script de reconexión!" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "Iniciando reconexión" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "Fallo executando o script de reconexión!" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "Conectado de novo, nova dirección IP: %s" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "Non hai suficiente espazo libre no dispositivo" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "Non se puido iniciar sesión coa conta %(user)s | %(msg)s" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "Contrasinal erróneo" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "A hora %s ten un formato incorrecto, use: 1:22-3:44" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "A conta %s non ten tráfico suficiente, comprobarase outra vez en 30min" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "A conta %s expirou, compróbea de novo en 1h" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "Limite de descargas alcanzado" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "%s ten un patrón inválido." -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "Erro importando %(name)s: %(msg)s" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "Non se cargou ningún servidor" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "Active a descarga directa na súa conta de Bitshare" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "A lista de ligazóns non se puido limpar." -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "Configuración da conta borrada, debido ó formato da nova configuración." -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "Autorización requirida (usuario:contrasinal)" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "Arquivo non dispoñible temporalmente" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "Netload: esperando entre descargas %d s." -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "Netload: esperando captcha %d s." -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "O arquivo descargado estaba baleiro" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "Clave de API inválida" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "%s: Non queda suficiente tráfico" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "Tráfico excedido" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "Rapidshare: Tráfico compartido (descarga directa)" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "Xa está descargando dende esta dirección ip, esperando 60 segundos" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "Código de Autenticación Inválido, a descarga reiniciarase" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "RapidShareCom: No quedan espazos dispoñibles" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "Precisa dunha conta premium para este arquivo" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "Nome do arquivo inválido" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "Erro con descargas en paralelo, esperando 60s." -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "Non iniciou sesión." -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "O ficheiro non existe." -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "*** Os engadidos foron actualizados, por favor reinicie pyLoad ***" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "Engadidos actualizados e cargados de novo" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "Non hai actualizacións de engadidos dispoñibles" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "No hai actualizacións para pyLoad" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "*** Nova versión %s de pyLoad dispoñible ***" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "*** Obtéñaa aquÃ: http://pyload.org/download ***" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "Imposible conectar co servidor para actualizacións" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "Nova versión de %(type)s|%(name)s : %(version).2f" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "Erro mentres se actualizaba %s" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "Non coincide a versión" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "Descarga finalizada: %(name)s @ %(plugin)s " -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "Nova Petición de Captcha: %s" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "Responda con 'c %s texto ó captcha'" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "Engadido %s dende HotFolder" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "%s non instalado" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "Non se puido activar %s" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "Activado" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "Non se activaron os engadidos de extracción" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "Paquete %s posto na cola para a súa extracción posterior" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "Comprobar paquete %s" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "Extraer a %s" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "extraendo" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "Protexido con contrasinal" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "Contrasinal erróneo" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "Borrando ficheiros %s" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "Extracción finalizada" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "Erro de Arquivo" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "O CRC non coincide" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "Erro Descoñecido" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "Configuración de Usuario e Grupo falida" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "Click'N'Load: O porto 9666 xa está en uso" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "%s créditos restantes" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "A súa conta de CaptchaTrader non ten créditos suficientes" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "Descarga finalizada: %(name)s @ %(plugin)s" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "Scripts instalados para %s: " -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "Script non executable:" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "Erro en %(script)s: %(error)s" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "Por favor, engada primeiro a súa conta rehost.to e reinicie pyLoad" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "Pil e tesseract non están instalados e no hai cliente conectado para descifrar o captcha" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "Non se obtiveron resultados para o captcha no tempo asignado de ningún dos engadidos." -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "Configuración de Usuario e Grupo falida: %s" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "Non hai cliente conectado para descifrar o captcha" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "Engadido o paquete %(name)s que contén %(count)d ligazóns" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "Engadidos %(count)d ligazóns ó paquete #%(package)d " -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "Non se detectou ningún motor de js, por favor instale Spidermonkey, ossp-js, pyv8 ou rhino" diff --git a/locale/gl/LC_MESSAGES/pyLoadCli.po b/locale/gl/LC_MESSAGES/pyLoadCli.po index 4b1bbb714..deae3325f 100644 --- a/locale/gl/LC_MESSAGES/pyLoadCli.po +++ b/locale/gl/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr " Interface de Liña de Comandos" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "%s Descargas:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr " Velocidade: " -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr " Tamaño: " -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr " Finalizado en: " -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "esperando: " -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "Menú:" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr " Engadir Ligazóns" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr " Administrar Cola" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr " Administrar Colector" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr " Retomar/Deter Servidor" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr " Parar Servidor" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr " SaÃr" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "Por favor use esta sintaxe: add <Package name> <link> <link2> ..." -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "Comprobando %d ligazóns:" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "O ficheiro non existe." -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "pyLoad terminou" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "Amosa-lo estado do servidor" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "Amosa-las descargas en cola" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "Amosa-las descargas en colector" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "Engadir paquetes á cola" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "Engadir paquetes ó colector" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "Borrar Ficheiros da Cola/Colector" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "Borrar Paquetes da Cola/Colector" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "Mover os Paquetes da Cola ó Colector ou viceversa" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "Reiniciar ficheiros" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "Reiniciar paquetes" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "Comprobar o estado da conexión, traballa cun contedor local" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "Comprobar o estado en liña dun contedor" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "Pausa o servidor" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "continuar as descargas" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "Alternar deter/continuar" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "finalizar servidor" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "Lista de comandos:" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "Resultou imposÃbel escribir no ficheiro de configuración do usuario" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "Necesita py-openssl para conectarse a este Núcleo de pyLoad." -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "Enderezo: " -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "Porto: " -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "Nome de usuario: " -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "Contrasinal: " -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "Os datos de inicio de sesión son incorrectos." -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "Non se puido establecer a conexión a %(addr)s:%(port)s." -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "Necesita py-openssl para conectarse a este núcleo pyLoad." -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "Modo interactivo ignorado, xa que pasou algúns comandos." -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "Engadir Paquete:" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "Introduza un nome para o novo paquete" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "Paquete: %s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "Procesar as ligazóns que desexe engadir." -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "Teclee %s cando remate." -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "Ligazóns engadidos: " -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr " volver ó menú principal" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "Administrar Paquetes:" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "Administrar Ligazóns:" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "Que quere mover?" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "Que quere borrar?" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "Que quere reiniciar?" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "Elixa o que queira facer ou introduza o número do paquete." -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "borrar" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "mover" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "reiniciar" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr " - anterior" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr " - seguinte" diff --git a/locale/gl/LC_MESSAGES/setup.po b/locale/gl/LC_MESSAGES/setup.po index b04099b35..86276ecf3 100644 --- a/locale/gl/LC_MESSAGES/setup.po +++ b/locale/gl/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "s" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "Benvido ó Asistente de Configuración de pyLoad." -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "Revisarase o seu sistema e farase unha configuración básica para executar pyLoad." -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "O valor entre corchetes [] sempre é o valor por defecto," -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "en caso de que non queira cambialo ou non estea seguro de que opción elixir, só prema entrar." -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "Non o esqueza: Sempre pode volver a executar este asistente co parámetro --setup ou -s cando inicie pyload.py ." -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "Se ten algún problema co asistente presione Ctrl-C," -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "para abortar e non permitirlle volver a iniciarse automaticamente con pyload.py ." -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "Cando estea listo para a comprobación do sistema, prema entrar." -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "Precisa pycurl, sqlite e python 2.5, 2.6 ou 2.7 para executar pyLoad." -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "Por favor corrixa isto e volva a executar pyLoad." -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "O asistente da instalación pecharase." -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "A comprobación do sistema concluÃu, prema entrar para ver o informe de estado." -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "## Estado ##" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "descifrando contedor" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "conexión ssl" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "descifrado automático de captcha" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "Interface web" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "extensión Click'N'Load" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "CaracterÃsticas dispoñibles:" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "CaracterÃsticas non dispoñibles: " -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "py-crypto non dispoñible" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "Precisa disto se quere descifrar arquivos de contedores." -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "SSL non dispoñible" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "Isto é necesario se quere establecer unha conexión segura co núcleo ou a interface web." -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "SSL non é útil se tan só quere acceder a pyLoad localmente." -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "recoñecemento de Captcha non dispoñible" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "Só necesario para algúns servidores e como usuario gratuÃto." -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "Gui non dispoñible" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "A Interface de Usuario Gráfica." -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "motor de JavaScript non atopado" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "Precisará disto para algunhas ligazóns Click'N'Load. Instale Spidermonkey, ossp-js, pyv8 ou rhino" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "Pode cancelar o asiste agora e corrixir algunhas dependencias se quere." -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "Desexa continuar co asistente?" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "Quere cambiar a ruta de configuración? Actualmente é %s" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "Si usa pyLoad en un servidor ou a partición primaria reside nunha memoria flash interna, pode ser boa idea cambiala." -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "Cambia-la ruta de configuración?" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "Quere configurar os datos de acceso e a configuración básica?" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "Isto recoméndase na primeira execución." -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "Facer a configuración básica?" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "Quere configurar ssl?" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "Configurar ssl?" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "Quere configurar a interface web?" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "Configurar a interface web?" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "Configuración rematada correctamente." -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "Prema entrar para saÃr e reiniciar pyLoad" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "## Comprobación do sistema ##" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "A súa versión de python é demasiado nova, por favor use Python 2.6/2.7" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "A súa versión de python é demasiado antiga, por favor use polo menos Python 2.5" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "Versión de Python: OK" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "A súa versión %s de jinja2 instalada parece demasiado antiga." -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "Pode continuar de maneira segura pero se a interface web non funcionara," -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "por favor actualÃcea ou elimÃnea, pyLoad inclúe unha biblioteca jinja2 suficiente." -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "Motor JS" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "## Configuración Básica ##" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "Os seguintes datos de acceso son válidos para CLI, GUI e interface web." -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "Os clientes externos (GUI, CLI ou outros) precisan acceso remoto para traballar a través da rede." -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "Non obstante, se só quere utilizar interface web pode desactivalo para aforrar ram." -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "Activar acceso remoto" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "Cartafol de descargas" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "Máximas descargas paralelas" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "Usar reconectar?" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "Lugar do script de reconexión" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "## Configuración da Interface Web ##" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "Activar a interface web?" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "Dirección de escoita, se usa 127.0.0.1 ou localhost, a interface web só poderá ser accesible localmente." -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "pyLoad ofrece varias infraestruturas de servidores, a continuación unhas pequenas explicacións." -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "O servidor por defecto, a mellor opción se non sabe cal elixir." -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "Este servidor ofrece SSL e é unha boa alternativa ó integrado." -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "Pode usalo apache, lighttpd, require que o configure, o cal non é unha tarefa fácil." -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "Unha alternativa moi rápida escrita en C, require libev e coñecementos de linux." -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "Obtéñao aquÃ: https://github.com/jonashaag/bjoern, e compÃleo" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" -msgstr "e copie bjoern.so a module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" +msgstr "e copie bjoern.so a pyload/lib" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "Atención: Nalgúns casos raros o servidor integrado non funciona, se nota problemas coa interface web" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "volva aquà e cambie o servidor integrado polo servidor con fÃos." -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "## Configuración de SSL ##" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "Execute estes comandos dende o cartafol de configuración de pyLoad para crear os certificados ssl:" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "Se xa terminou e todo rematou ben, poderá activar ssl agora." -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "Activar SSL?" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "Elixa unha acción" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "1 - Crear/Editar usuario" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "2 - Listar usuarios" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "3 - Eliminar usuario" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "4 - SaÃr" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "Usuarios" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "Configurando o novo directorio de configuración, os parámetros actuais non se transferirán!" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "Ruta de configuración" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "Ruta de configuración cambiada, a instalación pecharase, por favor reinicie para continuar." -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "Prema Entrar para saÃr." -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "Axuste da ruta de configuración falida: %s" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "%s: non atopado" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "Contrasinal: " -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "Contrasinal (de novo): " -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "Os contrasinais non coinciden." -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "sÃ" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "verdadeiro" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "v" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "non" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "falso" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "Ingreso non válido" diff --git a/locale/he/LC_MESSAGES/django.po b/locale/he/LC_MESSAGES/django.po index 50815063b..97c00c494 100644 --- a/locale/he/LC_MESSAGES/django.po +++ b/locale/he/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/he/LC_MESSAGES/pyLoad.po b/locale/he/LC_MESSAGES/pyLoad.po index d5efc9f35..4cbdb9e84 100644 --- a/locale/he/LC_MESSAGES/pyLoad.po +++ b/locale/he/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "" -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "" -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/he/LC_MESSAGES/pyLoadCli.po b/locale/he/LC_MESSAGES/pyLoadCli.po index 59cc71646..31c156f35 100644 --- a/locale/he/LC_MESSAGES/pyLoadCli.po +++ b/locale/he/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "" diff --git a/locale/he/LC_MESSAGES/setup.po b/locale/he/LC_MESSAGES/setup.po index 1e1bacb56..5e8e45761 100644 --- a/locale/he/LC_MESSAGES/setup.po +++ b/locale/he/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "" diff --git a/locale/hi/LC_MESSAGES/django.po b/locale/hi/LC_MESSAGES/django.po index 71cf38b32..7cd5d416a 100644 --- a/locale/hi/LC_MESSAGES/django.po +++ b/locale/hi/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/hi/LC_MESSAGES/pyLoad.po b/locale/hi/LC_MESSAGES/pyLoad.po index 5afc82339..ac081b482 100644 --- a/locale/hi/LC_MESSAGES/pyLoad.po +++ b/locale/hi/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "" -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "" -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/hi/LC_MESSAGES/pyLoadCli.po b/locale/hi/LC_MESSAGES/pyLoadCli.po index 4737f6785..734b08099 100644 --- a/locale/hi/LC_MESSAGES/pyLoadCli.po +++ b/locale/hi/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "%s à€¡à€Ÿà€à€šà€²à¥à€¡:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr " à€à€€à€¿: " -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr " à€à€à€Ÿà€°: " -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr " à€à€à€¡à¥: " -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "à€ªà¥à€°à€€à¥à€à¥à€·à€Ÿ à€®à¥à€ :" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "à€žà¥à€¥à€¿à€€à€¿:" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "à€à¥à€² à€à€€à€¿" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "à€à¥à€²" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "à€®à¥à€šà¥à€¯à¥ " -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "à€²à€¿à€à€à¥à€ž à€à¥à€¡à€Œà¥à€" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "à€¡à€Ÿà€à€šà€²à¥à€¡ à€à€Ÿà€°à¥ à€°à€à¥à€ " -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "à€žà€°à¥à€µà€° à€¬à€à€Š à€à€°à¥à€ " -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "à€à€®à€Ÿà€à€¡ à€žà¥à€à¥ " -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "à€ªà¥à€°à¥à€: " -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "à€à€ªà€¯à¥à€à€à€°à¥à€€à€Ÿ à€šà€Ÿà€®: " -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "à€ªà€Ÿà€žà€µà€°à¥à€¡: " -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "à€ªà¥à€à¥à€ à€à¥à€¡à€Œà¥à€:" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "à€šà€ à€ªà¥à€à¥à€ à€à¥ à€šà€Ÿà€® à€Šà¥à€ " -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "à€ªà¥à€à¥à€: %s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "à€ªà¥à€°à€Ÿ à€¹à¥à€šà¥ à€ªà€° %s à€à€Ÿà€à€ª à€à€°à¥à€ " -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "à€à¥à¥à¥ à€à€ à€²à€¿à€à€" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "à€®à¥à€à¥à€¯à€Ÿ à€®à¥à€šà¥à€¯à¥ à€ªà€° à€µà€Ÿà€ªà€ž à€à€Ÿà€à€ " -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "à€®à€¿à€à€Ÿà€¯à¥à€ " -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "à€ªà¥à€šà€à€à€°à€à€ à€à€°à¥à€ " -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "-à€ªà€¿à€à€²à€Ÿ " -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "-à€
à€à€²à€Ÿ " diff --git a/locale/hi/LC_MESSAGES/setup.po b/locale/hi/LC_MESSAGES/setup.po index 3ecfc5a1b..24da4ee92 100644 --- a/locale/hi/LC_MESSAGES/setup.po +++ b/locale/hi/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "à€ªà€Ÿà€žà€µà€°à¥à€¡: " -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "" diff --git a/locale/hr/LC_MESSAGES/django.po b/locale/hr/LC_MESSAGES/django.po index fbaa25c79..29fbc3b16 100644 --- a/locale/hr/LC_MESSAGES/django.po +++ b/locale/hr/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/hr/LC_MESSAGES/pyLoad.po b/locale/hr/LC_MESSAGES/pyLoad.po index cb81932ca..e0fedc263 100644 --- a/locale/hr/LC_MESSAGES/pyLoad.po +++ b/locale/hr/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "" -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "" -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/hr/LC_MESSAGES/pyLoadCli.po b/locale/hr/LC_MESSAGES/pyLoadCli.po index ba9048e0c..cf1966357 100644 --- a/locale/hr/LC_MESSAGES/pyLoadCli.po +++ b/locale/hr/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "" diff --git a/locale/hr/LC_MESSAGES/setup.po b/locale/hr/LC_MESSAGES/setup.po index b4ef5c976..cad508e12 100644 --- a/locale/hr/LC_MESSAGES/setup.po +++ b/locale/hr/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "" diff --git a/locale/hu/LC_MESSAGES/django.po b/locale/hu/LC_MESSAGES/django.po index f2c1135d8..3d97e2270 100644 --- a/locale/hu/LC_MESSAGES/django.po +++ b/locale/hu/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "Ãj Captcha kérés" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "Olvasd el a captcha-n levÅ szöveget." -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "pyLoad újraindÃtva" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "ki" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "Sikeres" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "be" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "Biztos bezárod a pyLoad-ot?" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "Link újraindÃtás" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "Link törlése" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "Add meg a csomag nevét." -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "Kattints a megfelelÅ captcha helyre." -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "Hiba történt." -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "Ãres könyvtár" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "Sikertelen" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "Nincs Captcha." -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "A jelszavak nem egyeznek." -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "BeállÃtások elmentve." -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "Ãj könyvtár" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "Biztos újraindÃtod a pyLoad-ot?" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "várakozás %s" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "AktÃv letöltések" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "FÅoldal" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "Letöltések" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "Napló" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "BeállÃtások" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "Név" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "Ãllapot" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "Információ" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "Méret" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "Folyamat" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "Bejelentkezés" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "Felhasználónév" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "Jelszó" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "A felhasználói név és a jelszó nem egyezik. Próbáld újra." -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "A bejelentkezési adatok törléséhez vagy új felhasználó felvételéhez futtasd:" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "Sikeresek törlése" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "Sikertelenek újrapróbálása" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "Könyvtár:" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "Jelszó:" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "Csomag szerkesztése" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "Csomag részletei." -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "Csomag neve." -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "mappa" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "Alkönyvtár a letöltéseknek." -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "Jelszavak a kitömörÃtéshez." -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "KÃŒldés" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "Alaphelyzet" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "Sikeresen kijelentkeztél." -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "Elérési útvonal" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "abszolút" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "relatÃv" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "név" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "méret" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "tÃpus" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "utolsó módosÃtás" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "szÃŒlÅ könyvtár" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "nincs tartalom" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "Ãltalános" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "BeépÃŒlÅk" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "Hozzáférések" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "Válaszd ki a megfelelÅ szekciót a menÃŒbÅl" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "BeépÃŒlÅ" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "Prémium" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "Lejár" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "HátralévÅ adatforgalom" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "IdÅ" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "Max. egyszerre futó" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "Törlés?" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "érvényes" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "érvénytelen" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "igen" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "nem" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "Hozzáad" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "Fiók hozzáadása" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "Add meg a prémium hozzáféréshez szÃŒkséges adatokat." -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "Felhasználói neved." -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "Jelszó ehhez a hozzáféréshez." -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "TÃpus" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "Válaszd ki a hozzáférésedhez tartozó ellátót." -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "IndÃt" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "elÅzÅ" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "következÅ" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "Vége" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "HÃrek" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "SegÃtségnyújtás" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "Rendszer" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "pyLoad verzió:" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "TelepÃtés helye:" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "BeállÃtások helye:" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "Letöltések helye:" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "Szabad terÃŒlet:" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "Nyelv:" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "Web felÃŒlet port:" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "Távoli elérés port:" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "BeállÃtás" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "Ãllomány kezelÅ" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "Csomag hozzáadása" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "Illesztd be a linkeket, vagy tölts fel egy gyűjtÅt." -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "Az új csomag neve." -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "Linkek" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "Illesztd be a linkeket, vagy bármilyen szöveget és nyomj a linkek szűrésére." -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "Linkek kiszűrése" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "Jelszó a RAR állományhoz" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "Ãllomány" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "GyűjtÅ feltöltése." -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "Cél" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "Captcha olvasás" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "A captcha." -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "Szöveg" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "Add meg a captcha-n található szöveget." -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "Bezárás" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "Webes felÃŒlet" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "pyLoad frissÃtés elérhetÅ!" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "BeépÃŒlÅk frissÃtve, indÃtsd újra!" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "Captcha várakozik" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "Kijelentkezés" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "Adminisztrálás" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "Infó" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "Kérlek jelentkezz be!" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "MegállÃt" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "Mégse" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "Letöltés:" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "Ãjracsatlakozás:" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "Sebesség:" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "AktÃv:" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "Oldal frissÃtése" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "betöltés" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "Vissza a tetejére" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "pyLoad bezárása" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "pyLoad újraindÃtása" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "Ãj felhasználó hozzáadásához vagy jelszó változtatáshoz:" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "Fontos: Az Admin felhasználó mindig teljes jogkörrel rendelkezik!" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "Jelszó változtatás" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "Engedélyek" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "változtat" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "A jelenlegi és a kÃvánt jelszó." -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "Felhasználó" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "Jelenlegi jelszó" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "Ãj jelszó" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "Az új jelszó." -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "Ãj jelszó (ismét)" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "Ismételd meg az új jelszót." -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "Nincs jogosultságod a lap megtekintéséhez." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "Letöltési könyvtár nem található." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "végtelen" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "nem elérhetÅ" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "A beállÃtáshoz futtasd: pyload.py -s." diff --git a/locale/hu/LC_MESSAGES/pyLoad.po b/locale/hu/LC_MESSAGES/pyLoad.po index 84f94d435..9f522930c 100644 --- a/locale/hu/LC_MESSAGES/pyLoad.po +++ b/locale/hu/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "LeállÃtási jel érkezett" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "a pyLoad már fut az alábbi pid számmal: %s" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "Sikertelen csoport váltás: %s" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "Sikertelen felhasználó váltás: %s" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "könyvtár a naplóknak" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "IndÃtás" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "FÅkönyvtár használata: %s" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "pycrypto a konténer fájlok dekódolásához" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "könyvtár az átmeneti fájloknak" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "könyvtár a letöltéseknek" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "OpenSSL a biztonságos kapcsolathoz" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "EllenÅrizd a belépési adataid a következÅ paranccsal: ./pyload.py -u" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "Minden link törölve" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "Letöltési idÅ: %s" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "Szabad hely: %s" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "Hozzáférések aktiválása..." -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "BÅvÃtmények aktiválása..." -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "pyLoad fut" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "pyLoad újraindÃtása" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "pyLoad kilép" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "TelepÃtés %s" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "leállÃtás..." -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "hiba leállÃtás közben" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "pyLoad kilÅve konzolról" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "befejezett" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "várólistán" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "átugorva" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "várakozás" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "átmenetileg offline" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "indÃtás" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "sikertelen" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "megszakÃtott" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "dekódolás" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "egyéni" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "letöltés" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "feldolgozás alatt" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "ismeretlen" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "Kész csomag: %s" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "SSL ThriftBackend használata" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "Távoli hiba: %s" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "IndÃtás: %(name)s: %(addr)s:%(port)s" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "Backend betöltése sikertelen: %(name)s | %(error)s" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "várakozás %s" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "SSL tanúsÃtvány nem található." -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "Ez a szerver nem támogatja az SSL-t, kérlek használj helyette másikat" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "Nincs jogosultságod a lap megtekintéséhez." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "Letöltési könyvtár nem található." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "végtelen" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "nem elérhetÅ" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "A beállÃtáshoz futtasd: pyload.py -s." -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "Darabokban letöltés sikertelen, visszatérés egyszeri kapcsolatra | %s" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "Letöltés elindÃtva: %s" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "Letöltés befejezve: %s" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "A %s bÅvÃtménybÅl hiányzik egy funkció." -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "Letöltés megszakÃtva: %s" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "Letöltés újraindÃtva: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "A letöltés offline: %s" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "A letöltés átmenetileg offline: %s" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "A letöltés sikertelen: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "Nem sikerÃŒlt csatlakozni a cÃmhez, újrapróbálás 1 perc múlva." -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "Letöltés átugorva: %(name)s - %(plugin)s" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "Dekódolás elkezdve: %s" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "Dekódolás sikertelen: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "Ãjra próbálkozás %s" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "%(name)s információinak lekérése sikertelen | %(err)s" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "Sikertelen aktiválás: %(name)s" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "Ãjracsatlakozás sikertelen: %s" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "Ãjracsatlakozó script nem található!" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "Ãjracsatlakozás indÃtása" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "Az újracsatlakozó scriptet nem sikerÃŒlt futtatni!" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "Ãjracsatlakozva, új IP: %s" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "Nincs elég hely az eszközön" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "Nem sikerÃŒlt bejelentkezni: %(user)s | %(msg)s" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "Hibás jelszó" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "%s hozzáférésen nincs elég adatforgalom, újra próbálás: 30 perc" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "%s hozzáférés lejárt, újra próbálás: 1 óra" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "A letöltési korlát elérve" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "Hiba a(z) %(name)s betöltése közben: %(msg)s" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "Nincs szolgáltató betöltve" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "Közvetlen letöltés aktiválása a Bitshare hozzáférésen" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "AzonosÃtás szÃŒkséges (felhasználónév:jelszó)" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "Add meg a(z) %s hozzáférés adatait, vagy deaktiváld ezt a beépÃŒlÅt" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "HTML kód van a letöltött fájlban (%s). Lehet, hogy átirányÃtási hiba, a letöltés újra lesz indÃtva." -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "Ãllomány átmenetileg nem elérhetÅ" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "Netload: letöltések közti várakozás %d mp." -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "Netload: captcha-ra várakozás %d mp." -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "A letöltött fájl ÃŒres" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "Ãrvénytelen API kulcs" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "%s: Nincs elég adatforgalom hátra" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "Adatforgalom túllépve" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "Rapidshare: Adatforgalom megosztás (közvetlen letöltés)" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "Már van folyamatban letöltés errÅl az IP-rÅl, várakozás: 60mp" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "Hibás Auth kód, a letöltés újraindÃtása" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "RapidShareCom: Nincs ingyenes hely" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "Ehhez a fájlhoz prémium hozzáférés szÃŒkséges" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "Hibás fájlnév" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "Többszálas letöltés hiba, várakozás: 60s." -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "Nem vagy bejelentkezve." -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "Sikertelen dekódolás" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "Nincs fájl kulcs az URL-ben" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "Hibakód:" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "*** BÅvÃtmények frissÃtve, indÃtsd újra a pyLoad-ot ***" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "BÅvÃtmények frissÃtve és betöltve" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "Nincs bÅvÃtmény frissÃtés" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "Nincs új pyLoad verzió" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "*** Ãj pyLoad verzió elérhetÅ: %s ***" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "*** Letöltés: http://pyload.org/download ***" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "Nem sikerÃŒlt a szerverhez csatlakozni a frissÃtésekért" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "Ãj verzió: %(type)s|%(name)s : %(version).2f" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "Hiba frissÃtés közben %s" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "verzió ÃŒtközés" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "Letöltés befejezve: %(name)s @ %(plugin)s " -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "Ãj captcha kérés: %s" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "Válaszolj ezzel: 'c %s szöveg a captcha-n'" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "ElÅször adj meg rehost.to hozzáférést majd indÃtsd újra a pyLoad-ot" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "%s HotFolder-bÅl hozzáadva" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "Nincs %s telepÃtve" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "Nem sikerÃŒlt aktiválni: %s" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "Aktivált" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "Nincs kicsomagoló bÅvÃtmény aktiválva" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "%s csomag a várólistán késÅbbi kitömörÃtésre" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "Csomag ellenÅrzése: %s" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "Kicsomagolás: %s" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "Nincs kitömörÃthetÅ fájl" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "kicsomagolás" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "Jelszóval védett" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "Hibás jelszó" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "%s fájl törlése" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "Kicsomagolás kész" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "TömörÃtett állomány hiba" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "CRC hiba" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "Ismeretlen hiba" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "Felhasználó és csoport beállÃtás sikertelen" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "Click'N'Load: A 9666 port használatban van" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "%s kredit maradt" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "Nem sikerÃŒlt választ kÃŒldeni." -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "A CaptchaTrader hozzáférésen nincs elég credit" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "Crypter lista nem található" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "Crypter lista ÃŒres" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "Letöltés befejezve: %(name)s @ %(plugin)s" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "Ãj CaptchaID a feltöltésbÅl: %s : %s" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "A Captcha 9kw.eu hozzáférésen nincs elég credit" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "Scriptek telepÃtve - %s: " -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "Script nem futtatható:" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "Hiba: %(script)s: %(error)s" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "Az ExpertDecoders hozzáférésen nincs elég credit" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "ElÅször adj meg rehost.to hozzáférést majd indÃtsd újra a pyLoad-ot." -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "ElÅször adj meg premiumize.me hozzáférést majd indÃtsd újra a pyLoad-ot." -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "%d kredit maradt" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "Captcha megfejtéshez nincs kliens csatlakozva és nincs telepÃtve Pil vagy tesseract" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "Felhasználó és csoport beállÃtás sikertelen: %s" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/hu/LC_MESSAGES/pyLoadCli.po b/locale/hu/LC_MESSAGES/pyLoadCli.po index bdb9441d6..288299d23 100644 --- a/locale/hu/LC_MESSAGES/pyLoadCli.po +++ b/locale/hu/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr " Parancssoros felÃŒlet" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "%s letöltés:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr " Sebesség: " -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr " Méret: " -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr " Befejezve: " -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr " ID: " -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "várakozás: " -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "Ãllapot:" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "felfÃŒggesztve" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "fut" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "össz. sebesség" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "Várólistás fájlok" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "Ãsszesen" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "MenÃŒ:" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr " Link hozzáadás" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr " Várólista kezelése" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr " GyűjtÅ kezelése" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr " Szerver szÃŒneteltetése/folytatása" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr " Szerver kilövése (Kill)" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr " Bezárás" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "Használd a következÅ formát: add <Csomag neve> <link> <link2> ..." -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "%d link ellenÅrzése:" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "A fájl nem létezik." -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "pyLoad leállÃtva" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "Szerver állapota" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "Várólistás fájlok" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "GyűjtÅben levÅ letöltések" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "Csomag várólistához adása" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "Csomag gyűjtÅhöz adása" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "Fájl törlése várólista/gyűjtÅ" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "Csomag törlése várólista/gyűjtÅ" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "Csomag áthelyezése a várólista és a gyűjtÅ között" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "Fájlok újraindÃtása" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "Csomagok újraindÃtása" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "Online státusz ellenÅrzése, csak helyi konténer esetében" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "A konténer fájl online státuszának ellenÅrzése" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "Szerver szÃŒneteltetése" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "letöltések folytatása" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "SzÃŒneteltetés/folytatás" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "szerver kilövése (Kill)" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "Parancsok listája:" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "Nem sikerÃŒlt Ãrni a felhasználói beállÃtások fájlját" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "Ehhez a pyLoad maghoz való csatlakozáshoz szÃŒkséged van py-openssl-re." -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "CÃm: " -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "Port: " -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "Felhasználó: " -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "Jelszó: " -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "Hibás belépési adatok." -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "Nem sikerÃŒlt kapcsolódni ide: %(addr)s:%(port)s." -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "Ehhez a pyLoad maghoz való csatlakozáshoz szÃŒkséged van py-openssl-re." -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "Az interaktÃv mód néhány parancs után figyelmen kÃvÃŒl hagyva." -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "Csomag hozzáadása:" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "Add meg az új csomag nevét" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "Csomag: %s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "Hozzáadandó linkek." -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "Ãrd %s miután végeztél." -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "Link felvéve: " -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr " vissza a fÅmenÃŒbe" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "Csomagok kezelése:" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "Linkek kezelése:" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "Mit szeretnél áthelyezni?" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "Mit szeretnél törölni?" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "Mit szeretnél újraindÃtani?" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "Válaszd ki mit szeretnél csinálni, vagy adj meg egy csomag számot." -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "törlés" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "áthelyezés" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "újraindÃtás" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr " - elÅzÅ" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr " - következÅ" diff --git a/locale/hu/LC_MESSAGES/setup.po b/locale/hu/LC_MESSAGES/setup.po index 6e9116909..bd43fefc0 100644 --- a/locale/hu/LC_MESSAGES/setup.po +++ b/locale/hu/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "i" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "Ãdvözöllek a pyLoad beállÃtási segédben." -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "EllenÅrizzÃŒk a rendszert és létrehozunk egy alap beállÃtást a pyLoad számára." -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "A [] közötti érték minden esetben az alapértelmezett érték," -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "ha nem akarod megváltoztatni, vagy nem vagy biztos benne mit válassz, csak nyomj entert." -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "Ne feledd: a segédhez visszatérhetsz ha a pyload.py-t a --setup vagy -s paraméterekkel indÃtod." -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "Ha bármi probléma lépne fel a segéd futása közben nyomj STRG-C kombinációt" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "a megszakÃtáshoz, és hogy ne induljon el újra automatikusan." -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "Ha készen állsz a rendszer ellenÅrzésre, nyomj Entert." -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "A pyLoad futtatásához szÃŒkséged van a pycurl, sqlite és python 2.5, 2.6 vagy 2.7 verzióra." -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "Ezek javÃtása után futtasd újra a pyLoad-ot." -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "A telepÃtÅ bezárul." -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "Rendszer ellenÅrzés kész, nyomj Entert az eredmény megjelenÃtéséhez." -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "## Státusz ##" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "konténer dekódolás" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "ssl kapcsolat" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "automatikus captcha dekódolás" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "Webes felÃŒlet" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "kiterjesztett Click'N'Load" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "ElérhetÅ szolgáltatások:" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "Hiányzó szolgáltatások: " -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "py-crypto nem elérhetÅ" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "Erre szÃŒkséged van a konténer fájlok dekódolásához." -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "SSL nem elérhetÅ" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "Erre szÃŒkséged van, ha biztonságos kapcsolatot szeretnél a mag vagy webes felÃŒlet eléréséhez." -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "Ha csak helyben akarod elérni a pyLoad-ot, az ssl nem szÃŒkséges." -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "nincs elérhetÅ Captcha felismerÅ" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "Csak néhány szolgáltatóhoz kell és ingyenes felhasználóként." -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "GUI nem elérhetÅ" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "Grafikus felÃŒlet." -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "nincs JavaScript motor" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "Néhány Click'N'Load linknek szÃŒksége van erre. TelepÃtsd a Spidermonkey, ossp-js, pyv8 vagy rhino csomagokat." -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "Most megszakÃthatod a telepÃtést, és kijavÃthatod az esetleges hibákat" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "Folytatod a beállÃtást?" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "Megváltoztatod a konfigurációs fájlok helyét? A jelenlegi: %s" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "Megváltoztatod a konfigurációs fájlok helyét?" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "Be akarod állÃtani a bejelentkezési adatokat és az általános beállÃtásokat?" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "Ajánlott az elsÅ futtatásnál." -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "Létre akarod hozni az általános beállÃtásokat?" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "Be akarod állÃtani az ssl-t?" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "BeállÃtod az ssl-t?" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "BeállÃtod a webes kezelÅfelÃŒletet?" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "BeállÃtod a webes kezelÅfelÃŒletet?" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "A beállÃtások sikeresen elvégezve." -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "Nyomj entert a kilépéshez majd indÃtsd újra a pyLoad-ot" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "## Rendszer ellenÅrz ##" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "A python verziód túl új. Használd a 2.6/2.7-es verziót." -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "A python verziód túl régi. Használj legalább 2.5-ös verziót." -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "Python Verzió: OK" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "A telepÃtett jinja2 verzió %s túl régi." -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "Biztonságosan tovább haladhatsz, de ha a webes felÃŒlet nem működik," -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "frissÃtsd vagy töröld, a pyLoad tartalmaz egy alkalmas jinja2 könyvtárat." -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "JS motor" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "## Ãltalános beállÃtások ##" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "Ezek a belépési adatok a következÅkhöz alkalmasak: CLI, GUI, web felÃŒlet." -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "Felhasználónév" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "KÃŒlsÅ kliensek (GUI, CLI, ...) számára szÃŒkséges távoli elérés a hálózaton keresztÃŒli működéshez." -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "Ha csak a webes felÃŒletet használod, akkor kikapcsolhatod, hogy memóriát takarÃts meg." -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "Távoli hozzáférés engedélyezése" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "Nyelv" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "Letöltési könyvtár" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "Max. egyidejű letöltés" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "Ãjracsatlakozás használata?" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "Ãjracsatlakozó script helye" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "## Webes felÃŒlet BeállÃtása ##" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "Webes felÃŒlet engedélyezése?" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "Figyelt cÃm, ha csak helyben akarod elérni akkor használd az 127.0.0.1 vagy localhost nevet." -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "CÃm" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "Port" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "A pyLoad számos backend szerver lehetÅséget nyújt, ezekrÅl következik egy rövid ismertetÅ." -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "Használható több web-szerverrel (apache, lighttpd) egyéni beállÃtást igényel, ami nem egyszerű." -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "LetölthetÅ innen: https://github.com/jonashaag/bjoern, le kell fordÃtani" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "Figyelem: Néhány kivételes esetben a beépÃtett szerver nem működik megfelelÅen. Ha hibát észlel a webes felÃŒleten" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "térjen vissza ide, és válasszon másik szervert." -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "Szerver" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "## SSL beállÃtás ##" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "Futtasd ezeket a parancsokat a konfigurációs könyvtárban, az ssl tanúsÃtványok elkészÃtéséhez:" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "Ha kész vagy, és minden rendben, akkor aktiválhatod az ssl-t." -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "SSL engedélyezése?" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "Válassz műveletet" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "1 - Felhasználó szerkesztés/felvétel" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "2 - Felhasználók listázása" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "3 - Felhasználó törlése" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "4 - Kilépés" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "Felhasználók" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "A konfigurációs fájlok új helye, a jelenlegi konfiguráció nem kerÃŒl áthelyezésre." -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "Konfiguráció helye" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "A konfigurációs fájlok helye megváltozott," -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "Nyomj Entert a kilépéshez." -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "A beállÃtások eléri útja hibás: %s" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "%s: hiányzik" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "Jelszó: " -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "Rövid jelszó. Legalább 4 karaktert használj." -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "Jelszó (ismét): " -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "A jelszavak nem egyeznek." -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "igen" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "igaz" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "i" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "nem" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "hamis" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "h" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "Hibás érték" diff --git a/locale/id/LC_MESSAGES/django.po b/locale/id/LC_MESSAGES/django.po index 0c654c4d7..97f0628e5 100644 --- a/locale/id/LC_MESSAGES/django.po +++ b/locale/id/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/id/LC_MESSAGES/pyLoad.po b/locale/id/LC_MESSAGES/pyLoad.po index 80b62ab74..970c516c2 100644 --- a/locale/id/LC_MESSAGES/pyLoad.po +++ b/locale/id/LC_MESSAGES/pyLoad.po @@ -12,853 +12,848 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "" -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "" -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.pying failed: %(name)s | %(msg)s" -msgstr "" - -#: module/threads/PluginThread.py:388 -#, python-format -msgidmodule/threads/ServerThread.pymodule/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, p
\ No newline at end of file diff --git a/locale/id/LC_MESSAGES/pyLoadCli.po b/locale/id/LC_MESSAGES/pyLoadCli.po index 589938d86..feb756424 100644 --- a/locale/id/LC_MESSAGES/pyLoadCli.po +++ b/locale/id/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "" diff --git a/locale/id/LC_MESSAGES/setup.po b/locale/id/LC_MESSAGES/setup.po index 7a2890016..ca6ad636f 100644 --- a/locale/id/LC_MESSAGES/setup.po +++ b/locale/id/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "" diff --git a/locale/it/LC_MESSAGES/django.po b/locale/it/LC_MESSAGES/django.po index 3fc6b7ee7..58bcfe478 100644 --- a/locale/it/LC_MESSAGES/django.po +++ b/locale/it/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "Richiesto nuovo captcha" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "Leggi il testo nel captcha." -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "pyload riavviato" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "off" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "Successo" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "on" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "Sei sicuro di voler chiudere pyLoad?" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "Riavvia il collegamento" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "Cancella collegamento" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "Immetti un nome per il pacchetto." -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "Clicca sulla posizione giusta del captcha." -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "Si Ú verificato un errore." -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "La cartella Ú vuota" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "Falliti" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "Nessun Captcha da leggere." -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "Le passwords non corrispondono." -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "Settaggi salvati." -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "Nuova cartella" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "Sei sicuro di voler riavviare pyLoad?" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "attendo %s" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "Download attivi" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "Home" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "Coda" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "Collettore" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "Download" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "Log" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "Configurazione" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "Nome" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "Stato" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "Info" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "Dimensione" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "Avanzamento" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "Login" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "Nome utente" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "Password" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "Il tuo nome utente e la tua password non corrispondono. Riprova." -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "Per resettare i tuoi dati di accesso o aggiungere un utente esegui:" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "Elimina i completi" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "Riavvia i falliti" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "Cartella:" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "Password:" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "Modifica pacchetto" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "Modifica i dettagli del pacchetto qui di seguito." -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "Il nome del pacchetto." -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "Cartella" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "Nome della sottocartella per questi download." -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "Lista delle password usate per decomprimere." -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "Invia" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "reset" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "Ti sei disconnesso con successo." -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "Percorso" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "assoluto" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "relativo" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "nome" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "dimensioni" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "tipo" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "ultima modifica" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "cartella superiore" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "nessun contenuto" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "Generale" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "Plugin" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "Account" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "Scegli una sezione dal menu" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "Plugin" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "Premium" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "Valido fino al:" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "Traffico rimanente:" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "Tempo" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "Max paralleli" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "Elimina? " -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "valido" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "non valido" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "si" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "no" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "Aggiungi" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "Aggiungi Account" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "Inserisci i dati di un account premium per usufruire delle sue funzionalità ." -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "Il tuo nome utente." -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "La password di questo account." -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "Tipo" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "Scegli l'hoster per il tuo account." -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "Avvio" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "precedente" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "prossimo" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "Fine" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "Novità " -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "Supporto" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "Sistema" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "Python:" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "OS:" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "Versione pyLoad:" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "Cartella installazione:" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "Cartella configurazione:" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "Cartella download:" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "Spazio libero:" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "Lingua:" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "Porta Interfaccia Web:" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "Porta Interfaccia Remota:" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "Configurazione" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "File Manager" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "Aggiungi pacchetto" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "Incolla i tuoi link o carica un contenitore." -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "Il nome del nuovo pacchetto." -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "Collegamenti" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "Incolla qui i tuoi link oppure qualsiasi testo e premi il pulsante filtra." -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "Filtra URL" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "Password per l'archivio RAR" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "File" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "Carica un contenitore." -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "Destinazione" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "Captcha in lettura" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "Captcha" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "Il captcha." -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "Testo" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "Inserisci il testo per il captcha." -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "Chiudi" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "Interfaccia web" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "Nessun aggiornamento disponibile!" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "Plugin aggiornati, per favore riavviare pyLoad." -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "Captcha in attesa" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "Esci" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "Amministra" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "Info" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "Effettua il login!" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "Arresto" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "Annulla" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "Download:" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "Riconnetti:" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "Velocità :" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "Attivo:" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "Ricarica pagina" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "carico" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "Torna in cima" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "Chiudi pyLoad" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "Riavvia pyLoad" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "Per aggiungere utenti o cambiare le password usa:" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "Importante: l'utente Admin ha sempre tutti i permessi!" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "Cambia Password" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "Amministratore" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "Permessi" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "cambia" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "Inserisci la tua attuale e la nuova Password." -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "Utente" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "Password attuale" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "Nuova password" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "Inserisci la nuova password." -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "Nuova password (ripetila)" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "Ripeti la nuova password." -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "Non hai i permessi per accedere a questa pagina." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "Cartella Download non trovata." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "illimitato" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "non disponibile" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "Esegui pyload.py -s per accedere al setup." diff --git a/locale/it/LC_MESSAGES/pyLoad.po b/locale/it/LC_MESSAGES/pyLoad.po index 5258f50f7..683ffed12 100644 --- a/locale/it/LC_MESSAGES/pyLoad.po +++ b/locale/it/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "Ricevuto segnale di uscita" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "pyLoad già in esecuzione con pid %s" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "Impossibile cambiare il gruppo: %s" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "Impossibile cambiare utente: %s" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "cartella dei log" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "Avvio" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "Uso la cartella home: %s" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "pycrypto per decodificare la libreria di file" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "cartella per i file temporanei" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "cartella dei download" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "OpenSSL per la connessione sicura" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "Sposto la vecchia configurazione utente al DB" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "Per favore controlla i tuoi dati di accesso eseguendo ./pyload.py -u" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "Tutti i link rimossi" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "Tempo di download: %s" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "Spazio libero: %s" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "Attivazione Account..." -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "Attivo i Plugins..." -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "pyLoad Ú attivo e funzionante" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "riavvio pyLoad" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "esco da pyLoad" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "Installazione %s" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "%(desc)s: %(name)s non trovato" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "non posso creare %(desc)s: %(name)s" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "spegnimento..." -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "errore durante lo spegnimento" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "pyLoad chiuso da Terminale" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "Filedatabase Ú stato cancellato a causa dell'incompatibilità di versione." -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "Il file del database non poteva essere convertito." -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "Il database Ú stato convertito dalla v2 alla v3." -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "Il database Ú stato convertito dalla v3 alla v4." -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "Conversione del vecchio DB Django" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "finito" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "offiline" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "online" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "in coda" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "saltato" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "in attesa" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "temp. offline" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "avviando" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "fallito" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "annullato" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "decifrando" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "personalizzato" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "scaricando" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "elaborando" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "sconosciuto" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "Pacchetto completato: %s" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "ThriftBackend SSL in uso" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "Errore backend remoto: %s" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "Avvio %(name)s: %(addr)s:%(port)s" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "Impossibile avviare backend %(name)s | %(error)s" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "attendo %s" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "Certificati SSL non trovati." -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "Siamo spiacenti, abbiamo abbandonato il supporto per avviare %s direttamente all'interno di pyLoad" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "Puoi utilizzare il server threaded che offre buone prestazioni e l'SSL," -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "naturalmente puoi continuare ad usare il tuo attuale %s con il server fastcgi di pyLoads" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" -msgstr "si possono trovare configurazioni di esempio nella directory module/webui/servers" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" +msgstr "si possono trovare configurazioni di esempio nella directory pyload/webui/servers" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "Non Ú possibile usare %(server)s, python-flup inon Ú installato!" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "Errore di importazione del server lightweight: %s" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "E' necessario scaricare e compilare bjoern, https://github.com/jonashaag/bjoern" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" -msgstr "Copia il file boern.so nella cartella module/lib oppure usa setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" +msgstr "Copia il file boern.so nella cartella pyload/lib oppure usa setup.py install" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "Naturalmente Ú necessario avere familiarità con linux e saper compilare da codice sorgente" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "Il server Ú stato impostato su threaded, a causa di problemi di prestazioni noti sotto Windows." -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "Questo server non supporta SSL, si consiglia l'uso della versione threaded" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "Avvio webserver integrato: %(host)s:%(port)d" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "Avvio webserver SSL threaded: %(host)s:%(port)d" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "Avvio Webserver threaded: %(host)s:%(port)d" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "Avvio server fastcgi: %(host)s:%(port)d" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "Avvio il webserver lightweight (bjoern): %(host)s:%(port)d" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "Non hai i permessi per accedere a questa pagina." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "Cartella Download non trovata." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "illimitato" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "non disponibile" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "Esegui pyload.py -s per accedere al setup." -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "Download accellerato fallito, ripiego su singola connessione | %s" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "Avvio Download: %s" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "Download terminato: %s" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "Il plugin %s ha fallito una funzione." -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "Download annullato: %s" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "Download riavviato: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "Il download Ú offline: %s" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "Il download Ú temporaneamente offline: %s" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "Download fallito: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "Impossibile collegarsi all'host o connessione resettata, aspetto 1 minuto e riprovo." -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "Download saltato: %(name)s a causa di %(plugin)s" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "Decodifica avviata: %s" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "Decodifica fallita: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "Riprovo %s" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "Recupero informazioni per %(name)s fallito | %(err)s" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "Errore durante l'esecuzione hooks: %s" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "Attivazione di %(name)s fallita" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "Plugins attivati: %s" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "Plugins disattivati: %s" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "Riconnessione fallita: %s" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "Script per la riconnessione non trovato!" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "Nuovo tentativo di connessione" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "Fallita l'esecuzione dello script di riconnessione!" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "Riconnesso, nuovo IP: %s" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "Spazio su disco insufficiente" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "Impossibile effettuare il login con l'account %(user)s | %(msg)s" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "Password errata" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "Il tuo orario %s ha un formato sbagliato, usa: 1:22-3:44" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "L'account %s non ha abbastanza traffico, controllo di nuovo tra 30min" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "L'account %s Ú scaduto; prossimo controllo fra 1 ora" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "Limite di download raggiunto" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "%s ha uno schema non valido." -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "Errore importando %(name)s: %(msg)s" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "Nessun Hoster caricato" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "Attiva il download diretto sul tuo account Bitshare" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "LinkList non può essere cancellato." -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "Impostazioni account cancellato a causa del nuovo formato della configurazione." -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "Richiesta autorizzazione (nomeutente:password)" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "Per favore Inserisci il tuo account %s o disattiva questo plugin" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "C'era del codice HTML nel file scaricato (%s)... errore di redirect? Il download verrà riavviato." -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "File temporaneamente non disponibile" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "Netload: attendo %d s tra i download." -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "Netload: attendo %d s per il captcha." -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "Il file scaricato era vuoto" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "Chiave API invalida" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "%s: Traffico rimanente non sufficiente" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "Traffico superato" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "Rapidshare: Traffic Share (download diretto)" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "Stai già scaricando da questo indirizzo IP, aspetta 60 secondi" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "Auth Code non valido, il download sarà riavviato" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "RapidShareCom: Nessuno slot gratuito libero" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "Hai bisogno di un account Premium per questo file" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "Nome di file riportato non valido" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "Errore durante il download parallelo, attendo 60s." -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "Non connesso." -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "Decifratura non riuscita" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "Nessuna chiave fornita nell'URL" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "Codice di errore:" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "Il file non esiste." -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "*** I plugin sono stati aggiornati, riavvia pyLoad ***" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "Plugins aggiornati e riavviati" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "Nessun aggiornamento per i plugin disponibile" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "Nessun aggiornamento per pyLoad" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "*** Nuova versione di pyLoad %s disponibile ***" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "*** Scaricala da qui: http://pyload.org/download ***" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "Impossibile collegarsi al server per gli aggiornamenti" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "Nuova versione di %(type)s|%(name)s : %(version).2f" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "Errore durante l'aggiornamento di %s" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "Versione non corrispondente" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "Download finito: %(name)s @ %(plugin)s " -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "Nuova richiesta Captcha: %s" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "Rispondi usando 'c %s text on the captcha'" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "Inserire prima il tuo account premium.to e riavviare pyLoad" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "Aggiunto %s da HotFolder" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "%s non installato" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "Impossibile attivare %s" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "Attivato" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "Nessun plugin per l'estrazione attivato" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "Il pacchetto %s Ú stato messo in coda per l'estrazione successiva" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "Verifico pacchetto %s" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "Estraggo in %s" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "Nessun file trovato da estrarre" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "estrazione" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "Protetto da password" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "Password errata" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "Cancello %s file" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "Estrazione completata" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "Archivio danneggiato" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "CRC non corrispondente" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "Errore Sconosciuto" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "Configurazione Utente e Gruppo fallita" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "Click'N'Load: Porta 9666 già in uso" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "%s crediti rimasti" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "Non posso inviare la risposta." -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "Il tuo account CaptchaTrader non ha crediti sufficienti" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "Elenco Crypter non trovato" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "Elenco Crypter vuoto" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "Download finito: %(name)s @ %(plugin)s" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "Nuovo CaptchaID dall'upload: %s : %s" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "Il tuo account Captcha 9kw.eu non ha abbastanza crediti" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "Script installati per %s: " -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "Script non eseguibile:" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "Errore in %(script)s: %(error)s" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "Il tuo account ExpertDecoders ha non abbastanza crediti" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "Inserisci prima il tuo account rehost.to e poi riavvia pyLoad" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "Inserire un account premiumize.me valido e riavviare pyLoad." -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "%d crediti rimasti" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "Pil e tesseract non sono installati e nessun Client Ú connesso per decifrare i captcha" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "Nessun risultato del captcha Ú stato trovato da alcun plugin nel tempo concesso." -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "Impostazione di Utente e Gruppo non riuscita: %s" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "Nessun client connesso per decifrare i captcha." -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "Aggiunto pacchetto %(name)s contenente %(count)d collegamenti" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "Aggiunti %(count)d link al pacchetto #%(package)d " -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "Nessun motore js rilevato, installare Spidermonkey, ossp-js, pyv8 o rhino" diff --git a/locale/it/LC_MESSAGES/pyLoadCli.po b/locale/it/LC_MESSAGES/pyLoadCli.po index 937056b8a..b9e963bc3 100644 --- a/locale/it/LC_MESSAGES/pyLoadCli.po +++ b/locale/it/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr " Interfaccia a riga di comando" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "%s File Scaricati:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr " Velocità : " -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr " Dimensione: " -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr " Terminato in: " -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr " ID: " -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "in attesa: " -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "Stato:" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "in pausa" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "in esecuzione" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "Velocità totale" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "File in coda" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "Totale" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "Menu:" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr " Aggiungi Link" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "Gestisci Coda" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "Gestisci Libreria" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr " Pausa/Riattiva Server" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr " Termina Server" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr " Esci" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "Si prega di utilizzare questa sintassi: add <Nome pacchetto> <link> <link2> ..." -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "Controllo %d link:" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "Il file non esiste." -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "pyLoad Ú stato chiuso" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "Mostra lo stato del server" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "Mostra i download in coda" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "Mostra i download nella libreria" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "Aggiunge pacchetti alla coda" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "Aggiungi pacchetto alla libreria" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "Elimina file dalla Coda/Collezione" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "Elimina pacchetti dalla Coda/Libreria" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "Sposta Pacchetti dalla Coda alla Libreria o vice versa" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "Riavvia file" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "Riavvia pacchetti" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "Controlla stato online, funziona con contenitori locali" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "Controlla stato online di un file contenitore" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "Mette in pausa il server" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "continua i download" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "Commutatore pausa/riprendi" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr " termina server" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "Lista dei comandi:" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "Impossibile scrivere il file di configurazione utente" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "Hai bisogno di py-openssl per connetterti a questo pyLoad Core." -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "Indirizzo:" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "Porta: " -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "Nome utente: " -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "Password:" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "I dati di login sono errati." -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "Impossibile stabilire una connessione a %(addr)s:%(port)s." -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "Hai bisogno di py-openssl per connetterti a questo pyLoad core." -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "Modalità interattiva ignorata dato che hai passato alcuni comandi." -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "Aggiungi Pacchetto:" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "Inserisci un nome per il nuovo pacchetto" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "Pacchetto: %s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "Analizza i link che desideri aggiungere." -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "Digita %s quanto hai fatto." -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "Link aggiunti: " -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr " torna al menu principale" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "Gestisci Pacchetti:" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "Gestisci Link:" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "Che cosa vuoi spostare?" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "Che cosa vuoi cancellare?" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "Che cosa vuoi riavviare?" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "Scegli cosa vuoi fare oppure digita il numero del pacchetto." -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "cancella" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "sposta" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "riavvia" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr " - precendente" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr " - sucessivo" diff --git a/locale/it/LC_MESSAGES/setup.po b/locale/it/LC_MESSAGES/setup.po index bf61f047c..9a7e5004d 100644 --- a/locale/it/LC_MESSAGES/setup.po +++ b/locale/it/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "s" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "n" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "Benvenuto nell'Assistente di Configurazione di pyLoad." -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "Il setup controllerà il tuo sistema e genererà una configurazione di base per avviare pyLoad." -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "Il valore tra le parentesi quadre [] Ú sempre il valore di default," -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "nel caso in cui non vuoi cambiare impostazione o non sei sicuro su cosa scegliere, premi semplicemente Invio." -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "Ricorda: Puoi sempre rieseguire questo assistente con i parametri --setup o -s, quando avvii pyload.py ." -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "Se hai qualche problema con questo assistente premi CRTL+C," -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "per annullare e non farlo partire più automaticamente con pyload.py ." -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "Quando sei pronto per la verifica del sistema premi Invio." -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "Hai bisogno di pycurl, sqlite e python 2.5, 2.6 o 2.7 per avviare pyLoad." -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "Per favore corregilo e riavvia pyLoad." -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "Il setup si chiuderà ." -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "Verifica del sistema finita, premi Invio per vedere il report di stato." -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "## Stato ##" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "decrittografia contenitore" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "connessione ssl" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "decrittografia automatica captcha" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "GUI" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "Interfaccia web" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "Click'N'Load esteso" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "Funzioni disponibili:" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "Funzioni mancanti: " -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "py-crypto non disponibile" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "Hai bisofno di questo se vuoi decifrare i contenitori di file." -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "SSL non disponibile" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "Questo Ú necessario se vuoi stabilire una connessione sicura con il core o l'interfaccia web." -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "Se vuoi accedere a pyLoad soltanto in locale, SSL non Ú necessario." -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "Riconoscimento captcha non disponibile" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "Necessario solo per alcuni hoster e come freeuser." -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "Gui non disponibile" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "L'interfaccia utente grafica (GUI)." -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "nessun motore JavaScript trovato" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "Avrai bisogno di questo per alcuni link Click'N'Load. Installa Spidermonkey, ossp-js, pyv8 o rhino" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "Se vuoi puoi annullare il setup ora e correggere alcune dipendenze." -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "Continuare con il setup?" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "Vuoi cambiare il percorso per la configurazione? Quello attuale Ú %s" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "Se si utilizza pyLoad su un server o la partizione principale si trova su una memoria flash interna potrebbe essere una buona idea cambiarla." -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "Cambiare il percorso della configurazione?" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "Si desidera configurare i dati di accesso e le impostazioni di base?" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "E' consigliato per il primo avvio." -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "Creare configurazione di base?" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "Vuoi configurare l'ssl?" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "Configurare ssl?" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "Vuoi configurare l'interfaccia web?" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "Configurare l'interfaccia web?" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "Configurazione terminata con successo." -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "Premi Invio per uscire e riavviare pyLoad" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "## Verifica del Sistema ##" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "La versione di python Ú troppo recente, usare Python 2.6/2.7" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "La versione di python Ú troppo vecchia, usare almeno Python 2.5" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "Versione di Python: OK" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "La versione installata %s di jinja2 sembra essere troppo vecchia." -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "Si può tranquillamente continuare, ma se l'interfaccia web non funziona," -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "si prega di aggiornarla o disinstallarla, pyLoad include una libreria jinja2 sufficiente." -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "motore JS" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "## Configurazione Base ##" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "I seguenti dati di accesso sono validi per CLI, GUI e interfaccia web." -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "Nome utente" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "I client esterni (GUI, CLI o altri) richiedono accesso remoto al sistema per funzionare nella rete." -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "Comunque, se hai in mente di utilizzare solo l'interfaccia web puoi disattivarlo per ridurre il consumo di memoria ram." -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "Attiva l'accesso remoto" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "Lingua" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "Cartella di download" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "Numero massimo di download paralleli" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "Usare la riconnessione?" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "Posizione dello script di riconnessione" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "## Configurazione dell'interfaccia web ##" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "Attivare l'interfaccia web?" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "Indirizzo di ascolto, se usi 127.0.0.1 o localhost, l'interfaccia web sarà accessibile soltanto localmente." -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "Indirizzo" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "Porta" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "pyLoad offre diversi tipi di supporto a server, segue una breve spiegazione." -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "Server di default, la scelta migliore se non sai quale scegliere." -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "Questo server supporta SSL ed Ú una valida alternativa a quello integrato." -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "Può essere utilizzato con apache o lighttpd, ma ne richiede la configurazione, che non Ú una procedura semplice." -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "Alternativa molto veloce, scritta in C, richiede libev e conoscenza di linux." -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "Scaricalo da qui: https://github.com/jonashaag/bjoern, compilalo" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" -msgstr "e copia bjoern.so in module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" +msgstr "e copia bjoern.so in pyload/lib" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "Attenzione: In alcuni rari casi il server integrato non funziona, se noti problemi con l'interfaccia web" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "torna qui e sostituisci il server integrato con quello threaded." -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "Server" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "## Configurazione SSL ##" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "Esegui questi comandi dalla cartella di configurazione di pyLoad per creare i certificati SSL:" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "Se hai finito e tutto Ú andato bene, puoi attivare SSL ora." -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "Attivare SSL?" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "Seleziona azione" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "1 - Crea/Modifica utente" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "2 - Lista utenti" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "3 - Rimuovi utente" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "4 - Esci" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "Utenti" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "Imposta nuovo percorso per la configurazione. La configurazione attuale NON sarà trasferita!" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "Percorso di configurazione" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "Percorso di configurazione modificato. il setup ora si chiuderà ; riavvialo per andare avanti." -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "Premi Invio per uscire." -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "Impostazione del percorso di configurazione non riuscita: %s" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "%s: OK" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "%s: mancante" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "Password:" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "Password troppo corta. Usa almeno 4 caratteri." -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "Password (di nuovo): " -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "Le passwords non corrispondono." -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "si" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "vero" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "v" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "no" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "falso" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "f" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "Inserimento non valido" diff --git a/locale/ja/LC_MESSAGES/django.po b/locale/ja/LC_MESSAGES/django.po index 26d05ee3a..d65e93853 100644 --- a/locale/ja/LC_MESSAGES/django.po +++ b/locale/ja/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "æ°ãã Captcha ããªã¯ãšã¹ã" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "Captcha ã®ããã¹ããèªãã§ãã ããã" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "pyLoad ãåèµ·åããŸãã" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "ãªã" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "æåããŸãã" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "ãªã³" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "pyLoad ãæ¬åœã«çµäºããŸãã?" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "ãªã³ã¯ãåèµ·å" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "ãªã³ã¯ãåé€" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "ããã±ãŒãžåãå
¥åããŠãã ããã" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "å³ã® captcha ã®äœçœ®ãã¯ãªãã¯ããŠãã ããã" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "ãšã©ãŒãçºçããŸããã" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "ãã©ã«ãã空ã§ã" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "èªã¿åã Captcha ããããŸããã" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "ãã¹ã¯ãŒããäžèŽããŸããã" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "èšå®ãä¿åãããŸããã" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "æ°èŠãã©ã«ã" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "pyLoad ãæ¬åœã«åèµ·åããŸãã?" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "%s ãåŸ
æ©äž" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "ã¢ã¯ãã£ããªããŠã³ããŒã" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "ããŒã " -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "ãã¥ãŒ" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "ã³ã¬ã¯ã¿ãŒ" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "ããŠã³ããŒã" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "ãã°" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "èšå®" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "åå" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "ã¹ããŒã¿ã¹" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "æ
å ±" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "ãµã€ãº:" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "鲿" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "ãã°ã€ã³" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "ãŠãŒã¶ãŒå" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "ãã¹ã¯ãŒã" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "ãŠãŒã¶åããã¹ã¯ãŒããäžèŽããŸãããå詊è¡ããŠãã ããã" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "ãã°ã€ã³ ããŒã¿ããªã»ããããããŠãŒã¶ã远å ããã«ã¯ä»¥äžãå®è¡ããŠãã ãã:" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "åé€ãå®äºããŸãã" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "åèµ·åã«å€±æããŸãã" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "ãã©ã«ã:" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "ãã¹ã¯ãŒã:" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "ããã±ãŒãžãç·šé" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "äžã®ããã±ãŒãžã®è©³çްãç·šéããŸãã" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "ããã±ãŒãžã®ååã" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "ãã©ã«ããŒ" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "ãããã®ããŠã³ããŒãã®ããã®ãµããã©ã«ãã®ååã§ãã" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "unrar ã«äœ¿ããããã¹ã¯ãŒãã®äžèЧã§ãã" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "éä¿¡" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "ãªã»ãã" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "æ£åžžã«ãã°ã¢ãŠãããŸããã" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "ãã¹" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "絶察ç" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "çžå¯Ÿç" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "åå" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "æšæ¬æ°" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "çš®é¡" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "æçµæŽæ°" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "芪ãã£ã¬ã¯ããª" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "å
容ãªã" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "æšæº" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "ãã©ã°ã€ã³" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "ã¢ã«ãŠã³ã" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "ã¡ãã¥ãŒããã»ã¯ã·ã§ã³ãéžæ" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "ãã©ã°ã€ã³" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "ãã¬ãã¢ã " -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "æå¹æé" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "æ®ããã©ãã£ãã¯" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "æé" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "æå€§ã®äžŠåæ°" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "åé€ããŸãã?" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "æå¹ã§ã" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "ç¡å¹" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "ã¯ã" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "ããã" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "远å " -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "ãã¬ãã¢ã æ©èœã䜿ãã«ã¯ã¢ã«ãŠã³ã ããŒã¿ãå
¥åããŠãã ããã" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "ããªãã®ãŠãŒã¶åã§ãã" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "ãã®ã¢ã«ãŠã³ãã®ãã¹ã¯ãŒãã§ãã" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "ããªãã®ã¢ã«ãŠã³ãã®ãã¹ãã£ã³ã°äŒç€ŸãéžæããŠãã ããã" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "éå§" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "åãž" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "次ãž" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "çµäº" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "ãã¥ãŒã¹" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "ãµããŒã" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "pyLoad ã®ããŒãžã§ã³:" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "ã€ã³ã¹ããŒã« ãã©ã«ã:" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "èšå®ãã©ã«ã:" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "ããŠã³ããŒã ãã©ã«ã:" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "空ãé å:" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "èšèª:" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "ãŠã§ãã€ã³ã¿ãã§ãŒã¹ã®ããŒã:" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "ãªã¢ãŒã ã€ã³ã¿ãã§ãŒã¹ã®ããŒã:" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "ãã¡ã€ã«ãããŒãžã£" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "ããã±ãŒãžã远å " -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "ãªã³ã¯ã貌ãä»ãããã³ã³ãããã¢ããããŒãããŠãã ããã" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "æ°ããããã±ãŒãžã®ååã" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "ãªã³ã¯" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "ããã«ãªã³ã¯ãä»»æã®ããã¹ãã貌ãä»ããããã£ã«ã¿ ãã¿ã³ãæŒããŠãã ããã" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "ãã£ã«ã¿ URL" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "RAR ã¢ãŒã«ã€ãã®ãã¹ã¯ãŒã" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "ãã¡ã€ã«" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "ã³ã³ãããã¢ããããŒãããŠãã ããã" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "ä¿åå
ïŒ" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "Captcha ãèªã¿èŸŒã¿äž" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "Captcha ã§ãã" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "ããã¹ã" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "Captcha ã®ããã¹ããå
¥åããŠãã ããã" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "éãã" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "ãŠã§ãã€ã³ã¿ãã§ãŒã¹" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "pyLoad ã®æŽæ°ãå©çšã§ããŸã!" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "ãã©ã°ã€ã³ãæŽæ°ãããŸãããåèµ·åããŠãã ãã!" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "Captcha ãåŸ
æ©äž" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "ãã°ã¢ãŠã" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "管ç" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "æ
å ±" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "ãã°ã€ã³ããŠãã ãã!" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "忢" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "ãã£ã³ã»ã«" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "ããŠã³ããŒã:" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "忥ç¶:" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "é床:" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "ã¢ã¯ãã£ã:" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "ããŒãžãåèªèŸŒ" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "èªã¿èŸŒã¿äž" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "ãããã«æ»ã" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "pyLoad ãçµäº" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "pyLoad ãåèµ·å" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "ãŠãŒã¶ã远å ãŸãã¯ãã¹ã¯ãŒãã倿Žããã«ã¯:" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "éèŠ: 管çè
ãŠãŒã¶ã«ã¯åžžã«ãã¹ãŠã®æš©éããããŸã!" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "ãã¹ã¯ãŒãã倿Ž" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "æš©é" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "倿Ž" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "çŸåšã®ãã¹ã¯ãŒããšæ°ãããã¹ã¯ãŒããå
¥åããŠãã ããã" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "ãŠãŒã¶" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "çŸåšã®ãã¹ã¯ãŒã" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "æ°ãããã¹ã¯ãŒã" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "æ°ãããã¹ã¯ãŒãã§ãã" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "æ°ãããã¹ã¯ãŒã (åå
¥å)" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "æ°ãããã¹ã¯ãŒããç¹°ãè¿ããŠãã ããã" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "ç¡å¶é" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "å©çšäžå¯" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/ja/LC_MESSAGES/pyLoad.po b/locale/ja/LC_MESSAGES/pyLoad.po index 45cecdb97..e742cdd43 100644 --- a/locale/ja/LC_MESSAGES/pyLoad.po +++ b/locale/ja/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "çµäºã®ã·ã°ãã«ãåä¿¡" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "pyLoad ã¯ããã»ã¹ ID %s ã§æ¢ã«å®è¡äž" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "ã°ã«ãŒãã®å€æŽã«å€±æããŸãã: %s" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "ãŠãŒã¶ãŒã®å€æŽã«å€±æããŸãã: %s" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "ãã°ã®ãã©ã«ã" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "éå§äž" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "ããŒã ãã£ã¬ã¯ããªãšã㊠%s ã䜿çšäž" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "äžæãã¡ã€ã«ã®ãã©ã«ã" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "ããŠã³ããŒãå
ã®ãã©ã«ã" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "ã»ãã¥ã¢ãªæ¥ç¶ã®ããã® OpenSSL" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "./pyload.py -u ã§ããªãã®ãã°ã€ã³ããŒã¿ããã§ãã¯ããŠãã ãã" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "ãã¹ãŠã®ãªã³ã¯ãåé€ãããŸãã" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "ããŠã³ããŒãæé: %s" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "空ãé å: %s" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "ã¢ã«ãŠã³ããã¢ã¯ãã£ããŒãäž..." -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "ãã©ã°ã€ã³ãã¢ã¯ãã£ããŒãäž..." -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "pyLoad ãå®è¡äž" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "pyLoad ãåèµ·åäž" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "pyLoad ãçµäºããŸã" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "%s ãã€ã³ã¹ããŒã«" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "ã·ã£ããããŠã³äž..." -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "ã·ã£ããããŠã³äžã«ãšã©ãŒ" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "å®äº" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "ãªãã©ã€ã³" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "ãªã³ã©ã€ã³" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "ãã¥ãŒã«å
¥ã£ãŠããŸãã" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "ã¹ããã" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "åŸ
æ©äž" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "äžæçã«ãªãã©ã€ã³" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "éå§äž" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "倱æããŸãã" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "äžæ¢ããŸãã" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "埩å·å" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "ã«ã¹ã¿ã " -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "ããŠã³ããŒãäž" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "åŠçäž" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "äžæ" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "ããã±ãŒãžãå®äºããŸãã: %s" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "ãªã¢ãŒã ããã¯ãšã³ã ãšã©ãŒ: %s" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "éå§ %(name)sïŒ%(addr)sïŒ%(port)s" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr " ããã¯ãšã³ã %(name)sã®èªã¿èŸŒã¿ã«å€±æãã |%(error)s" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "%s ãåŸ
æ©äž" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "SSL èšŒææžãèŠã€ãããŸããã" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "ãã®ãµãŒããŒã§ SSL ã¯ãããŸããã代ããã«ã¹ã¬ããã䜿çšããŠãã ãã" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "ç¡å¶é" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "å©çšäžå¯" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "ããŠã³ããŒã ãã£ã³ã¯ãžã®ç§»è¡ã«å€±æããŸãã 1 ã€ã®æ¥ç¶ |ã%s" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "ããŠã³ããŒãéå§: %s" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "ããŠã³ããŒãå®äº: %s" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "ãã©ã°ã€ã³ %s ã«ã¯é¢æ°ããããŸããã" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "ããŠã³ããŒããäžæ¢: %s" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "ããŠã³ããŒããåé: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "ããŠã³ããŒãããªãã©ã€ã³: %s" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "ããŠã³ããŒããäžæçã«ãªãã©ã€ã³: %s" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "ããŠã³ããŒãã«å€±æããŸãã: %(name)s|%(msg)s" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "ãã¹ããŸãã¯æ¥ç¶ã®ãªã»ããã«æ¥ç¶ã§ããªãã£ãããã1 ååŸæ¥ç¶ã«å詊è¡ããŠãã ããã" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "ããŠã³ããŒããã¹ãããããŸãã:%(plugin)sã«ãã %(name)s" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "%(name)sã®å€±æã®æ
å ±ååŸãã |%(err)s" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "%(name)sãã¢ã¯ãã£ã ã«å€±æããŸãã" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "忥ç¶ã«å€±æããŸãã: %s" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "忥ç¶ã¹ã¯ãªãããèŠã€ãããŸãã!" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "忥ç¶ãéå§äž" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "倱æããå®è¡ã¹ã¯ãªããåæ¥ç¶ ïŒ" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "忥ç¶ãæ°ãã IP: %s" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "ããã€ã¹ã«ç©ºãé åäžè¶³" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "ã¢ã«ãŠã³ã%(user)s ã§ã¯ãã°ã€ã³ã§ããŸããã§ãã |%(msg)s" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "ééã£ããã¹ã¯ãŒã" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "ã¢ã«ãŠã³ã %s ãååãªãã©ãã£ãã¯ããªãã30 åã§ããäžåºŠãã§ãã¯" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "ã¢ã«ãŠã³ã %s ã¯æå¹æéãåããŠã1 h ã§ããäžåºŠãã§ãã¯" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "ããŠã³ããŒãå¶éã«éããŸãã" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "%(name)sïŒ%(msg)sã®ã€ã³ããŒã ãšã©ãŒ" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "ãã¹ãã£ã³ã° ãµãŒãã¹ãèªã¿èŸŒãŸããŠããŸãã" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "Bitshare ã¢ã«ãŠã³ãã§çŽæ¥ã®ããŠã³ããŒããæå¹ã«ããŸãã" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr " (username:password)æ¿èªãå¿
èŠ" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "%S ã¢ã«ãŠã³ããå
¥åãããããã®ãã©ã°ã€ã³ãç¡å¹ã«ããŠãã ããã" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "ãã¡ã€ã«ãäžæçã«å©çšã§ããŸããã" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "Netload: ããŠã³ããŒã %d ç§éåŸ
æ©ããŠããŸãã" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "Netload: ãã£ãã㣠%d ç§ãåŸ
ã£ãŠããŸãã" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "ããŠã³ããŒããããã¡ã€ã«ã空ã ã£ã" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "API ããŒãç¡å¹ã§ãã" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "%sïŒååãªãã©ãã£ãã¯ããªã" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "ãã©ãã£ãã¯ãè¶
ããŠããŸã" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "æ¥æµ: ãã©ãã£ãã¯ãå
±æ (ããŠã³ããŒãã«ããçŽè²©)" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "æ¢ã«ãã® ip ã¢ãã¬ã¹ããããŠã³ããŒãããã60 ç§ãåŸ
ã£ãŠããŸãã" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "ç¡å¹ãªèªèšŒã³ãŒããããŠã³ããŒããåèµ·å" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "RapidShareComïŒ ç©ºãã¹ããã" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "ãã®ãã¡ã€ã«ã®ãã¬ãã¢ã ã¢ã«ãŠã³ããå¿
èŠããããŸãã" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "ç¡å¹ãªãã¡ã€ã«åãå ±å" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "䞊åããŠã³ããŒã ãšã©ãŒã60ç§ãåŸ
ã£ãŠããŸãã" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "ãã°ã€ã³ããŠããŸããã" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "埩å·åã«å€±æããŸãã" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "URL ã§æäŸããããã¡ã€ã« ããŒããããŸããã" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "ãšã©ãŒ ã³ãŒã:" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "* * * ãã©ã°ã€ã³ãæŽæ°ãããŠãpyLoad ãåèµ·åããŠãã ãã * * *" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "ãã©ã°ã€ã³ã®æŽæ°ããåèªã¿èŸŒã¿" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "ãã©ã°ã€ã³ã®æŽæ°ã¯ãããŸããã" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "PyLoad ã®æŽæ°" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "* * * æ°ãã pyLoad ããŒãžã§ã³ %s ãå©çš * * *" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "* * * ãããåŸãããã§: http://pyload.org/download * * *" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "æŽæ°ãµãŒããŒã«æ¥ç¶ããããšã¯ã§ããŸããã" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "æ°ããããŒãžã§ã³ã®%(type)s|%(name)s%(version) .2f" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "%sãæŽæ°ãããšãã®ãšã©ãŒ" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "ããŒãžã§ã³ã®äžäžèŽ" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "ããŠã³ããŒãå®äº: %(name)s @ %(plugin)s" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "æ°ãããã£ããã£èŠæ±: %s" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "'C %s ããã¹ãã®ãã£ããã£ã' ãšçã" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "HotFolder ãã%s远å " -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "%s ãã€ã³ã¹ããŒã«ãããŸãã" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "%S ãã¢ã¯ãã£ãã«ã§ããŸããã§ããã" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "ã¢ã¯ãã£ãå" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "ã¢ã¯ãã£ãåã®ãã©ã°ã€ã³ããªã" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "ããã±ãŒãž %s ã¯ãæœåºåŸã®ãã¥ãŒ" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "ããã±ãŒãž %s ããã§ãã¯" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "%S ãæœåºããŸãã" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "ãã¡ã€ã«ãæœåºãããèŠã€ãããŸãã" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "å±éäž" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "ãã¹ã¯ãŒãã§ä¿è·ãããŠããŸã" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "æ£ãããªããã¹ã¯ãŒã" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "%s åã®ãã¡ã€ã«ãåé€äž" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "å±éãå®äºããŸãã" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "ã¢ãŒã«ã€ã ãšã©ãŒ" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "CRC ãäžäžèŽ" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "äžæãªãšã©ãŒ" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "ãŠãŒã¶ãŒèšå®ããã³ã°ã«ãŒãã«å€±æããŸãã" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "Click'N'Load: 䜿çšäžã®ããŒã 9666" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "%s ã®ã¯ã¬ãžãããå·Š" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "å¿çãéä¿¡ã§ããŸããã§ããã" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "ããªãã® CaptchaTrader ã¢ã«ãŠã³ããååãªã¯ã¬ãžãã" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "Crypter ãªã¹ããèŠã€ãããŸãã" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "Crypter ãªã¹ãã¯ç©ºã§ãã" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "ããŠã³ããŒãå®äº: %(name)s @ %(plugin)s" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "ã¢ããããŒãããæ°ãã CaptchaID: %s: %s" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "ããªãã®ãã£ãã㣠9kw.eu ã¢ã«ãŠã³ããååãªã¯ã¬ãžãã" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "%s ã®ã€ã³ã¹ããŒã« ã¹ã¯ãªãã" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "ã¹ã¯ãªããããªãå®è¡å¯èœãã¡ã€ã«:" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "%(script)s ã®ãšã©ãŒïŒ%(error)s" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "ããªãã® ExpertDecoders ã¢ã«ãŠã³ããååãªã¯ã¬ãžãã" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "ãŸããrehost.to ã¢ã«ãŠã³ãã远å ããpyLoad ãåèµ·åããŠãã ããã" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "%d ã®ã¯ã¬ãžãããæ®ã£ã" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "Pil ãšããã»ã©ã¯ã ã€ã³ã¹ããŒã«ãããŠããªãã¯ã©ã€ã¢ã³ãæ¥ç¶ captcha è§£èª" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "ãŠãŒã¶ãŒãšã°ã«ãŒãã®èšå®ã«å€±æããŸãã: %s" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/ja/LC_MESSAGES/pyLoadCli.po b/locale/ja/LC_MESSAGES/pyLoadCli.po index 40b14f12c..cbbc8ec27 100644 --- a/locale/ja/LC_MESSAGES/pyLoadCli.po +++ b/locale/ja/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr " ã³ãã³ã ã©ã€ã³ ã€ã³ã¿ãã§ãŒã¹" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "%s ããŠã³ããŒã:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr " é床: " -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr " ãµã€ãº: " -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr " å®äº: " -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr " ID: " -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "åŸ
æ©äž: " -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "ã¹ããŒã¿ã¹:" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "äžæåæ¢" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "å®è¡ããŠããŸãã" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "åèšé床" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "ãã¥ãŒå
ã®ãã¡ã€ã«" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "åèš" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "ã¡ãã¥ãŒ:" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr " ãªã³ã¯ã远å " -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr " ãã¥ãŒã管ç" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr " ã³ã¬ã¯ã¿ãŒã管ç" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr " ãµãŒããŒãäžæåæ¢/åé" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr " ãµãŒããŒãçµäºããã" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr " çµäº" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "ãã®æ§æã䜿çšããŠãã ãã: add <Package name> <link> <link2> ..." -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "%d åã®ãªã³ã¯ããã§ãã¯äž:" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "ãã¡ã€ã«ãååšããŸããã" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "pyLoad ãçµäºããŸãã" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "å°å·ãµãŒããŒã®ç¶æ
" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "ãã¥ãŒå
ã®ããŠã³ããŒããå°å·" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "ã³ã¬ã¯ã¿ãŒå
ã®ããŠã³ããŒããå°å·" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "ããã±ãŒãžããã¥ãŒã«è¿œå " -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "ããã±ãŒãžãã³ã¬ã¯ã¿ãŒã«è¿œå " -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "ãã¥ãŒ/ã³ã¬ã¯ã¿ãŒãããã¡ã€ã«ãåé€" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "ãã¥ãŒ/ã³ã¬ã¯ã¿ãŒããããã±ãŒãžãåé€" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "ãã¥ãŒããã³ã¬ã¯ã¿ãŒ (ãŸãã¯ãã®é) ã«ããã±ãŒãžãç§»å" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "ãã¡ã€ã«ãåèµ·å" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "ããã±ãŒãžãåèµ·å" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "ãªã³ã©ã€ã³ã®ç¶æ
ãããŒã«ã« ã³ã³ããã®ä»äºããã§ãã¯" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "ã³ã³ãã ãã¡ã€ã«ã®ãªã³ã©ã€ã³ç¶æ
ããã§ãã¯" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "ãµãŒããŒãäžæåæ¢" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "ããŠã³ããŒããç¶ç¶" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "äžæåæ¢/åéãåæ¿ã" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "ãµãŒããŒãçµäºããã" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "ã³ãã³ãã®äžèЧ:" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "ãŠãŒã¶ãŒèšå®ãã¡ã€ã«ã«æžã蟌ãããšãã§ããŸããã§ãã" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "ãã® pyLoad ã³ã¢ã«æ¥ç¶ããã«ã¯ py-openssl ãå¿
èŠã§ãã" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "ã¢ãã¬ã¹: " -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "ããŒã: " -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "ãŠãŒã¶ãŒå: " -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "ãã¹ã¯ãŒã: " -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "ãã°ã€ã³ ããŒã¿ãééã£ãŠããŸãã" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "%(addr)s:%(port)s ãžã®æ¥ç¶ã確ç«ã§ããŸããã§ããã" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "ãã® pyLoad ã³ã¢ã«æ¥ç¶ããã«ã¯ py-openssl ãå¿
èŠã§ãã" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "察話ã¢ãŒãã¯ããªããå
¥åããããã€ãã®ã³ãã³ããç¡èŠããŸããã" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "ããã±ãŒãžã远å :" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "æ°ããããã±ãŒãžã®ååãå
¥å" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "ããã±ãŒãž: %s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "远å ããããªã³ã¯ãè§£æããŸã" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "çµãã£ãã %s ãå
¥åããŠãã ããã" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "ãªã³ã¯ã远å ãããŸãã: " -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr " ã¡ã€ã³ ã¡ãã¥ãŒã«æ»ã" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "ããã±ãŒãžã管ç:" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "ãªã³ã¯ã管ç:" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "äœãç§»åããŸãã?" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "äœãåé€ããŸãã?" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "äœãåèµ·åããŸãã?" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "äœãããããéžæãããããã±ãŒãžçªå·ãå
¥åããŠãã ããã" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "åé€" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "ç§»å" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "åèµ·å" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr " - å" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr " - 次" diff --git a/locale/ja/LC_MESSAGES/setup.po b/locale/ja/LC_MESSAGES/setup.po index b350f1063..9370418e4 100644 --- a/locale/ja/LC_MESSAGES/setup.po +++ b/locale/ja/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "pyLoad èšå®ã¢ã·ã¹ã¿ã³ãã«ããããã" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "ããã¯ããªãã®ã·ã¹ãã ããã§ãã¯ããåºæ¬çãªã»ããã¢ãã pyLoad ãå®è¡ããããã«ã" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "è§ãã£ãå
ã®å€ã¯åžžã«ãæ¢å®å€ã¯" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "ããã倿Žããããªããäœãéžæãã確èªãå Žåãããã ããå
¥åããŸãã" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "å¿ããŠã¯ãããªãïŒ pyload.py ãèµ·åãããšåžžã«ã»ããã¢ãããŸãã¯-s ãã©ã¡ãŒã¿ãŒã§ãã®ã¢ã·ã¹ã¿ã³ããåå®è¡ããããšãã§ããŸãã" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "äžæ¢ããªãã§ãã ãã圌ã¯ãã¯ãèªåçã« pyload.py ãéå§ãããŠãã ããã" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "ã·ã¹ãã ãã§ãã¯ã®æºåãæŽã£ãããããããå
¥åããŸãã" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "pyLoad ãå®è¡ããã«ã¯ pycurl ãš sqliteãpython 2.5 ãŸã㯠2.6ã2.7 ãå¿
èŠã§ãã" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "ãããä¿®æ£ã㊠pyLoad ãåå®è¡ããŠãã ããã" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "## ç¶æ
##" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "SSL æ¥ç¶" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "èªå captcha è§£èª" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "ãŠã§ãã€ã³ã¿ãã§ãŒã¹" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "SSL ãå©çšã§ããŸãã" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "GUI ãå©çšã§ããŸãã" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "ã°ã©ãã£ã«ã« ãŠãŒã¶ ã€ã³ã¿ãŒãã§ã€ã¹ã§ãã" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "JavaScript ãšã³ãžã³ãèŠã€ãããŸãã" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "ã»ããã¢ãããç¶ããŸããã" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "èšå®ãã¹ã倿ŽããŸãããçŸåšã¯ %s ã§ãã" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "èšå®ãã¹ã®å€æŽã§ããïŒ" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "ãã°ã€ã³ ããŒã¿ãšåºæ¬èšå®ãæ§æããŸããã" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "æåã®å®è¡ããå§ãããŸãã§ãã" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "åºæ¬çãªã»ããã¢ãããè¡ããïŒ" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "Ssl ãæ§æããŸããã" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "Ssl ãæ§æããŸããã" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "ãŠã§ãã€ã³ã¿ ãã§ãŒã¹ãæ§æããŸããã" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "ãŠã§ãã€ã³ã¿ ãã§ãŒã¹ãæ§æããŸããã" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "ã»ããã¢ããã¯æ£åžžã«å®äºããŸããã" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "PyLoad ãåèµ·åãçµäºãå
¥åããã" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "## ã·ã¹ãã ãã§ã㯠##" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "Python ã®ããŒãžã§ã³: OK" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "JS ãšã³ãžã³" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "## åºæ¬çãªã»ããã¢ãã ##" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "次㮠logindata 㯠CLI ãš GUI ã®ãŠã§ãã€ã³ã¿ ãã§ãŒã¹ã«æå¹ã§ãã" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "ãŠãŒã¶ãŒå" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "èšèª" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "ããŠã³ããŒããã©ã«ã" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "æå€§äžŠåããŠã³ããŒã" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "忥ç¶ã䜿çšããŸãã" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "ã¹ã¯ãªããã®å Žæãæ¥ç¶ãçŽããŸã" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "## ãŠã§ãã€ã³ã¿ãã§ãŒã¹ã®ã»ããã¢ãã ##" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "ãŠã§ãã€ã³ã¿ãã§ãŒã¹ãã¢ã¯ãã£ããŒãããŸãã?" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "ãªã¹ã³ ã¢ãã¬ã¹ã127.0.0.1 ãŸã㯠localhostããŠã§ãã€ã³ã¿ ãã§ãŒã¹ã䜿çšããå Žåã¯ãããŒã«ã«ã§ã®ã¿ã¢ã¯ã»ã¹å¯èœã" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "ã¢ãã¬ã¹" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "ããŒã" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "pyLoad ä»ãç°¡åãªèª¬æã次ã®ããã€ãã®ãµãŒã㌠ããã¯ãšã³ããæäŸããŠããŸãã" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "Apacheãlighttpd ã䜿çšããããšãã§ããŸããããŸãã«ãç°¡åãªä»äºã§ã¯ãªããããããæ§æããå¿
èŠããããŸãã" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "ãããããããåŸã: https://github.com/jonashaag/bjoernããããã³ã³ãã€ã«" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "泚æ: ããã€ãã®ãŸããªã±ãŒã¹ã§ãçµã¿èŸŒã¿ã®ãµãŒããŒãåäœããªãããŠã§ãã€ã³ã¿ ãã§ãŒã¹ã§åé¡ãçºçããå Žå" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "ããã«æ»ã£ãŠããããããã§ã¹ã¬ããã«çµã¿èŸŒã¿ãµãŒããŒã倿ŽããŸãã" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "ãµãŒããŒ" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "## SSL ã»ããã¢ãã ##" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "Ssl èšŒææžã pyLoad config ãã©ã«ããŒãããããã®ã³ãã³ããå®è¡ããŸãã" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "å®äºãããããã¹ãŠãããŸãè¡ã£ãå Žå ssl ãä»ããã¢ã¯ãã£ãåããããšãã§ããŸãã" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "SSL ãæå¹ã«ãããïŒ" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "åäœãéžæ" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "1 - ãŠãŒã¶ãäœæ/ç·šé" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "2 - ãŠãŒã¶äžèЧã衚瀺" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "3 - ãŠãŒã¶ãåé€" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "4 - çµäº" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "ãŠãŒã¶ãŒ" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "èšå®ãã¹" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "çµäºããã«ã¯ Enter ãæŒããŠãã ããã" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "èšå®ãã¹ã®èšå®ã«å€±æããŸãã: %s" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "%s: ãããŸãã" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "ãã¹ã¯ãŒã: " -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "ãã¹ã¯ãŒããçãããŸãã4 æå以äžã«ããŠãã ããã" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "ãã¹ã¯ãŒã (åå
¥å): " -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "ãã¹ã¯ãŒããäžèŽããŸããã" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "ã¯ã" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "ããã" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "ç¡å¹ãªå
¥å" diff --git a/locale/ko/LC_MESSAGES/django.po b/locale/ko/LC_MESSAGES/django.po index 93877fc34..8a8ec2874 100644 --- a/locale/ko/LC_MESSAGES/django.po +++ b/locale/ko/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/ko/LC_MESSAGES/pyLoad.po b/locale/ko/LC_MESSAGES/pyLoad.po index 048520190..33c6cc922 100644 --- a/locale/ko/LC_MESSAGES/pyLoad.po +++ b/locale/ko/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "" -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "" -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/ko/LC_MESSAGES/pyLoadCli.po b/locale/ko/LC_MESSAGES/pyLoadCli.po index e85c7fb29..ed8539ae8 100644 --- a/locale/ko/LC_MESSAGES/pyLoadCli.po +++ b/locale/ko/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "" diff --git a/locale/ko/LC_MESSAGES/setup.po b/locale/ko/LC_MESSAGES/setup.po index 38f52ea3d..e806aa68e 100644 --- a/locale/ko/LC_MESSAGES/setup.po +++ b/locale/ko/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "" diff --git a/locale/ms/LC_MESSAGES/django.po b/locale/ms/LC_MESSAGES/django.po index 258e0cdf8..7ee9b2c75 100644 --- a/locale/ms/LC_MESSAGES/django.po +++ b/locale/ms/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "Gagal" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "Jenis" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "Sistem" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "Persediaan" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/ms/LC_MESSAGES/pyLoad.po b/locale/ms/LC_MESSAGES/pyLoad.po index 4d92823a5..e234643df 100644 --- a/locale/ms/LC_MESSAGES/pyLoad.po +++ b/locale/ms/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "" -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "" -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/ms/LC_MESSAGES/pyLoadCli.po b/locale/ms/LC_MESSAGES/pyLoadCli.po index d4119d884..4d9aef64d 100644 --- a/locale/ms/LC_MESSAGES/pyLoadCli.po +++ b/locale/ms/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "Tambah pakej:" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "Masukkan nama untuk pakej baru" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "Pakej: %s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "Pautan ditambah: " -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr " kembali ke menu utama" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "Menguruskan pakej:" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "Menguruskan pautan:" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "Apakah yang anda ingin mengalih?" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "Apakah yang anda ingin hapuskan?" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "Apakah yang anda ingin memulakan semula?" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "hapuskan" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "mengalih" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "" diff --git a/locale/ms/LC_MESSAGES/setup.po b/locale/ms/LC_MESSAGES/setup.po index 837f7ed34..c84724694 100644 --- a/locale/ms/LC_MESSAGES/setup.po +++ b/locale/ms/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "" diff --git a/locale/nl/LC_MESSAGES/django.po b/locale/nl/LC_MESSAGES/django.po index 912576e9e..fac53942b 100644 --- a/locale/nl/LC_MESSAGES/django.po +++ b/locale/nl/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "Nieuw Captcha verzoek" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "Lees de tekst van de captcha." -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "PyLoad is herstart" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "uit" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "Succes" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "aan" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "Ben je zeker dat je pyLoad wilt afsluiten?" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "Herstart Link" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "Verwijder Link" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "Geef een naam voor het pakket op." -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "Gelieve op de correcte captcha positie te klikken." -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "Fout opgetreden." -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "Map is leeg" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "Mislukt" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "Geen captchas beschikbaar." -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "Wachtwoorden kwamen niet overeen." -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "Instellingen bewaard." -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "Nieuwe map" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "Ben je zeker dat je pyLoad wilt herstarten?" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "wachtend %s" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "Actieve downloads" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "Configuratie" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "Naam" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "Status" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "Informatie" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "Grootte" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "Vooruitgang" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "Inloggen" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "Gebruikersnaam" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "Wachtwoord" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "Gebruikersnaam en wachtwoord komen niet overeen, probeer nogmaals." -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "Om logindata te resetten of gebruiker toe te voegen start:" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "Verwijder voltooide" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "Herstart gefaalde" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "Map:" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "Wachtwoord:" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "Pakket bewerken" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "Bewerk de pakketdetails hieronder." -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "De naam van het pakket." -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "Map" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "Naam van de submap voor deze downloads." -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "Lijst van wachtwoorden die voor het uitpakken gebruikt worden." -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "Verzenden" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "Wissen" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "Je bent succesvol uitgelogd." -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "Pad" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "absoluut" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "relatief" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "naam" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "grootte" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "laatst gewijzigd" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "bovenliggende map" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "geen inhoud" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "Algemeen" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "Accounts" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "Kies een categorie uit het menu" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "Plugin" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "Geldig tot" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "Resterend volume" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "Tijd" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "Verwijderen?" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "geldig" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "ongeldig" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "ja" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "nee" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "Toevoegen" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "Voeg Account toe" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "Vul accountgegevens in om premium functies te gebruiken." -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "Gebruikersnaam." -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "Het wachtwoord voor deze account." -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "Kies de hoster voor je account." -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "vorige" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "volgende" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "Einde" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "Nieuws" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "Ondersteuning" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "Systeem" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "pyLoad versie:" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "Installatie Map:" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "Configuratie Map:" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "Download Map:" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "Beschikbare Ruimte:" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "Taal:" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "Webinterface Poort:" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "Remote Interface Poort:" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "Installatie" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "Bestandsbeheer" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "Pakket Toevoegen" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "Plak je links of upload een dlc bestand." -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "De naam van het nieuwe pakket." -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "Plak je links of tekst hier en druk op de filterknop." -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "Wachtwoorden voor RAR-archieven" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "Bestand" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "Upload een container." -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "Bestemming" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "Captcha's lezen" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "De captcha." -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "Tekst" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "Typ de tekst van de captcha in." -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "Sluiten" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "pyLoad Update beschikbaar!" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "Plugins updated, herstart pyLoad!" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "Captcha's beschikbaar" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "Afmelden" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "Administratie" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "Informatie" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "Gelieve aan te melden!" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "Annuleren" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "Snelheid:" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "Actief:" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "Herlaad pagina" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "laden" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "Naar top" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "Sluit pyLoad" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "Herstart pyLoad" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "Toevoegen van gebruiker of wijzigen wachtwoord gebruik:" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "Belangrijk: Administrator heeft altijd alle toegangsrechten!" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "Wachtwoord Wijzigen" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "Toegangsrechten" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "wijzigen" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "Vul je huidig en gewenste wachtwoord in." -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "Gebruiker" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "Huidig wachtwoord" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "Nieuw wachtwoord" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "Nieuw wachtwoord." -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "Nieuw wachtwoord (herhalen)" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "Herhaal het nieuwe wachtwoord." -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "Je hebt geen rechten deze pagina te bezoeken." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "Downloadmap niet gevonden." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "onbeperkt" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "niet beschikbaar" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "Start pyload.py -s om setup te starten." diff --git a/locale/nl/LC_MESSAGES/pyLoad.po b/locale/nl/LC_MESSAGES/pyLoad.po index 4f1fa4663..acd922208 100644 --- a/locale/nl/LC_MESSAGES/pyLoad.po +++ b/locale/nl/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "Quit signaal ontvangen" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "pyLoad is al actief met pid %s" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "Veranderen van groep mislukt: %s" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "Veranderen van gebruiker mislukt: %s" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "map voor logs" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "Startend" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "Gebruik hoofdmap: %s" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "Container bestanden decoderen met pycrypto" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "map voor tijdelijke bestanden" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "map voor downloads" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "OpenSSL voor beveiligde verbinding" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "Oude configuratie naar DB verplaatsen" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "Controleer je logingegevens met ./pyload.py -u" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "Alle links verwijderd" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "Downloadtijd: %s" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "Beschikbare ruimte: %s" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "Accounts worden geactiveerd..." -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "Plugins aan het activeren..." -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "pyLoad is lopende" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "pyLoad wordt herstart" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "pyLoad wordt afgesloten" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "Installeren %s" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "Niet te vinden %(desc)s: %(name)s" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "Niet aan te maken %(desc)s : %(name)s" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "afsluiten..." -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "fout tijdens afsluiten" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "pyLoad is afgesloten via Terminal" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "Bestandsdatabase is verwijderd vanwege niet verenigbare versie." -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "Bestandsdatabase kan NIET geconverteerd worden." -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "Database is geconverteerd van v2 naar v3." -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "Database is geconverteerd van v3 naar v4." -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "Oude Django DB omzetten" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "compleet" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "in wachtrij" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "overgeslagen" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "wachtend" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "tijdelijk offline" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "startend" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "mislukt" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "afgebroken" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "decrypten" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "gepersonaliseerd" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "wordt gedownload" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "verwerken" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "onbekend" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "Pakket compleet: %s" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "SSL ThriftBackend gebruiken" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "Remotebackendfout: %s" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "Opstarten %(name)s: %(addr)s:%(port)s" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "Laden van backend %(name)s | %(error)s mislukt" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "wachtend %s" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "SSL certificaten niet gevonden." -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "Sorry, we hebben ondersteuning voor starten van %s vanuit pyLoad verwijderd" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "Je kan de threaded server gebruiken welke goede prestaties en ssl biedt," -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "ook kan je de pyLoads fastcgi server gebruiken met je bestaande %s" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" -msgstr "voorbeeldconfiguratie is te vinden in module/webui/servers map" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" +msgstr "voorbeeldconfiguratie is te vinden in pyload/webui/servers map" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "Kan %(server)s niet gebruiken, python-flup is niet geinstalleerd!" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "Fout bij importeren lichtgewicht server: %s" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "Je moet bjoern downloaden en compileren, https://github.com/jonashaag/bjoern" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" -msgstr "Kopieer de boern.so naar module/lib map en gebruik setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" +msgstr "Kopieer de boern.so naar pyload/lib map en gebruik setup.py install" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "Hiervoor is kennis van linux en compileren van software een vereiste" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "Server op threated gezet, vanwege bekende prestatie problemen op windows." -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "Deze server heeft geen SSL, overweeg de threaded server te gebruiken" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "Opstarten van builltin webserver: %(host)s:%(port)d" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "Opstarten van threaded SSL webserver: %(host)s:%(port)d" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "Opstarten van threaded webserver: %(host)s:%(port)d" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "Opstarten van fastcgi server: %(host)s:%(port)d" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "Opstarten van lichtgewicht webserver (bjoern): %(host)s:%(port)d" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "Je hebt geen rechten deze pagina te bezoeken." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "Downloadmap niet gevonden." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "onbeperkt" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "niet beschikbaar" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "Start pyload.py -s om setup te starten." -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "Downloaden in chunks is mislukt, val terug op één connectie | %s" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "Download gestart: %s" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "Download compleet: %s" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "Plugin %s mist een functie." -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "Download afgebroken: %s" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "Download herstart: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "%s offline" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "Download is tijdelijk offline: %s" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "Download mislukt: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "Kan geen verbinding maken met host, wacht 1 minuut en probeer opnieuw." -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "Download overgeslagen: %(name)s vanwege %(plugin)s" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "Decrypten gestart: %s" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "Decrypten mislukt: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "Opnieuw proberen %s" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "Informatie verzamelen voor %(name)s mislukt | %(err)s" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "Uitvoeren van hooks mislukt: %s" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "Activeren mislukt van %(name)s" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "Geactiveerde plugins: %s" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "Niet geactiveerde plugins: %s" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "Opnieuw verbinden mislukt: %s" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "Opnieuw verbinden script niet gevonden!" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "Opnieuw aan het verbinden" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "Uitvoeren van opnieuw verbinden script mislukt!" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "Opnieuw verbonden, nieuwe IP: %s" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "Onvoldoende schijfruimte vrij" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "Kan niet inloggen onder gebruikersnaam %(user)s | %(msg)s" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "Verkeerd wachtwoord opgegeven" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "Tijd %s heeft verkeerde , gebruik: 1:22-3:44" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "Account %s heeft niet genoeg credits, wij proberen het opnieuw in 30min" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "Account %s is verlopen, opnieuw te controleren in 1h" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "Downloadlimiet bereikt" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "%s heeft een ongeldig patroon." -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "Fout bij importeren %(name)s: %(msg)s" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "Geen Hoster geladen" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "Activeer Direct Downloaden in je Bitshare Account" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "LinkList kon niet gewist worden." -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "Accountgegevens verwijderd, vanwege nieuw configutatie formaat." -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "Autorisatie vereist (gebruikersnaam:wachtwoord)" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "Voer hier uw %s gegevens in of deactiveer deze plugin" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "Tijdens het proberen van het ophalen van het volgende bestand (%s) is er een html/pagina reactie teruggekomen, dit kan een doorsturing zijn naar een andere pagina. pyLoad zal nu opnieuw het bestand proberen binnen te halen." -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "Bestand tijdelijk niet beschikbaar" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "Netload: wachten tussen downloads %d s." -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "Netload: Wachten tot captcha %d s." -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "Downloadlink heeft geen bestand gekoppeld" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "API sleutel ongeldig" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "%s: Overdracht limiet bijna bereikt , niet voldoende credits" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "Dataverkeer overschreden" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "Rapidshare: Bandbreedte Delen (Direct Downloaden)" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "Er wordt al een bestand gedownload vanaf dit ip adres, na 60 seconden volgende poging" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "Ongeldige Auth Code, download wordt automatisch herstart" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "RapidShareCom: Geen beschikbaarde downloadslots" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "U heeft een premium account nodig voor deze bestand" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "Bestandsnaam geeft ongeldigheidsmelding" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "Gelijktijdige download mislukt, wacht 60 seconden voor volgende poging." -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "Niet ingelogd." -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "Ontcijferen van codering mislukt" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "Geen bestandssleutel meegeleverd door URL" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "Foutmeldingscode:" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "Bestand bestaat niet." -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "*** Plugins zijn bijgewerkt, pyLoad opnieuw starten aub***" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "Plugins bijgewerkt en opnieuw geladen" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "Geen plugin updates beschikbaar" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "Geen Updates voor pyLoad" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "*** Nieuwe pyLoad Versie %s beschikbaar ***" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "*** Download hier: http://pyload.org/download ***" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "Niet in staat te verbinden met server voor updates" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "Nieuwe versie van %(type)s|%(name)s : %(version).2f" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "Fout tijdens updaten van %s" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "Versie mismatch" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "Download compleet: %(name)s @ %(plugin)s " -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "Nieuw Captcha verzoek: %s" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "Beantwoord met 'c%s text on the captcha'" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "Toegevoegde %s van HotFolder" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "Niet %s geinstalleerd" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "Kan %s niet activeren" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "Geactiveerd" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "Geen uitpak plug-ins geactiveerd" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "Pakket %s in wachtrij voor later uitpakken" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "Controleer pakket %s" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "Uitpakken naar %s" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "Geen bestanden gevonden om uit te pakken" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "uitpakken" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "Beveiligd met een wachtwoord" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "Verkeerd wachtwoord" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "%s bestanden verwijderen" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "Uitpakken voltooid" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "Archief fout" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "CRC foutief" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "Onbekende fout" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "Instellen van gebruikers en de groep is mislukt" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "Click'N'Load: Poort 9666 al in gebruik" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "%s credits over" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "Kan het antwoord niet verzenden." -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "Uw CaptchaTrader Account heeft niet genoeg credits" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "Crypter lijst niet gevonden" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "Crypter lijst is leeg" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "Download compleet: %(name)s @ %(plugin)s" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "Nieuwe CaptchaID van upload: %s: %s" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "Uw Captcha 9kw.eu Account heeft niet genoeg credits" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "Geïnstalleerde scripts voor %s: " -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "Script niet uitvoerbaar:" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "Fout in %(script)s: %(error)s" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "Uw ExpertDecoders Account heeft niet genoeg credits" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "Gelieve eerst uw premium account toe te voegen en daarna pyLoad te herstarten" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "uw resterende aantal credits : %d" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "Captcha ontcijfering niet mogelijk : A. Client is niet verbonden & B. Pil en Tesseract module niet gevonden" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "Geen captcha resultaat ontvangen in aangegeven tijd bij een van de plugins." -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "Instellingen van gebruiker en groep kunnen niet geladen worden : %s" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "Geen verbinding met client om captcha te decrypten" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "Pakket %(name)s toevoegen met %(count)d links" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "%(count)d links toevoegen aan pakket #%(package)d " -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "Geen js engine gedetecteerd, installeer Spidermonkey, ossp-js, pyv8 of rhino" diff --git a/locale/nl/LC_MESSAGES/pyLoadCli.po b/locale/nl/LC_MESSAGES/pyLoadCli.po index 35e9d3aac..4925904ae 100644 --- a/locale/nl/LC_MESSAGES/pyLoadCli.po +++ b/locale/nl/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr " Opdrachtprompt" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr " Snelheid: " -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr " Grootte: " -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr " Compleet in: " -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "wachtend: " -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "gepauzeerd" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "lopend" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "totale Snelheid" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "Bestanden in wachtrij" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "Totaal" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr " Links toevoegen" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "Wachtrij beheren" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "Verzamelaar beheren" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr " (De)Pauzeren Server" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr " Server afsluiten" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr " Afsluiten" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "Gebruik deze opbouw: add <Package name> <link> <link2> enz" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "Controleren van %d links:" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "Bestand bestaat niet." -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "pyLoad was afgesloten" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "Server status weergeven" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "Downloads in wachtrij weergeven" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "Downloads in verzamelaar weergeven" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "Pakketten toevoegen aan wachtrij" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "Pakket toevoegen aan verzamelaar" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "Bestanden verwijderen uit Wachtrij/Verzamelaar" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "Pakketten verwijderen uit Wachtrij/Verzamelaar" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "Verplaats pakketten van Wachtrij naar Verzamelaar of omgekeerd" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "Bestanden herstarten" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "Pakketten herstarten" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "Controleer online status, werkt met lokale container" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "Controleert de online status van een container bestand" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "Server pauzeren" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "downloads hervatten" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "Pauzeren/Starten" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "server afsluiten" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "Lijst met commands:" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "Kan configuratiebestand voor gebruiker niet aanmaken" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "Om verbinding te maken met deze pyLoad Core is py-openssl nodig." -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "Adres: " -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "Poort: " -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "Gebruikersnaam: " -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "Wachtwoord: " -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "Login gegevens verkeerd." -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "Kan geen verbinding maken met %(addr)s:%(port)s." -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "Om verbinding te maken met pyLoad is py-openssl noodzakelijk." -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "Interactieve modus wordt genegeerd, omdat je commando's hebt ingevult." -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "Pakket toevoegen:" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "Naam invullen voor nieuw pakket" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "Pakket: %s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "Parse de links die je wilt toevoegen." -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "Type %s als het klaar is." -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "Toegevoegde links: " -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr " terug naar hoofdmenu" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "Pakketten beheren:" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "Links beheren:" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "Wat wil je verplaatsen?" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "Wat wil je verwijderen?" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "Wat wil je herstarten?" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "Kies wat je wilt doen of vul pakketnummer in." -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "verwijderen" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "verplaatsen" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "herstarten" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr " - vorige" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr " - volgende" diff --git a/locale/nl/LC_MESSAGES/setup.po b/locale/nl/LC_MESSAGES/setup.po index ed88ba315..23a10b62a 100644 --- a/locale/nl/LC_MESSAGES/setup.po +++ b/locale/nl/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "j" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "Welkom bij de pyLoad configuratie assistent." -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "Deze zal uw systeem controleren en de basissetup uitvoeren." -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "De waarden tussen de haakjes [] zijn de standaardwaarden," -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "mocht het zo zijn dat u deze niet wil veranderen of indien u niet zeker bent, druk op enter." -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "Let op: u kunt altijd deze setup herstarten met de --setup of -s parameter als u pyload.py start." -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "Mocht u problemen hebben met deze assistent druk op STRG-C," -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "om af te sluiten en de assistent niet meer automatisch te starten." -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "Als u klaar bent voor de systeemcontrole, druk op enter." -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "U heeft pycurl, sqlite en python 2.5, 2.6 of 2.7 nodig om pyLoad te starten." -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "Corrigeer dit en herstart pyLoad." -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "De setup zal nu afbreken." -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "Systeemcontrole is uitgevoerd, druk op enter om het statusbericht te zien." -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "ssl verbinding" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "automatische captcha ontcijfering" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "uitgebreide Click'N'Load" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "Functies beschikbaar:" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "Missende functies: " -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "geen py-crypto beschikbaar" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "U heeft dat nodig om container bestanden te openen." -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "geen SSL beschikbaar" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "Dit is nodig om een beveiligde verbinding in te stellen naar de core of de webinterface." -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "Als u pyLoad enkel lokaal gebruikt is SSL overbodig." -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "geen captcha herkenning beschikbaar" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "Wordt alleen gebruikt bij enkele hosters als freeuser." -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "GUI niet beschikbaar" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "De grafische gebruikersomgeving." -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "geen JavaScript engine gevonden" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "U heeft dit nodig voor bepaalde Click'N'Load links. Instaleer Spidermoney, ossp-js, pyv8 of rhino" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "U kunt nu setup afbreken en enkele afhankelijkheden installeren als u dat wilt." -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "Doorgaan met setup?" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "Wilt u de configuratiemap aanpassen? Huidige is %s" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "Als u pyLoad op een server gebruikt of de home partitie bevindt zich op intern flash-geheugen, is het een goed idee om het te veranderen." -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "Verander configmap?" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "Wilt u login gegevens en basisinstellingen configureren?" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "Dit is aan te raden bij een eerste start." -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "Basissetup creëren?" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "Wilt u SSL configureren?" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "SSL configureren?" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "Wilt u de webinterface configureren?" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "Webinterface configureren?" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "Setup is succesvol voltooid." -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "Druk op enter om af te sluiten en start pyLoad opnieuw" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "## Syteemcontrole ##" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "Uw python versie is te nieuw, gebruik python 2.6/2.7" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "Uw python versie is te oud, gebruik minstens python 2.5" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "Python versie: OK" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "Uw gestalleerde versie %s van jinja2 is te oud." -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "U kan veilig verder, alleen de webinterface zal niet werken." -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "Upgrade of verwijder het, pyLoad komt zelf met een goede jinja2 versie." -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "## Basisinstellingen ##" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "De volgende logingegevens zijn geldig voor CLI, GUI en webinterface." -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "Gebruikersnaam" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "Externe cliënten (GUI, CLI of andere) hebben externe toegang nodig om te werken over het netwerk." -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "Als je enkel de webinterface wil gebruiken mag je het uitschakelen om RAM te besparen." -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "Externe toegang inschakelen" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "Taal" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "Downloadmap" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "Maximale parallele downloads" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "Gebruik reconnect?" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "Reconnect script pad" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "## Webinterface setup ##" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "Activeer webinterface?" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "Listen adres, als u 127.0.0.1 of localhost gebruikt is de webinterface alleen lokaal beschikbaar." -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "Adres" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "Poort" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "pyLoad beschikt over een aantal server backends, nu volgt een korte uitleg." -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "Standaard server, de beste keuze als je niet weet welke je moet kiezen." -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "Deze server beschikt over SSL en is een goed alternatief voor de interne server." -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "Kan gebruikt worden door apache, lighttpd, vereist configuratie wat niet makkelijk te doen is." -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "Super snel alternatief geschreven in C, vereist verstand van libev en linux." -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "Download het hier: https://github.com/jonashaag/bjoern, compile het" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "en kopieer bjoern.so naar modele/lib" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "Opgelet: In sommige gevallen werkt de builtin server niet, als je problemen hebt met de webinterface." -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "kom terug en verander de builtin server naar de threaded server." -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "Server" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "## SSL setup ##" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "Voer de volgende commando's uit vanuit pyLoad configuratiemap om ssl certificaten te maken:" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "Als de commando's succesvol uitgevoerd zijn kunt u SSL nu activeren." -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "SSL activeren?" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "Aktie selecteren" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "1 - Aanmaken/wijzigen gebruiker" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "2 - Lijst met gebruikers" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "3 - Gebruiker verwijderen" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "4 - Afsluiten" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "Gebruikers" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "Nieuwe configuratiemap wordt ingesteld, uw huidige configuratie wordt niet overgenomen!" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "Configuratiepad" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "Configuratiepad is veranderd en setup zal nu afsluiten, herstart setup om verder te gaan." -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "Druk op enter om af te sluiten." -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "Instellen van configuratiepad mislukt: %s" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "%s: mist" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "Wachtwoord: " -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "Wachtwoord te kort. Gebruik ten minste 4 symbolen." -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "Wachtwoord (nogmaals): " -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "Wachtwoorden kwamen niet overeen." -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "ja" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "waar" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "w" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "nee" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "niet waar" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "nw" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "Ongeldige invoer" diff --git a/locale/no/LC_MESSAGES/django.po b/locale/no/LC_MESSAGES/django.po index 069e9851e..37c9905c9 100644 --- a/locale/no/LC_MESSAGES/django.po +++ b/locale/no/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/no/LC_MESSAGES/pyLoad.po b/locale/no/LC_MESSAGES/pyLoad.po index 4301f0e07..917ddf78c 100644 --- a/locale/no/LC_MESSAGES/pyLoad.po +++ b/locale/no/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "" -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "" -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/no/LC_MESSAGES/pyLoadCli.po b/locale/no/LC_MESSAGES/pyLoadCli.po index 6853d47a2..9289aa524 100644 --- a/locale/no/LC_MESSAGES/pyLoadCli.po +++ b/locale/no/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "" diff --git a/locale/no/LC_MESSAGES/setup.po b/locale/no/LC_MESSAGES/setup.po index 1d3d4bd71..634f65415 100644 --- a/locale/no/LC_MESSAGES/setup.po +++ b/locale/no/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "" diff --git a/locale/pa/LC_MESSAGES/django.po b/locale/pa/LC_MESSAGES/django.po index 8b2152180..4544bcc10 100644 --- a/locale/pa/LC_MESSAGES/django.po +++ b/locale/pa/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/pa/LC_MESSAGES/pyLoad.po b/locale/pa/LC_MESSAGES/pyLoad.po index 34a0719a1..89d3570f1 100644 --- a/locale/pa/LC_MESSAGES/pyLoad.po +++ b/locale/pa/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "" -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "" -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/pa/LC_MESSAGES/pyLoadCli.po b/locale/pa/LC_MESSAGES/pyLoadCli.po index 2c76600d5..6e1cd038f 100644 --- a/locale/pa/LC_MESSAGES/pyLoadCli.po +++ b/locale/pa/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "" diff --git a/locale/pa/LC_MESSAGES/setup.po b/locale/pa/LC_MESSAGES/setup.po index bc7f27197..5998f2af7 100644 --- a/locale/pa/LC_MESSAGES/setup.po +++ b/locale/pa/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "" diff --git a/locale/pl/LC_MESSAGES/django.po b/locale/pl/LC_MESSAGES/django.po index cbcf51c8d..e44012bae 100644 --- a/locale/pl/LC_MESSAGES/django.po +++ b/locale/pl/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "Nowy obrazek (captcha)" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "ProszÄ przeczytaÄ tekst z obrazka." -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "pyLoad zrestartowano" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "WyÅ" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "Powodzenie" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "WÅ" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "Na pewno chcesz zamknÄ
Ä" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "Zrestartuj link" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "UsuÅ link" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "Podaj nazwÄ paczki" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "ProszÄ kliknij na prawej stronie obrazka" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "bÅÄ
d" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "Folder jest pusty" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "Niepowodzenie" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "Brak obrazków (captcha) do odczytania." -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "HasÅo nie pasuje" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "Ustawienia zapisano" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "Nowy folder" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "Czy chcesz zrestartowaÄ pyLoad?" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "czekaj %s" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "Obecnie pobierane" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "Pobrane" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "Logi" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "Konfiguracja" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "Nazwa" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "Status" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "Informacja" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "Rozmiar" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "PostÄp" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "Logowanie" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "Nazwa uÅŒytkownika" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "HasÅo" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "NieprawidÅowa nazwa uÅŒytkownika lub hasÅo. ProszÄ spróbowaÄ ponownie." -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "Aby zresetowaÄ dane logowania lub dodaÄ uÅŒytkownika uruchom komendÄ:" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "UsuÅ zakoÅczone" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "Nieudany restart" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "Katalog:" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "HasÅo:" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "Edytuj paczkÄ" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "Tutaj edytuj szczegóÅy paczki." -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "Nazwa paczki." -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "Folder" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "Nazwa podfolderu dla wskazanych pobraÅ." -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "Lista haseÅ uÅŒywanych do rozpakowywania." -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "WyÅlij" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "Resetuj" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "Wylogowano pomyÅlnie." -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "ÅcieÅŒka" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "bezpoÅrednia" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "wzglÄdna" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "nazwa" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "rozmiar" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "rodzaj" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "ostatnio zmodyfikowany" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "katalog gÅówny" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "brak treÅci" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "Ogólne" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "Wtyczki" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "Konta" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "Wybierz sekcjÄ z menu" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "Plugin" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "WaÅŒne do" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "PozostaÅy transfer" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "Czas" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "Maksymalnie jednoczesnych pobraÅ" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "SkasowaÄ?" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "WaÅŒny" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "nie waÅŒny" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "tak" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "nie" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "Dodaj" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "Dodaj konto" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "Podaj swoje dane konta do korzystania z funkcji premium." -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "Nazwa uÅŒytkownika." -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "HasÅo dla tego konta." -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "Typ" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "Wybierz hosting dla Twojego konta." -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "Uruchom" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "poprzedni" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "nastÄpny" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "Koniec" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "WiadomoÅci" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "Wsparcie" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "System operacyjny:" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "Wersja pyLoad:" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "Folder instalacji:" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "Folder konfiguracji:" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "Folder pobierania:" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "Wolne Miejsce:" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "JÄzyk:" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "Port interfejsu web:" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "Port interfejsu zdalnego:" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "Ustawienia" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "MenedÅŒer plików" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "Dodaj paczkÄ" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "Wklej linki lub wczytaj kontener." -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "Nazwa nowej paczki." -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "Linki" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "Tutaj wklej linki lub dowolny tekst i wciÅnij przycisk filtra." -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "Filtruj adresy url" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "HasÅo do archiwum RAR" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "Plik" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "Wczytaj kontener." -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "Miejsce docelowe" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "Odczyt captcha" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "Captcha (obrazek)" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "Captcha." -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "Tekst" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "Wprowadź tekst z obrazka (captcha)." -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "Zamknij" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "Interfejs Web" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "DostÄpna aktualizacja dla pyLoad'a!" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "Wtyczki zaktualizowane, zrestartuj program!" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "Oczekiwanie na captcha" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "Wyloguj" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "ZarzÄ
dzaj" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "Informacje" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "Zaloguj siÄ!" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "Zatrzymaj" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "Anuluj" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "Pobrane:" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "PoÅÄ
cz ponownie:" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "PrÄdkoÅÄ:" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "Aktywny:" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "OdÅwieÅŒ stronÄ" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "wczytywanie" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "Powrót na poczÄ
tek strony" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "Zamknij pyLoad" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "Zrestartuj pyLoad" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "Aby dodaÄ uÅŒytkownika lub zmieniÄ hasÅo uÅŒyj:" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "Uwaga: Administrator ma zawsze wszystkie prawa!" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "Zmiana HasÅa" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "Administrator" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "Uprawnienia" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "zmieÅ" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "Wprowadź swoje hasÅo" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "UÅŒytkownik" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "Aktualne hasÅo" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "Nowe hasÅo" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "Nowe hasÅo." -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "Nowe hasÅo (powtórz)" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "ProszÄ powtórzyÄ nowe hasÅo." -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "Nie posiadasz uprawnieÅ dostÄpu do tej strony." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "Nie znaleziono katalogu pobierania." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "Bez limitu" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "niedostÄpny" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "UÅŒyj polecenia pyload.py-s aby uzyskaÄ dostÄp do ustawieÅ" diff --git a/locale/pl/LC_MESSAGES/pyLoad.po b/locale/pl/LC_MESSAGES/pyLoad.po index f7ca6734d..6247f50c8 100644 --- a/locale/pl/LC_MESSAGES/pyLoad.po +++ b/locale/pl/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "Otrzymano sygnaÅ zakoÅczenia" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "pyLoad jest juÅŒ uruchomiony - proces %s" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "Niepowodzenie przy zmianie grupy: %s" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "Niepowodzenie przy zmianie uÅŒytkownika: %s" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "katalog na logi" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "Rozpoczynam" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "UÅŒywam katalogu domowego: %s" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "pycrypto deszyfruje pliki kontenera" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "katalog dla plików tymczasowych" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "katalog na pobrane pliki" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "OpenSSL dla poÅÄ
czenia szyfrowanego" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "PrzenoszÄ starÄ
konfiguracjÄ uÅŒytkownika do Bazy Danych" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "Sprawdź dane logowania komendÄ
./pyload.py -u" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "Wszystkie linki zostaÅy usuniÄte" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "Czas pobierania: %s" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "Wolne miejsce: %s" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "Aktywacja kont ..." -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "WÅÄ
czanie wtyczek ..." -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "pyLoad jest uruchomiony i dziaÅa" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "restartujÄ pyLoad" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "pyLoad koÅczy dziaÅanie" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "Zainstaluj %s" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "nie moÅŒna znaleÅºÄ %(desc)s: %(name)s" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "nie moÅŒna utworzyÄ %(desc)s: %(name)s" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "wyÅÄ
czanie..." -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "bÅÄ
d przy wyÅÄ
czaniu" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "proces pyLoad wyÅÄ
czono z poziomu terminala" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "Baza plików zostaÅa usuniÄta z powodu braku niekompatybilnej wersji." -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "Nie moÅŒna przekonwertowaÄ Bazy plików." -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "Przekonwertowano BazÄ Danych z wersji v2 do v3. " -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "Przekonwertowano BazÄ Danych z wersji v3 do v4." -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "KonwertujÄ bazÄ Django do nowszej wersji" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "zakoÅczono" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "zakolejkowane" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "pominiÄte" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "oczekujÄ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "tymczasowo offline" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "rozpoczynam" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "niepowodzenie" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "anulowno" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "rozkodowujÄ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "wÅasny" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "pobieranie" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "przetwarzanie" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "nieznany" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "Paczka ukoÅczona: %s" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "UÅŒyj SSL ThriftBackend" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "BÅÄ
d zdalnego zaplecza: %s" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "Uruchamiam %(name)s: %(addr)s:%(port)s" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "BÅad Åadowania backendu %(name)s | %(error)s" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "czekaj %s" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "Nie znaleziono certyfikatów SSL." -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "Nie zalecamy uruchamiania %s bezpoÅrednio z pyLoad - zaprzestano wsparcia" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "MoÅŒesz wykorzystaÄ wielowÄ
tkowy serwer oferujÄ
cy dobrÄ
wydajnoÅÄ i szyfrowanie ssl," -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "oczywiÅcie nadal moÅŒesz uÅŒywaÄ %s z serwerem pyLoad fastcgi " -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" -msgstr "przykÅadowe konfiguracje znajdziesz w podkatalogu module/webui/servers " +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" +msgstr "przykÅadowe konfiguracje znajdziesz w podkatalogu pyload/webui/servers " -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "Nie moÅŒna uÅŒyÄ %(server)s - niezainstalowany python-flup " -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "BÅÄ
d importu lightweight server: %s" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "NaleÅŒy pobraÄ i skompilowaÄ bjoern, https://github.com/jonashaag/bjoern" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" -msgstr "Skopiuj plik boern.so do folderu module/lib lub uÅŒyj polecenia setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" +msgstr "Skopiuj plik boern.so do folderu pyload/lib lub uÅŒyj polecenia setup.py install" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "OczywiÅcie trzeba znaÄ Linuksa i wiedzieÄ, jak siÄ kompiluje programy" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "Ze wzglÄdu na znane problemy z wydajnoÅciÄ
w systemie Windows ustaw serwer na threaded" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "Ten serwer nie wspiera SSL, naleÅŒy rozwaÅŒyÄ uÅŒycie serwera threaded" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "Uruchamiam wbudowany webserwer: %(host)s:%(port)d" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "Uruchamiam wielowÄ
tkowy webserwer z szyfrowaniem SSL: %(host)s:%(port)d" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "Uruchamiam wielowÄ
tkowy serwer: %(host)s:%(port)d" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "Uruchamiam serwer fastcgi: %(host)s:%(port)d" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "Uruchamianie serwera lightweight (bjoern):% (host) s:% (port) d" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "Nie posiadasz uprawnieÅ dostÄpu do tej strony." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "Nie znaleziono katalogu pobierania." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "Bez limitu" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "niedostÄpny" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "UÅŒyj polecenia pyload.py-s aby uzyskaÄ dostÄp do ustawieÅ" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "Pobranie fragmentów nie powiodÅo siÄ, powrót do pojedynczego poÅÄ
czenia | %s" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "Pobieranie rozpocznie siÄ: %s" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "Pobieranie zakoÅczono: %s" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "Wtyczka %s nie zawiera funkcji." -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "Pobieranie przerwane: %s" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "Pobieram ponownie: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "Pobieranie jest wyÅÄ
czone: %s" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "Pobieranie jest tymczasowo niedostÄpne:% s" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "Pobieranie nie powiodÅo siÄ: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "Brak poÅÄ
czenia z hostem lub poÅÄ
czenie zostaÅo zresetowane, zaczekaj 1 minutÄ i spróbuj ponownie." -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "PominiÄto pobieranie: %(name)s z powodu %(plugin)s" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "RozpoczÄto rozszyfrowywanie: %s" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "Rozszyfrowywanie nie powiodÅo siÄ: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "Ponawianie %s" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "Pobieranie informacji o %(name)s nie powiodÅo siÄ | %(err)s" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "BÅÄ
d przy uruchomieniu: %s" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "Nie powiodÅa siÄ aktywacja %(name)s" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "Aktywne wtyczki:% s" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "Nieaktywne wtyczki:% s" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "Nieudane ponowne ÅÄ
czenie: %s" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "Nie znaleziono skryptu ponownego ÅÄ
czenia!" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "Uruchamiam ponowne ÅÄ
czenie" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "Niepowodzenie przy uruchamianiu skryptu ponownego ÅÄ
czenia!" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "Ponownie poÅÄ
czony, nowe IP: %s" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "Zbyt maÅo miejsca na dysku" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "Nie moÅŒna zalogowaÄ siÄ na koncie %(user)s | %(msg)s" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "HasÅo nieprawidÅowe" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "Format czasu %s jest nieprawidÅowy, uÅŒyj: 1:22-3:44" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "Konto % s generuje zbyt maÅy ruch, sprawdź ponownie za 30min" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "Konto %s wygasÅo, sprawdź ponownie za 1godz" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "OsiÄ
gniÄto limit transferu" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "%s zawiera bÅÄdny wzorzec." -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "BÅÄ
d przy imporcie %(name)s: %(msg)s" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "Nie zaÅadowano Hostera" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "Uaktywnij pobieranie bezpoÅrednie w ustawieniach swojego konta Bitshare" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "Nie moÅŒna wyczyÅciÄ zawartoÅci LinkList." -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "Ustawienia konta usuniÄto po wprowadzeniu nowego formatu konfiguracji." -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "Wymagana autoryzacja (uÅŒytkownik:hasÅo)" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "ProszÄ wejÅÄ na konto %s lub wyÅÄ
czyÄ wtyczkÄ" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "W pobranym pliku (%s) byÅ kod HTML... przekierowanie bÅÄdu? Pobieranie zostanie uruchomione ponownie." -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "Plik czasowo niedostÄpny" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "Netload: Oczekiwanie pomiÄdzy pobraniami %d s." -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "Netload: czekam na captcha %d s." -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "Pobrany plik byÅ pusty" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "niepoprawny klucz API" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "%s: PozostaÅo zbyt maÅo transferu" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "Przekroczono transfer" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "Rapidshare: WspóÅdzielenie ruchu (bezpoÅrednie pobieranie)" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "Trwa pobieranie spod tego adresu IP. Odczekaj 60 sekund" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "BÅÄdny kod autoryzacji. Pobieranie zostanie wznowione" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "RapidshareCom: Brak wolnych slotów" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "Ten plik wymaga konta premium" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "ZgÅoszono nieprawidÅowÄ
nazwÄ pliku" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "BÅÄ
d równolegÅego pobierania, odczekaj 60s." -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "Nie zalogowany." -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "Odszyfrowywanie nie powiodÅo siÄ" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "Nie umieszczono plik klucza w adresie URL" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "Kod bÅÄdu:" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "Plik nie istnieje." -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "*** Wtyczki zostaÅy zaktualizowane, proszÄ zrestartowaÄ pyLoad ***" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "Wtyczki zaktualizowane i przeÅadowane" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "Brak dostÄpnych aktualizacji wtyczek" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "Brak aktualizacji dla pyLoad" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "*** DostÄpna nowa wersja %s ***" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "*** Pobierz stÄ
d: http://pyload.org/download ***" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "Brak poÅÄ
czenia z serwerem aktualizacji" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "Nowa wersja %(type)s|%(name)s : %(version).2f" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "Podczas aktualizacji wystÄ
piÅ blÄ
d %s" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "NiezgodnoÅÄ wersji" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "Pobieranie zakoÅczono: %(name)s @ %(plugin)s " -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "Nowe ÅŒÄ
danie captcha: %s" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "W odpowiedzi uÅŒyj 'c %s tekst z captcha'" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "Najpierw dodaj swoje konto premium.to i zrestartuj pyLoad" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "Dodano %s z HotFolder" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "Nie zainstalowano %s" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "Nie moÅŒna aktywowaÄ %s" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "Aktywowany" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "Brak aktywnych wtyczek do rozpakowywania plików" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "Pakiet %s zakolejkowany do rozpakowania" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "Sprawdzanie paczki %s" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "Wypakowano %s" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "Nie znaleziono plików do rozpakowania" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "wypakowujÄ" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "Zabezpieczone haÅsem" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "NieprawidÅowe hasÅo" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "Usuwanie %s plików" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "Wypakowanie zakoÅczone" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "BÅÄ
d archiwum" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "NieprawidÅowa suma kontrolna CRC" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "WystÄ
piÅ nieznany bÅÄ
d" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "Ustawienie uÅŒytkowników i grup nie powiodÅo siÄ: %s" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "Wtyczka Click'N'Load: Port 9666 jest zajÄty" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "PozostaÅo %s punktów" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "Nie moÅŒe wysÅaÄ odpowiedzi." -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "Posiadasz zbyt maÅÄ
iloÅÄ punktów na koncie CaptchaTrader" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "Nie odnaleziono listy Crypter" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "Lista Crypter jest pusta" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "Pobieranie zakoÅczono: %(name)s @ %(plugin)s" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "Nowe CaptchaID z uploadu: %s: %s" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "Twoje konto captcha 9kw.eu nie ma wystarczajÄ
co kredytów" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "Zainstalowane skrypty dla %s: " -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "Niewykonywalny skrypt:" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "BÅÄ
d w %(script)s: %(error)s" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "Twoje konto ExpertDecoders nie ma wystarczajÄ
co kredytów" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "Najpierw dodaj swoje konto rehost.to i zrestartuj pyLoad" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "Dodaj najpierw waÅŒne konto premiumize.me i zrestartuj pyLoad." -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "PozostaÅo %s punktów" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "Nie zainstalowano moduÅów pil i tesseract oraz brak poÅÄ
czenia z serwisem dekodujÄ
cym captcha" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "Å»aden z serwisów nie odkodowal captcha w dopuszczalnym czasie. " -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "Ustawienia uÅŒytkowników i grup nie powiodÅo siÄ: %s" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "Odkodowanie Captcha nieaktywne" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "Dodano paczkÄ %(name)s zawierajÄ
cÄ
%(count)d linków" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "Dodano %(count)d linków do paczki #%(package)d" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "Nie znaleziono silnika JavaScript, zainstaluj SpiderMonkey, ossp-js, pyv8 lub rhino" diff --git a/locale/pl/LC_MESSAGES/pyLoadCli.po b/locale/pl/LC_MESSAGES/pyLoadCli.po index eebdeeba7..44144e7dd 100644 --- a/locale/pl/LC_MESSAGES/pyLoadCli.po +++ b/locale/pl/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "Interfejs Linii Komend" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "%s PobraÅ:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "PrÄdkoÅÄ:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "Rozmiar:" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "ZakoÅczono w:" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "ID:" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "Oczekiwanie:" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "Wstrzymane" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "Aktywne" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "PrÄdkoÅÄ pobierania" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "Pliki w kolejce" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "OgóÅem" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "Dodaj linki" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr " ZarzÄ
dzaj kolejkÄ
" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "Â ZarzÄ
dzanie poczekalniÄ
linków" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "Zatrzymaj/Wznów serwer" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "WyÅÄ
cz serwer" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "WyjÅcie" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "UÅŒywamy skÅadni: add <Package name> <link> <link2> ..." -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "Sprawdzanie linków %d:" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "Plik nie istnieje." -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "pyLoad zostaÅ wyÅÄ
czony" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "WyÅwietla status serwera" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "WyÅwietla pobierane pliki z kolejki" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "WyÅwietla pobierane pliki z poczekalni" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "Dodaje pakiet do kolejki" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "Dodaje paczkÄ do poczekalni" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "UsuÅ pliki z Kolejki/Poczekalni" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "UsuÅ Paczki z Kolejki/Poczekalni" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "Przenoszenie paczek z kolejki do poczekalni i odwrotnie" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "Zrestartuj pliki" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "Zrestartuj paczki" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "Sprawdź status online, wspóÅpracuje z lokalnym kontenerem" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "Sprawdź stan online pliku kontenera" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "Wstrzymaj serwer" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "kontynuuj pobieranie" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "Wstrzymaj/Wznów" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "wyÅÄ
cz serwer" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "Lista poleceÅ:" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "Nie moÅŒna zapisaÄ pliku konfiguracyjnego" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "Do poÅÄ
czenia z pyLoad Core wymagana jest instalacja py-openssl." -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "Adres:" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "Port:" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "UÅŒytkownik:" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "HasÅo:" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "BÅÄdne dane logowania." -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "Nie moÅŒna poÅÄ
czyÄ z %(addr)s:%(port)s." -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "Do poÅÄ
czenia z pyLoad Core wymagana jest instalacja py-openssl." -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "Tryb interaktywny wyÅÄ
czono po wprowadzonych komendach." -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "Dodaj pakiet:" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "Wprowadź nazwÄ dla nowego pakietu" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "Pakiet: %s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "Analizuj linki które chcesz dodaÄ." -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "Napisz %s gdy ukoÅczone." -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "Dodanych linków:" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "powrót do gÅównego menu" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "ZarzÄ
dzanie pakietami:" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "ZarzÄ
dzaj linkami:" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "Czy chcesz przenieÅÄ?" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "Czy na pewno chcesz usunÄ
Ä?" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "Czy chcesz zrestartowaÄ?" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "Wybierz, co chcesz wykonaÄ lub wprowadź numer paczki." -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "skasuj" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "przenieÅ" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "Restart" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "- poprzedni" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr " - nastÄpny" diff --git a/locale/pl/LC_MESSAGES/setup.po b/locale/pl/LC_MESSAGES/setup.po index 9bebff39f..a05658825 100644 --- a/locale/pl/LC_MESSAGES/setup.po +++ b/locale/pl/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "t" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "Witamy w asystencie konfiguracji pyLoad." -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "Dokona sprawdzenia systemu i ustawi podstawowe parametry potrzebne do uruchomienia pyLoad." -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "WartoÅÄ w nawiasach kwadratowych [] jest zawsze domyÅlnÄ
," -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "jeÅli nie chcesz zmieniaÄ wartoÅci lub nie masz pewnoÅci co wybraÄ, naciÅnij enter." -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "Nie zapomnij: kiedy uruchamiasz pyload.py zawsze moÅŒesz ponownie wybraÄ asystenta dodajÄ
c parametr --setup lub -s." -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "JeÅli masz jakiekolwiek problemy z asystentem wciÅnij Ctlr-C," -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "aby go zatrzymaÄ i nie pozwoliÄ mu automatycznie uruchomiÄ siÄ z pyload.py . " -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "NaciÅnij enter jak bÄdziesz gotowy na sprawdzenie systemu." -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "Potrzebujesz pycurl, sqlite i pythona 2.5, 2.6 lub 2.7 aby uruchomiÄ pyLoad." -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "ProszÄ popraw to i ponownie uruchom pyLoad." -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "Instalator teraz zakoÅczy dziaÅanie." -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "ZakoÅczono sprawdzanie systemu, naciÅnij enter w celu obejrzenia raportu." -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "## Stan ##" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "rozszyfrowywanie kontenerów" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "poÅÄ
czenie SSL" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "automatyczne rozpoznawanie captcha" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "Interfejs Web" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "rozszerzone Click'N'Load" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "DostÄpne funkcje:" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "NiedostÄpne funkcje:" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "py-crypto jest niedostÄpny" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "Potrzebujesz go jeÅli chcesz rozszyfrowywaÄ pliki kontenerowe." -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "SSL niedostÄpny" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "Jest to potrzebne jeÅli chcesz nawiÄ
zywaÄ szyfrowane poÅÄ
czenia z Core lub interfejsem Web." -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "JeÅli chcesz mieÄ dostÄp tylko lokalny - SSL nie jest uÅŒyteczne." -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "brak rozpoznawania captcha" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "Potrzebne tylko do niektórych serwisów dla kont darmowych." -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "Interfejs graficzny niedostÄpny" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "Graficzny Interfejs UÅŒytkownika." -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "nie znaleziono silnika JavaScript" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "Do dodania kilku linków jednoczeÅnie bÄdziesz potrzebowaÅ Click'N'Load. Zainstaluj SpiderMonkey, ossp-js, pyv8 lub rhino" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "MoÅŒesz przerwaÄ instalator i naprawiÄ niektóre zaleÅŒnoÅci." -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "KontynuowaÄ instalacjÄ?" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "Czy chcesz zmieniÄ ÅcieÅŒkÄ do plików konfiguracji? Obecnie to %s" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "JeÅli uÅŒywasz pyLoad'a na serwerze lub partycji home która znajduje siÄ na pamiÄci flash - dobrym pomysÅem moÅŒe byÄ zmiana tego parametru." -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "ZmieniÄ ÅcieÅŒkÄ dla plików konfiguracji?" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "Czy chcesz dokonaÄ konfiguracji logowania i ustawieÅ podstawowych?" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "Jest to wymagane przy pierwszym uruchomieniu." -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "StworzyÄ podstawowe ustawienia?" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "Czy chcesz ustawiÄ SSL?" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "UstawiÄ SSL?" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "Czy chcesz ustawiÄ interfejs Web?" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "UstawiÄ interfejs Web?" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "Instalacja zakoÅczona pomyÅlnie." -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "NaciÅnij enter aby wyjÅÄ i ponownie uruchom pyLoad" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "## Sprawdzenie systemu ##" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "Zainstalowana wersja Python'a jest zbyt nowa, ProszÄ uÅŒyÄ wersji 2.6/2.7" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "Zainstalowana wersja Python'a jest zbyt stara, ProszÄ uÅŒyÄ przynajmniej wersji 2.5" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "Wersja Python'a: OK" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "Zainstalowana jinja2 w wersji %s jest przestarzaÅa." -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "MoÅŒesz kontynuowaÄ pracÄ, ale interfejs Web nie bÄdzie czynny," -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "uaktualnij lub odinstaluj, pyLoad zawiera odpowiedniÄ
wersjÄ biblioteki jinja2." -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "silnik Java Skrypt" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "## Podstawowe Ustawienia ##" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "NastÄpujÄ
ce parametry logowania sÄ
odpowiednie dla CLI, GUI i interfejsu Web." -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "Nazwa uÅŒytkownika" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "Klienty zewnÄtrzne (GUI, CLI lub inne) potrzebujÄ
zdalnego poÅÄ
czenia do dziaÅania przez sieÄ." -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "JeÅŒeli chcesz uÅŒywaÄ tylko interfejsu web moÅŒesz dezaktywowaÄ to aby zaoszczÄdziÄ pamiÄÄ." -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "WÅÄ
cz zdalny dostÄp" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "JÄzyk" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "Folder pobierania" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "Maksymalna liczba jednoczesnych pobraÅ" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "UÅŒywaÄ ponownego ÅÄ
czenia?" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "Lokalizacja skryptu do ponownego ÅÄ
czenia" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "## Ustawienia interfejsu Web ##" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "AktywowaÄ interfejs Web?" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "Adres do nasÅuchu, jeÅli uÅŒyjesz 127.0.0.1 lub localhost, interfejs Web bÄdzie dostÄpny jedynie lokalnie." -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "Adres" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "Port" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "pyLoad oferuje kilka typów serwerów backends, a teraz po krótce wyjaÅniam." -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "Serwer domyÅlny, najlepszy wybór, jeÅli nie wiesz który wybraÄ." -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "Ten serwer wspiera SSL i jest dobrÄ
alternatywÄ
dla builtin." -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "MoÅŒe byÄ uÅŒywany przez apache, lighttpd, wymaga od Ciebie ich konfiguracji, która nie jest zbyt Åatwym zadaniem." -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "Bardzo szybka alternatywa, napisany w C, wymaga libev i znajomoÅci Linuxa" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "Pobierz go stÄ
d: https://github.com/jonashaag/bjoern, i skompiluj go" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" -msgstr "i skopiuj plik bjoern.so do katalogu module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" +msgstr "i skopiuj plik bjoern.so do katalogu pyload/lib" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "Uwaga: W pewnych, rzadkich przypadkach serwer builtin nie dziaÅa, jeÅli wystÄpujÄ
problemy z interfejsem WWW" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "wrÃ³Ä tu i zmieÅ serwer builtin na threaded" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "Serwer" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "## Ustawienia SSL ##" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "W celu wygenerowania certyfikatów ssl uruchom nastÄpujÄ
ce komendy z katalogu pyload:" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "JeÅli wszystko pomyÅlnie siÄ zakoÅczyÅo, moÅŒesz aktywowaÄ SSL." -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "AktywowaÄ SSL?" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "Wybierz dziaÅanie" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "1- Utwórz/Edutuj uÅŒytkownika" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "2- PokaÅŒ uÅŒytkowników" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "3 - UsuÅ uÅŒytkownika" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "4- WyjÅcie" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "UÅŒytkownicy" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "Ustawiam nowÄ
ÅcieÅŒkÄ do plików konfiguracji, obecna konfiguracja nie zostanie tam przeniesiona!" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "ÅcieÅŒka do plików konfiguracji" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "ÅcieÅŒka do plików konfiguracji zostaÅa zmieniona, Instalator zostanie teraz zamkniÄty, uruchom go ponownie, aby przejÅÄ dalej." -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "NaciÅnij Enter aby zakoÅczyÄ." -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "Ustawienie ÅcieÅŒki do plików konfiguracji nie powiodÅo siÄ: %s" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "%s: brakuje" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "HasÅo:" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "HasÅo za krótkie. UÅŒyj przynajmniej 4 znaków." -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "HasÅo (ponownie):" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "HasÅo nie pasuje" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "tak" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "prawda" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "nie" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "faÅsz" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "BÅÄdne dane" diff --git a/locale/pt/LC_MESSAGES/django.po b/locale/pt/LC_MESSAGES/django.po index 6b0a4f5bc..07d1ea2f8 100644 --- a/locale/pt/LC_MESSAGES/django.po +++ b/locale/pt/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "Pedir novo Captcha" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "Por favor leia o texto do captcha." -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "pyLoad reiniciou" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "desligado" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "Sucesso" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "ligado" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "Tem a certeza que quer sair do pyLoad?" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "Reiniciar Link" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "Apagar Link" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "Introduza o nome do pacote." -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "Por favor clique na posição correta do captcha." -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "Ocorreu um erro." -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "Pasta vazia" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "Falhou" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "Sem Captchas para ler." -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "As senhas não correspondem." -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "Configurações guardadas." -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "Nova pasta" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "Tem a certeza que deseja reiniciar o pyLoad?" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "Downloads Activos" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "Inicio" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "Registo de ocorrências" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "Configuração" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "Nome" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "Status" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "Informação" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "Tamanho" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "Progresso" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "Login" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "Nome do usuário" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "Senha" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "O utilizador e a senha não correspondem. Tente novamente." -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "Para restabelecer a sua informação de login ou adicionar um utilizador execute:" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "Apagar os terminados" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "ReinÃcio falhou" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "Pasta:" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "Senha:" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "Editar Pacote" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "Edite os detalhes do pacote abaixo." -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "O nome do pacote." -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "Pasta" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "Nome da sub-pasta para estes downloads." -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "Lista das passwords usadas para extrair." -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "Enviar" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "Restabelecer" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "Terminou a sessão com sucesso." -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "Caminho" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "absoluto" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "relativo" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "nome" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "tamanho" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "tipo" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "última modificação" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "diretoria superior" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "sem conteúdo" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "Geral" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "Contas" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "Escolha uma das secções do menu" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "Plugin" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "Válida até" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "Tráfego remanescente" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "Tempo" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "Máximos Paralelos" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "Apagar?" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "válido" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "não válido" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "sim" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "não" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "Adicionar" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "Adicionar conta" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "Introduza os dados da sua conta para utilizar as caracterÃsticas premium." -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "O seu nome de utilizador." -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "A senha para esta conta." -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "Tipo" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "Escolha o host da sua conta." -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "Iniciar" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "anterior" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "próximo" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "Fim" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "Novidades" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "Ajuda" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "Sistema" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "SO:" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "Versão do pyLoad:" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "Pasta de instalação:" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "Pasta das configurações:" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "Pasta de Downloads:" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "Espaço Livre:" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "Idioma:" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "Porta do Webinterface:" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "Porta do interface remoto:" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "Configurações" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "Adicionar pacote" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "Introduza os seus links ou carregue um container." -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "Nome do novo pacote." -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "Introduza aqui os seus links ou texto e carregue no botão filtrar." -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "Filtrar urls" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "Senha para o arquivo RAR" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "Ficheiro" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "Carregar um container." -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "Destino" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "A ler captcha" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "O captcha." -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "Texto" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "Introduza o texto do captcha." -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "Fechar" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "Atualização do pyLoad disponÃvel!" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "Plugins atualizados, por favor reinicie!" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "Captcha a aguardar" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "Sair" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "Administrar" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "Informações" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "Inicie a Sessão!" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "Parar" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "Cancelar" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "Restabelecer ligação:" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "Velocidade:" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "Activo:" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "Atualizar página" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "a carregar" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "Voltar para o topo" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "Sair do pyLoad" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "Reiniciar pyLoad" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "Para adicionar um utilizador ou alterar senhas utilize:" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "Importante: o Administrador tem sempre todas as permissões!" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "Alterar a senha" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "Administrador" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "Permissões" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "alterar" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "Introduza a sua senha actual e a desejada." -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "Utilizador" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "Senha atual" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "Nova senha" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "A nova senha." -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "A nova senha (repetir)" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "Por favor repita a nova senha." -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "ilimitado" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/pt/LC_MESSAGES/pyLoad.po b/locale/pt/LC_MESSAGES/pyLoad.po index 00f04a239..3dbe39ee1 100644 --- a/locale/pt/LC_MESSAGES/pyLoad.po +++ b/locale/pt/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "sinal de Sair recebido" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "pyLoad já está rodando com pid %s" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "Falha ao trocar grupo: %s" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "Falha ao trocar de usuario: %s" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "Iniciando" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "Usando diretório: %s" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "Todos os links foram removidos" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "Espaço livre: %s" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "Ativando contas..." -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "pyLoad está rodando" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "reiniciando pyLoad" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "pyLoad fechou" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "desligando..." -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "erro durante desligamento" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "Terminado" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "Offline" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "Online" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "em fila" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "ignorada" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "esperando" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "Temp. off-line" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "iniciando" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "falhou" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "abortada" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "descriptografando" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "personalizado" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "Transferindo" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "processando" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "desconhecido" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "Pacote finalizado: %s" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "Erro de back-end remoto: %s" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "Iniciando %(name)s: %(addr)s:%(port)s" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "Falha ao carregar back-end %(name)s | %(error)s" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "Certificado SSL não encontrado." -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "Este servidor não oferece SSL, por favor, considere usar HTTP{?} em vez disso" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "ilimitado" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "pedaços do Download falharam, retornar para conexão simples |%s" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "Inicio do Download: %s" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "Termino do Download: %s" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "Plugin %s está sem uma função." -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "Download abortado: %s" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "Download reiniciado: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "Download está offline: %s" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "Download esta temporariamente offline: %s" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "Download falhou: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "ImpossÃvel conectar com o host ou a conexão receptou, tentar novamente em 1 minuto." -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "Download pulado: %(name)s pois %(plugin)s" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "Busca de informações para %(name)s falhou|%(err)s" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "Falha de ativação %(name)s" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "Reconectar Falhou: %s" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "Script de reconexão não encontrado!" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "Iniciando reconexão" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "Falha ao executar script de reconexão!" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "Reconectado, novo IP: %s" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "Espaço insuficiente no dispositivo" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "Não pode ligar com a conta %(user)s | %(msg)s" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "Senha incorreta" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "A conta %s não tem tráfego suficiente, checando novamente em 30 min" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "A conta %s expirou, checando novamente em 1h" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "Limite de Download alcançado" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "Erro ao importar %(name)s: %(msg)s" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "Nenhum Hoster carregado" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "Ativar Download direto em sua conta Bitshare" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "Autorização necessaria (nome de usuario: senha)" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "Por favor entre sua %s conta ou desative este plugin" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "Havia código HTML no arquivo baixado (%s)...erro de redirecionamento? O Download vai ser reiniciado." -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "Arquivo temporariamente indisponÃvel" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "Netload: esperar entre os Downloads %d s." -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "Netload: esperando por capacha %d s." -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "Arquivo baixado estava vazio" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "Chave de API inválida" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "%s: Tráfego restante insuficiente" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "Tráfego excedido" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "Rapidshare: Compartilhamento de tráfego (Download direto)" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "Ja está baixando deste endereço de ip, espere 60 segundos" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "Código de autenticação invalido, Download vai ser reiniciado" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "RapidShareCom: Sem slots vazios" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "Você precisa de uma conta premium para este arquivo" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "Nome do arquivo relatado como invalido" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "Erro de Download paralelo, esperar 60 segundos." -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "Não está logado." -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "Descriptografia falhou" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "Nenhum arquivo chave fornecido na URL" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "Codigo do erro:" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "*** Plugins foram atualizados, por favor reinicie o pyLoad ***" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "Plugins atualizados e recarregados" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "Nenhuma atualização de plugin disponÃvel" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "Nenhuma atualização para o pyLoad" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "* * * Nova versão %s do pyLoad disponÃvel * * *" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "* * * faça o Download em : http://pyload.org/download * * *" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "ImpossÃvel conectar com o servidor de atualizações" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "Nova versão de %(type)s|%(name)s : %(version).2f" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "Erro ao atualizar %s" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "Incompatibilidade de versão" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "Download concluÃdo: %(name)s @ %(plugin)s " -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "Nova solicitação de Captcha: %s" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "Responder com 'c %s o texto no captcha'" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "Adicionado %s de HotFolder" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "Sem %s instalado" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "Não foi possÃvel activar o %s" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "Ativado" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "Não ha plugins de extração ativos" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "Pacote %s enfileirados para extração posterior" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "Verificar pacote %s" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "Extrair para %s" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "Arquivos não encontrados para extrair" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "extraindo" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "Protegido por senha" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "Senha incorreta" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "Excluindo %s arquivos" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "Extração terminada" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "Erro de arquivo" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "Incompatibilidade de CRC" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "Erro desconhecido" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "Configuração de usuário e grupo falhou" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "Click'n'Load: porta 9666 já está em uso" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "%s créditos sobrando" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "Não pode enviar resposta." -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "Sua conta CaptchaTrader não tem créditos suficientes" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "Lista do Crypter não encontrada" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "Lista do Crypter vazia" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "Download terminado: %(name)s @ %(plugin)s" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "Novo CaptchaID do upload: %s : %s" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "Sua conta 9kw.eu não tem créditos suficientes" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "scripts instalados para %s: " -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "Scrip não executável:" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "Erro em %(script)s: %(error)s" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "Sua conta ExpertDecoders não tem créditos suficientes" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "Por favo adicione sua conta rehost.to antes de reiniciar o pyLoad" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "%d créditos sobrando" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "Pil e tesseract não estão instalados e nenhum cliente está conectado para reconhecimento de captcha" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "Configuração de usuário e grupo falhou: %s" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/pt/LC_MESSAGES/pyLoadCli.po b/locale/pt/LC_MESSAGES/pyLoadCli.po index 49a9ff501..847c98c40 100644 --- a/locale/pt/LC_MESSAGES/pyLoadCli.po +++ b/locale/pt/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr " Interface de Linha de Comandos" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr " Velocidade: " -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr " Tamanho: " -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr " Terminado em: " -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr " ID: " -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "em espera: " -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "Estado:" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "pausados" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "em execução" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "Velocidade total" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "Arquivos na fila" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr " Adicionar Links" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr " Gerir Fila" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr " Gerir Coletor" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr " Parar/Retomar servidor" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr " Terminar Servidor" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr " Sair" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "Por favor, use esta sintaxe: Adicionar <Nome do Pacote> <link> <link2>..." -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "Checar %d links:" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "O arquivo não existe." -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "pyLoad foi finalizado" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "Estado do servidor de impressões" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "Cópias de downloads na fila" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "Cópias de downloads no coletor" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "Adicionar pacotes para a fila" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "Adicionar pacotes para o coletor" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "Deletar arquivos da fila/coletor" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "Deletar pacotes da fila/coletor" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "Mover pacotes da fila para o coletor ou vice-versa" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "Reiniciar arquivos" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "Reiniciar pacotes" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "Verificar o estado online, trabalhar com recipiente local" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "Verifica o estado online de um arquivo de contêiner" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "Colocar servidor em Pausa" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "continuar downloads" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "Alternar pausa/retomar" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "terminar servidor" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "Lista de comandos:" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "Não foi possÃvel escrever o arquivo de configuração do usuário" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "Endereço: " -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "Porta: " -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "Nome do usuário: " -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "Senha: " -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "Dados de login estão errados." -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "Não conseguiu estabelecer conexão com %(addr)s:%(port)s." -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "você precisa do py-openssl para se conectar com o pyLoad core." -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "O modo interativo foi ignorado pois alguns comandos foram pulados por você." -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "Adicionar Pacote:" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "Insira um nome para o novo pacote" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "Pacote: %s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "Analise os links que você deseja adicionar." -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "Digite %s quando terminar." -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "Links adicionados: " -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr " voltar ao menu principal" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "Gerenciar pacotes:" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "Gerenciar Links:" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "O que você deseja mover?" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "O que você deseja excluir?" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "O que você deseja reiniciar?" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "deletar" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "mover" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "reiniciar" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr " - anterior" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr " - próximo" diff --git a/locale/pt/LC_MESSAGES/setup.po b/locale/pt/LC_MESSAGES/setup.po index 66923aa8d..989c21fab 100644 --- a/locale/pt/LC_MESSAGES/setup.po +++ b/locale/pt/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "s" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "Bem-vindo ao assistente de configuração do pyLoad." -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "Ele irá verificar o seu sistema e fazer uma configuração básica para executar o pyLoad." -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "O valor entre colchetes [] é sempre o valor padrão," -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "no caso de você não quer mudá-lo ou você não tiver certeza qual escolher, apenas tecle enter." -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "Não se esqueça: você sempre pode executar novamente o assistente com os parâmetros --setup ou -s, quando você iniciar o pyload.py ." -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "para cancelar e não deixá-lo iniciar automaticamente com pyload.py ." -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "Quando estiver pronto para verificação do sistema, aperte enter." -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "Continuar com a configuração?" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "Você quer alterar o caminho de configuração? O atual é %s" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "Alterar o caminho de configuração?" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "Você quer configurar dados de login e configurações básicas?" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "Isto é recomendável para a primeira execução." -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "Fazer a configuração básica?" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "Você quer configurar o ssl?" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "Configurar o ssl?" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "Você quer configurar a interface WEB?" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "Configurar a interface Web?" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "Configuração concluÃda com êxito." -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "Aperte enter para sair e reiniciar o pyLoad" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "# # Instalação basica # #" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "Os dados de login à seguir é válido para o CLI, GUI e interface Web." -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "Nome do usuário" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "LÃngua" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "nº Downloads paralelos" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "Usar Reconectar?" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "Local do script de reconexão" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "# # Instalação da interface WEB# #" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "Ativar webinterface?" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "Endereço de escuta, se você usar 127.0.0.1 ou localhost, a interface Web será acessÃvel apenas localmente." -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "Endereço" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "Porta" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "O pyLoad oferece vários backends de servidor, a seguir uma breve explicação." -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "Pode ser usado pelo apache, lighttpd, requer que você os configure, o que não é tarefa muito fácil." -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "Pegue-a daqui: https://github.com/jonashaag/bjoern, é só compilar" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "Atenção: Em alguns casos raros o servidor builtin não está funcionando, se você notar problemas com a interface Web" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "Volte aqui e mude o servidor builtin para o threaded ." -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "Servidor" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "# # Configuração SSL # #" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "Execute esses comandos na pasta de configuração do pyLoad para fazer certificados ssl:" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "Se você está pronto e tudo correu bem, você pode ativar o ssl agora." -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "Ativar SSL?" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "Selecione a ação" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "1 - Criar/editar usuário" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "2 - Lista de usuários" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "3 - Remover usuário" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "4 - Sair" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "Usuários" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "Pressione Enter para sair." -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "A troca do caminho de configuração falhou: %s" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "Senha: " -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "Senha muito curta. Use pelo menos 4 caracteres." -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "Senha (novamente): " -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "As senhas não correspondem." -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "sim" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "verdadeiro" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "v" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "não" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "falso" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "Entrada inválida" diff --git a/locale/ro/LC_MESSAGES/django.po b/locale/ro/LC_MESSAGES/django.po index 6a4afa0d0..5dfc685da 100644 --- a/locale/ro/LC_MESSAGES/django.po +++ b/locale/ro/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/ro/LC_MESSAGES/pyLoad.po b/locale/ro/LC_MESSAGES/pyLoad.po index e798cc988..c50b5c540 100644 --- a/locale/ro/LC_MESSAGES/pyLoad.po +++ b/locale/ro/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "" -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "" -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/ro/LC_MESSAGES/pyLoadCli.po b/locale/ro/LC_MESSAGES/pyLoadCli.po index 26a3f1f88..17acda928 100644 --- a/locale/ro/LC_MESSAGES/pyLoadCli.po +++ b/locale/ro/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "" diff --git a/locale/ro/LC_MESSAGES/setup.po b/locale/ro/LC_MESSAGES/setup.po index aed4d803e..8520f88e1 100644 --- a/locale/ro/LC_MESSAGES/setup.po +++ b/locale/ro/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "" diff --git a/locale/ru/LC_MESSAGES/django.po b/locale/ru/LC_MESSAGES/django.po index 908d4684d..d6c3d748d 100644 --- a/locale/ru/LC_MESSAGES/django.po +++ b/locale/ru/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "ÐапÑÐŸÑ ÐœÐŸÐ²ÐŸÐ¹ каÑÑОМкО." -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "ÐÑПÑОÑайÑе ÑекÑÑ ÐœÐ° ÑОÑÑМке." -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "ÐÑПгÑаЌЌа pyLoad заМПвП загÑÑжеМа." -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "вÑкл." -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "УÑпеÑМП" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "вкл." -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "ÐÑ ÑвеÑеМÑ, ÑÑП Ñ
ПÑОÑе закПМÑОÑÑ pyLoad?" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "ÐеÑезапÑÑÑОÑÑ ÑÑÑлкÑ" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "УЎалОÑÑ ÑÑÑлкÑ." -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "ÐвеЎОÑе ÐžÐŒÑ ÐºÐŸÐœÑейМеÑа." -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "ÐПжалÑйÑÑа клОкМОÑе Ма пÑавОлÑМÑÑ Ð¿ÐŸÐ·ÐžÑÐžÑ ÐºÐ°ÑÑОМкО." -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "СвеÑÑОлаÑÑ ÐŸÑОбка." -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "Ðапка пÑÑÑа" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "СбПй" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "ÐÐµÑ ÑОÑÑМка ÐŽÐ»Ñ Ð¿ÑПÑÑеМОÑ." -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "ÐаÑПлО Ме ÑПвпаЎаÑÑ." -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "CПÑ
ÑÐ°ÐœÐµÐœÐžÑ ÑÑÑаМПвПк завеÑÑОлаÑÑ." -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "ÐÐŸÐ²Ð°Ñ Ð¿Ð°Ð¿ÐºÐ°" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "ÐÑ ÑвеÑеМÑ, ÑÑП Ñ
ПÑОÑе пеÑезагÑÑзОÑÑ pyLoad?" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "ПжОЎаМОе %s" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "ÐкÑОвМÑе загÑÑзкО" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "ÐПЌПй" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "ÐакаÑкО" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "ÐÑÑÑÑÑ" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "ÐаÑÑÑПйкО" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "ÐазваМОе" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "СÑаÑÑÑ" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "ÐМÑПÑЌаÑОÑ" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "РазЌеÑ" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "ÐÑПгÑеÑÑ" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "ÐПгОМ" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "ÐПлÑзПваÑелÑ" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "ÐаÑПлÑ" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "ÐепÑавОлÑМÑе ÐžÐŒÑ Ð¿ÐŸÐ»ÑзПваÑÐµÐ»Ñ ÐžÐ»Ðž паÑПлÑ! ÐПпÑПбÑйÑе еÑе Ñаз." -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "ÐÐ»Ñ ÑбÑПÑа ÑвПОÑ
ЎаММÑÑ
ОлО ÐŽÐŸÐ±Ð°Ð²Ð»ÐµÐœÐžÑ ÐœÐŸÐ²ÐŸÐ³ÐŸ пПлÑзПваÑÐµÐ»Ñ Ð·Ð°Ð¿ÑÑÑОÑе: " -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "УЎалОÑÑ Ð·Ð°Ð²ÐµÑÑÑММÑе" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "ÐеÑезапÑÑÑОÑÑ ÐœÐµÑЎавÑОеÑÑ" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "Ðапка:" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "ÐаÑПлÑ:" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "РеЎакÑОÑПваÑÑ ÐºÐŸÐœÑейМеÑ" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "РеЎакÑОÑПваМОе ЎеÑалей кПМÑейМеÑа." -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "ÐÐŒÑ ÐºÐŸÐœÑейМеÑа." -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "Ðапка" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "ÐÐŒÑ Ð¿ÐŸÐŽÐ¿Ð°Ð¿ÐºÐž ÐŽÐ»Ñ ÑÑОÑ
загÑÑзПк." -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "СпОÑПк паÑПлей, ОÑпПлÑзÑеЌÑÑ
ÐŽÐ»Ñ ÑаÑпакПвкО." -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "ÐÑпÑавОÑÑ" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "СбÑПÑ" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "ÐÑ ÑÑпеÑМП вÑÑлО." -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "ÐÑÑÑ" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "абÑПлÑÑМÑй" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "ПÑМПÑОÑелÑМÑй" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "ОЌÑ" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "ÑазЌеÑ" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "ÑОп" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "пПÑлеЎМее ОзЌеМеМОе" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "ÑПЎОÑелÑÑÐºÐ°Ñ Ð¿Ð°Ð¿ÐºÐ°" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "ПÑÑÑÑÑÑвÑÐµÑ ÑПЎеÑжОЌПе" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "ÐÑМПвМÑе" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "ÐлагОМÑ" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "ÐккаÑМÑÑ" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "ÐÑбеÑОÑе ÑекÑÐžÑ ÐŒÐµÐœÑ" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "ÐÑОлПжеМОе" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "ÐÑеЌОÑÐŒ аккаÑМÑ" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "ÐПЎеМ ЎП" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "ÐÑÑалПÑÑ ÑÑаÑОка" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "ÐÑеЌÑ" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "ÐакÑ. пПÑПкПв" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "УЎалОÑÑ?" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "ЎейÑÑвОÑелеМ" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "Ме гПЎеМ" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "Ўа" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "МеÑ" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "ÐПбавОÑÑ" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "ÐПбавлеМОе ÑÑеÑМПй запОÑО" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "УкажОÑе пÑеЌОÑÐŒ аккаÑÐœÑ ÐŽÐ»Ñ ÐžÑпПлÑÐ·ÐŸÐ²Ð°ÐœÐžÑ Ð²ÑеÑ
егП вПзЌПжМПÑÑей." -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "ÐÐŒÑ Ð¿ÐŸÐ»ÑзПваÑелÑ." -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "ÐаÑÐŸÐ»Ñ ÐŽÐ»Ñ ÑÑПй ÑÑеÑМПй запОÑО." -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "ТОп" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "ÐÑбеÑОÑе Ñ
ПÑÑОМг." -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "ÐаÑалП" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "пÑеЎ." -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "ÑлеЎ." -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "ÐПМеÑ" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "ÐПвПÑÑО" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "ÐПЎЎеÑжка" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "СОÑÑеЌа" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "ÐС:" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "ÐеÑÑÐžÑ pyLoad:" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "Ðапка ÑÑÑаМПвкО:" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "Ðапка МаÑÑÑПек:" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "Ðапка ÑкаÑаММПгП:" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "СвПбПЎМП:" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "ЯзÑк:" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "ÐПÑÑ WEB ОМÑеÑÑейÑа:" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "ÐПÑÑ ÑЎалеММПгП ÑпÑавлеМОÑ:" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "УÑÑаМПвка" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "Ѐайл ЌеМеЎжеÑ" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "ÐПбавОÑÑ ÐºÐŸÐœÑейМеÑ" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "ÐÑÑавÑÑе ÑÑÑлкО ОлО загÑÑзОÑе кПМÑейМеÑ." -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "ÐÐŒÑ ÐœÐŸÐ²ÐŸÐ³ÐŸ кПМÑейМеÑа." -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "СÑÑлкО" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "ÐÑÑавÑÑе зЎеÑÑ ÑÑÑлкО О МажЌОÑе \"ЀОлÑÑÑ\"" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "ЀОлÑÑÑ" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "ÐаÑÐŸÐ»Ñ ÐŽÐ»Ñ Ð°ÑÑ
Ова RAR" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "Ѐайл" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "ÐагÑÑзОÑÑ ÐºÐŸÐœÑейМеÑ." -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "ÐазМаÑеМОе" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "ЧÑеМОе каÑÑОМкО" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "ÐаÑÑОМка" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "ÐаÑÑОМка." -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "ТекÑÑ" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "ÐвеЎОÑе ÑекÑÑ Ñ ÐºÐ°ÑÑОМкО." -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "ÐакÑÑÑÑ" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "Web-ОМÑеÑÑейÑ" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "ÐПÑÑÑÐ¿ÐœÑ ÐŸÐ±ÐœÐŸÐ²Ð»ÐµÐœÐžÑ pyLoad!" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "ÐÐ»Ð°Ð³ÐžÐœÑ ÐŸÐ±ÐœÐŸÐ²Ð»ÐµÐœÑ, пеÑезапÑÑÑОÑе pyLoad!" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "ÐжОЎаеЌ ÑОÑÑМПк" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "ÐÑйÑО" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "ÐЎЌОМОÑÑÑОÑПваМОе" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "ÐМÑПÑЌаÑОÑ" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "ÐПжалÑйÑÑа, вПйЎОÑе ÑП ÑвПОЌО ÑÑÑÑМÑЌО ЎаММÑЌО!" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "СÑПп" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "ÐÑЌеМОÑÑ" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "ÐагÑÑзка:" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "ÐеÑепПЎклÑÑеМОе:" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "СкПÑПÑÑÑ:" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "ÐкÑОвМÑе:" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "ÐбМПвОÑÑ ÑÑÑаМОÑÑ" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "загÑÑзка" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "ÐвеÑÑ
" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "ÐавеÑÑОÑÑ pyLoad" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "ÐеÑезапÑÑÑОÑÑ pyLoad" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "ÐÐ»Ñ ÐŽÐŸÐ±Ð°Ð²Ð»ÐµÐœÐžÑ Ð¿ÐŸÐ»ÑзПваÑÐµÐ»Ñ ÐžÐ»Ðž ÐžÐ·ÐŒÐµÐœÐµÐœÐžÑ Ð¿Ð°ÑПлÑ:" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "ÐМОЌаМОе: аЎЌОМОÑÑÑаÑÐŸÑ Ñже ÐŸÐ±Ð»Ð°ÐŽÐ°ÐµÑ Ð²ÑеЌО пÑаваЌО!" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "ÐзЌеМОÑÑ Ð¿Ð°ÑПлÑ" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "ÐЎЌОМ" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "ÐÑава" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "ОзЌеМОÑÑ" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "ÐвеЎОÑе ÑекÑÑОй О желаеЌÑй паÑПлÑ." -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "ÐПлÑзПваÑелÑ" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "ТекÑÑОй паÑПлÑ" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "ÐПвÑй паÑПлÑ" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "ÐПвÑй паÑПлÑ." -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "ÐПвÑй паÑÐŸÐ»Ñ (пПвÑПÑ)" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "ÐПжалÑйÑÑа пПвÑПÑОÑе МПвÑй паÑПлÑ." -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "У Ð²Ð°Ñ ÐœÐµÑ Ð¿Ñав Ма пÑПÑЌПÑÑ ÑÑÑаМОÑÑ." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "Ðапка ÐŽÐ»Ñ Ð·Ð°ÐºÐ°Ñек Ме МайЎеМа." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "МеПгÑаМОÑеММÑй" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "Ме ЎПÑÑÑпМП" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "ÐÐ»Ñ ÐŽÐŸÑÑÑпа к МаÑÑÑПйкаЌ запÑÑÑОÑе pyload.py -s." diff --git a/locale/ru/LC_MESSAGES/pyLoad.po b/locale/ru/LC_MESSAGES/pyLoad.po index 92dd4b2dc..b4fc6a768 100644 --- a/locale/ru/LC_MESSAGES/pyLoad.po +++ b/locale/ru/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "ÐПлÑÑеМ ÑОгМал ÐŽÐ»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐœÐžÑ ÑабПÑÑ" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "pyLoad Ñже запÑÑеМ, pid %s" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "Ðе ÑЎалПÑÑ ÐžÐ·ÐŒÐµÐœÐžÑÑ Ð³ÑÑппÑ: %s" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "Ðе ÑЎалПÑÑ ÐžÐ·ÐŒÐµÐœÐžÑÑ Ð¿ÐŸÐ»ÑзПваÑелÑ: %s" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "папка ПÑÑеÑПв" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "ÐапÑÑкаеÑÑÑ" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "ÐÑÐœÐŸÐ²ÐœÐ°Ñ Ð¿Ð°Ð¿ÐºÐ°: %s" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "pycrypto ÐŽÐ»Ñ ÐŽÐµÐºÐŸÐŽÐžÑÐŸÐ²Ð°ÐœÐžÑ ÑайлПв кПМÑейМеÑПв" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "папка вÑеЌеММÑÑ
ÑайлПв" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "папка ÐŽÐ»Ñ Ð·Ð°ÐºÐ°Ñек" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "OpenSSL ÐŽÐ»Ñ Ð±ÐµÐ·ÐŸÐ¿Ð°ÑМПгП ÑПеЎОМеМОÑ" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "ÐеÑеЌеÑÑОÑÑ Ð¿ÑежМÑÑ Ð¿ÐŸÐ»ÑзПваÑелÑÑкÑÑ ÐºÐŸÐœÑОгÑÑаÑÐžÑ Ð² ÐÐ" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "ÐПжалÑйÑÑа, пÑПвеÑÑÑе ÑвПО ÑÑÑÑМÑе ЎаММÑе запÑÑÑОв ./pyload.py -u" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "ÐÑе ÑÑÑлкО ÑЎалеМÑ" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "ÐÑÐµÐŒÑ Ð·Ð°ÐºÐ°ÑкО: %s" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "СвПбПЎМПе ЌеÑÑП: %s" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "ÐкÑОваÑÐžÑ Ð°ÐºÐºÐ°ÑМÑа..." -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "ÐкÑОваÑÐžÑ Ð¿Ð»Ð°Ð³ÐžÐœÐ°..." -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "pyLoad загÑÑжеМ О ÑабПÑаеÑ" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "пеÑезапÑÑк pyLoad" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "завеÑÑеМОе ÑабПÑÑ pyLoad" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "УÑÑаМПвка %s" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "Ме ÐŒÐŸÐ³Ñ ÐœÐ°Ð¹ÑО %(desc)s: %(name)s" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "Ме ÐŒÐŸÐ³Ñ ÑПзЎаÑÑ %(desc)s: %(name)s" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "завеÑÑеМОе ÑабПÑÑ..." -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "ПÑОбка пÑО завеÑÑеМОО ÑабПÑÑ" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "pyLoad ПÑÑаМПвлеМ Ñ ÑеÑЌОМала" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "ÐÐ°Ð·Ñ ÐŽÐ°ÐœÐœÑÑ
бÑла ÑЎалеМа пП пÑОÑОМе МеÑПвЌеÑÑОЌПй веÑÑОО." -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "Ðаза ЎаММÑÑ
ÐÐ ÐŒÐŸÐ¶ÐµÑ Ð±ÑÑÑ Ð¿ÑеПбÑазПваМа." -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "Ðаза ЎаММÑÑ
пÑеПбÑазПваМа Оз v2 в v3." -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "Ðаза ЎаММÑÑ
пÑеПбÑазПваМа Оз v2 в v3." -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "ÐÑеПбÑазПваМОе пÑежМей ÐÐ Django" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "закПМÑеМП" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "ПÑ-лайМ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "ПМ-лайМ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "в ПÑеÑеЎО" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "пÑПпÑÑеМП" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "ПжОЎаМОе" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "вÑеЌеММП МеЎПÑÑÑпМП" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "запÑÑкаеÑÑÑ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "завеÑÑеМП Ñ ÐŸÑОбкПй" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "пÑеÑваМП" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "ÑаÑкПЎОÑПваМОе" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "пПлÑзПваÑелÑÑкОй" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "загÑÑжаеÑÑÑ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "ПбÑабаÑÑваеÑÑÑ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "МеОзвеÑÑМП" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "ÐÐ°ÐºÐµÑ Ð·Ð°Ð²ÐµÑÑеМ: %s" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "ÐÑпПлÑзÑеÑÑÑ SSL ThriftBackend" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "ÐÑОбка ÑЎалеММПгП ÑеÑвОÑа: %s" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "ÐапÑÑк %(name)s: %(addr)s:%(port)s" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "ÐÑОбка пÑО загÑÑзке %(name)s | %(error)s" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "ПжОЎаМОе %s" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "SSL ÑеÑÑОÑОкаÑÑ ÐœÐµ МайЎеМÑ." -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "Ð ÑПжалеМОÑ, пПЎЎеÑжка в pyLoad пÑекÑаÑеМа МаÑÐžÐœÐ°Ñ Ñ Ð²ÐµÑÑОО %s" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "ÐÑ ÐŒÐŸÐ¶ÐµÑе ОÑпПлÑзПваÑÑ threaded ÑеÑÐ²ÐµÑ ÐŽÐ»Ñ Ð¿ÐŸÐ²ÑÑÐµÐœÐžÑ Ð¿ÑПОзвПЎОÑелÑМПÑÑО О ОÑпПлÑÐ·ÐŸÐ²Ð°ÐœÐžÑ SSL," -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "МП ЌПжМП О ОÑпПлÑзПваÑÑ Ð¿ÑежМОй ÑеÑÐ²ÐµÑ %s Ñ pyLoads fastcgi" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" -msgstr "ÐÑОЌеÑÑ ÐºÐŸÐœÑОгÑÑаÑОО web-ÑеÑвеÑПв ЌПжМП пПÑЌПÑÑеÑÑ Ð² папке module/webui/servers" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" +msgstr "ÐÑОЌеÑÑ ÐºÐŸÐœÑОгÑÑаÑОО web-ÑеÑвеÑПв ЌПжМП пПÑЌПÑÑеÑÑ Ð² папке pyload/webui/servers" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "ÐÑпПлÑзПваÑÑ %(server)s МевПзЌПжМП, Ñак как Ме ÑÑÑаМПвлеМ python-flup!" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "ÐÑÐŸÑ ÑеÑÐ²ÐµÑ ÐœÐµ пÑеЎПÑÑавлÑÐµÑ Ð²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸÑÑÑ ÐžÑпПлÑзПваÑÑ SSL, пПжалÑйÑÑа ÑаÑÑЌПÑÑОÑе вПзЌПжМПÑÑÑ ÐžÑпПлÑзПваÑÑ ÑеÑÐ²ÐµÑ threaded взаЌеМ вÑбÑаММПгП" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "ÐапÑÑк вÑÑÑПеММПгП веб-ÑеÑвеÑа django: %(host)s:%(port)d" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "ÐапÑÑк веб-ÑеÑвеÑа lighttpd: %(host)s:%(port)d" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "ÐапÑÑк threaded веб-ÑеÑвеÑа: %(host)s:%(port)d" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "ÐапÑÑк fastcgi-ÑеÑвеÑа: %(host)s:%(port)d" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "У Ð²Ð°Ñ ÐœÐµÑ Ð¿Ñав Ма пÑПÑЌПÑÑ ÑÑÑаМОÑÑ." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "Ðапка ÐŽÐ»Ñ Ð·Ð°ÐºÐ°Ñек Ме МайЎеМа." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "МеПгÑаМОÑеММÑй" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "Ме ЎПÑÑÑпМП" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "ÐÐ»Ñ ÐŽÐŸÑÑÑпа к МаÑÑÑПйкаЌ запÑÑÑОÑе pyload.py -s." -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "ÐагÑÑзка паÑаллелÑМÑÑ
пПÑПкПв ЎаММÑÑ
завеÑÑеМа Ñ ÐŸÑОбкаЌО, вПзвÑÐ°Ñ Ðº ПЎМПпПÑПÑМПй загÑÑзке | %s" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "ÐагÑÑзка МаÑаÑа: %s" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "ÐагÑÑзка завеÑÑеМа: %s" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "РплагОМе %s ÐœÐµÑ ÑÑМкÑОО." -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "ÐагÑÑзка пÑеÑваМа: %s" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "ÐÑОбка загÑÑзкО: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "ÐагÑÑзка МеЎПÑÑÑпМа: %s" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "ÐагÑÑзка вÑеЌеММП МеЎПÑÑÑпМа: %s" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "ÐÑОбка загÑÑзкО: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "ÐевПзЌПжМП ÑПеЎОМОÑÑÑÑ Ñ Ð¿ÑПвайЎеÑПЌ ОлО ÑÑÑв ÑПеЎОМеМОÑ, ÑлеЎÑÑÑÐ°Ñ Ð¿ÐŸÐ¿ÑÑка ÑеÑез ÐŸÐŽÐœÑ ÐŒÐžÐœÑÑÑ." -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "ÐагÑÑзка пÑПпÑÑеМа: %(name)s @ %(plugin)s" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "ÐекПЎОÑПваМОе МаÑаÑП: %s" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "ÐÑОбка ЎекПЎОÑПваМОÑ: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "ÐПвÑПÑÐœÐ°Ñ Ð¿ÐŸÐ¿ÑÑка %s" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "ÐПлÑÑеМОе ОМÑПÑЌаÑОО пП %(name)s завеÑÑОлПÑÑ ÐŸÑОбкПй | %(err)s" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "ÐÑОбка вÑÐ¿ÐŸÐ»ÐœÐµÐœÐžÑ Ð·Ð°Ñ
ваÑПв: %s" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "ÐÑОбка акÑОваÑОО %(name)s" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "ÐеÑепПЎклÑÑеМОе Ме ÑЎалПÑÑ: %s" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "СкÑÐžÐ¿Ñ Ð¿ÐµÑепПЎклÑÑÐµÐœÐžÑ ÐœÐµ МайЎеМ!" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "ÐаÑОМаеЌ пеÑепПЎклÑÑеМОе" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "ÐÑОбка пÑО вÑпПлМеМОО ÑкÑОпÑа пеÑепПЎклÑÑеМОÑ" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "ÐеÑепПЎклÑÑеМП, МПвÑй IP: %s" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "Ðе Ñ
ваÑÐ°ÐµÑ ÐŒÐµÑÑа Ма ÑÑÑÑПйÑÑве." -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "Ðе ÐŒÐŸÐ³Ñ Ð²ÐŸÐ¹ÑО Ñ ÑÑеÑМПй запОÑÑÑ %(user)s | %(msg)s" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "ÐепÑавОлÑМÑй паÑПлÑ" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "ÐÑÐµÐŒÑ %s ÐžÐŒÐµÐµÑ ÐœÐµÐ¿ÑавОлÑМÑй ÑПÑЌаÑ, ОÑпПлÑзÑйÑе ÑПÑÐŒÐ°Ñ 1:22-3:44" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "ÐеЎПÑÑаÑПÑМП ÑÑаÑÑОка в аккаÑМÑе %s, ÑлеЎÑÑÑÐ°Ñ Ð¿ÑПвеÑка ÑеÑез 30 ЌОМÑÑ" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "ÐÑÑек ÑÑПк ЎейÑÑÐ²ÐžÑ Ð°ÐºÐºÐ°ÑМÑа %s, ÑлеЎÑÑÑÐ°Ñ Ð¿ÑПвеÑка ÑеÑез 1 ÑаÑ" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "ÐПÑÑОгМÑÑ Ð»ÐžÐŒÐžÑ Ð·Ð°Ð³ÑÑзПк" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "%s ÐžÐŒÐµÐµÑ ÐœÐµ пÑавОлÑМÑй ÑаблПМ." -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "ÐÑОбка ОЌпПÑÑа %(name)s: %(msg)s" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "Ðе загÑÑжеМ МО ПЎОМ Оз ÑайлПбЌеММОкПв" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "Ð ÑвПей ÑÑÑÑМПй запОÑО вклÑÑОÑе ПпÑÐžÑ 'direct Download'" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "СпОÑПк ÑÑÑлПк Ме ÐŒÐŸÐ¶ÐµÑ Ð±ÑÑÑ ÐŸÑОÑеМ." -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "УÑÑаМПвкО ÑÑеÑМПй запОÑО ÑÐŽÐ°Ð»ÐµÐœÑ Ð² ÑвÑзО Ñ ÐœÐŸÐ²ÑÐŒ ÑПÑЌаÑПЌ." -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "ÐеПбÑ
ПЎОЌа авÑПÑОзаÑÐžÑ (ÐžÐŒÑ Ð¿ÐŸÐ»ÑзПваÑелÑ:паÑПлÑ)" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "ÐПжалÑйÑÑа, ввеЎОÑе Ð²Ð°Ñ Ð°ÐºÐºÐ°ÑÐœÑ ÐŽÐ»Ñ %s ОлО ПÑклÑÑОÑÑ ÑÑÐŸÑ Ð¿Ð»Ð°Ð³ÐžÐœ" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "ÐайЎеМ HTML-кПЎ в Ñайле загÑÑзкО (%s)... ПÑОбка пеÑеМапÑавлеМОÑ? ÐагÑÑзка бÑÐŽÐµÑ Ð¿ÐµÑезапÑÑеМа." -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "Ѐайл вÑеЌеММП МеЎПÑÑÑпеМ" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "Netload: ПжОЎаМОе ÐŒÐµÐ¶ÐŽÑ Ð·Ð°Ð³ÑÑзкаЌО %d Ñек." -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "Netload: ПжОЎаМОе каÑÑОМкО %d Ñек." -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "ÐагÑÑжеММÑй Ñайл пÑÑÑ" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "ÐевеÑМÑй клÑÑ API" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "%s: ÐÑÑалПÑÑ ÐœÐµÐŽÐŸÑÑаÑПÑМП ÑÑаÑОка" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "ТÑаÑОк закПМÑОлÑÑ" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "Rapidshare: Traffic Share (пÑÑÐŒÐ°Ñ Ð·Ð°Ð³ÑÑзка)" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "Уже ÐžÐŽÐµÑ Ð·Ð°Ð³ÑÑзка Ñ ÑÑПгП IP, жЎеЌ 60 ÑекÑМЎ" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "ÐепÑавОлÑМÑй кПЎ ОЎеМÑОÑОкаÑОО, загÑÑзка бÑÐŽÐµÑ Ð¿ÐµÑезапÑÑеМа" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "RapidShareCom: ÐÐµÑ ÑвПбПЎМПгП ÑлПÑа" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "ÐÐ»Ñ ÑÑПгП Ñайла МÑжеМ пÑеЌОÑÐŒ аккаÑМÑ" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "ÐÐŒÑ Ñайла ÑказаМП МевеÑМП" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "ÐÑОбка паÑаллелÑМПй загÑÑзкО, жЎеЌ 60 ÑекÑМЎ." -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "ÐÑ
ПЎ Ме пÑПОзвеЎеМ." -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "СбПй ÑаÑÑОÑÑПвкО" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "ÐÐµÑ ÐºÐ»ÑÑа Ñайла в URL-аЎÑеÑе" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "ÐПЎ ПÑОбкО:" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "Ѐайл Ме ÑÑÑеÑÑвÑеÑ." -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "*** ÐÐŸÐ¿ÐŸÐ»ÐœÐµÐœÐžÑ ÐŸÐ±ÐœÐŸÐ²Ð»ÐµÐœÑ, пеÑезапÑÑÑОÑе pyLoad ***" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "ÐÐŸÐ¿ÐŸÐ»ÐœÐµÐœÐžÑ ÐŸÐ±ÐœÐŸÐ²Ð»ÐµÐœÑ Ðž пеÑезагÑÑжеМÑ" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "ÐÐµÑ ÐŸÐ±ÐœÐŸÐ²Ð»ÐµÐœÐžÐ¹ ÐŽÐ»Ñ ÐŽÐŸÐ¿ÐŸÐ»ÐœÐµÐœÐžÐ¹" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "ÐÐµÑ ÐŸÐ±ÐœÐŸÐ²Ð»ÐµÐœÐžÐ¹ pyLoad" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "*** ÐПÑÑÑпМа ÐœÐŸÐ²Ð°Ñ Ð²ÐµÑÑÐžÑ pyLoad %s ***" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "*** СкаÑайÑе зЎеÑÑ: http://pyload.org/download ***" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "Ðе вПзЌПжМП ÑПеЎОМОÑÑÑÑ Ñ ÑеÑвеÑПЌ ПбМПвлеМОй" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "ÐÐŸÐ²Ð°Ñ Ð²ÐµÑÑÐžÑ %(type)s|%(name)s : %(version).2f" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "ÐÑОбка пÑО ПбМПвлеМОО %s" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "ÐПМÑÐ»ÐžÐºÑ Ð²ÐµÑÑОО" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "ÐагÑÑзка завеÑÑеМа: %(name)s @ %(plugin)s " -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "ÐПвÑй запÑÐŸÑ ÐºÐ°ÑÑОМкО: %s" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "ÐÑÐ²ÐµÑ Ñ ÑекÑÑПЌ Ма каÑÑОМке %s" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "ÐПжалÑйÑÑа, ÑМаÑала ЎПбавÑÑе ÑÑеÑМÑÑ Ð·Ð°Ð¿ÐžÑÑ premium.to О пеÑезапÑÑÑОÑе pyLoad" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "ÐПбавлеМ %s Оз HotFolder" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "%s Ме ÑÑÑаМПвлеМ" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "Ðе вПзЌПжМП акÑОвОÑПваÑÑ %s" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "ÐкÑОвОÑПваМ(a/П)" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "Ðе акÑОвОÑПваМП ЎПпПлМеМОй ÐŽÐ»Ñ ÐžÐ·Ð²Ð»ÐµÑеМОÑ/ÑаÑпакПвкО" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "ÐÐ°ÐºÐµÑ %s пПÑÑавлеМ в ПÑеÑÐµÐŽÑ ÐŽÐ»Ñ Ð¿ÐŸÑлеЎÑÑÑегП ОзвлеÑеМОÑ/ÑаÑпакПвкО" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "ÐÑПвеÑка пакеÑа %s" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "ÐзвлеÑеМОе/ÑаÑпакПвка в %s" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "Ðе МайЎеМП ÑайлПв ÐŽÐ»Ñ ÐžÐ·Ð²Ð»ÐµÑеМОÑ" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "ОзвлекаеÑÑÑ/ÑаÑпакПвÑваеÑÑÑ" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "ÐаÑОÑеМП паÑПлеЌ" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "ÐепÑавОлÑМÑй паÑПлÑ" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "УЎалеМОе ÑайлПв %s" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "ÐзвлеÑеМОe/ÑаÑпакПвка завеÑÑеМП(a)" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "ÐÑОбка аÑÑ
Ова" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "ÐÑОбка кПМÑÑПлÑМПй ÑÑЌЌÑ" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "ÐеОзвеÑÑÐœÐ°Ñ ÐŸÑОбка" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "ÐÑОбка ÑÑÑаМПвкО пПлÑзПваÑÐµÐ»Ñ Ðž гÑÑппÑ: %s" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "Click'N'Load: ÐПÑÑ 9666 Ñже заМÑÑ" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "ÐÑÑалПÑÑ %s кÑеЎОÑПв" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "Ðе ÑЎалПÑÑ ÐŸÑпÑавОÑÑ ÐŸÑвеÑ." -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "ÐеЎПÑÑаÑПÑМП ÑÑеЎÑÑв Ма ваÑеЌ аккаÑМÑе CaptchaTrader" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "СпОÑПк ÑОÑÑÐŸÐ²Ð°ÐœÐžÑ ÐœÐµ МайЎеМ" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "СпОÑПк ÑОÑÑÐŸÐ²Ð°ÐœÐžÑ Ð¿ÑÑÑ" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "ÐагÑÑзка завеÑÑеМа: %(name)s @ %(plugin)s" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "ÐПваÑ(Ñе) CaptchaID Оз загÑÑзкО: %s: %s" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "ÐаÑа ÑÑеÑÐœÐ°Ñ Ð·Ð°Ð¿ÐžÑÑ 9kw.eu ÐžÐŒÐµÐµÑ ÐœÐµ ЎПÑÑаÑПÑМП кÑеЎОÑПв" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "УÑÑаМПвлеММÑе ÑкÑОпÑÑ ÐŽÐ»Ñ %s: " -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "Ðе вПзЌПжМП запÑÑÑОÑÑ ÑкÑОпÑ:" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "ÐÑОбка в %(script): %(error)s" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "УÑеÑÐœÐ°Ñ Ð·Ð°Ð¿ÐžÑÑ ExpertDecoders Ме ÐžÐŒÐµÐµÑ ÐŽÐŸÑÑаÑПÑМП кÑеЎОÑПв" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "ÐПжалÑйÑÑа ÑМаÑала ЎПбавÑÑе Ð²Ð°Ñ rehost.to аккаÑÐœÑ Ðž пеÑезапÑÑÑОÑе pyLoad" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "ÐПжалÑйÑÑа ÑМаÑала ЎПбавÑÑе ЎейÑÑвОÑелÑМÑÑ ÑÑеÑМÑÑ Ð·Ð°Ð¿ÐžÑÑ ÐŽÐ»Ñ premiumize.me О пеÑезапÑÑÑОÑÑ pyLoad." -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "ÐÑÑалПÑÑ %s кÑеЎОÑПв" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "Pil О tesseract Ме ÑÑÑаМПвлеМÑ. Ðе пПЎклÑÑеМ ÐºÐ»ÐžÐµÐœÑ ÐŽÐ»Ñ ÑаÑÑОÑÑПвкО каÑÑОМПк" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "Ðе пПлÑÑеМ ÑезÑлÑÑÐ°Ñ ÑаÑÑОÑÑПвкО каÑÑОМкО в ÑеÑеМОе ПÑвеЎÑММПгП вÑеЌеМО МО ПЎМОЌ Оз ЎПпПлМеМОй" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "ÐÑОбка ÑÑÑаМПвкО пПлÑзПваÑÐµÐ»Ñ Ðž гÑÑппÑ: %s" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "Ðе пПЎклÑÑеМ ÐºÐ»ÐžÐµÐœÑ ÐŽÐ»Ñ ÑаÑÑОÑÑПвкО каÑÑОМПк" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "ÐПбавлеМ кПМÑÐµÐ¹ÐœÐµÑ %(name)s Ñ %(count)d ÑÑлкаЌО" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "ÐПбавлеМП %(count)d ÑÑÑлПк в кПМÑÐµÐ¹ÐœÐµÑ #%(package)d " -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "Ðе ПбМаÑÑжеМа js плаÑÑПÑЌа, пПжалÑйÑÑа ÑÑÑаМПвОÑе лОбП Spidermonkey, ossp-js, pyv8 ОлО rhino" diff --git a/locale/ru/LC_MESSAGES/pyLoadCli.po b/locale/ru/LC_MESSAGES/pyLoadCli.po index 61d91a9fb..20b49882a 100644 --- a/locale/ru/LC_MESSAGES/pyLoadCli.po +++ b/locale/ru/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "ÐМÑеÑÑÐµÐ¹Ñ ÐºÐŸÐŒÐ°ÐœÐŽÐœÐŸÐ¹ ÑÑÑПкО" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "%s загÑÑзПк:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "СкПÑПÑÑÑ: " -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "РазЌеÑ: " -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "ÐакПМÑеМП в: " -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "ID: " -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "ПжОЎаМОе: " -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "СПÑÑПÑМОе:" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "пÑОПÑÑаМПвлеМП" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "в пÑПÑеÑÑе" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "ПбÑÐ°Ñ ÑкПÑПÑÑÑ" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "ЀайлПв в ПÑеÑеЎО" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "ÐÑегП" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "ÐеМÑ:" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "ÐПбавОÑÑ ÑÑÑлкО" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "УпÑавлеМОе ПÑеÑеЎÑÑ" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "УпÑавлеМОе кПллекÑПÑПЌ ÑÑÑлПк" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "ÐапÑÑÑОÑÑ/ÐÑОПÑÑаМПвОÑÑ ÑеÑвеÑ" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "ÐÑÑаМПвОÑÑ ÑеÑвеÑ" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "ÐÑÑ
ПЎ" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "ÐÑпПлÑзÑйÑе ÑаблПМ: add <ÐÐŒÑ ÐºÐŸÐœÑейМеÑа> <ÑÑÑлка1> <ÑÑÑлка2> ..." -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "ÐÑПвеÑка %d ÑÑÑлкО:" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "Ѐайл Ме МайЎеМ." -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "РабПÑа pyLoad бÑла пÑОМÑЎОÑелÑМП завеÑÑеМа" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "ÐПказаÑÑ ÑПÑÑПÑМОе ÑеÑвеÑа" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "ÐПказаÑÑ Ð·Ð°ÐºÐ°ÑкО в ПÑеÑеЎО" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "ÐПказаÑÑ Ð·Ð°ÐºÐ°ÑкО в ÑпОÑке кПллекÑПÑа" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "ÐПбавОÑÑ ÐºÐŸÐœÑÐµÐ¹ÐœÐµÑ Ð² ПÑеÑеЎÑ" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "ÐПбавлÑÐµÑ ÐºÐŸÐœÑÐµÐ¹ÐœÐµÑ Ð² кПллекÑÐŸÑ ÑÑÑлПк" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "УЎалОÑÑ ÑÐ°Ð¹Ð»Ñ ÐžÐ· ПÑеÑеЎО/кПллекÑПÑа" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "УЎалОÑÑ ÐºÐŸÐœÑÐµÐ¹ÐœÐµÑ ÐžÐ· ПÑеÑеЎО/кПллекÑПÑа" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "ÐеÑеЌеÑÑОÑÑ Ð¿Ð°ÐºÐµÑ(Ñ) Оз ПÑеÑеЎО в кПллекÑÐŸÑ Ðž МаПбПÑПÑ" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "ÐеÑезапÑÑÑОÑÑ ÑайлÑ" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "ÐеÑезапÑÑÑОÑÑ Ð¿Ð°ÐºÐµÑÑ" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "ÐÑПвеÑка ÑÑаÑÑÑа ÑвÑзО, ЎейÑÑвÑÐµÑ Ñ ÐŒÐµÑÑМÑЌО кПМÑейМеÑаЌО" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "ÐÑПвеÑÑÐµÑ ÑПÑÑПÑМОе Ñайла-кПМÑейМеÑа" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "ÐÑОПÑÑаМПвОÑÑ ÑеÑвеÑ" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "пÑПЎПлжОÑÑ Ð·Ð°ÐºÐ°ÑкО" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "ÐеÑеклÑÑОÑÑ Ð¿Ð°Ñза/пÑПЎПлжОÑÑ" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "ПÑÑаМПвОÑÑ ÑеÑвеÑ" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "СпОÑПк кПЌаМЎ: " -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "ÐапОÑаÑÑ Ñайл кПМÑОгÑÑаÑОО пПлÑзПваÑÐµÐ»Ñ ÐœÐµ ÑЎалПÑÑ" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "ÐÐ»Ñ ÑÐŸÐµÐŽÐžÐœÐµÐœÐžÑ Ñ ÑÐŽÑПЌ pyLoad МеПбÑ
ПЎОЌ Ð¿Ð°ÐºÐµÑ py-openssl." -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "ÐÐŽÑеÑ: " -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "ÐПÑÑ: " -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "ÐÐŒÑ Ð¿ÐŸÐ»ÑзПваÑелÑ: " -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "ÐаÑПлÑ: " -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "ÐепÑавОлÑМÑе ÑÑÑÑМÑе ЎаММÑе." -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "ÐевПзЌПжМП пПЎклÑÑОÑÑÑÑ Ðº %(addr)s:%(port)s." -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "ÐÐ»Ñ ÑÐŸÐµÐŽÐžÐœÐµÐœÐžÑ Ñ ÑÐŽÑПЌ pyLoad МеПбÑ
ПЎОЌ Ð¿Ð°ÐºÐµÑ py-openssl." -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "Ð ÑвÑзО Ñ ÑеЌ, ÑÑП бÑлО Ð²Ð²ÐµÐŽÐµÐœÑ ÑÑÐŽ кПЌаМЎ, ОМÑеÑакÑОвМÑй ÑежОЌ бÑл пÑеÑваМ." -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "ÐПбавОÑÑ Ð¿Ð°ÐºÐµÑ:" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "ÐвеЎОÑе МазваМОе пакеÑа" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "ÐПМÑейМеÑ: %s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "ÐМалОз ÑÑÑлПк ÐŽÐ»Ñ ÐŽÐŸÐ±Ð°Ð²Ð»ÐµÐœÐžÑ." -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "ÐвеЎОÑе %s кПгЎа бÑЎеÑе гПÑПвÑ." -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "ÐÐŸÐ±Ð°Ð²Ð»ÐµÐœÑ ÑÑÑлкО: " -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "МазаЎ в главМПе ЌеМÑ" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "УпÑавлеМОе пакеÑаЌО:" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "УпÑавлеМОе ÑÑÑлкаЌО" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "ЧÑП ÐÑ Ñ
ПÑОÑе пеÑеЌеÑÑОÑÑ?" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "ЧÑП ÐÑ Ñ
ПÑОÑе ÑЎалОÑÑ?" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "ЧÑП ÐÑ Ñ
ПÑОÑе пеÑезапÑÑÑОÑÑ?" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "ÐÑбОÑайÑе, ÑÑП ÐÑ Ñ
ПÑОÑе ÑЎелаÑÑ ÐžÐ»Ðž вМеÑОÑе ÐœÐŸÐŒÐµÑ Ð¿Ð°ÐºÐµÑа." -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "ÑЎалОÑÑ" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "пеÑеЌеÑÑОÑÑ" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "пеÑезапÑÑÑОÑÑ" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "- пÑеЎÑÐŽÑÑОй" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "- ÑлеЎÑÑÑОй" diff --git a/locale/ru/LC_MESSAGES/setup.po b/locale/ru/LC_MESSAGES/setup.po index e55aa5fe7..b1d0093d4 100644 --- a/locale/ru/LC_MESSAGES/setup.po +++ b/locale/ru/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "Ўа" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "МеÑ" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "ÐÐ°Ñ Ð¿ÑОвеÑÑÑвÑÐµÑ Ð¿ÐŸÐŒÐŸÑМОк пП МаÑÑÑПйке pyLoad" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "ÐÑÐŽÐµÑ Ð¿ÑПвеÑеМа ÑОÑÑеЌа О вМеÑÐµÐœÑ Ð¿ÐµÑвПМаÑалÑМÑе МаÑÑÑПйкО ÐŽÐ»Ñ Ð·Ð°Ð¿ÑÑка pyLoad." -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "РкваЎÑаÑМÑÑ
ÑкПбкаÑ
[] ÑказÑваÑÑÑÑ Ð·ÐœÐ°ÑÐµÐœÐžÑ Ð¿ÐŸ ÑЌПлÑаМОÑ," -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "еÑлО ÐÑ ÐœÐµ Ñ
ПÑОÑе ЌеМÑÑÑ ÑÑО зМаÑÐµÐœÐžÑ ÐžÐ»Ðž Ме ÑвеÑÐµÐœÑ Ð² ÑвПÑÐŒ вÑбПÑе, пÑПÑÑП МажЌОÑе ENTER." -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "Ðе забÑÐŽÑÑе: ÐÑ Ð²ÑегЎа ЌПжеÑе ÑМПва запÑÑÑОÑÑ Ð¿ÐŸÐŒÐŸÑМОка пП МаÑÑÑПйкаЌ, МабÑав pyload.py Ñ ÐºÐ»ÑÑПЌ --setup ОлО -s." -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "ÐÑО вПзМОкМПвеМОО пÑПблеЌ Ñ ÑÑОЌ аÑÑОÑÑеМÑПЌ МажЌОÑе STRG-C" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "ÐŽÐ»Ñ Ð¿ÑекÑаÑÐµÐœÐžÑ ÑÑÑаМПвкО. pyload.py бПлÑÑе Ме бÑÐŽÐµÑ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ Ð°Ð²ÑПЌаÑОÑеÑкО." -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "ÐÐ»Ñ ÑÑаÑÑа пÑПвеÑкО ÑОÑÑеЌÑ, МажЌОÑе ENTER." -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "ÐÐ»Ñ ÑабПÑÑ pyLoad МеПбÑ
ÐŸÐŽÐžÐŒÑ pycurl, sqlite О python 2.5, 2.6, 2.7." -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "УÑÑаМПвОÑе МеЎПÑÑаÑÑОе пакеÑÑ Ðž пеÑезапÑÑÑОÑе pyLoad." -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "ÐÑПгÑаЌЌа ÑÑÑаМПвкО завеÑÑÐ°ÐµÑ ÑабПÑÑ." -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "ÐÑПвеÑка ÑОÑÑÐµÐŒÑ Ð·Ð°Ð²ÐµÑÑеМа. ЧÑÐŸÐ±Ñ Ð¿ÑПÑЌПÑÑеÑÑ ÐŸÑÑеÑ, МажЌОÑе клавОÑÑ ENTER." -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "## ÐÑÑÐµÑ ##" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "ÑаÑÑОÑÑПвка" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "SSL пПЎклÑÑеМОе" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "авÑПЌаÑОÑеÑÐºÐ°Ñ ÑаÑÑОÑÑПвка CAPTCHA" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "GUI " -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "Web-ОМÑеÑÑейÑ" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "пПЎЎеÑжка Click'N'Load" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "ÐПÑÑÑпМÑе ÑÑМкÑОО:" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "ÐеЎПÑÑÑпМÑе ÑÑМкÑОО:" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "МеЎПÑÑÑпеМ py-crypto" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "ÐМ МÑжеМ ÐŽÐ»Ñ ÑаÑкПЎОÑÐŸÐ²Ð°ÐœÐžÑ ÑайлПв." -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "ÐœÐµÑ SSL" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "ÐМ МÑжеМ ÐŽÐ»Ñ Ð·Ð°ÑОÑÑ ÑÐŸÐµÐŽÐžÐœÐµÐœÐžÑ Ñ ÑÐŽÑПЌ ОлО web-ОМÑеÑÑейÑПЌ." -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "ÐÑО лПкалÑМÑÑ
ÑПеЎОМеМОÑÑ
SSL Ме МÑжеМ." -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "РаÑÑОÑÑПвка Captcha МеЎПÑÑÑпМа" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "ÐÑжМа Ма МекПÑПÑÑÑ
Ñайл-Ñ
ПÑÑОМгаÑ
." -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "ÐÐµÑ GUI" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "ÐÐµÑ Ð¿ÐŸÐŽÐŽÐµÑжкО JavaScript" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "ÐÑП пПМаЎПбОÑÑÑÑ ÐŽÐ»Ñ ÐœÐµÐºÐŸÑПÑÑÑ
ÑÑÑлПк Click'N'Load. ÐМÑÑалОÑПвайÑе Spidermonkey, ossp-js, pyv8 ОлО rhino" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "ÐÑО желаМОО ÑейÑÐ°Ñ ÐŒÐŸÐ¶ÐœÐŸ пÑеÑваÑÑ ÑÑÑÐ°ÐœÐŸÐ²ÐºÑ Ðž пПÑÑавОÑÑ ÐœÐµÐŸÐ±Ñ
ПЎОЌÑе завОÑОЌÑе пакеÑÑ." -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "ÐÑПЎПлжОÑÑ ÐœÐ°ÑÑÑПйкÑ?" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "ÐÑжМП лО ЌеМÑÑÑ Ð¿ÑÑÑ Ðº папке МаÑÑÑПек? ТекÑÑОй пÑÑÑ %s" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "ÐÑлО Ð²Ñ ÐžÑпПлÑзÑеÑе pyLoad Ма какПЌ-МОбÑÐŽÑ ÑеÑвеÑе ОлО пÑÑÑ Ðº кПМÑОгÑÑаÑОО ÑказÑÐ²Ð°ÐµÑ ÐœÐ° flash-ЎОÑк, лÑÑÑе пПЌеМÑйÑе егП." -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "ÐзЌеМОÑÑ Ð¿ÑÑÑ?" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "ХПÑОÑе ОзЌеМОÑÑ ÑÑÑÑМÑе ЎаММÑе О ÐŽÑÑгОе базПвÑе МаÑÑÑПйкО?" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "ÐаÑÑПÑÑелÑМП ÑекПЌеМЎÑеÑÑÑ Ð¿ÑО пеÑвПЌ запÑÑке." -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "ÐзЌеМОÑÑ ÐŸÑМПвМÑе МаÑÑÑПйкО?" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "ХПÑОÑе МаÑÑÑПОÑÑ SSL?" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "ÐаÑÑÑПОÑÑ SSL?" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "ХПÑОÑе МаÑÑÑПОÑÑ WEB-ОМÑеÑÑейÑ?" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "ÐаÑÑÑПОÑÑ WEB-ОМÑеÑÑейÑ?" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "УÑÑаМПвка ÑÑпеÑМП завеÑÑеМа." -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "ÐажЌОÑе ENTER О запÑÑÑОÑе pyLoad" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "## ÐÑПвеÑка ÑОÑÑÐµÐŒÑ ##" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "ÐеÑÑÐžÑ python ÑлОÑкПЌ МПваÑ, ОÑпПлÑзÑйÑе Python 2.6/2.7" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "ÐеÑÑÐžÑ python ÑлОÑкПЌ ÑÑаÑаÑ, ОÑпПлÑзÑйÑе Python веÑÑОО 2.5 О вÑÑе" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "ÐеÑÑÐžÑ Python: OK" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "СлОÑкПЌ ÑÑаÑÐ°Ñ Ð²ÐµÑÑÐžÑ jinja2 %s." -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "ÐПжМП ÑпПкПйМП пÑПЎПлжОÑÑ ÐœÐ°ÑÑÑПйкÑ, МП еÑлО web-ОМÑеÑÑÐµÐ¹Ñ ÐœÐµ бÑÐŽÐµÑ ÑабПÑаÑÑ," -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "ÑП ПбМПвОÑе ОлО ÑЎалОÑе бОблОПÑÐµÐºÑ jinja2. ÐМа Ñже еÑÑÑ Ð² ÑПÑÑаве pyLoad." -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "## ÐÑМПвМÑе МаÑÑÑПйкО ##" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "ÐÑО ÑÑÑÑМÑе ЎаММÑе пПЎÑ
ПЎÑÑ Ðº CLI, GUI О WEB-ОМÑеÑÑейÑÑ." -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "ÐПлÑзПваÑелÑ" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "ÐМеÑМОЌ клОеМÑаЌ (GUI, CLI О ÐŽÑÑгОе) пПМаЎПбОÑÑÑÑ ÐŽÐžÑÑаМÑОПММÑй ЎПÑÑÑп ÐŽÐ»Ñ ÑабПÑÑ ÑеÑез ÑеÑÑ." -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "ÐÑлО ÐÑ Ñ
ПÑОÑе пПлÑзПваÑÑÑÑ ÑПлÑкП ÑПеЎОМеМОеЌ ÑеÑез веб ОМÑеÑÑейÑ, ПÑклÑÑОÑе егП, ÑÑÐŸÐ±Ñ ÑЌеМÑÑОÑÑ Ð¿ÐŸÑÑеблеМОе ПпеÑаÑОвМПй паЌÑÑО." -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "ÐклÑÑОÑÑ ÐŽÐžÑÑаМÑОПММÑй ЎПÑÑÑп" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "ЯзÑк" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "Ðапка закаÑек" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "ÐакÑ.ÑОÑлП ПЎМПвÑеЌеММÑÑ
закаÑек" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "ÐÑпПлÑзПваÑÑ Ð¿ÐµÑепПЎклÑÑеМОе ОМÑеÑМеÑа?" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "ÐÑÑÑ Ðº ÑкÑОпÑÑ Ð¿ÐµÑепПЎклÑÑеМОÑ" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "## УÑÑаМПвкО WEB-ОМÑеÑÑейÑа ##" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "ÐклÑÑОÑÑ WEB-ОМÑеÑÑейÑ?" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "ip-аЎÑÐµÑ WEB-ОМÑеÑÑейÑа. ÐÑлО ÑказаÑÑ 127.0.0.1 ОлО localhost, ÑП WEB-ОМÑеÑÑÐµÐ¹Ñ Ð±ÑÐŽÐµÑ ÐŽÐŸÑÑÑпеМ ÑПлÑкП лПкалÑМП." -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "ÐÐŽÑеÑ" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "ÐПÑÑ" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "Ð pyLoad МеÑкПлÑкП влПжеММÑÑ
ÑеÑвеÑПв, МОже ÑлеЎÑÑÑ ÐŸÐ¿ÐžÑÐ°ÐœÐžÑ Ð² кПÑПÑкПЌ вОЎе." -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "СÑаМЎаÑÑÐœÐ°Ñ ÐœÐ°ÑÑÑПйка, МаОлÑÑÑОй вÑÐ±ÐŸÑ ÐµÑлО ваЌ Ме ÑÑМП какПй ÑЎелаÑÑ Ð²ÑбПÑ." -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "ÐÑÐŸÑ ÑеÑÐ²ÐµÑ Ð¿ÐŸÐŽÐŽÐµÑÐ¶ÐžÐ²Ð°ÐµÑ SSL О Ñ
ПÑПÑаÑ, Ð³ÐŸÐŽÐœÐ°Ñ Ð°Ð»ÑÑеÑМаÑОва к builtin." -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "ÐÐŸÐ¶ÐµÑ ÐžÑпПлÑзПваÑÑÑÑ Ð²ÐŒÐµÑÑе Ñ apache, lighttpd, ÑÑебÑÐµÑ ÐœÐ°ÑÑÑПйкО, ÑÑП ÑвлÑеÑÑÑ ÐœÐµ ÑакОЌ пÑПÑÑÑÐŒ заЎаМОеЌ." -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "ÐПлÑÑОÑÑ ÐµÐ³ÐŸ зЎеÑÑ: https://github.com/jonashaag/bjoern О ÑкПЌпОлОÑПваÑÑ ÐµÐ³ÐŸ" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "ÐМОЌаМОе: РМекПÑПÑÑÑ
ÑеЎкОÑ
ÑлÑÑаÑÑ
вÑÑÑПеММÑй ÑеÑÐ²ÐµÑ ÐœÐµ ÑабПÑаеÑ, еÑлО Ð²Ñ Ð·Ð°ÐŒÐµÑОлО пÑÐŸÐ±Ð»ÐµÐŒÑ Ñ Ð²ÐµÐ±-ОМÑеÑÑейÑПЌ" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "веÑМÑÑÑÑÑ ÑÑЎа О ОзЌеМОÑÑ ÑеÑÐ²ÐµÑ builtin Ма ÑеÑÐ²ÐµÑ threaded." -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "СеÑвеÑ" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "## ÐаÑÑÑПйкО SSL ##" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "ÐÐ»Ñ Ð³ÐµÐœÐµÑаÑОО SSL ÑеÑÑОÑОкаÑПв вÑпПлМОÑе ÑлеЎÑÑÑОе кПЌаМЎÑ, МаÑ
ПЎÑÑÑ Ð² папке кПМÑОгÑÑаÑОО pyLoad:" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "ÐÑлО вÑÑ Ð¿ÑПÑлП ÑÑпеÑМП, ÑейÑÐ°Ñ ÐŒÐŸÐ¶ÐœÐŸ бÑÐŽÐµÑ Ð²ÐºÐ»ÑÑОÑÑ Ð¿ÐŸÐŽÐŽÐµÑÐ¶ÐºÑ SSL." -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "ÐклÑÑОÑÑ SSL?" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "ÐÑбеÑОÑе ЎейÑÑвОе" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "1 - ÐПбавОÑÑ/ÐзЌеМОÑÑ Ð¿ÐŸÐ»ÑзПваÑелÑ" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "2 - ÐПказаÑÑ ÑпОÑПк пПлÑзПваÑелей" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "3 - УЎалОÑÑ Ð¿ÐŸÐ»ÑзПваÑелÑ" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "4 - ÐÑÑ
ПЎ" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "ÐПлÑзПваÑелО" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "УÑÑаМПвлеМ МПвÑй пÑÑÑ Ðº папке МаÑÑÑПек. ТекÑÑОе МаÑÑÑПйкО Ме бÑÐŽÑÑ ÑПÑ
ÑаМеМÑ!" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "ÐÑÑÑ Ðº МаÑÑÑПйкаЌ" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "ÐÑÑÑ Ðº МаÑÑÑПйкаЌ бÑл ОзЌеМÑМ. ÐеÑезапÑÑÑОÑе аÑÑОÑÑÐµÐœÑ ÐŽÐ»Ñ Ð¿ÑÐŸÐŽÐŸÐ»Ð¶ÐµÐœÐžÑ ÐœÐ°ÑÑÑПйкО." -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "ÐажЌОÑе клавОÑÑ Enter ÐŽÐ»Ñ Ð²ÑÑ
ПЎа." -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "Ðе ÑЎалПÑÑ ÑÑÑаМПвОÑÑ Ð¿ÑÑÑ Ðº МаÑÑÑПйкаЌ: %s" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "%s: ПÑÑÑÑÑÑвÑеÑ" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "ÐаÑПлÑ: " -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "СлОÑкПЌ пÑПÑÑПй паÑПлÑ, МÑжМП ЌОМОЌÑÐŒ 4 ÑОЌвПла." -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "ÐаÑÐŸÐ»Ñ (ÐПвÑПÑОÑÑ)" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "ÐаÑПлО Ме ÑПвпаЎаÑÑ." -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "Ўа" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "Ðа" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "МеÑ" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "ÐПжÑ" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "ÐекПÑÑекÑМÑй ввПЎ" diff --git a/locale/setup.pot b/locale/setup.pot index 11d64d094..ceba6a5d2 100644 --- a/locale/setup.pot +++ b/locale/setup.pot @@ -17,463 +17,463 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: module/setup.py:33 +#: pyload/setup.py:33 msgid "y" msgstr "" -#: module/setup.py:35 +#: pyload/setup.py:35 msgid "n" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "Welcome to the pyLoad Configuration Assistant." msgstr "" -#: module/setup.py:54 +#: pyload/setup.py:54 msgid "" "It will check your system and make a basic setup in order to run pyLoad." msgstr "" -#: module/setup.py:56 +#: pyload/setup.py:56 msgid "The value in brackets [] always is the default value," msgstr "" -#: module/setup.py:57 +#: pyload/setup.py:57 msgid "" "in case you don't want to change it or you are unsure what to choose, just " "hit enter." msgstr "" -#: module/setup.py:59 +#: pyload/setup.py:59 msgid "" "Don't forget: You can always rerun this assistant with --setup or -s " "parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:60 +#: pyload/setup.py:60 msgid "If you have any problems with this assistant hit STRG-C," msgstr "" -#: module/setup.py:61 +#: pyload/setup.py:61 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:63 +#: pyload/setup.py:63 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:70 +#: pyload/setup.py:70 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:71 +#: pyload/setup.py:71 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Setup will now close." msgstr "" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "## Status ##" msgstr "" -#: module/setup.py:83 +#: pyload/setup.py:83 msgid "container decrypting" msgstr "" -#: module/setup.py:85 +#: pyload/setup.py:85 msgid "ssl connection" msgstr "" -#: module/setup.py:87 +#: pyload/setup.py:87 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "Webinterface" msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:98 +#: pyload/setup.py:98 msgid "Features available:" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "Featues missing: " msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "no py-crypto available" msgstr "" -#: module/setup.py:107 +#: pyload/setup.py:107 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:111 +#: pyload/setup.py:111 msgid "no SSL available" msgstr "" -#: module/setup.py:112 +#: pyload/setup.py:112 msgid "" "This is needed if you want to establish a secure connection to core or " "webinterface." msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:118 +#: pyload/setup.py:118 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:123 +#: pyload/setup.py:123 msgid "" "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-" "js, pyv8 or rhino" msgstr "" -#: module/setup.py:125 +#: pyload/setup.py:125 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "Continue with setup?" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:135 +#: pyload/setup.py:135 msgid "" "If you use pyLoad on a server or the home partition lives on an iternal " "flash it may be a good idea to change it." msgstr "" -#: module/setup.py:136 +#: pyload/setup.py:136 msgid "Change config path?" msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:144 +#: pyload/setup.py:144 msgid "Make basic setup?" msgstr "" -#: module/setup.py:151 +#: pyload/setup.py:151 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:152 +#: pyload/setup.py:152 msgid "Configure ssl?" msgstr "" -#: module/setup.py:158 +#: pyload/setup.py:158 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:159 +#: pyload/setup.py:159 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:165 +#: pyload/setup.py:165 msgid "Hit enter to exit and restart pyLoad" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "## System Check ##" msgstr "" -#: module/setup.py:175 +#: pyload/setup.py:175 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:181 +#: pyload/setup.py:181 msgid "Python Version: OK" msgstr "" -#: module/setup.py:224 +#: pyload/setup.py:224 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:225 +#: pyload/setup.py:225 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:226 +#: pyload/setup.py:226 msgid "" "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:243 +#: pyload/setup.py:243 msgid "JS engine" msgstr "" -#: module/setup.py:250 +#: pyload/setup.py:250 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:253 +#: pyload/setup.py:253 msgid "The following logindata is valid for CLI and webinterface." msgstr "" -#: module/setup.py:259 module/setup.py:357 module/setup.py:373 +#: pyload/setup.py:259 pyload/setup.py:357 pyload/setup.py:373 msgid "Username" msgstr "" -#: module/setup.py:265 +#: pyload/setup.py:265 msgid "" "External clients (GUI, CLI or other) need remote access to work over the " "network." msgstr "" -#: module/setup.py:266 +#: pyload/setup.py:266 msgid "" "However, if you only want to use the webinterface you may disable it to save " "ram." msgstr "" -#: module/setup.py:267 +#: pyload/setup.py:267 msgid "Enable remote access" msgstr "" -#: module/setup.py:271 +#: pyload/setup.py:271 msgid "Language" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "Downloadfolder" msgstr "" -#: module/setup.py:274 +#: pyload/setup.py:274 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:278 +#: pyload/setup.py:278 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:281 +#: pyload/setup.py:281 msgid "Reconnect script location" msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:289 +#: pyload/setup.py:289 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "" "Listen address, if you use 127.0.0.1 or localhost, the webinterface will " "only accessible locally." msgstr "" -#: module/setup.py:292 +#: pyload/setup.py:292 msgid "Address" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Port" msgstr "" -#: module/setup.py:295 +#: pyload/setup.py:295 msgid "" "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:296 +#: pyload/setup.py:296 msgid "Default server; best choice if you plan to use pyLoad just for you." msgstr "" -#: module/setup.py:297 +#: pyload/setup.py:297 msgid "" "Support SSL connection and can serve simultaneously more client flawlessly." msgstr "" -#: module/setup.py:299 +#: pyload/setup.py:299 msgid "" "Can be used by apache, lighttpd, etc.; needs to be properly configured " "before." msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Very fast alternative to builtin; requires libev and bjoern packages." msgstr "" -#: module/setup.py:305 +#: pyload/setup.py:305 msgid "" "Attention: In some rare cases the builtin server is not working, if you " "notice problems with the webinterface" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "Server" msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "## SSL Setup ##" msgstr "" -#: module/setup.py:322 +#: pyload/setup.py:322 msgid "" "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "" -#: module/setup.py:328 +#: pyload/setup.py:328 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "" -#: module/setup.py:330 +#: pyload/setup.py:330 msgid "Activate SSL?" msgstr "" -#: module/setup.py:347 +#: pyload/setup.py:347 msgid "Select action" msgstr "" -#: module/setup.py:348 +#: pyload/setup.py:348 msgid "1 - Create/Edit user" msgstr "" -#: module/setup.py:349 +#: pyload/setup.py:349 msgid "2 - List users" msgstr "" -#: module/setup.py:350 +#: pyload/setup.py:350 msgid "3 - Remove user" msgstr "" -#: module/setup.py:351 +#: pyload/setup.py:351 msgid "4 - Quit" msgstr "" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "Users" msgstr "" -#: module/setup.py:391 +#: pyload/setup.py:391 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:392 +#: pyload/setup.py:392 msgid "Configpath" msgstr "" -#: module/setup.py:400 +#: pyload/setup.py:400 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:401 +#: pyload/setup.py:401 msgid "Press Enter to exit." msgstr "" -#: module/setup.py:405 +#: pyload/setup.py:405 #, python-format msgid "Setting config path failed: %s" msgstr "" -#: module/setup.py:411 +#: pyload/setup.py:411 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:456 +#: pyload/setup.py:456 msgid "" "Warning: Consider a password of 10 or more symbols if you expect to access " "from outside your local network (ex. internet)." msgstr "" -#: module/setup.py:457 +#: pyload/setup.py:457 msgid "Password: " msgstr "" -#: module/setup.py:461 +#: pyload/setup.py:461 #, python-format msgid "Password too short! Use at least %s symbols." msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password must be alphanumeric." msgstr "" -#: module/setup.py:467 +#: pyload/setup.py:467 msgid "Password (again): " msgstr "" -#: module/setup.py:473 +#: pyload/setup.py:473 msgid "Passwords did not match." msgstr "" -#: module/setup.py:489 +#: pyload/setup.py:489 msgid "yes" msgstr "" -#: module/setup.py:489 +#: pyload/setup.py:489 msgid "true" msgstr "" -#: module/setup.py:489 +#: pyload/setup.py:489 msgid "t" msgstr "" -#: module/setup.py:492 +#: pyload/setup.py:492 msgid "no" msgstr "" -#: module/setup.py:492 +#: pyload/setup.py:492 msgid "false" msgstr "" -#: module/setup.py:492 +#: pyload/setup.py:492 msgid "f" msgstr "" -#: module/setup.py:495 module/setup.py:505 +#: pyload/setup.py:495 pyload/setup.py:505 msgid "Invalid Input" msgstr "" diff --git a/locale/si/LC_MESSAGES/django.po b/locale/si/LC_MESSAGES/django.po index bc193cfa5..2fa2b0e15 100644 --- a/locale/si/LC_MESSAGES/django.po +++ b/locale/si/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "නඞ" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "à¶Žà·âරධà·à¶±" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "à¶à¶žà¶±à·à¶±à·à¶à¶º" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "à¶
à·à¶œà¶à¶à· à¶à¶»à¶±à·à¶±" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/si/LC_MESSAGES/pyLoad.po b/locale/si/LC_MESSAGES/pyLoad.po index 053e865c6..0aaf63cd8 100644 --- a/locale/si/LC_MESSAGES/pyLoad.po +++ b/locale/si/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "" -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "" -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/si/LC_MESSAGES/pyLoadCli.po b/locale/si/LC_MESSAGES/pyLoadCli.po index f859072ff..574f50aa9 100644 --- a/locale/si/LC_MESSAGES/pyLoadCli.po +++ b/locale/si/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "" diff --git a/locale/si/LC_MESSAGES/setup.po b/locale/si/LC_MESSAGES/setup.po index c9bbb5513..3cbfa52f1 100644 --- a/locale/si/LC_MESSAGES/setup.po +++ b/locale/si/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "" diff --git a/locale/sq/LC_MESSAGES/django.po b/locale/sq/LC_MESSAGES/django.po index cd2449a47..f8bfd5446 100644 --- a/locale/sq/LC_MESSAGES/django.po +++ b/locale/sq/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/sq/LC_MESSAGES/pyLoad.po b/locale/sq/LC_MESSAGES/pyLoad.po index 1f6ed52b9..d9df0e4bf 100644 --- a/locale/sq/LC_MESSAGES/pyLoad.po +++ b/locale/sq/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "" -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "" -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/sq/LC_MESSAGES/pyLoadCli.po b/locale/sq/LC_MESSAGES/pyLoadCli.po index 73f7e3230..80567cb30 100644 --- a/locale/sq/LC_MESSAGES/pyLoadCli.po +++ b/locale/sq/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "" diff --git a/locale/sq/LC_MESSAGES/setup.po b/locale/sq/LC_MESSAGES/setup.po index 0e0e1d124..f1fb975f8 100644 --- a/locale/sq/LC_MESSAGES/setup.po +++ b/locale/sq/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "" diff --git a/locale/sr/LC_MESSAGES/django.po b/locale/sr/LC_MESSAGES/django.po index f298d0667..0083d9a21 100644 --- a/locale/sr/LC_MESSAGES/django.po +++ b/locale/sr/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "ÐПвО заÑ
Ñев за пÑПвеÑÑ" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "ÐПлОЌП Ўа пÑПÑОÑаÑе ÑекÑÑ Ñа пÑПвеÑе." -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "pyLoad ÑеÑÑаÑÑПваМ" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "ОÑкÑÑÑеМП" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "УÑпеÑМП ПбавÑеМП" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "ÑкÑÑÑеМП" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "Ðа лО ÑÑе ÑОгÑÑМО Ўа желОÑе Ўа ОÑкÑÑÑОÑе pyLoad?" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "РеÑÑаÑÑПваÑО везÑ" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "ÐбÑОÑаÑО везÑ" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "УМеÑОÑе ОЌе пакеÑа." -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "ÐлОкМОÑе Ма ЎеÑÐœÑ ÑÑÑÐ°ÐœÑ Ð¿ÑПвеÑе." -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "ÐеÑОла Ñе гÑеÑка." -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "ЀаÑÑОкла Ñе пÑазМа" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "ÐеÑÑпелП" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "ÐеЌа заÑ
Ñева за пÑПвеÑÑ" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "ÐПзОМке Ñе Ме пПклапаÑÑ" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "ÐПЎеÑаваÑа ÑаÑÑваМа." -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "ÐПва ÑаÑÑОкла" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "Ðа лО ÑÑе ÑОгÑÑМО Ўа желОÑе Ўа ÑеÑÑаÑÑÑеÑе pyLoad?" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "ÑекаЌ %s" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "ÐкÑОвМа пÑеÑзОЌаÑа" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "ÐÑÑа" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "ÐÑеÑзОЌаÑа" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "ÐзвеÑÑаÑО" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "ÐПЎеÑаваÑе" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "ÐЌе" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "СÑаÑÑÑ" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "ÐМÑПÑЌаÑОÑа" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "ÐелОÑОМа" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "ÐапÑеЎак" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "ÐÑОÑава" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "ÐПÑОÑМОÑкП ОЌе" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "ÐПзОМка" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "ÐЌе О лПзОМка Ме ПЎгПваÑаÑÑ. ÐПМПвОÑО." -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "Ðа бО ÑеÑеÑПвалО пПЎаÑке пÑОÑаве ОлО за ЎПЎаваÑе кПÑОÑМОка:" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "ÐбÑОÑО завÑÑеМП" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "РеÑÑаÑÑПваÑе МеÑÑпеÑМП" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "ЀаÑÑОкла:" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "ÐПзОМка:" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "УÑеЎО пакеÑ" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "УÑеЎО ЎеÑаÑе пÑкеÑа." -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "ÐЌе пакеÑа." -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "ЀаÑÑОкла" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "ÐЌе пПЎÑаÑÑОкле за Пва пÑеÑзОЌаÑа." -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "СпОÑак лПзОМке за Ð ÐÐ ." -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "СаÑÑваÑ" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "РеÑеÑ" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "УÑпеÑМП ÑÑе Ñе ПЎÑавОлО." -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "ÐÑÑаÑа" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "абÑПлÑÑМП" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "ÑелаÑОвМП" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "ОЌе" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "велОÑОМа" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "ÑОп" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "заЎÑа пÑПЌеМа" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "ÑПЎОÑеÑÑка ÑаÑÑОкла" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "МеЌа ÑаЎÑжаÑа" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "ÐпÑÑе" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "ÐПЎаÑÑО" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "ÐалПзО" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "ÐЎабÑаÑО ÑекÑОÑÑ ÐžÐ· ЌеМОÑа" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "ÐÑОкÑÑÑак" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "ÐÑеЌОÑÑÐŒ" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "ÐажО ЎП" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "ÐÑеПÑÑалО пÑПÑПк" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "ÐÑеЌе" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "ÐÐ°ÐºÑ ÐžÑÑПвÑеЌеМП" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "ÐбÑОÑО?" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "ОÑпÑавМП" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "МОÑе важМП" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "Ўа" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "Ме" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "ÐПЎаÑ" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "ÐÐŸÐŽÐ°Ñ ÐœÐ°Ð»ÐŸÐ³" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "Ð£ÐœÐŸÑ Ð¿ÐŸÐŽÐ°Ñака за ÑпПÑÑÐµÐ±Ñ Ð¿ÑеЌОÑÑÐŒ ЌПгÑÑМПÑÑО." -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "ÐаÑе ОЌе:" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "ÐПзОМка за ÐŸÐ²Ð°Ñ ÐœÐ°Ð»ÐŸÐ³" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "ТОп" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "ÐЎабÑаÑО Ñ
ПÑÑ ÐаÑег МалПга." -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "СÑаÑÑÑÑ" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "МазаЎ" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "ЎаÑе" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "ÐÑаÑ" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "ÐеÑÑО" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "ÐПЎÑÑка" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "СОÑÑеЌ" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "ÐС:" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "ÐеÑзОÑа pyLoad-а:" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "ЀаÑÑОкла ОМÑÑалаÑОÑе:" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "ЀаÑÑОкла пПЎеÑаваÑа:" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "ЀаÑÑОкла пÑеÑзОЌаÑа:" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "ÐÑПÑÑПÑ:" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "ÐезОк:" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "ÐПÑÑ Ð²ÐµÐ±ÐžÐœÑеÑÑеÑÑа:" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "ÐПÑÑ ÑЎаÑеМПг ОМÑеÑÑеÑÑа:" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "ÐПЎеÑаваÑе" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "ÐеМаÑÐµÑ ÐŽÐ°ÑПÑеке" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "ÐÐŸÐŽÐ°Ñ Ð¿Ð°ÐºÐµÑ" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "ÐÑОлепО лОМкПве ОлО пПÑлаÑО кПМÑеÑМеÑ." -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "ÐЌе МПвПг пакеÑа." -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "Ðезе" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "ÐÑОлепОÑе везе ОлО ÑекÑÑ Ðž ÑÑОÑМОÑе ÐŽÑгЌе ЀОлÑеÑ." -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "ЀОлÑÑОÑÐ°Ñ Ð£Ð Ð" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "ÐПзОМка за Ð ÐРаÑÑ
Ове" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "ÐаÑПÑека" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "ÐПÑаÑО кПМÑеÑМеÑ." -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "ÐÐŽÑеЎОÑÑе" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "ЧОÑаÑе пÑПвеÑе" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "ÐÑПвеÑа" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "ÐÑПвеÑа." -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "ТекÑÑ" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "УМеÑО ÑекÑÑ ÐžÐ· пÑПвеÑе." -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "ÐаÑвПÑО" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "ÐебОМÑеÑÑеÑÑ" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "ÐжÑÑОÑаÑа ÑÑ ÐŽÐŸÑÑÑпМа!" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "ÐПЎаÑÑО ÑÑ Ð°Ð¶ÑÑОÑаМО, ÑеÑÑаÑÑПваÑО!" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "ЧекаÑе пÑПвеÑе" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "ÐÐŽÑава" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "ÐЎЌОМОÑÑÑÑÑ" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "ÐМÑП" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "ÐПгÑÑÑе Ñе!" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "ÐаÑÑÑавО" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "ÐÑкажО" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "ÐÑеÑзЌО:" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "ÐПМПвМа веза:" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "ÐÑзОМа:" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "ÐкÑОвМП:" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "ÐПМПвП ÑÑОÑÐ°Ñ ÑÑÑаМÑ" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "ÑÑОÑаваÑе" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "ÐазаЎ Ма вÑÑ
" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "ÐÑкÑÑÑОÑО pyLoad" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "РеÑÑаÑÑПваÑО pyLoad" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "Ðа ЎПЎаваÑе/пÑПЌеМе Ð»ÐŸÐ·ÐžÐœÐºÑ ÑпПÑÑебОÑО:" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "ÐажМП! ÐЎЌОМ кПÑОÑМОк Ñвек ОЌа Ñва пÑава!" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "ÐÑПЌеМО лПзОМкÑ" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "ÐЎЌОМОÑÑÑаÑПÑ" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "ÐПзвПле" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "пÑПЌеМО" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "УМеÑО ÑÑеМÑÑÐœÑ Ðž жеÑÐµÐœÑ Ð»ÐŸÐ·ÐžÐœÐºÑ." -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "ÐПÑОÑМОк" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "ТÑеМÑÑМа лПзОМка" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "ÐПва лПзОМка" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "ÐПва лПзОМка:" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "ÐПва лПзОМка (пПМПвО)" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "ÐПМПвОÑО ÐœÐŸÐ²Ñ Ð»ÐŸÐ·ÐžÐœÐºÑ." -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "ÐеЌаÑе пÑавП за пÑОÑÑÑп ÐŸÐ²ÐŸÑ ÑÑÑаМО." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "ЀаÑÑОкла пÑеÑзОЌаÑа МОÑе МаÑеМа." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "МеПгÑаМОÑеМП" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "МОÑе ЎПÑÑÑпМП" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "ÐПкÑеМÑÑО pyload.py -s за пÑОÑÑÑп пПЎеÑаваÑÑ." diff --git a/locale/sr/LC_MESSAGES/pyLoad.po b/locale/sr/LC_MESSAGES/pyLoad.po index 44cad0c91..a4d0514c0 100644 --- a/locale/sr/LC_MESSAGES/pyLoad.po +++ b/locale/sr/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "ÐÑОЌÑеМ Ñе ÑОгМал за Озлазак" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "pyLoad Ð²ÐµÑ ÑаЎО Ñа бÑПÑеЌ %s" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "Ðе ÐŒÐŸÐ³Ñ ÐŽÐ° пÑПЌеМОЌ гÑÑпÑ: %s" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "Ðе ÐŒÐŸÐ³Ñ ÐŽÐ° пÑПЌеМОЌ кПÑОÑМОка: %s" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "ÑаÑÑОкла за ОзвеÑÑаÑе" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "ÐПкÑеÑеЌ" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "ÐÑМПвМа ÑаÑÑОкла: %s" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "pycrypto за ЎеÑОÑÑПваÑе кПМÑеÑМеÑа" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "ÑаÑÑОкла за пÑОвÑеЌеМе ЎаÑПÑеке" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "ÑаÑÑОкла за пÑеÑзОЌаÑа" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "OpenSSL за ÑОгÑÑМПÑМе везе" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "ÐÑеЌеÑÑаÑе ÑÑаÑОÑ
пПЎеÑаваÑа Ñ Ð±Ð°Ð·Ñ" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "ÐÑПвеÑОÑе ваÑе пПЎаÑке пÑОÑавÑОваÑа Ñа ./pyload.py -u" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "Све везе ÑÑ ÑклПÑеМе" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "ÐÑеЌе пÑеÑзОЌаÑа: %s" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "СлПбПЎМП пÑПÑÑПÑа: %s" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "ÐкÑОвОÑаЌ МалПгеâŠ" -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "ÐкÑОваÑОÑа ЎПЎаÑка..." -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "pyLoad Ñе ÑпÑеЌаМ за кПÑОÑÑеÑе" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "пПМПвМП пПкÑеÑаÑе pyLoad-а" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "pyLoad Ñе заÑваÑа" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "ÐМÑÑалаÑОÑа %s" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "Ме ÐŒÐŸÐ³Ñ ÐŽÐ° МаÑеЌ %(desc)s: %(name)s" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "Ме ÐŒÐŸÐ³Ñ ÐŽÐ° кÑеОÑаЌ %(desc)s: %(name)s" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "ОÑкÑÑÑÑÑеЌâŠ" -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "гÑеÑка пÑО ОÑкÑÑÑОваÑÑ" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "ÑбОÑО pyLoad Оз ÑеÑЌОМала" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "Ðаза Ñе ОзбÑОÑаМП збПг МекПЌпаÑОбОлМе веÑзОÑе." -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "Ðаза Ме ЌПже Ўа Ñе кПМвеÑÑÑÑе" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "Ðаза Ñе кПМвеÑÑПваМа Ñа v2 Ñ v3." -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "Ðаза Ñе кПМвеÑÑПваМа Ñа v3 Ñ v4." -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "ÐПМвеÑÑПваÑе ÑÑаÑе Django базе" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "завÑÑеМП" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "ваМ ÐŒÑеже" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "Ма ÐŒÑежО" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "Ма ÑекаÑÑ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "пÑеÑкПÑеМП" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "ÑекаЌ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "пÑОвÑеЌеМП ваМ ÐŒÑеже" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "запПÑОÑеЌ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "МеÑÑпелП" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "пÑекОМÑÑП" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "ЎеÑОÑÑÑÑеЌ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "пÑОлагПÑеМП" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "пÑеÑзОЌаЌ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "ПбÑаÑÑÑеЌ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "МепПзМаÑП" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "ÐÐ°ÐºÐµÑ Ñе завÑÑеМ: %s" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "УпПÑÑеба SSL ThriftBackend" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "ÐÑеÑка ÑЎаÑеМПг ÑОЎа: %s" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "ÐПкÑеÑеЌ %(name)s: %(addr)s:%(port)s" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "Ðе ÐŒÐŸÐ³Ñ ÐŽÐ° ÑÑОÑаЌ пПзаЎОМÑÐºÑ ÐºÐŸÐŒÐ¿ÐŸÐœÐµÐœÑÑ %(name)s | %(error)s" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "ÑекаЌ %s" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "SSL ÑеÑÑОÑОкаÑО МОÑÑ Ð¿ÑПМаÑеМО." -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "ÐЎпÑÑÑОлО ÑЌП пПЎÑÑÐºÑ ÐŽÐ° бО ÑÑаÑÑПвалО %s ЎОÑекÑМП Ñа pyLoad" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "ÐПжеÑе Ўа ÑпПÑÑебОÑе ÑеÑÐ²ÐµÑ Ñа МавПÑПЌ кПÑО пÑÑжа ЎПбÑе пеÑÑПÑЌаМÑе О ÑÑл," -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "а ЌПжеÑе О Ўа МаÑÑавОÑе Ñа ваÑОЌ %s Ñа pyLoads fastcgi ÑеÑвеÑПЌ" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" -msgstr "пÑОЌеÑе пПЎеÑаваÑа ÑÑ Ñ ÑаÑÑОклО module/webui/servers" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" +msgstr "пÑОЌеÑе пПЎеÑаваÑа ÑÑ Ñ ÑаÑÑОклО pyload/webui/servers" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "Ðе ÐŒÐŸÐ³Ñ ÐŽÐ° ÑпПÑÑебОЌ %(server)s, python-flup МОÑе ОМÑÑалОÑаМ!" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "ÐÑеÑка ÑвПза lightweight ÑеÑвеÑа: %s" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "ТÑебаÑе Ўа пÑеÑзЌеÑе О кПЌпОлÑÑеÑе bjoern, https://github.com/jonashaag/bjoern" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" -msgstr "ÐПпОÑаÑÑе boern.so Ñ ÑаÑÑÐžÐºÐ»Ñ module/lib ОлО ÑпПÑÑебОÑе setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" +msgstr "ÐПпОÑаÑÑе boern.so Ñ ÑаÑÑÐžÐºÐ»Ñ pyload/lib ОлО ÑпПÑÑебОÑе setup.py install" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "ÐаÑавМП ÑÑебаÑе Ўа пПзМаÑеÑе лОМÑÐºÑ Ðž Ўа зМаÑе какП Ўа кПМпОлÑÑеÑе пÑПгÑаЌе" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "СеÑÐ²ÐµÑ Ð¿ÐŸÑÑавÑеМ Ма МавПÑеМ, збПг пÑПблеЌа Ма ÐОМЎПз." -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "ÐÐ²Ð°Ñ ÑеÑÐ²ÐµÑ ÐœÐµ пПЎÑжава SSL. УЌеÑÑП Ñега кПÑОÑÑОÑе ÑгМежЎеМО." -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "СÑаÑÑПваÑе ÑгÑаÑеМПг ÑеÑвеÑа: %(host)s:%(port)d" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "СÑаÑÑПваÑе МавПÑеМПг ССРвеб ÑеÑвеÑа: %(host)s:%(port)d" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "СÑаÑÑПваÑе МавПÑеМПг веб ÑеÑвеÑа: %(host)s:%(port)d" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "СÑаÑÑПваÑе fastcgi ÑеÑвеÑа: %(host)s:%(port)d" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "СÑаÑÑПваÑе вебÑеÑвеÑа (bjoern): %(host)s:%(port)d" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "ÐеЌаÑе пÑавП за пÑОÑÑÑп ÐŸÐ²ÐŸÑ ÑÑÑаМО." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "ЀаÑÑОкла пÑеÑзОЌаÑа МОÑе МаÑеМа." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "МеПгÑаМОÑеМП" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "МОÑе ЎПÑÑÑпМП" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "ÐПкÑеМÑÑО pyload.py -s за пÑОÑÑÑп пПЎеÑаваÑÑ." -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "ÐЎлПЌÑО пÑеÑзОЌаÑа МОÑÑ ÑÑпелО. ÐÑаÑаÑе Ма ÑÐµÐŽÐœÑ Ð²ÐµÐ·Ñ | %s" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "ÐÑеÑзОЌаÑе Ñе запПÑеÑП: %s" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "ÐÑеÑзОЌаÑе Ñе завÑÑеМП: %s" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "ÐÑОкÑÑÑÐºÑ %s МеЎПÑÑаÑе ÑÑМкÑОÑа." -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "ÐÑеÑзОЌаÑе Ñе пÑекОМÑÑП: %s" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "ÐÑеÑзОЌаÑе Ñе пПМПвП пПкÑеМÑÑП: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "ÐÑеÑзОЌаÑе Ñе ваМ ÐŒÑеже: %s" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "ÐÑеÑзОЌаÑе Ñе ÑÑеМÑÑМП ваМ ÐŒÑеже: %s" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "ÐÑеÑзОЌаÑе МОÑе ÑÑпелП: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "Ðе ÐŒÐŸÐ³Ñ ÐŽÐ° Ñе пПвежеЌ Ñа Ñ
ПÑÑПЌ ОлО Ñе веза пÑекОМÑÑа. ÐПМПвМП пПвезОваÑе за 1 ЌОМÑÑ." -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "ÐÑеÑзОЌаÑе Ñе пÑеÑкПÑеМП: %(name)s збПг %(plugin)s" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "ÐеÑОÑÑПваÑе пПÑелП: %s" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "ÐеÑÑпеÑМП ЎеÑОÑÑПваÑе: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "ÐПМавÑаÑе %s" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "Ðе ÐŒÐŸÐ³Ñ ÐŽÐ° пÑеÑзЌеЌ пПЎаÑке за %(name)s | %(err)s" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "ÐÑеÑка пПкÑеÑаÑа кÑке: %s" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "Ðе ÐŒÐŸÐ³Ñ ÐŽÐ° акÑОвОÑаЌ %(name)s" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "ÐкÑÐžÐ²ÐœÑ ÐŽÐŸÐŽÐ°ÑÑО: %s" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "ÐеакÑОвМО ЎПЎаÑÑО: %s" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "ÐеÑÑпеÑМП пПМПвМП пПвезОваÑе: %s" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "СкÑÐžÐ¿Ñ Ð·Ð° пПМПвМП пПвезОваÑе МОÑе пÑПМаÑеМ." -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "ÐПкÑеÑеЌ пПМПвМП пПвезОваÑе" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "Ðе ÐŒÐŸÐ³Ñ ÐŽÐ° ОзвÑÑОЌ ÑкÑÐžÐ¿Ñ Ð·Ð° пПМПвМП пПвезОваÑе." -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "ÐПМПвП Ñе пПвезаМП; МПва IP аЎÑеÑа: %s" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "ÐеЌа ЎПвПÑМП пÑПÑÑПÑа Ма ÑÑеÑаÑÑ" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "Ðе ÐŒÐŸÐ³Ñ ÐŽÐ° Ñе пÑОÑавОЌ Ñа МалПгПЌ %(user)s | %(msg)s" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "ÐеОÑпÑавМа лПзОМка" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "ÐÑеЌе %s ОЌа Ð»ÐŸÑ ÑПÑЌаÑ, ÑпПÑÑебО: 1:22-3:44" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "ÐалПг %s МеЌа ЎПвПÑМП ÑаПбÑаÑаÑа. ÐÑПвеÑаваЌ пПМПвП за 30 ЌОМÑÑа." -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "ÐалПг %s Ñе ОÑÑекаП. ÐÑПвеÑаваЌ пПМПвП за ÑÐ°Ñ Ð²ÑеЌеМа." -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "ÐПÑÑОгМÑÑП Ñе ПгÑаМОÑеÑе пÑеÑзОЌаÑа" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "%s ОЌа МеважеÑО ПбÑазаÑ." -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "ÐÑеÑка ÑвПза %(name)s: %(msg)s" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "ÐОÑеЎаМ Ñ
ПÑÑÐµÑ ÐœÐžÑе ÑÑОÑаМ" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "ÐкÑОвОÑаÑÑе ЎОÑекÑМП пÑеÑзОЌаÑе Ñ ÐœÐ°Ð»ÐŸÐ³Ñ Bitshare-а" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "LinkList Ме ЌПже Ўа бÑЎе ПбÑОÑаМ." -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "ÐПЎеÑаваÑа МалПга ОзбÑОÑаМе збПг МПвОÑег ÑПÑЌаÑа." -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "ÐПÑÑебМа Ñе пÑПвеÑа ОЎеМÑОÑеÑа (кПÑОÑМОÑкП ОЌе О лПзОМка)" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "УМеÑОÑе МалПг Ма ÑеÑвОÑÑ %s ОлО ЎеакÑОвОÑаÑÑе ÐŸÐ²Ð°Ñ Ð¿ÑОкÑÑÑак." -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "ÐÑПМаÑеМ Ñе HTML кÎЎ Ñ Ð¿ÑеÑзеÑÐŸÑ ÐŽÐ°ÑПÑеÑО (%s). ÐÑеÑзОЌаÑе Ñе пПМПвП бОÑО пПкÑеМÑÑП." -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "ÐаÑПÑека ÑÑеМÑÑМП МОÑе ЎПÑÑÑпМа" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "Netload: ÑекаÑе ОзЌеÑÑ Ð¿ÑеÑзОЌаÑа %d Ñ." -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "Netload: ÑекаÑе пПÑвÑЎМПг кПЎа %d Ñ." -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "ÐÑеÑзеÑа ЎаÑПÑека Ñе пÑазМа" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "API кÑÑÑ Ñе МеОÑпÑаваМ" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "%s: МеЌаÑе ЎПвПÑМП ÑаПбÑаÑаÑа" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "ÐÑекПÑаÑОлО ÑÑе ÑаПбÑаÑаÑ" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "Rapidshare: ЎеÑеÑе ÑаПбÑаÑаÑа (ЎОÑекÑМП пÑеÑзОЌаÑе)" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "ÐÐµÑ Ð¿ÑеÑзОЌаÑе Ñа Пве IP аЎÑеÑе. СаÑекаÑÑе 60 ÑекÑМЎО." -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "ÐеОÑпÑаваМ кÎЎ за пÑПвеÑÑ ÐžÐŽÐµÐœÑОÑеÑа. ÐÑеÑзОЌаÑе Ñе пПМПвП бОÑО пПкÑеМÑÑП." -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "Rapidshare.com: МеЌа ÑлПбПЎМОÑ
ÑлПÑПва" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "ÐПÑÑебаМ ваЌ Ñе пÑеЌОÑÑÐŒ МалПг Ўа бОÑÑе пÑеÑзелО ÐŸÐ²Ñ ÐŽÐ°ÑПÑекÑ" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "ÐÑОÑавÑеМП ОЌе ЎаÑПÑеке МОÑе ОÑпÑавМП" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "ÐÑеÑка Ñ ÐžÑÑПвÑеЌеМПЌ пÑеÑзОЌаÑÑ. СаÑекаÑÑе 60 ÑекÑМЎО." -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "ÐОÑÑе пÑОÑавÑеМО." -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "ÐеÑОÑÑПваÑе МОÑе ÑÑпелП" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "У URL аЎÑеÑО МОÑе МавеЎеМ кÑÑÑ ÐŽÐ°ÑПÑеке" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "ÐÃŽÐŽ гÑеÑке:" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "ÐаÑПÑека Ме пПÑÑПÑО." -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "*** ÐÑОкÑÑÑÑО ÑÑ Ð°Ð¶ÑÑОÑаМО. ÐПМПвП пПкÑеМОÑе pyLoad. ***" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "ÐÑОкÑÑÑÑО ÑÑ Ð°Ð¶ÑÑОÑаМО О пПМПвП ÑÑОÑаМО" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "ÐеЌа ажÑÑОÑаÑа пÑОкÑÑÑака" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "ÐеЌа МПве веÑзОÑе pyLoad-а" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "*** ÐПÑÑÑпМа Ñе МПва веÑзОÑа, pyLoad %s ***" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "*** ÐÑеÑзЌОÑе Ñе ПЎавЎе: http://pyload.org/download ***" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "Ðе ÐŒÐŸÐ³Ñ ÐŽÐ° Ñе пПвежеЌ Ñа ÑеÑвеÑПЌ за ажÑÑОÑаÑа" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "ÐПва веÑзОÑа %(type)s|%(name)s : %(version).2f" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "ÐÑеÑка пÑО ажÑÑОÑаÑÑ %s" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "ÐеÑзОÑе Ñе Ме пПклапаÑÑ" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "ÐÑеÑзОЌаÑе Ñе завÑÑеМП: %(name)s @ %(plugin)s " -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "ÐПвО заÑ
Ñев пПÑвÑЎМПг кПЎа: %s" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "ÐЎгПвПÑОÑе Ñа âc %s ÑекÑÑ ÐœÐ° пПÑвÑЎМПЌ кПЎÑâ" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "ÐПЎаÑП %s Оз HotFolder-а" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "ÐОÑе ОМÑÑалОÑаМ %s" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "Ðе ÐŒÐŸÐ³Ñ ÐŽÐ° акÑОвОÑаЌ %s" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "ÐкÑОвОÑаМП" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "ÐОÑÑ Ð°ÐºÑОвОÑаМО пÑОкÑÑÑÑО за ÑаÑпакОваÑе" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "ÐÐ°ÐºÐµÑ %s Ñе ÑÑавÑеМ Ñ ÑеЎ за ÑаÑпакОваÑе" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "ÐÑПвеÑО Ð¿Ð°ÐºÐµÑ %s" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "РаÑпакÑÑ Ñ %s" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "ÐеЌа ЎаÑПÑека за ÑаÑпакОваÑе" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "ÑаÑпакÑÑеЌ" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "ÐаÑÑОÑеМП лПзОМкПЌ" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "ÐеОÑпÑавМа лПзОМка" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "ÐÑОÑеЌ %s ЎаÑПÑека" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "РаÑпакОваÑе Ñе завÑÑеМП" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "ÐÑеÑка Ñ Ð°ÑÑ
ОвО" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "CRC Ñе Ме пПклапа" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "ÐепПзМаÑа гÑеÑка" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "ÐПÑÑавÑаÑе кПÑОÑМОка О гÑÑпе МОÑе ÑÑпелП" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "Click'N'Load: пПÑÑ 9666 Ð²ÐµÑ Ñе Ñ ÑпПÑÑебО" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "ÐÑеПÑÑалП Ñе %s кÑеЎОÑа" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "Ðе ÐŒÐŸÐ³Ñ ÐŽÐ° пПÑаÑеЌ ПЎгПвПÑ." -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "У ваÑеЌ ÐœÐ°Ð»ÐŸÐ³Ñ ÐœÐ° ÑеÑвОÑÑ CaptchaTrader МеЌа ЎПвПÑМП кÑеЎОÑа." -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "СпОÑак ÑОÑÑаÑПÑа МОÑе пÑПМаÑеМ" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "СпОÑак ÑОÑÑаÑПÑа Ñе пÑазаМ" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "ÐÑеÑзОЌаÑе Ñе завÑÑеМП: %(name)s @ %(plugin)s" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "ÐПвО CaptchaID ПЎ ПÑпÑеЌаÑа: %s : %s" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "У ваÑеЌ ÐœÐ°Ð»ÐŸÐ³Ñ ÐœÐ° ÑеÑвОÑÑ 9kw.eu МеЌа ЎПвПÑМП кÑеЎОÑа." -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "ÐМÑÑалОÑаМО ÑкÑОпÑО за %s: " -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "СкÑОпÑа Ме ЌПже Ўа Ñе ОзвÑÑО:" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "ÐÑеÑка Ñ %(script)s: %(error)s" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "У ваÑеЌ ÐœÐ°Ð»ÐŸÐ³Ñ ÐœÐ° ÑеÑвОÑÑ ExpertDecoders МеЌа ЎПвПÑМП кÑеЎОÑа." -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "ÐÑвП ЎПЎаÑÑе МалПг Ма ÑеÑвОÑÑ rehost.to па пПМПвП пПкÑеМОÑе pyLoad." -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "ÐÑеПÑÑалП Ñе %d кÑеЎОÑа" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "Pil О Tesseract МОÑÑ ÐžÐœÑÑалОÑаМО, МОÑО Ñе пПвезаМ клОÑÐµÐœÑ ÑаЎО ЎеÑОÑÑПваÑа пПÑвÑЎМОÑ
кПЎПва." -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "ÐО ÑеЎаМ ÑезÑлÑÐ°Ñ Ð¿ÑПвеÑе МОÑе пÑОЌÑеМ Ñ Ð²ÑÐµÐŒÐµÐœÑ ÐŸÐŽ бОлП кПÑег ЎПЎаÑка." -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "ÐПÑÑавÑаÑе кПÑОÑМОка О гÑÑпе МОÑе ÑÑпелП: %s" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "ÐеЌа пÑОкаÑеМПг клОÑеМÑа за ЎеÑОÑÑПваÑе пÑПвеÑе" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "ÐÐŸÐŽÐ°Ñ Ð¿Ð°ÐºÐµÑ %(name)s Ñа %(count)d везе(а)" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "ÐПЎаÑП %(count)d везе Ñ Ð¿Ð°ÐºÐµÑ #%(package)d" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "ÐОÑаЌ МаÑаП js ЌПÑПÑ, ОМÑÑалОÑаÑО Spidermonkey, ossp-js, pyv8 ОлО rhino" diff --git a/locale/sr/LC_MESSAGES/pyLoadCli.po b/locale/sr/LC_MESSAGES/pyLoadCli.po index 3cda02c25..21c5c2400 100644 --- a/locale/sr/LC_MESSAGES/pyLoadCli.po +++ b/locale/sr/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr " ÐМÑеÑÑеÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÐœÐµ лОМОÑе" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "%s пÑеÑзОЌаÑа:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr " ÐÑзОМа: " -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr " ÐелОÑОМа: " -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr " ÐавÑÑеМП: " -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr " ID: " -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "Ма ÑекаÑÑ: " -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "СÑаÑÑÑ:" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "паÑзОÑаМП" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "пПкÑеМÑÑП" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "УкÑпМа бÑзОМа" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "ÐаÑПÑеке Ñ ÑпОÑкÑ" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "УкÑпМП" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "ÐеМО:" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr " ÐÐŸÐŽÐ°Ñ Ð²ÐµÐ·Ðµ" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr " УпÑавÑÐ°Ñ ÑпОÑкПЌ" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr " УпÑавÑÐ°Ñ ÑакÑпÑаÑеЌ" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr " ÐаÑзОÑаÑ/МаÑÑавО ÑеÑвеÑ" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr " ÐкПМÑÐ°Ñ ÑеÑвеÑ" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr " ÐзаÑО" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "ÐПÑОÑÑОÑе ÐŸÐ²Ñ ÑОМÑакÑÑ: add <ОЌе пакеÑа> <веза> <ÐŽÑÑга веза>âŠ" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "ÐÑПвеÑа %d веза:" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "ÐаÑПÑека Ме пПÑÑПÑО." -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "pyLoad Ñе ПбÑÑÑавÑеМ" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "КÑаЌпа ÑÑаÑÑÑ ÑеÑвеÑа" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "КÑаЌпа пÑеÑзОЌаÑа Ñ ÑпОÑкÑ" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "КÑаЌпа пÑеÑзОЌаÑа Ñ ÑакÑпÑаÑÑ" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "ÐПЎаÑе Ð¿Ð°ÐºÐµÑ Ñ ÑпОÑак" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "ÐПЎаÑе Ð¿Ð°ÐºÐµÑ Ñ ÑакÑпÑаÑ" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "ÐÑОÑе ЎаÑПÑеке Оз ÑпОÑка/ÑакÑпÑаÑа" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "ÐÑОÑе пакеÑе Оз ÑпОÑка/ÑакÑпÑаÑа" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "ÐÑеЌеÑÑа пакеÑе Оз ÑпОÑка Ñ ÑакÑпÑÐ°Ñ Ðž ПбÑМÑÑП" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "ÐПМПвП пПкÑеМО ЎаÑПÑеке" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "ÐПМПвП пПкÑеМО пакеÑе" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "ÐÑПвеÑава ЎПÑÑÑпМПÑÑ (ÑаЎО Ñа лПкалМОЌ кПМÑеÑМеÑПЌ)" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "ÐÑПвеÑава ЎПÑÑÑпМПÑÑ ÐŽÐ°ÑПÑеке кПМÑеÑМеÑа" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "ÐаÑзОÑÐ°Ñ ÑеÑвеÑ" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "МаÑÑавО пÑеÑзОЌаÑа" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "ÐаÑзОÑаÑ/МаÑÑавО" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "ПкПМÑÐ°Ñ ÑеÑвеÑ" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "СпОÑак кПЌаМЎО:" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "Ðе ÐŒÐŸÐ³Ñ ÐŽÐ° пОÑеЌ Ма ЎаÑПÑÐµÐºÑ Ñа пПЎеÑаваÑОЌа" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "ТÑеба ваЌ py-openssl Ўа бО Ñе пÑОвезалО Ма pyLoad ÑезгÑП." -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "ÐÐŽÑеÑа: " -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "ÐПÑÑ: " -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "ÐПÑОÑМОÑкП ОЌе: " -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "ÐПзОМка: " -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "ÐПЎаÑО за пÑОÑÐ°Ð²Ñ ÑÑ Ð¿ÐŸÐ³ÑеÑМО." -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "Ðе ÐŒÐŸÐ³Ñ ÐŽÐ° ÑÑпПÑÑавОЌ Ð²ÐµÐ·Ñ Ñа аЎÑеÑПЌ %(addr)s:%(port)s." -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "ÐПÑÑебаМ ваЌ Ñе py-openssl Ўа бОÑÑе Ñе пПвезалО Ма ÑеÑÐ²ÐµÑ pyLoad-а." -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "ÐаМеЌаÑеМ Ñе ОМÑеÑакÑОвМО ÑежОЌ ÑÐµÑ ÑÑе заЎалО Меке кПЌаМЎе." -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "ÐПЎаÑÑе пакеÑ:" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "УМеÑОÑе ОЌе МПвПг пакеÑа" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "ÐакеÑ: %s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "РаÑÑлаМОÑе везе кПÑе желОÑе Ўа ЎПЎаÑе." -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "УМеÑОÑе %s каЎа завÑÑОÑе." -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "ÐПЎаÑП веза: " -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr " МазаЎ Ма главМО ЌеМО" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "УпÑавÑаÑÑе пакеÑОЌа:" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "УпÑавÑаÑÑе везаЌа:" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "КÑа желОÑе Ўа пÑеЌеÑÑОÑе?" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "КÑа желОÑе Ўа ПбÑОÑеÑе?" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "КÑа желОÑе Ўа пПМПвП пПкÑеМеÑе?" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "ÐЎабÑаÑО ÑÑа Ўа Ñе ÑÑаЎО ОлО ÑМеÑО бÑÐŸÑ Ð¿Ð°ÐºÐµÑа." -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "ПбÑОÑО" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "пÑеЌеÑÑО" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "пПМПвП пПкÑеМО" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr " â пÑеÑÑ
ПЎМП" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr " â ÑлеЎеÑе" diff --git a/locale/sr/LC_MESSAGES/setup.po b/locale/sr/LC_MESSAGES/setup.po index 710c3f54c..8363527b6 100644 --- a/locale/sr/LC_MESSAGES/setup.po +++ b/locale/sr/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "ÐŽ" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "М" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "ÐПбÑП ЎПÑлО кПЎ пПЌПÑМОка за пПЎеÑаваÑе pyLoad-а." -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "ÐМ Ñе пÑПвеÑОÑО ÑОÑÑеЌ О МаЌеÑÑОÑО ПÑМПвМе пПÑÑавке ÑакП Ўа ЌПжеÑе Ўа пПкÑеМеÑе pyLoad." -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "ÐÑеЎМПÑÑ Ñ ÑглаÑÑОЌ загÑаЎаЌа Ñе пПЎÑазÑЌеваМа." -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "акП Ме желОÑе Ўа пÑПЌеМОÑе ОлО МезМаÑе ÑÑа Ўа ОзабеÑеÑе, ÑÑОÑМОÑе 'еМÑеÑ'." -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "ÐМаÑÑе: ЌПжеÑе пПМПвП Ўа пПкÑеМеÑе ÐŸÐ²Ð°Ñ Ð°ÑОÑÑÐµÐœÑ Ñа паÑаЌеÑÑПЌ --setup ОлО -s каЎа пПкÑÐµÐœÐµÑ pyload.py ." -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "ÐкП ОЌаÑе пÑПблеЌа Ñа аÑОÑÑеМÑПЌ, ÑÑОÑМОÑе STRG-C," -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "за пПМОÑÑаваÑе О МеЌПÑÑе Ўа га пПкÑеМеÑе аÑÑПЌаÑÑкО Ñа pyload.py ." -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "ÐаЎа ÑÑе ÑпÑеЌМО Ўа пÑПвеÑОÑе ÑОÑÑеЌ, ÑÑОÑМОÑе 'еМÑеÑ'." -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "ТÑеба ÐаЌ pycurl, sqlite О python 2.5, 2.6 ОлО 2.7 за пПкÑеÑаÑе pyLoad-а." -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "ÐПпÑавОÑе ÑП О пПМПвП пПкÑеМОÑе pyLoad." -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "СеÑап Ñе Ñе заÑвПÑОÑО." -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "ÐÑПвеÑа ÑОÑÑеЌа Ñе завÑÑеМа, ÑÑОÑМОÑе 'еМÑеÑ' Ўа бО вОЎелО ÑезÑлÑаÑ." -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "## СÑаÑÑÑ ##" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "ЎеÑОÑÑПваÑе кПМÑеÑМеÑа" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "ÑÑл веза" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "аÑÑПЌаÑÑкП МалажеÑе пÑПвеÑе" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "ÐебОМÑеÑÑеÑÑ" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "МапÑеЎаМ Click'N'Load" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "ÐПÑÑÑпМе ÑÑМкÑОÑе:" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "ЀÑМкÑОÑе кПÑе МеЎПÑÑаÑÑ:" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "py-crypto МОÑе ЎПÑÑÑпаМ" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "ТП ÐаЌ ÑÑеба акП желОÑе Ўа ЎеÑОÑÑÑÑеÑе кПМÑеÑМеÑе." -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "ССРМОÑе ЎПÑÑÑпаМ" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "ÐПÑÑебМП акП желОÑе Ўа ÑÑаЎОÑе ÑОгÑÑМПÑÐœÑ Ð²ÐµÐ·Ñ ÐœÐ° ÑезгÑП ОлО вебОМÑеÑÑеÑÑ." -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "ÐкП желОÑе Ўа пÑОÑÑÑпОÑе pyLoad ÑаЌП лПкалМП, ССРМОÑе пПÑÑебМП." -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "МОÑе ЎПÑÑÑпМП МалажеÑе пÑПвеÑе" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "ÐПÑÑебМП за Меке Ñ
ПÑÑеÑе О каП беÑплаÑаМ кПÑОÑМОк." -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "Gui МОÑе ЎПÑÑÑпМП" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "ÐÑаÑОÑкО ОМÑеÑÑеÑÑ." -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "МеЌа JavaScript ЌПÑПÑ" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "ТП ÐаЌ ÑÑеба за Меке Click'N'Load везе. ÐМÑÑалОÑаÑО Spidermonkey, ossp-js, pyv8 ОлО rhino" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "ÐПжеÑе ÑаЎа Ўа заÑÑÑавОÑе О Ўа пПпÑавОÑе Меке завОÑМПÑÑО акП желОÑе." -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "ÐаÑÑавОÑО Ñа пПЎеÑаваÑеЌ?" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "ÐелОÑе лО Ўа пÑПЌеМОÑе пÑÑаÑÑ Ð·Ð° пПЎеÑаваÑе? ТÑеМÑÑМа пÑÑаÑа Ñе %s" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "ÐкП кПÑОÑÑОÑе pyLoad Ма ÑеÑвеÑÑ ÐžÐ»Ðž Ма паÑÑОÑОÑО Ма ОМÑеÑМПЌ ÑлеÑÑ, ЌПже Ўа бÑЎе ЎПбÑП Ўа пÑПЌеМОÑе." -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "ÐÑПЌеМОÑО пÑÑаÑÑ Ð·Ð° пПЎеÑаваÑе?" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "ÐелОÑе лО Ўа МаЌеÑÑОÑе пПЎаÑке за пÑОÑÐ°Ð²Ñ Ðž ПÑМПвМе пПÑÑавке?" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "ÐвП Ñе пÑепПÑÑÑеМП Ма пÑвП пПкÑеÑаÑе." -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "УÑаЎО ПÑМПÑМП пПЎеÑаваÑе?" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "ÐелОÑе лО Ўа пПЎеÑОÑе SSL?" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "ÐПЎеÑОÑО SSL?" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "Ðа Ñе кПМÑОгÑÑОÑе веб ОМÑеÑÑеÑÑ?" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "ÐПЎеÑОÑО веб ОМÑеÑÑеÑÑ?" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "ÐПЎеÑаваÑе Ñе ÑÑпеÑМП завÑÑеМП." -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "ÐÑОÑОÑМОÑе Enter Ўа ОзаÑеÑе О пПМПвП пПкÑеМеÑе pyLoad" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "## ÐÑПвеÑа ÑОÑÑеЌа ##" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "ÐаÑа веÑзОÑа python Ñе ЌМПгП МПва, ÑпПÑÑебОÑе python 2.6/2.7" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "ÐаÑа веÑзОÑа python Ñе пÑеÑÑаÑа, ÑпПÑÑебОÑе ÐŒÐ°ÐºÐ°Ñ python 2.5" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "ÐеÑзОÑа Python: У ÑеЎÑ" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "ÐаÑа веÑзОÑа jinja2 %s ÐŽÐµÐ»Ñ Ð¿ÑеÑÑаÑа." -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "ÐПжеÑе Ўа МаÑÑавОÑе, алО акП веб ОМÑеÑÑеÑÑ ÐœÐµ ÑаЎО," -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "ажÑÑОÑаÑÑе ОлО ЎеОМÑÑалОÑаÑÑе га, pyLoad ОЌа ЎПвПÑМП jinja2 бОблОПÑекÑ." -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "JS ЌПÑПÑ" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "## ÐÑМПвМП пПЎеÑаваÑе ##" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "СлеЎеÑО пПЎаÑО за пÑОÑÐ°Ð²Ñ Ð²Ð°Ð¶Ðµ за CLI, GUI О веб ОМÑеÑÑеÑÑ." -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "ÐПÑОÑМОÑкП ОЌе" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "ÐезОк" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "ЀаÑÑОкла пÑеÑзОЌаÑа" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "ÐакÑОЌалаМ бÑÐŸÑ ÐžÑÑПвÑеЌеМОÑ
пÑеÑзОЌаÑа" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "ÐПÑОÑÑОÑО пПМПвМП пПвезОваÑе?" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "ÐПкаÑОÑа ÑкÑОпÑа за пПМПвМП пПвезОваÑе" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "## ÐПЎеÑаваÑе веб ОМÑеÑÑеÑÑа ##" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "ÐкÑОвОÑаÑО веб ОМÑеÑÑеÑÑ?" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "ÐÐŽÑеÑа за пÑОÑеЌ. ÐкП кПÑОÑÑОÑе 127.0.0.1 ОлО localhost, веб ОМÑеÑÑеÑÑ Ñе бОÑО ЎПÑÑÑпаМ ÑаЌП лПкалМП." -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "ÐÐŽÑеÑа" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "ÐПÑÑ" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "pyLoad пÑÑжа МекПлОкП ÑОÑÑеЌÑке пПЎÑÑке ÑеÑвеÑа, евП кÑаÑкП ПбÑаÑÑеÑе." -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "ÐПЎÑазÑЌеваМ ÑеÑвеÑ, МаÑбПÑО ÐžÐ·Ð±ÐŸÑ Ð°ÐºÐŸ МезМаÑе кПÑО Ўа кПÑОÑÑОÑе." -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "ÐÐ²Ð°Ñ ÑеÑÐ²ÐµÑ Ð¿ÑÑжа ССРО ЎПбÑа Ñе алÑеÑМаÑОва за ÑгÑаÑеМО." -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "ÐПже Ўа га кПÑОÑÑО apache, lighttpd, пПÑÑебМП Ñе Ўа ОÑ
пПЎеÑОÑе, ÑÑП МОÑе МаÑлакÑе." -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "ÐÑлП бÑза алÑеÑМаÑОва пОÑаМа Ñ ÐŠ, пПÑÑебМП libev/лОМÑÐºÑ Ð·ÐœÐ°Ñе." -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "УзеÑО га ПвЎе: https://github.com/jonashaag/bjoern кПЌпОлÑÑÑе га" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" -msgstr "О кПпОÑаÑÑе bjoern.so Ñ module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" +msgstr "О кПпОÑаÑÑе bjoern.so Ñ pyload/lib" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "ÐажÑа: Ñ ÐœÐµÐºÐžÐŒ ÑлÑÑаÑевОЌа ÑгÑаÑеМ ÑеÑÐ²ÐµÑ ÐœÐµ ÑаЎО, акП ОЌаÑе пÑПблеЌа Ñа веб ОМÑеÑÑеÑÑПЌ" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "вÑаÑОÑе Ñе ПвЎе О пÑПЌеМОÑе ÑгÑаÑеМ ÑеÑÐ²ÐµÑ Ñа МавПÑеМОЌ." -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "СеÑвеÑ" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "## ÐПЎеÑаваÑе SSL-а ##" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "ÐПкÑеМОÑе Пве кПЌаМЎе Оз pyLoad ÑаÑÑОкле пПЎеÑаваÑа Ўа бО ÑÑаЎОлО ССРÑеÑÑОÑОкаÑе:" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "ÐкП ÑÑе завÑÑОлО ÐžÑ Ñве Ñе Ñ ÑеЎÑ, ЌПжеÑе ÑаЎа Ўа акÑОвОÑаÑе ССÐ." -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "ÐкÑОвОÑаÑО SSL?" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "ÐзабеÑОÑе ÑаЎÑÑ" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "1 â кÑеОÑаÑÑе/ÑÑеЎОÑе кПÑОÑМОка" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "2 â ОзлОÑÑаÑÑе кПÑОÑМОке" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "3 â ÑклПМОÑе кПÑОÑМОка" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "4 â ОзаÑОÑе" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "ÐПÑОÑМОÑО" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "ÐПЎеÑаваÑе МПве пÑÑаÑе, акÑÑелМа кПМÑОгÑÑаÑОÑа МеÑе бОÑО пÑеМеÑа!" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "ÐÑÑаÑа кПМÑОгÑÑаÑОÑе" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "ÐÑÑаÑа пÑПЌеÑеМа, ÑеÑÐ°Ñ Ñе Ñе заÑвПÑОÑО, пПМПвП пПкÑеМОÑе за МаÑÑавак." -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "ÐÑОÑОÑМОÑе Enter Ўа ОзаÑеÑе." -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "Ðе ÐŒÐŸÐ³Ñ ÐŽÐ° пПÑÑавОЌ пÑÑаÑÑ Ð·Ð° пПЎеÑаваÑе: %s" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "%s: У ÑеЎÑ" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "%s: ÑалО" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "ÐПзОМка: " -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "ÐПзОМка Ñе пÑекÑаÑка. УМеÑОÑе Ð±Ð°Ñ ÑеÑОÑО ÑОЌбПла." -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "ÐПÑвÑЎа лПзОМке: " -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "ÐПзОМке Ñе Ме пПклапаÑÑ" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "Ўа" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "ÑаÑМП" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "Ñ" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "Ме" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "МеÑаÑМП" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "М" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "ÐеОÑпÑаваМ ÑМПÑ" diff --git a/locale/sv/LC_MESSAGES/django.po b/locale/sv/LC_MESSAGES/django.po index b1c927a67..8f3f05d72 100644 --- a/locale/sv/LC_MESSAGES/django.po +++ b/locale/sv/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "Ny captchabegÀran" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "Var god lÀs texten pÃ¥ captchan." -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "pyLoad startades om" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "Ãr det sÀkert att du vill avsluta pyLoad?" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "Starta om lÀnken" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "Radera lÀnken" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "Var god skriv in ett paketnamn." -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "Var god kiicka pÃ¥ den rÀtta captchapositionen." -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "Ett fel intrÀffade." -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "Mappen Àr tom" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "Inga captchor att lÀsa." -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "Lösenorden stÀmde inte överens." -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "InstÀllningar sparade." -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "Ny mapp" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "Ãr det sÀkert att du vill starta om pyLoad?" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "vÀntar %s" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "Aktiva hÀmtningar" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "Hem" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "HÀmtningar" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "Loggar" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "Konfiguration" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "Förlopp" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "Ditt anvÀndarnamn och lösenord stÀmde inte. Försök igen." -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "För att Ã¥terstÀlla dina loginuppgifter eller lÀgga till en anvÀndare, kör:" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "Radera fÀrdiga" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "Omstart misslyckades" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "Mapp:" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "Lösenord:" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "Redigera paket" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "Redigera paketdetaljerna hÀr." -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "Namnet pÃ¥ paketet." -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "Mappnamn för dessa nedladdningar." -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "Lösenordslista som anvÀnds vid uppackning." -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "Ã
terstÀll" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "Du har loggats ut." -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "SökvÀg" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "absolut" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "relativ" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "namn" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "storlek" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "typ" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "senast Àndrad" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "förÀldrakatalog" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "inget innehÃ¥ll" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "TillÀggsprogram" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "VÀlj ett avsnitt frÃ¥n menyn" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "Giltigt till" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "Trafik kvar" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "Tid" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "Max samtidiga" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "Ta bort?" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "inte giltigt" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "ja" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "nej" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "Skriv in dina kontouppgifter för att anvÀnda premiumfunktioner." -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "Ditt anvÀndarnamn." -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "Lösenord för detta konto." -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "Starta" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "föreg" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "nÀsta" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "Slut" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "Nyheter" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "pyLoad-version:" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "Installationsmapp:" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "Konfigurationsmapp:" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "HÀmtningsmapp:" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "Ledigt utrymme:" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "SprÃ¥k:" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "Port för webbgrÀnssnitt:" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "Port för fjÀrrgrÀnssnitt:" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "Filhanterare" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "LÀgg till paket" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "Klistra in lÀnkar eller ladda upp en container." -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "Namnet pÃ¥ det nya paketet." -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "LÀnkar" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "Klistra in dina lÀnkar eller valfri text och tryck filterknappen." -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "Filtrera lÀnkar" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "Lösenord för RAR-arkiv" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "Fil" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "Ladda upp en container." -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "LÀser captcha" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "Captcha" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "Skriv in texten pÃ¥ captchan." -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "WebbgrÀnssnitt" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "pyLoad uppdatering tillgÀnglig!" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "Plugins uppdaterade, starta om!" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "Captcha vÀntar" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "Logga ut" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "Administrera" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "Logga in!" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "Stoppa" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "HÀmta:" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "Ã
teranslut:" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "Hastighet:" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "Aktiv:" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "Uppdatera sidan" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "lÀser in" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "Tillbaka upp" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "Avsluta pyLoad" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "Starta om pyLoad" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "För att lÀgga till anvÀndare eller byta lösenord anvÀnd:" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "Viktigt: AdminanvÀndare har alltid alla behörigheter!" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "Byt lösenord" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "Behörigheter" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "Àndra" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "Ange ditt nuvarande och önskade lösenord." -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "AnvÀndare" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "Nuvarande lösenord" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "Nytt lösenord" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "Det nya lösenordet." -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "Nytt lösenord (upprepa)" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "Upprepa det nya lösenordet." -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "Du har inte behörighet att komma Ã¥t denna sida." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "HÀmtningskatalogen hittades inte." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "inte tillgÀnglig" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "Kör pyload.py -s för att komma Ã¥t konfigurationen." diff --git a/locale/sv/LC_MESSAGES/pyLoad.po b/locale/sv/LC_MESSAGES/pyLoad.po index 7b88d29f7..48292bdec 100644 --- a/locale/sv/LC_MESSAGES/pyLoad.po +++ b/locale/sv/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "Tog emot avslutningssignal" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "pyLoad körs redan med pid %s" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "Misslyckades att Àndra gruppen %s" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "Kunde inte Àndra anvÀndaren: %s" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "mapp för loggar" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "Startar" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "AnvÀnder hemkatalog: %s" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "pyCrypto avkodar containerfiler" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "mapp för temporÀra filer" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "mapp för hÀmtningar" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "OpenSSL för sÀker anslutning" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "Flyttar gamla anvÀndarinstÀllningar till databasen" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "Kontrollera dina login-uppgifter med './pyload.py -u'" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "Alla lÀnkar togs bort" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "HÀmtningstid: %s" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "Ledigt utrymme: %s" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "Aktiverar konton..." -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "Aktiverar tillÀggsprogram..." -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "pyLoad Àr igÃ¥ng" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "startar om pyLoad" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "pyLoad avslutas" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "Installera %s" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "kunde inte hitta %(desc)s: %(name)s" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "kunde inte skapa %(desc)s: %(name)s" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "stÀnger ner..." -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "fel vid nedstÀngning" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "dödade pyLoad frÃ¥n Terminal" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "Fildatabasen togs bort pÃ¥ grund av inkompatibel version." -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "Fildatabasen kunde INTE konverteras." -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "Databasen konverterades frÃ¥n v2 till v3." -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "Databasen konverterades frÃ¥n v3 till v4." -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "Konverterar gammal Django DB" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "fÀrdig" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "frÃ¥nkopplad" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "ansluten" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "kölagd" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "hoppades över" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "vÀntar" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "temp. frÃ¥nkopplad" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "startar" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "misslyckades" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "avbruten" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "dekrypterar" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "anpassad" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "hÀmtar" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "behandlar" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "okÀnd" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "Paketet klart: %s" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "AnvÀnder SSL ThriftBackend" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "Fel i fjÀrradministrationsmodulen: %s" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "Startar %(name)s: %(addr)s:%(port)s" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "InlÀsningen av administrationsmodulen %(name)s misslyckades | %(error)s" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "vÀntar %s" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "SSL-certifikat hittades inte." -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "Ledsen, start av %s direkt frÃ¥n pyLoad stöds inte lÀngre" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "Du kan " -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "naturligtvis kan du fortfarande anvÀda befintliga %s med pyLoads fastcgi server" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" -msgstr "exempel pÃ¥ konfigurationsfiler finns i mappen \"module/webui/servers\"" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" +msgstr "exempel pÃ¥ konfigurationsfiler finns i mappen \"pyload/webui/servers\"" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "Kan inte anvÀnda %(server)s. python-flup Àr inte installerat!" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "Fel vid import av den lÀtta servern: %s" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "Du mÃ¥ste ladda ner och kompilera bjoern, https://github.com/jonashaag/bjoern" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" -msgstr "Kopiera filen boern.so till mappen 'module/lib' eller anvÀnd 'setup.py install'" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" +msgstr "Kopiera filen boern.so till mappen 'pyload/lib' eller anvÀnd 'setup.py install'" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "Naturligtvis behöver du vara bekant med Linux och veta hur man kompilerar programvara" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "Server instÀlld pÃ¥ trÃ¥dad, pga kÀnda prestandaproblem i Windows." -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "Den hÀr servern anvÀnder inte SSL, övervÀg att anvÀnda den trÃ¥dade istÀllet " -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "Startar inbyggd webbserver: %(host)s:%(port)d" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "Startar trÃ¥dad SSL-webbserver: %(host)s:%(port)d" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "Startar trÃ¥dad webbserver: %(host)s:%(port)d" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "Startar fastcgi-server: %(host)s:%(port)d" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "Startar den lÀtta webservern (bjoern): %(host)s:%(port)d" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "Du har inte behörighet att komma Ã¥t denna sida." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "HÀmtningskatalogen hittades inte." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "inte tillgÀnglig" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "Kör pyload.py -s för att komma Ã¥t konfigurationen." -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "HÀmtningen startar: %s" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "HÀmtningen klar: %s" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "Plugin %s saknar en funktion." -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "HÀmtningen avbröts: %s" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "HÀmtning startades om: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "HÀmtningen Àr offline: %s" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "HÀmtningen Àr tillfÀlligt offline: %s" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "HÀmtning misslyckades: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "HÀmtning hoppades över: %(name)s pga %(plugin)s" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "Avkrypteringen startar: %s" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "HÀmtning misslyckades: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "Försöker igen %s" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "Misslyckades aktivera %(name)s" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "Aktiverade plugins: %s" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "Avaktivera plugins: %s" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "Ã
teranslutningen misslyckades: %s" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "Skript för att Ã¥teransluta hittades inte!" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "Startar reconnect" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "Exekveringen av Ã¥teranslutningsskriptet misslyckades!" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "Ã
teransluten, nytt IP-nummer: %s" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "OtillrÀckligt utrymme pÃ¥ enheten" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "Din tid %s har ett felaktigt format. AnvÀnd: 1:22-3:44" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "%s innehÃ¥ller ett ogiltigt mönster." -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "Fel vid import av %(name)s: %(msg)s" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "lÀnklistan kunde inte raderas" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "KontoinstÀllningar raderade pga nytt format för konfigureringen." -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "Filen finns inte." -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "Aktiverat" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "Ingen plugin returnerade captcharesultat i tid." -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "Ingen klient för avkryptering av captcha ansluten" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "Lade till paketet %(name)s som innehÃ¥ller %(count)d lÀnkar" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "Lade till %(count)d lÀnkar till paket #%(package)d " -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "Ingen js motor hittades. Var vÀnlig installera Spidermonkey, ossp-js, pyv8 eller rhino" diff --git a/locale/sv/LC_MESSAGES/pyLoadCli.po b/locale/sv/LC_MESSAGES/pyLoadCli.po index 028585bc6..18b3a4009 100644 --- a/locale/sv/LC_MESSAGES/pyLoadCli.po +++ b/locale/sv/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr " KommandoradsgrÀnssnitt" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "%s hÀmtningar:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr " Hastighet: " -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr " Storlek: " -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr " FÀrdig om: " -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "vÀntar: " -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "Meny:" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr " LÀgg till lÀnkar" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr " Hantera kö" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "Hantera lÀnksamlaren" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "Pausa/starta servern" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr " Döda server" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr " Avsluta" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "AnvÀnd denna syntax: add <paketnamn> <lÀnk> <lÀnk2> ..." -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "Kontrollerar %d lÀnkar:" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "Filen finns inte." -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "pyLoad avbröts" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "Visar serverstatus" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "Visar nedladdningar i kön" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "Visar nedladdningar i lÀnksamlaren" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "LÀgger till paketet i kön" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "LÀgger till paketet i lÀnksamlaren" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "Radera filer frÃ¥n kön/lÀnksamlaren" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "Radera paket frÃ¥n kön/lÀnksamlaren" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "Flytta paket frÃ¥n kön till lÀnksamlaren och vice versa" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "Starta om filer" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "Starta om paket" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "Undersök onlinestatus, fungerar med lokal container" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "Kontrollerar onlinestatusen för en containerfil" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "Pausa servern" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "Ã¥teruppta hÀmtningar" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "Pausa/fortsÀtt" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "döda server" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "Lista över kommandon:" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "Kunde inte skriva anvÀndarens instÀllningsfil" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "Du behöver py-openssl för att ansluta till denna pyLoad Core." -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "Adress: " -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "AnvÀndarnamn: " -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "Lösenord: " -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "Inloggningsdata Àr felaktigt." -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "Kunde inte etablera anslutning till %(addr)s:%(port)s." -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "Du behöver py-openssl för att ansluta till denna pyLoad core." -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "Interaktivt lÀge ignorerat dÃ¥ vissa kommandon skickades." -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "LÀgg till paket:" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "Ange ett namn för nya paketet" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "Paket: %s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "Klistra in lÀnkarna som du vill lÀgga till." -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "Skriv %s nÀr du Àr fÀrdig." -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "LÀnkar lades till: " -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr " tillbaka till huvudmenyn" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "Hantera paket:" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "Hantera lÀnkar:" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "Vad vill du flytta?" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "Vad vill du ta bort?" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "Vad vill du starta om?" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "VÀlj vad du vill göra eller skriv in ett paketnummer." -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "ta bort" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "flytta" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "starta om" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr " - föregÃ¥ende" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr " - nÀsta" diff --git a/locale/sv/LC_MESSAGES/setup.po b/locale/sv/LC_MESSAGES/setup.po index 190b6ab71..36013181c 100644 --- a/locale/sv/LC_MESSAGES/setup.po +++ b/locale/sv/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "j" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "VÀlkommen till konfigurationsguiden för pyLoad." -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "Den kommer att kontrollera ditt system och göra en grundkonfiguration för att kunna köra pyLoad." -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "VÀrden inom hakparanteser [] Àr alltid standardvÀrdet," -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "tryck bara Enter i de fall du inte vill Àndra det eller om du Àr osÀker vad du ska vÀlja." -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "Glöm inte: Du kan alltid köra denna guide igen med --setup eller parametern -s, nÀr du startar pyload.py ." -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "Om du fÃ¥r nÃ¥gra problem med denna guide sÃ¥ tryck Ctrl-C," -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "för att avbryta och lÃ¥t bli att starta automatiskt med pyload.py ." -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "Tryck pÃ¥ Enter nÀr du Àr fÀrdig för att kontrollera systemet." -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "Du behöver pycurl, sqlite och python 2.5, 2.6 eller 2.7 för att köra pyLoad." -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "Korrigera detta och kör pyLoad igen." -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "Konfigurationen kommer nu att stÀngas." -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "Systemkontrollen Àr fÀrdig. Tryck pÃ¥ Enter för att se din statusrapport." -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "container-dekryptering" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "ssl-anslutning" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "automatisk captcha-dekryptering" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "Grafiskt grÀnssnitt" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "WebbgrÀnssnitt" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "utökad Click'N'Load" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "Funktioner tillgÀngliga:" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "Funktioner saknade: " -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "ingen py-crypto tillgÀnglig" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "Du behöver denna om du vill dekryptera container-filer." -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "ingen SSL tillgÀnglig" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "Denna krÀvs om du vill etablera en sÀker anslutning till core eller webbgrÀnssnittet." -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "Om du endast vill ha lokalt Ã¥tkomst till pyLoad sÃ¥ Àr inte SSL anvÀndbart." -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "ingen Captcha Recognition tillgÀnglig" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "Behövs endast för vissa \"hosters\" och som \"freeuser\"." -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "GUI inte tillgÀngligt" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "Grafiskt anvÀndargrÀnssnitt." -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "ingen JavaScript-motor hittades" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "Du behöver detta för nÃ¥gra Click'N'Load-lÀnkar. Installera Spidermonkey, ossp-js, pyv8 eller rhino" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "Du kan avbryta konfigurationen nu och rÀtta till beroenden om du vill." -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "FortsÀtt med konfigurationen?" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "Vill du Àndra konfigurationssökvÀgen? Aktuell sökvÀg Àr %s" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "Om du anvÀnder pyLoad pÃ¥ en server eller hempartitionen finns pÃ¥ en intern Flash-disk sÃ¥ kan det vara en bra idé att Àndra den." -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "Ãndra konfigurationssökvÀg?" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "Vill du konfigurera inloggningsdata och grundinstÀllningar?" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "Detta rekommenderas för första gÃ¥ngen." -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "Skapa grundkonfiguration?" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "Vill du konfigurera SSL?" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "Konfigurera SSL?" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "Vill du konfigurera webbgrÀnssnittet?" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "Konfigurera webbgrÀnssnittet?" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "Konfigurationen fÀrdigstÀlldes." -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "Tryck Enter för att avsluta och starta om pyLoad" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "## Systemkontroll ##" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "Din python-version Àr för ny. AnvÀnd Python 2.6/2.7" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "Din python-version Àr för gammal. AnvÀnd minst Python 2.5" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "Python-version: OK" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "Din installerade jinja2 version %s verkar vara för gammal." -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "Du kan med sÀkerhet fortsÀtta men om webbgrÀnssnittet inte fungerar," -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "uppgradera eller avinstallera det. pyLoad inkluderar ett lÀmpligt jinja2-bibliotek." -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "JS-motor" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "## Grundkonfiguration ##" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "Följande inloggningsdata Àr giltigt för CLI, GUI och webbgrÀnssnitt." -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "Externa klienter (GUI, CLI osv) behöver fjÀrrÃ¥tkomst för att fungera över nÀtverket." -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "Men om du bara vill anvÀnda webbgrÀnssnittet kan du avaktivera den för att spara RAM." -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "Aktivera fjÀrrÃ¥tkomst" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "HÀmtningsmapp" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "Max samtidiga hÀmtningar" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "AnvÀnd Ã¥teranslutning (Reconnect)?" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "Plats för Reconnect-skript" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "## Konfiguration av webbgrÀnssnitt ##" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "Aktivera webbgrÀnssnitt?" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "Lyssningsadress, om du anvÀnder 127.0.0.1 eller localhost, kommer webbgrÀnssnittet endast vara Ã¥tkomligt lokalt." -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "pyLoad erbjuder flera server backends. HÀr följer en kort förklaring." -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "Standardserver, bÀsta valet om du inte vet vilken du ska vÀlja." -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "Denna server erbjuder SSL och Àr ett bra alternativ till den inbyggda." -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "Kan anvÀndas med apache, lighttpd. KrÀver att du konfigurera dem, vilket inte Àr sÃ¥ svÃ¥rt." -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "Mycket snabbt alternativ skrivet i C. KrÀver libev och Linux-kunskaper." -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "HÀmta det hÀr: https://github.com/jonashaag/bjoern, kompilera det" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" -msgstr "och kopiera bjoern.so till module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" +msgstr "och kopiera bjoern.so till pyload/lib" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "Viktigt: I vissa ovanliga fall kanske den inbyggda servern inte fungerar. Om du upplever problem med webbgrÀnssnittet" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "sÃ¥ kom tillbaka hit och Àndra den inbyggda servern till den trÃ¥dade servern." -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "## SSL-konfiguration ##" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "Kör dessa kommandon frÃ¥n konfigurationsmappen för pyLoad för att skapa SSL-certifikaten:" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "Du kan aktivera SSL nu om du Àr fÀrdig och allting gick bra." -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "Aktivera SSL?" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "VÀlj Ã¥tgÀrd" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "1 - Skapa/Redigera anvÀndare" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "2 - Lista anvÀndare" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "3 - Ta bort anvÀndare" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "4 - Avsluta" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "AnvÀndare" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "StÀller in ny konfigurationssökvÀg. Aktuell konfiguration kommer inte att överföras!" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "KonfigurationssökvÀg" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "KonfigurationssökvÀgen har Àndrats. Guiden kommer nu att stÀngas. Starta om för att fortsÀtta." -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "Tryck Enter för att avsluta." -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "InstÀllning av konfigurationssökvÀg misslyckades: %s" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "%s: saknas" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "Lösenord: " -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "Lösenord (igen): " -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "Lösenorden stÀmde inte överens." -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "ja" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "sant" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "s" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "nej" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "falskt" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "Ogiltig inmatning" diff --git a/locale/te/LC_MESSAGES/django.po b/locale/te/LC_MESSAGES/django.po index 08637a88d..e70361f00 100644 --- a/locale/te/LC_MESSAGES/django.po +++ b/locale/te/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/te/LC_MESSAGES/pyLoad.po b/locale/te/LC_MESSAGES/pyLoad.po index 9b38dd6fa..fd50b53a0 100644 --- a/locale/te/LC_MESSAGES/pyLoad.po +++ b/locale/te/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "" -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "" -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/te/LC_MESSAGES/pyLoadCli.po b/locale/te/LC_MESSAGES/pyLoadCli.po index 8bea11172..88558b540 100644 --- a/locale/te/LC_MESSAGES/pyLoadCli.po +++ b/locale/te/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "" diff --git a/locale/te/LC_MESSAGES/setup.po b/locale/te/LC_MESSAGES/setup.po index 3a58338b3..0249422a8 100644 --- a/locale/te/LC_MESSAGES/setup.po +++ b/locale/te/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "" diff --git a/locale/tr/LC_MESSAGES/django.po b/locale/tr/LC_MESSAGES/django.po index e76b54f38..63e227a8d 100644 --- a/locale/tr/LC_MESSAGES/django.po +++ b/locale/tr/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "Yeni Captcha İsteÄi" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "LÃŒtfen captcha ÃŒstÃŒndeki metni okuyunuz." -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "pyLoad yeniden baÅlatıldı" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "Kapat" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "BaÅarılı" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "Aç" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "pyLoad'dan çıkmak istediÄinize emin misiniz?" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "BaÄlantıyı yeniden baÅlat" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "BaÄlantıyı Sil" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "LÃŒtfen paket adını girin." -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "LÃŒtfen saÄdaki captcha ya tıklatın." -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "Bir hata oluÅtu." -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "Klasör boÅ" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "BaÅarısız oldu" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "Okumak için Captcha bulunamadı" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "Parolalar eÅleÅmedi." -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "Ayarlar kaydedildi." -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "Yeni klasör" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "pyLoad'u yeniden baÅlatmak istediÄinize emin misiniz?" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "bekleyen %s" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "Aktif İndirmeler" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "Ev" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "İndirmeler" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "Loglar " -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "Ayarlar" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "İsim" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "Durum" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "Bilgi" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "Boyut" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "İlerleme" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "Oturum açma" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "Kullanıcı Adı" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "Åifre" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "Kullanıcı adınız ve parolanız uymuyor. LÃŒtfen tekrar deneyiniz." -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "Hesabınızı sıfırlamak için veya yeni kullanıcı eklemek için çalıÅtırın:" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "Bitenleri Temizle" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "BaÅarısızları Tekrar BaÅlat" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "Klasör:" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "Åifre:" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "Paketi DÃŒzenle" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "AÅaÄıdaki paket detaylarını dÃŒzenle." -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "Paketin adı." -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "Klasör" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "Bu indirmeler için alt klasör adı." -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "Unrar için parola listesi." -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "Gönder" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "Sıfırla" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "BaÅarılı Åekilde çıkıŠyaptınız." -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "Yol" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "tam" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "BaÄıntılı" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "isim" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "boyut" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "tip" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "son deÄiÅimi" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "ana klasör" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "içerik yok" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "Genel" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "Eklentiler" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "Hesaplar" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "MenÃŒden bir bölÃŒm seçiniz" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "Eklenti" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "Son geçerlilik tarihi" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "Kalan trafik" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "Zaman" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "Maks Paralel" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "Sil?" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "geçerli" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "geçersiz" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "evet" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "hayır" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "Ekle" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "Hesap Ekle" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "Premium özelliklerini kullanabilmek için hesap bilgilerini giriniz." -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "Kullanıcı adınız." -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "Bu hesap için parola." -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "TÃŒrÃŒ" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "Hesabınız için host seçiniz." -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "BaÅla" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "önceki" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "sonraki" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "Son" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "Haberler" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "Destek" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "Sistem" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "pyLoad versiyonu:" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "Kurulum KlasörÃŒ:" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "Ayar KlasörÃŒ:" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "İndirme KlasörÃŒ:" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "BoÅ Alan:" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "Dil:" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "Web ArayÃŒz Portu:" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "Uzak ArayÃŒz Portu:" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "Kurulum" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "Dosya Yöneticisi" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "Paket Ekle" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "Linklerinizi yapıÅtırın veya taÅıyıcı dosyayı yÃŒkleyin." -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "Yeni paketin adı." -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "Linkler" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "Linklerinizi veya herhangi bir metni yapıÅtırıp filitrele butonuna basınız." -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "Linkleri filitrele" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "RAR-ArÅiv dosyaları için parola" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "Dosya" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "TaÅıyıcı dosyayı yÃŒkleyin." -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "Hedef" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "Captcha okunuyor" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "Captcha." -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "Metin" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "Captcha ÃŒstÃŒndeki metni giriniz." -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "Kapat" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "Web arayÃŒzÃŒ" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "pyLoad GÃŒncelleme mevcut!" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "Eklentiler gÃŒncellendi, lÃŒtfen yeniden baÅlatın !" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "Captcha bekliyor" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "ÃıkıÅ" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "Yönet" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "Bilgi" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "LÃŒtfen GiriÅ Yapın!" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "Dur" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "İptal" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "İndirme:" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "Yeniden baÄlan:" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "Hız:" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "Aktif:" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "Sayfayı yenile" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "yÃŒkleniyor" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "Sayfa baÅı" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "pyLoad'dan çık" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "pyLoad'ı yeniden baÅlat" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "Kullanıcı eklemek veya Åifre deÄiÅtirmek:" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "Ãnemli: Yönetici kullanıcısının her zaman tÃŒm izinleri vardır!" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "Parolayı DeÄiÅtir" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "İzinleri" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "deÄiÅtir" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "Åimdiki parolanızı ve deÄiÅtirmek istediÄiniz parolayı giriniz." -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "Kullanıcı" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "Parolanız" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "Yeni parola" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "Yeni parola." -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "Yeni parola (tekrar)" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "LÃŒtfen yeni parolanızı tekrar giriniz." -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "Bu sayfaya eriÅmek için izniniz yok." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "İndirme dizini bulunamadı." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "sınırsız" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "mevcut deÄil" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "Ayarlara eriÅmek için pyload.py -s çalıÅtırın." diff --git a/locale/tr/LC_MESSAGES/pyLoad.po b/locale/tr/LC_MESSAGES/pyLoad.po index c3d2d7a55..ea9d3755c 100644 --- a/locale/tr/LC_MESSAGES/pyLoad.po +++ b/locale/tr/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "ÃıkıŠsinyali alındı" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "pyLoad zaten %s pid ile çalıÅıyor" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "Grup deÄiÅtirme baÅarısız: %s" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "Kullanıcı deÄiÅtirme baÅarısız: %s" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "gÃŒnlÃŒkler için klasör" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "BaÅlıyor" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "Ev dizinini kullan: %s" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "geçici dosyalar için klasör" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "indirmeler için klasör" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "GÃŒvenli baÄlantı için OpenSSL" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "Eski kullanıcı ayarlarını veritabanına taÅı" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "GiriÅ bilgilerinizi kontrol edin ./pyload.py -u" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "TÃŒm baÄlantılar kaldırıldı" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "İndirme sÃŒresi: %s" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "BoÅ alan: %s" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "Hesap etkinleÅtiriliyor ..." -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "Eklentiler etkinleÅtiriliyor ..." -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "pyLoad baÅlatıldı ve çalıÅıyor" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "pyLoad yeniden baÅlatılıyor" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "pyload çıkıÅ" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "kapatılıyor ..." -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "kapatma sırasında hata oluÅtu" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "bitti" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "ÃevrimdıÅı" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "Ãevrimiçi" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "sıraya alındı" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "atlandı" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "bekliyor" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "geçici çevrimdıÅı" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "baÅlatılıyor" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "baÅarısız oldu" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "iptal edildi" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "çözÃŒlÃŒyor" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "Ãzel" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "indiriliyor" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "iÅlem devam ediyor" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "bilinmeyen" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "Paket tamamlandı. %s" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "Uzak uç hatası: % s" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "BaÅlıyor %(name)s: %(addr)s:%(port)s" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "Arka uç yÃŒklenirken hata %(name)s | %(error)s" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "bekleyen %s" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "SSL sertifikaları bulunamadı." -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "Maalesef pyLoad içinde doÄrudan baÅlangıçââ %s için destek dÃŒÅtÃŒ" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "bjoern'i indirmek ve derlemek gerekir, https://github.com/jonashaag/bjoern" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "Bu sunucu hiçbir SSL sunmuyor, kullanarak yerine diÅli dÃŒÅÃŒnÃŒn lÃŒtfen" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "YerleÅik web sunucusu baÅlatılıyor: %(host)s:%(port)d" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "Bu sayfaya eriÅmek için izniniz yok." -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "İndirme dizini bulunamadı." -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "sınırsız" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "mevcut deÄil" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "Ayarlara eriÅmek için pyload.py -s çalıÅtırın." -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "KarÅıdan yÃŒkleme baÅarısız, tekli baÄlantıya dönÃŒn | %s" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "YÃŒkleme baÅlar: %s" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "YÃŒkleme bitti: %s" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "Eklenti %s iÅlevi eksik." -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "YÃŒkleme iptal edildi: %s" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "YÃŒkleme yeniden baÅlatıldı: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "YÃŒkleme çevrimdıÅı: %s" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "YÃŒkleme geçici olarak çevrımdıÅı: %s" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "YÃŒkleme baÅarısız: %(name)s | %(msg)s" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "Sunucuya baÄlanılamadı veya baÄlantı sıfırlandı, 1 dakikalık erteleme bekleniyor." -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "YÃŒkleme atlandı: %(name)s bunun yÃŒzÃŒnden %(plugin)s" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "Bilgisi %(name)s alınırken hata | %(err)s oluÅtu" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "Aktive etme baÅarısız %(name)s" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "Eklentiler etkinleÅtiriliyor: %s" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "Eklentiler kapatılıyor: %s" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "Tekrar baÄlanma baÅarısız: %s" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "Tekrar baÄlanma komutu bulunamadı!" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "Tekrar baÄlanma baÅlatılıyor" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "Yeniden BaÄlantı komut dosyası yÃŒrÃŒtmesi baÅarısız!" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "Yeniden BaÄlandı, yeni IP: %s" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "Aygıtta yeterli alan yok" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "Hesap ile giriÅ yapılamadı %(user)s | %(msg)s" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "Hatalı Åifre" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "Hesap %s yeterli trafik yok, 30 dk içinde yeniden deneyin" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "Hesap %s sÃŒresi doldu, 1 saat içinde yeniden deneyin" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "İndirme sınırına eriÅildi" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "Alınırken hata %(name)s: %(msg)s" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "Hiçbir Sunucu yÃŒklenemedi" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "Bitshare hesabınızdaki direk yÃŒklemeyi aktifleÅtirin" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "Yetkilendirme gerekli (kullanıcı adı: Åifre)" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "LÃŒtfen %s hesabınıza girin veya bu eklentiyi devre dıÅı bırakın" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "İndirilen dosyadaki (%s)... HTML kodunda yönlendirme hatası? Download yeniden baÅlatıldı." -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "Dosya geçici olarak kullanılamıyor" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "Netload: YÃŒklemeler %d s arasında bekliyor." -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "Netload: captcha için bekleniyor %d s." -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "İndirilen dosya boÅ" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "API anahtarı geçersiz" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "%s: yeterli trafik kalmadı" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "Trafik aÅıldı" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "Rapidshare: Trafik PaylaÅılan (direk yÃŒkleme)" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "Zaten bu IP adresinden yÃŒkleme yapılmakta, 60 saniye bekleniyor" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "Geçersiz kimlik doÄrulama kodu, yÃŒkleme yeniden baÅlatılacak" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "RapidShareCom: TÃŒm ÃŒcretsiz baÄlantılar doldu" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "Bu dosya için premium ÃŒyelik hesabı gerekir" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "Dosya adı geçersiz bildirdi" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "Paralel yÃŒkleme hatası, 60 saniye bekleniyor." -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "giriÅ yapılmadı." -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "ÃözÃŒmleme baÅarısız oldu" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "URL'de saÄlanan hiçbir dosya anahtarı yok" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "Hata kodu:" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "*** Eklentiler gÃŒncellendi, pyLoad'ı yeniden baÅlatın ***" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "Eklentiler gÃŒncellendi ve yeniden yÃŒklendi" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "Eklentiler için gÃŒncelleme yok" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "pyLoad için gÃŒncelleme yok" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "*** Yeni pyLoad SÃŒrÃŒmÃŒ %s mevcuttur ***" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "*** Buradan indirin: http://pyload.org/download ***" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "GÃŒncelleÅtirmeler için sunucuya baÄlanmak mÃŒmkÃŒn deÄil" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "Yeni versiyonu %(type)s|%(name)s : %(version).2f" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "%s gÃŒncelleÅtirme hatası" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "SÃŒrÃŒm uyuÅmazlıÄı" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "YÃŒkleme bitti: %(name)s @ %(plugin)s " -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "Yeni Captcha İsteÄi: %s" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "captcha ÃŒstÃŒndeki 'c %s metnini cevapla" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "LÃŒtfen önce premium.to hesabınızı ekleyin ve pyLoad'u yeniden baÅlatın" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "HotFolder gelen ek %s" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "YÃŒklÃŒ %s yok" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "%s etkinleÅtirilemedi" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "EtkinleÅtirildi" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "Aktif Extract eklentisi yok" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "%s paketini daha sonra ayıklamak için sıraya alındı" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "%s paketi kontrol et" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "ArÅiv ayıklanıyor Åuraya %s" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "ArÅivden ayıklanacak dosya bulunamadı" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "Ayıklanıyor" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "Åifre korumalı" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "Hatalı Åifre" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "%s Dosya siliniyor" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "Ayıklama bitti" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "ArÅiv hatası" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "CRC UyuÅmazlıÄı" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "Bilinmeyen Hata" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "Kullanıcı ve Grup Ayarları baÅarısız oldu" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "Click'N'Load: Port 9666 zaten kullanılıyor" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "%s kredi kaldı" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "yanıt gönderilemedi." -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "Sizin CaptchaTrader hesabınızda yeterli kredi bulunmamakta" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "Åifreleme listesi bulunamadı" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "Åifreleme listesi boÅ" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "YÃŒkleme bitti: %(name)s @ %(plugin)s " -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "Yeni CaptchaID yÃŒkleme tarafından: %s : %s" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "Captcha 9kw.eu hesabı yeterli kredi yok" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "%s: için yÃŒklÃŒ komut dosyaları" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "Komut dosya çalıÅtırılamaz:" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "Hata %(script)s: %(error)s" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "ExpertDecoders hesabınızda yeterli kredi yok" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "LÃŒtfen önce rehost.to hesabınızı ekleyin ve pyLoad'u yeniden baÅlatın" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "LÃŒtfen önce bir geçerli premiumize.me hesabı ekleyin ve pyLoad yeniden baÅlatın." -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "%d kredi kaldı" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "Captcha Åifresini çözmek için pil ve tesseract yÃŒklenmemiÅ ve hiçbir istemci baÄlı deÄil" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "Kullanıcı ve grup kurma baÅarısız oldu: %s" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/tr/LC_MESSAGES/pyLoadCli.po b/locale/tr/LC_MESSAGES/pyLoadCli.po index 19d122f60..923de377c 100644 --- a/locale/tr/LC_MESSAGES/pyLoadCli.po +++ b/locale/tr/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr " Komut satır arayÃŒzÃŒ" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "%s İndirmeler:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr " Hız: " -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr " BÃŒyÃŒklÃŒk: " -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr " BitiÅ zamanı: " -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "ID:" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "bekleniyor: " -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "Durum" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "Duraklatıldı" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "çalıÅıyor" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "toplam hız" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "Sıradaki Dosyalar" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "Toplam" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "MenÃŒ:" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr " Linkleri Ekle" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "KuyruÄu DÃŒzenle" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "KolektörÃŒ DÃŒzenle " -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "(Un)Sunucuyu Durdur" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "Sunucuyu DevredıÅı bırak" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "ÃıkıÅ" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "LÃŒtfen doÄru eÅleÅtirme metnini kullanın:Ekle <Paket adı> <link> <linkl2>" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "%d Linkler Kontrol ediliyor" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "Dosya bulunamadı" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "pyLoad durdu" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "Sunucu durumunu yazdır" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "Kuyruktakileri yazdır" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "Kolektördekileri yazdır" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "KuyruÄa paket ekle" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "Kolektöre paket ekle" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "Dosyaları Kuyruktan/Kolektör'den sil" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "Paketleri Kuyruktan/Kolektör'den sil" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "Paketleri Kuyruktan , Kolektöre taÅı veya tam tersini yap" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "Dosyaları yenile" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "Paketleri yenile" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "Yerel konteynerla çalıÅtıgını ve online olup olmadıÄını kontrol et" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "Konteyner dosyalarının çemrimiçi oldugunu kontrol et" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "Sunucuyu durdur" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "indirmelere devam et" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "Seçilenleri durdur/devam ettir" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "sunucuyu durdur yap" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "Komut listesi" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "Kullanıcı ayar dosyası yazılamadı" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "pyLoad çekirdeÄine baÄlanmak için py-opensll ye baglanmanız lazım" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "Adres: " -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "Port:" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "Kullanıcı adı: " -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "Åifre: " -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "GiriÅ bilgileri yanlıÅ" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "%(addr)s:%(port)s. ile baÄlantı kurulamadı" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "pyLoad çekirdeÄine baÄlanmak için py-opensll ye baglanmanız lazım" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "Bazı komutları onayladınızdan beri , ÃevrimdıÅı modu engellendi" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "Paket ekle:" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "Yeni paketin adını girin" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "Paket: %s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "Eklemek isteniz linkleri çözÃŒmle" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "Tip %s tamamlandı" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "Eklenen linkler: " -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "MenÃŒye geri dön" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "Paketleri DÃŒzenle:" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "Linkleri DÃŒzenle:" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "Neleri taÅımak istersiniz?" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "Neleri silmek istersiniz?" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "Neleri yenilemek istersiniz?" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "Ne yapmak istediniz seçin veya paket numarası girin." -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "sil" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "taÅı" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "yeniden baÅlat " -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr " - önceki" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "-Sonraki" diff --git a/locale/tr/LC_MESSAGES/setup.po b/locale/tr/LC_MESSAGES/setup.po index e12e79344..ddc5a5de8 100644 --- a/locale/tr/LC_MESSAGES/setup.po +++ b/locale/tr/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "e" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "h" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "PyLoad ayar sihirbazına hoÅgeldiniz." -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "Sisteminizi kontrol edecek ve pyLoad'ın çalıÅması için bir temel kurulum yapacaktır." -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "Parantez içindeki deÄerler [], her zaman varsayılan deÄerdir" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "deÄiÅtirmek istemediÄinde yada neyi seçeceÄinden emin deÄilsen, sadece enter'e bas." -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "Unutma: pyload.py -setup yada -s ekleyerek bu Asistanı her zaman yeniden baÅlatabilirsiniz." -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "Asistan ile herhangi bir sorun yaÅarsanız STRG-C tuÅuna basın," -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "iptal etmek ve pyload.py ile otomatik baÅlatmamak için." -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "EÄer sistem kontrolÃŒ için hazırsanız, enter'a basın." -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "pyLoad'ı çalıÅtırmak için pycurl, sqlite ve python 2.5, 2.6 veya 2.7 gerekir." -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "LÃŒtfen bunu dÃŒzeltin ve pyLoad'ı yeniden çalıÅtırın." -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "Kur Åimdi kapanacak." -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "Sistem kontrolÃŒ tamamlandı, durum raporunu görmek için Enter tuÅuna basın." -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "## Durum ##" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "ssl baÄlantısı" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "ArayÃŒz" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "Web arayÃŒzÃŒ" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "geniÅletilmiÅ Click'N'Load" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "Mevcut Ãzellikler:" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "Eksik Ãzellikler:" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "SSL bulunmamaktadır" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "Sisteme yada Web arayÃŒzÃŒne gÃŒvenli baÄlantı için bu gerekli." -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "pyLoad'a yanlızca yerel eriÅmek istiyorsanız, ssl önerilmez." -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "Kullanıcı ArayÃŒzÃŒ mevcut deÄil" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "Grafiksel Kullanıcı ArayÃŒzÃŒ." -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "JavaScript motoru bulunamadı" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "Bazı Click'N'Load baÄlantıları için gerekli. Spidermonkey, ossp-js, pyv8 yada rhino yÃŒkleyin" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "Åuan kurulum iptal edebilir ve gerekiyorsa bazı baÄımlılık gerektiren dÃŒzeltmeleri yapabilirsiniz." -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "Kurulum ile devam edilsin mi?" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "Yapılandırma yolunu deÄiÅtirmek istiyor musunuz? Mevcut% s" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "Yapılandırma yolunu deÄiÅtirme?" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "GiriÅ verileri ve temel ayarları yapılandırmak istiyor musunuz?" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "Bu ilk çalıÅma için tavsiye edilir." -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "Temel kurulum yap" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "Ssl yapılandırmak istiyor musunuz?" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "Ssl yapılandırması" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "Web arayÃŒzÃŒnÃŒ yapılandırmak istiyor musunuz?" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "Web arayÃŒzÃŒ yapılandırması?" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "Kur baÅarıyla tamamlandı." -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "Ãıkmak için Enter tuÅuna basın ve pyLoad'ı yeniden baÅlatın" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "## Sistem Kontrol ##" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "Python sÃŒrÃŒmÃŒnÃŒz çok yeni, Python 2.6/2.7 kullanın" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "Python sÃŒrÃŒmÃŒnÃŒz çok eski, en az Python 2.5 kullanın" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "Python Versiyon: OK" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "YÃŒklÃŒ olan Jinja2 versiyonu %s çok eski görÃŒnÃŒyor." -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "JS motoru" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "## Temel Kurulum ##" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "AÅaÄıdaki giriÅ verileri geçerlidir Åunlar için CLI, GUI ve webarayÃŒzÃŒ." -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "Kullanıcı Adı" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "Uzaktan EriÅim" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "Dil" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "İndirme klasörÃŒ" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "Max indirme sayısı" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "BaÄlantı sıfırlama?" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "Komut dosyası konumu yeniden baÄlanın" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "## Web arayÃŒzÃŒ Kurulumu ##" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "Web arayÃŒzÃŒ etkin?" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "Adrese bak, eÄer 127.0.0.1 veya localhost kullanıyorsanız, webinterface yerel olarak eriÅilebilir olacaktır." -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "Adres" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "Port" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "pyLoad Åimdi kısa bir açıklama sonrasında, birçok sunucu arka uçları sunmaktadır." -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "Tarafından kullanılabilmek için apache, lighttpd, sana onları konfigÃŒre etmek gerektirir; ki bu çok da kolay bir iÅ deÄildir." -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "Buradan edinin: https://github.com/jonashaag/bjoern, onu derleyin" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "Dikkat: Bazı farklı durumlarda yerleÅik sunucu çalıÅmıyorsa, eÄer webarayÃŒzÃŒyle ilgili problem farke edersen" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "Buraya gel ve burada yerleÅik sunucu diÅli deÄiÅtir." -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "Sunucu" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "## SSL Kurulumu ##" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "Bu komutlar ssl sertifikaları yapmak için pyLoad config klasörÃŒnden çalıÅtırın:" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "EÄer yaptıysan ve her Åey iyi gittiyse, ssl'yi Åimdi etkinleÅtirebilirsiniz." -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "SSL EtkinleÅtir?" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "Eylem seçin" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "1 - Kullanıcı OluÅtur / DÃŒzenle" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "2 - Kullanıcıları listele" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "3 - Kullanıcı kaldır" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "4 - ÃıkıÅ" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "Kullanıcılar" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "Yeni ayarlar yapılandırma yolu, eski ayarlar transfer edilmeyecek!" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "Yapılandırma yolu" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "Yapılandırma yolu deÄiÅti, kurulum Åimdi kapanacak, devam etmek için yeniden baÅlatın." -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "Ãıkmak için Enter tuÅuna basın." -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "Yapılandırma ayar yolu baÅarısız oldu: %s" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "%s: eksik" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "Åifre: " -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "Åifre çok kısa. En az 4 sembol kullanın." -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "Åifre (tekrar):" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "Parolalar eÅleÅmedi." -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "evet" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "doÄru" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "d" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "hayır" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "yanlıÅ" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "y" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "Geçersiz giriÅ" diff --git a/locale/uk/LC_MESSAGES/django.po b/locale/uk/LC_MESSAGES/django.po index 388d61f64..0209d315c 100644 --- a/locale/uk/LC_MESSAGES/django.po +++ b/locale/uk/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "вОкл" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "вкл" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "ÐевЎалП" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "ÐÐŒâÑ" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "СÑаÑÑÑ" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "РПзЌÑÑ" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "ÐПгÑМ" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "ÐÐŒ'Ñ ÐºÐŸÑОÑÑÑваÑа" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "ÐаÑПлÑ" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "Ðапка" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "ÐÑÐŽÑвеÑЎОÑО" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "ÐагалÑМÑ" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "ÐблÑÐºÐŸÐ²Ñ Ð·Ð°Ð¿ÐžÑО" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "ÐлагÑМ" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "ÐŽÑйÑМОй" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "ÐПЎаÑО" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "ТОп" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "СОÑÑеЌа" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "ÐаÑаЌеÑÑО" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "ÐÑОзМаÑеММÑ" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "ÐакÑОÑО" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "СкаÑÑваÑО" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "ÐÐŽÐŒÑМ" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "МеПбЌежеМОй" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/uk/LC_MESSAGES/pyLoad.po b/locale/uk/LC_MESSAGES/pyLoad.po index 2c1e6af57..20c9a1b17 100644 --- a/locale/uk/LC_MESSAGES/pyLoad.po +++ b/locale/uk/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "" -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "" -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "SSL-ÑеÑÑОÑÑкаÑО Ме зМайЎеМП." -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "МеПбЌежеМОй" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/uk/LC_MESSAGES/pyLoadCli.po b/locale/uk/LC_MESSAGES/pyLoadCli.po index 57cb147ef..10ac61deb 100644 --- a/locale/uk/LC_MESSAGES/pyLoadCli.po +++ b/locale/uk/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr " ÐМÑеÑÑÐµÐ¹Ñ ÐºÐŸÐŒÐ°ÐœÐŽÐœÐŸÐ³ÐŸ ÑÑЎка" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "%s заваМÑажеМÑ:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr " КвОЎкÑÑÑÑ: " -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr " РПзЌÑÑ: " -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr " ÐакÑМÑОв Ñ: " -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "ID: " -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "ПÑÑкÑваММÑ: " -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "СÑаМ:" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "пÑОзÑпОМеМП" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "загалÑМа ÑвОЎкÑÑÑÑ" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "ЀайлО Ñ ÑеÑзÑ" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "ÐÑÑПгП" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "ÐеМÑ:" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr " ÐПЎаÑО пПÑОлаММÑ" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr " ÐеÑÑÐ²Ð°ÐœÐœÑ ÑеÑгПÑ" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr " ÐеÑÑваÑО кПлекÑПÑПЌ" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr " ÐбОÑО ÑеÑвеÑ" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr " ÐОйÑО" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "ÐÑÐŽÑ Ð»Ð°Ñка, вОкПÑОÑÑПвÑйÑе ÑакОй ÑОМÑакÑОÑ: ЎПЎаÑО < ÑÐŒ'Ñ ÐакеÑа > <link><link2>..." -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "ÐеÑевÑÑка %d пПÑОлаММÑ:" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "Ѐайл Ме ÑÑМÑÑ." -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "ÐеÑеЌÑÑÑОÑО пакÑМкО з ÑеÑгО Ñ ÐºÐŸÐ»ÐµÐºÑÐŸÑ Ñ ÐœÐ°Ð²Ð¿Ð°ÐºÐž" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "ÐПЎаÑО пакеÑ:" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "ÐвеЎÑÑÑ ÑÐŒ'Ñ ÐŽÐ»Ñ ÐœÐŸÐ²ÐŸÐ³ÐŸ пакеÑа" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "ÐПÑÐžÐ»Ð°ÐœÐœÑ ÐŽÐŸÐŽÐ°ÐœÐŸ: " -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "ÐеÑÑÐ²Ð°ÐœÐœÑ Ð¿ÐŸÑОлаММÑЌО:" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "ЩП вО Ñ
ПÑеÑе вОЎалОÑО?" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "вОЎалОÑО" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "пеÑезапÑÑÑОÑО" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr " -пПпеÑеЎМÑй" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "" diff --git a/locale/uk/LC_MESSAGES/setup.po b/locale/uk/LC_MESSAGES/setup.po index 5693044f1..a06a623f9 100644 --- a/locale/uk/LC_MESSAGES/setup.po +++ b/locale/uk/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "ÐаÑкавП пÑПÑОЌП ЎП аÑОÑÑеМÑÑ ÑÑÑаМПвкО." -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "ÐваÑÑ ÑОÑÑÐµÐŒÑ Ð·Ð°Ñаз бÑЎе пеÑевÑÑеМП Ñ Ð·ÑÐŸÐ±Ð»ÐµÐœÐŸÐ±Ð°Ð·ÐŸÐ²Ñ ÑÑÑаМПвкО ÐŽÐ»Ñ ÑПгП, ÑПб запÑÑÑОÑО pyLoad." -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "ÐМаÑÐµÐœÐœÑ Ñ ÐºÐ²Ð°ÐŽÑаÑМОÑ
ÐŽÑжкаÑ
[] завжЎО Ñ Ð·ÐœÐ°ÑÐµÐœÐœÑ Ð·Ð° заЌПвÑаММÑÐŒ" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "ÐаÑОÑМÑÑÑ enter ÑПб пеÑезапÑÑÑÑÑÑ pyLoad" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "ÐÐŒ'Ñ ÐºÐŸÑОÑÑÑваÑа" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "ÐПва/Language" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "ÐÐŽÑеÑа" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "ÐПÑÑ" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "СеÑвеÑ" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "# # SSL МалаÑÑÑÐ²Ð°ÐœÐœÑ # #" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "ÐОкПМаÑО ÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÐž з папкО pyLoad ÐŽÐ»Ñ ÑПгП ÑПб зÑПбОÑО ssl ÑеÑÑОÑÑкаÑО:" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "ЯкÑП вО вÑе зÑПбОлО, Ñ Ð²Ñе пÑПйÑлП ЎПбÑе, вО ЌПжеÑе акÑОвÑваÑО ssl заÑаз." -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "ÐкÑОвÑваÑО SSL?" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "ÐОбÑаÑО ÐŽÑÑ" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "1 - СÑвПÑÐµÐœÐœÑ Ñа ÑеЎагÑÐ²Ð°ÐœÐœÑ ÐºÐŸÑОÑÑÑваÑ" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "2 - СпОÑПк кПÑОÑÑÑваÑÑв" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "3 - ÐОЎалОÑО кПÑОÑÑÑваÑа" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "4 - ÐОÑ
ÑÐŽ" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "ÐПÑОÑÑÑваÑÑ" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "ÐаÑОÑМÑÑÑ ÐºÐ»Ð°Ð²ÑÑÑ Enter, ÑПб закÑОÑО." -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "Ðе вЎалПÑÑ Ð·ÐŒÑМОÑО ÑлÑÑ
ЎП МалаÑÑÑваМÑ: %s" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "ÐаÑÐŸÐ»Ñ Ð·Ð°ÐœÐ°ÐŽÑП кПÑПÑкОй. ÐÑМÑЌалÑМа ЎПвжОМа 4 ÑОЌвПла." -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "ÐаÑÐŸÐ»Ñ (Ñе Ñаз): " -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "Так" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "ÐÑ" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "ÐевÑÑМОй ввÑÐŽ" diff --git a/locale/vi/LC_MESSAGES/django.po b/locale/vi/LC_MESSAGES/django.po index 6bdce3925..16cbce3da 100644 --- a/locale/vi/LC_MESSAGES/django.po +++ b/locale/vi/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "" -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "tắt" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "trên" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "" -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "Tên" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "Tình trạng" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "KÃch thưá»c" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "ÄÄng nháºp" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "Tên ngưá»i dùng" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "Máºt khẩu" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "" -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "" -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "" -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "Thư mục" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "" -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "" -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "Gá»i" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "Chung" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "Tà i khoản" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "Plugin" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "hợp lá»" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "Thêm" -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "" -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "" -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "" -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "" -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "" -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "" -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "" -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "" -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "Äiá»m Äến" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "" -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "" -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "" -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "Äóng" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "Há»§y bá»" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "" -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "" -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "" -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "" -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "" -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "khÃŽng giá»i hạn" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/vi/LC_MESSAGES/pyLoad.po b/locale/vi/LC_MESSAGES/pyLoad.po index 90bf0609d..3f1e8e5c8 100644 --- a/locale/vi/LC_MESSAGES/pyLoad.po +++ b/locale/vi/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "" -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "" -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "" -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "khÃŽng giá»i hạn" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/vi/LC_MESSAGES/pyLoadCli.po b/locale/vi/LC_MESSAGES/pyLoadCli.po index 0f79cabe8..a35b37295 100644 --- a/locale/vi/LC_MESSAGES/pyLoadCli.po +++ b/locale/vi/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "Giao diá»n Dòng lá»nh" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "%s Tải xuá»ng:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "Tá»c Äá»:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "KÃch thưá»c:" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "Kết thúc trong:" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "ID:" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "chá»:" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "Danh Mục:" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "Thêm liên kết" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "(Un)Tạm dừng máy chá»§" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "Dừng máy chá»§" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "Thoát" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "" -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "Äang kiá»m tra %d liên kết:" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "Táºp tin khÃŽng tá»n tại." -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "in trạng thái máy chá»§" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "in hà ng Äợi tải xuá»ng" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "Khá»i Äá»ng lại các táºp tin." -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "tạm dừng máy chá»§" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "tiếp tục tải xuá»ng" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "chuyá»n giữa tạm dừng/tiếp tục" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "dừng máy chá»§" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "Äá»a chá»:" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "Cá»ng:" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "Tên ngưá»i dùng:" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "Máºt khẩu:" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "Gói: %s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "Phân tÃch liên kết bạn muá»n thêm." -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "Nháºp %s khi xong." -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "Liên kết Äã thêm:" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "quay lại menu chÃnh" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "Quản lÜ liên kết" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr "- quay lại" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "- kế tiếp" diff --git a/locale/vi/LC_MESSAGES/setup.po b/locale/vi/LC_MESSAGES/setup.po index a063269c2..c02da4262 100644 --- a/locale/vi/LC_MESSAGES/setup.po +++ b/locale/vi/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "Tên ngưá»i dùng" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "NgÃŽn ngữ" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "Äá»a chá»" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "Cá»ng" -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "Máy chá»§" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "" -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "Máºt khẩu:" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "" diff --git a/locale/zh/LC_MESSAGES/django.po b/locale/zh/LC_MESSAGES/django.po index d34a347af..192ea08f1 100644 --- a/locale/zh/LC_MESSAGES/django.po +++ b/locale/zh/LC_MESSAGES/django.po @@ -12,673 +12,673 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/webui/translations.js:1 +#: pyload/webui/translations.js:1 msgid "New Captcha Request" msgstr "æ°éªè¯è¯·æ±" -#: module/webui/translations.js:2 module/webui/themes/default/tml/captcha.html:7 +#: pyload/webui/translations.js:2 pyload/webui/themes/default/tml/captcha.html:7 msgid "Please read the text on the captcha." msgstr "请读åéªè¯ç äžçææ¬." -#: module/webui/translations.js:3 +#: pyload/webui/translations.js:3 msgid "pyLoad restarted" msgstr "pyLoadå·²ç»éå¯" -#: module/webui/translations.js:4 -#: module/webui/themes/default/tml/settings_item.html:16 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:4 +#: pyload/webui/themes/default/tml/settings_item.html:16 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "off" msgstr "é" -#: module/webui/translations.js:5 +#: pyload/webui/translations.js:5 msgid "Success" msgstr "æå" -#: module/webui/translations.js:6 -#: module/webui/themes/default/tml/settings_item.html:14 -#: module/webui/themes/default/tml/base.html:123 -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/translations.js:6 +#: pyload/webui/themes/default/tml/settings_item.html:14 +#: pyload/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:124 msgid "on" msgstr "é" -#: module/webui/translations.js:7 +#: pyload/webui/translations.js:7 msgid "You are really sure you want to quit pyLoad?" msgstr "确讀èŠéåºpyLoadåïŒ" -#: module/webui/translations.js:8 +#: pyload/webui/translations.js:8 msgid "Restart Link" msgstr "éŸæ¥éæ°åŒå§" -#: module/webui/translations.js:9 +#: pyload/webui/translations.js:9 msgid "Delete Link" msgstr "å é€éŸæ¥" -#: module/webui/translations.js:10 +#: pyload/webui/translations.js:10 msgid "Please Enter a packagename." msgstr "请èŸå
¥äžèœœå
åå" -#: module/webui/translations.js:11 +#: pyload/webui/translations.js:11 msgid "Please click on the right captcha position." msgstr "请ç¹å»æ£ç¡®çéªè¯ç äœçœ®" -#: module/webui/translations.js:12 +#: pyload/webui/translations.js:12 msgid "Error occured." msgstr "é误åçäº" -#: module/webui/translations.js:13 -#: module/webui/themes/default/tml/filemanager.html:65 -#: module/webui/themes/default/tml/folder.html:14 +#: pyload/webui/translations.js:13 +#: pyload/webui/themes/default/tml/filemanager.html:65 +#: pyload/webui/themes/default/tml/folder.html:14 msgid "Folder is empty" msgstr "æä»¶å€¹äžºç©º" -#: module/webui/translations.js:14 +#: pyload/webui/translations.js:14 msgid "Failed" msgstr "倱æ" -#: module/webui/translations.js:15 +#: pyload/webui/translations.js:15 msgid "No Captchas to read." msgstr "没æè·åéªè¯ç " -#: module/webui/translations.js:16 +#: pyload/webui/translations.js:16 msgid "Passwords did not match." msgstr "å¯ç äžç¬Š" -#: module/webui/translations.js:17 +#: pyload/webui/translations.js:17 msgid "Settings saved." msgstr "讟眮已ä¿å" -#: module/webui/translations.js:18 +#: pyload/webui/translations.js:18 msgid "New folder" msgstr "æ°æä»¶å€¹" -#: module/webui/translations.js:19 +#: pyload/webui/translations.js:19 msgid "Are you sure you want to restart pyLoad?" msgstr "ç¡®å®éå¯pyLoadåïŒ" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/webui/themes/default/tml/home.html:206 +#: pyload/webui/themes/default/tml/home.html:206 msgid "Active Downloads" msgstr "掻åšäžèœœ" -#: module/webui/themes/default/tml/home.html:211 -#: module/webui/themes/default/tml/base.html:84 +#: pyload/webui/themes/default/tml/home.html:211 +#: pyload/webui/themes/default/tml/base.html:84 msgid "Home" msgstr "éŠé¡µ" -#: module/webui/themes/default/tml/home.html:214 -#: module/webui/themes/default/tml/queue.html:15 -#: module/webui/themes/default/tml/window.html:34 -#: module/webui/themes/default/tml/base.html:87 +#: pyload/webui/themes/default/tml/home.html:214 +#: pyload/webui/themes/default/tml/queue.html:15 +#: pyload/webui/themes/default/tml/window.html:34 +#: pyload/webui/themes/default/tml/base.html:87 msgid "Queue" msgstr "" -#: module/webui/themes/default/tml/home.html:217 -#: module/webui/themes/default/tml/queue.html:17 -#: module/webui/themes/default/tml/window.html:36 -#: module/webui/themes/default/tml/base.html:90 +#: pyload/webui/themes/default/tml/home.html:217 +#: pyload/webui/themes/default/tml/queue.html:17 +#: pyload/webui/themes/default/tml/window.html:36 +#: pyload/webui/themes/default/tml/base.html:90 msgid "Collector" msgstr "" -#: module/webui/themes/default/tml/home.html:220 -#: module/webui/themes/default/tml/downloads.html:6 -#: module/webui/themes/default/tml/base.html:93 +#: pyload/webui/themes/default/tml/home.html:220 +#: pyload/webui/themes/default/tml/downloads.html:6 +#: pyload/webui/themes/default/tml/base.html:93 msgid "Downloads" msgstr "å·²äžèœœ" -#: module/webui/themes/default/tml/home.html:226 -#: module/webui/themes/default/tml/logs.html:3 -#: module/webui/themes/default/tml/logs.html:4 -#: module/webui/themes/default/tml/base.html:99 +#: pyload/webui/themes/default/tml/home.html:226 +#: pyload/webui/themes/default/tml/logs.html:3 +#: pyload/webui/themes/default/tml/logs.html:4 +#: pyload/webui/themes/default/tml/base.html:99 msgid "Logs" msgstr "æ¥å¿" -#: module/webui/themes/default/tml/home.html:229 -#: module/webui/themes/default/tml/settings.html:3 -#: module/webui/themes/default/tml/settings.html:4 -#: module/webui/themes/default/tml/base.html:102 +#: pyload/webui/themes/default/tml/home.html:229 +#: pyload/webui/themes/default/tml/settings.html:3 +#: pyload/webui/themes/default/tml/settings.html:4 +#: pyload/webui/themes/default/tml/base.html:102 msgid "Config" msgstr "é
眮" -#: module/webui/themes/default/tml/home.html:237 -#: module/webui/themes/default/tml/queue.html:82 -#: module/webui/themes/default/tml/settings.html:91 -#: module/webui/themes/default/tml/window.html:7 -#: module/webui/themes/default/tml/admin.html:25 +#: pyload/webui/themes/default/tml/home.html:237 +#: pyload/webui/themes/default/tml/queue.html:82 +#: pyload/webui/themes/default/tml/settings.html:91 +#: pyload/webui/themes/default/tml/window.html:7 +#: pyload/webui/themes/default/tml/admin.html:25 msgid "Name" msgstr "åçš±" -#: module/webui/themes/default/tml/home.html:238 -#: module/webui/themes/default/tml/settings.html:93 +#: pyload/webui/themes/default/tml/home.html:238 +#: pyload/webui/themes/default/tml/settings.html:93 msgid "Status" msgstr "çæ
" -#: module/webui/themes/default/tml/home.html:239 -#: module/webui/themes/default/tml/info.html:14 -#: module/webui/themes/default/tml/info.html:15 +#: pyload/webui/themes/default/tml/home.html:239 +#: pyload/webui/themes/default/tml/info.html:14 +#: pyload/webui/themes/default/tml/info.html:15 msgid "Information" msgstr "ä¿¡æ¯" -#: module/webui/themes/default/tml/home.html:240 +#: pyload/webui/themes/default/tml/home.html:240 msgid "Size" msgstr "倧å°" -#: module/webui/themes/default/tml/home.html:241 +#: pyload/webui/themes/default/tml/home.html:241 msgid "Progress" msgstr "è¿åºŠ" -#: module/webui/themes/default/tml/login.html:3 -#: module/webui/themes/default/tml/settings.html:178 +#: pyload/webui/themes/default/tml/login.html:3 +#: pyload/webui/themes/default/tml/settings.html:178 msgid "Login" msgstr "ç»å
¥" -#: module/webui/themes/default/tml/login.html:14 +#: pyload/webui/themes/default/tml/login.html:14 msgid "Username" msgstr "䜿çšè
åçš±" -#: module/webui/themes/default/tml/login.html:19 -#: module/webui/themes/default/tml/queue.html:92 -#: module/webui/themes/default/tml/settings.html:92 -#: module/webui/themes/default/tml/settings.html:183 -#: module/webui/themes/default/tml/window.html:21 +#: pyload/webui/themes/default/tml/login.html:19 +#: pyload/webui/themes/default/tml/queue.html:92 +#: pyload/webui/themes/default/tml/settings.html:92 +#: pyload/webui/themes/default/tml/settings.html:183 +#: pyload/webui/themes/default/tml/window.html:21 msgid "Password" msgstr "å¯ç¢Œ" -#: module/webui/themes/default/tml/login.html:29 +#: pyload/webui/themes/default/tml/login.html:29 msgid "Your username and password didn't match. Please try again." msgstr "æšççšæ·ååå¯ç äžå¹é
, 请åè¯äžæ¬¡." -#: module/webui/themes/default/tml/login.html:30 +#: pyload/webui/themes/default/tml/login.html:30 msgid "To reset your login data or add an user run:" msgstr "èŠé眮æšçç»åœæ°æ®ææ·»å äžäžªçšæ·, 请è¿è¡:" -#: module/webui/themes/default/tml/queue.html:25 +#: pyload/webui/themes/default/tml/queue.html:25 msgid "Delete Finished" msgstr "å é€å®æ" -#: module/webui/themes/default/tml/queue.html:26 +#: pyload/webui/themes/default/tml/queue.html:26 msgid "Restart Failed" msgstr "éå¯åºé" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Folder:" msgstr "æä»¶å€¹:" -#: module/webui/themes/default/tml/queue.html:65 +#: pyload/webui/themes/default/tml/queue.html:65 msgid "Password:" msgstr "å¯ç :" -#: module/webui/themes/default/tml/queue.html:79 +#: pyload/webui/themes/default/tml/queue.html:79 msgid "Edit Package" msgstr "çŒèŸäžèœœ" -#: module/webui/themes/default/tml/queue.html:80 +#: pyload/webui/themes/default/tml/queue.html:80 msgid "Edit the package detais below." msgstr "ä¿®æ¹æä»¶å
è¯Šç»æ³šéä¿¡æ¯." -#: module/webui/themes/default/tml/queue.html:83 +#: pyload/webui/themes/default/tml/queue.html:83 msgid "The name of the package." msgstr "æä»¶å." -#: module/webui/themes/default/tml/queue.html:87 +#: pyload/webui/themes/default/tml/queue.html:87 msgid "Folder" msgstr "ç®é" -#: module/webui/themes/default/tml/queue.html:88 +#: pyload/webui/themes/default/tml/queue.html:88 msgid "Name of subfolder for these downloads." msgstr "æ€äžèœœçåç®åœå." -#: module/webui/themes/default/tml/queue.html:93 +#: pyload/webui/themes/default/tml/queue.html:93 msgid "List of passwords used for unrar." msgstr "UNRARè§£å猩å¯ç å衚." -#: module/webui/themes/default/tml/queue.html:97 -#: module/webui/themes/default/tml/settings.html:167 -#: module/webui/themes/default/tml/captcha.html:33 -#: module/webui/themes/default/tml/admin.html:61 -#: module/webui/themes/default/tml/admin.html:91 +#: pyload/webui/themes/default/tml/queue.html:97 +#: pyload/webui/themes/default/tml/settings.html:167 +#: pyload/webui/themes/default/tml/captcha.html:33 +#: pyload/webui/themes/default/tml/admin.html:61 +#: pyload/webui/themes/default/tml/admin.html:91 msgid "Submit" msgstr "åæ" -#: module/webui/themes/default/tml/queue.html:98 -#: module/webui/themes/default/tml/settings.html:198 -#: module/webui/themes/default/tml/window.html:41 -#: module/webui/themes/default/tml/admin.html:92 +#: pyload/webui/themes/default/tml/queue.html:98 +#: pyload/webui/themes/default/tml/settings.html:198 +#: pyload/webui/themes/default/tml/window.html:41 +#: pyload/webui/themes/default/tml/admin.html:92 msgid "Reset" msgstr "é眮" -#: module/webui/themes/default/tml/logout.html:8 +#: pyload/webui/themes/default/tml/logout.html:8 msgid "You were successfully logged out." msgstr "æšå·²æå泚é." -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "Path" msgstr "è·¯åŸ" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "absolute" msgstr "ç»å¯¹" -#: module/webui/themes/default/tml/pathchooser.html:39 -#: module/webui/themes/default/tml/pathchooser.html:41 +#: pyload/webui/themes/default/tml/pathchooser.html:39 +#: pyload/webui/themes/default/tml/pathchooser.html:41 msgid "relative" msgstr "çžå¯¹" -#: module/webui/themes/default/tml/pathchooser.html:46 +#: pyload/webui/themes/default/tml/pathchooser.html:46 msgid "name" msgstr "åç§°" -#: module/webui/themes/default/tml/pathchooser.html:47 +#: pyload/webui/themes/default/tml/pathchooser.html:47 msgid "size" msgstr "倧å°" -#: module/webui/themes/default/tml/pathchooser.html:48 +#: pyload/webui/themes/default/tml/pathchooser.html:48 msgid "type" msgstr "ç±»å" -#: module/webui/themes/default/tml/pathchooser.html:49 +#: pyload/webui/themes/default/tml/pathchooser.html:49 msgid "last modified" msgstr "æåä¿®æ¹" -#: module/webui/themes/default/tml/pathchooser.html:54 +#: pyload/webui/themes/default/tml/pathchooser.html:54 msgid "parent directory" msgstr "ç¶ç®åœ" -#: module/webui/themes/default/tml/pathchooser.html:70 +#: pyload/webui/themes/default/tml/pathchooser.html:70 msgid "no content" msgstr "没æå
容" -#: module/webui/themes/default/tml/settings.html:16 +#: pyload/webui/themes/default/tml/settings.html:16 msgid "General" msgstr "äžè¬èšå®" -#: module/webui/themes/default/tml/settings.html:17 +#: pyload/webui/themes/default/tml/settings.html:17 msgid "Plugins" msgstr "æä»¶" -#: module/webui/themes/default/tml/settings.html:18 +#: pyload/webui/themes/default/tml/settings.html:18 msgid "Accounts" msgstr "åž³æ¶" -#: module/webui/themes/default/tml/settings.html:45 -#: module/webui/themes/default/tml/settings.html:74 +#: pyload/webui/themes/default/tml/settings.html:45 +#: pyload/webui/themes/default/tml/settings.html:74 msgid "Choose a section from the menu" msgstr "ä»èåäžéæ©äžé¡¹ç®" -#: module/webui/themes/default/tml/settings.html:90 +#: pyload/webui/themes/default/tml/settings.html:90 msgid "Plugin" msgstr "倿" -#: module/webui/themes/default/tml/settings.html:94 +#: pyload/webui/themes/default/tml/settings.html:94 msgid "Premium" msgstr "é«çº§åžå·" -#: module/webui/themes/default/tml/settings.html:95 +#: pyload/webui/themes/default/tml/settings.html:95 msgid "Valid until" msgstr "æææè³" -#: module/webui/themes/default/tml/settings.html:96 +#: pyload/webui/themes/default/tml/settings.html:96 msgid "Traffic left" msgstr "å©äœæµé" -#: module/webui/themes/default/tml/settings.html:97 +#: pyload/webui/themes/default/tml/settings.html:97 msgid "Time" msgstr "æ¶éŽ" -#: module/webui/themes/default/tml/settings.html:98 +#: pyload/webui/themes/default/tml/settings.html:98 msgid "Max Parallel" msgstr "æå€§è¿æ¥æ°" -#: module/webui/themes/default/tml/settings.html:99 +#: pyload/webui/themes/default/tml/settings.html:99 msgid "Delete?" msgstr "确讀å é€?" -#: module/webui/themes/default/tml/settings.html:121 +#: pyload/webui/themes/default/tml/settings.html:121 msgid "valid" msgstr "ææç" -#: module/webui/themes/default/tml/settings.html:124 +#: pyload/webui/themes/default/tml/settings.html:124 msgid "not valid" msgstr "æ æ" -#: module/webui/themes/default/tml/settings.html:131 +#: pyload/webui/themes/default/tml/settings.html:131 msgid "yes" msgstr "æ¯" -#: module/webui/themes/default/tml/settings.html:134 +#: pyload/webui/themes/default/tml/settings.html:134 msgid "no" msgstr "åŠ" -#: module/webui/themes/default/tml/settings.html:168 -#: module/webui/themes/default/tml/settings.html:197 -#: module/webui/themes/default/tml/base.html:117 +#: pyload/webui/themes/default/tml/settings.html:168 +#: pyload/webui/themes/default/tml/settings.html:197 +#: pyload/webui/themes/default/tml/base.html:117 msgid "Add" msgstr "å¢å " -#: module/webui/themes/default/tml/settings.html:176 +#: pyload/webui/themes/default/tml/settings.html:176 msgid "Add Account" msgstr "æ°å¢åž³è" -#: module/webui/themes/default/tml/settings.html:177 +#: pyload/webui/themes/default/tml/settings.html:177 msgid "Enter your account data to use premium features." msgstr "èŸå
¥æšçåžæ·èµææ¥äœ¿çšé«çº§åèœ." -#: module/webui/themes/default/tml/settings.html:179 -#: module/webui/themes/default/tml/admin.html:71 +#: pyload/webui/themes/default/tml/settings.html:179 +#: pyload/webui/themes/default/tml/admin.html:71 msgid "Your username." msgstr "æšççšæ·å." -#: module/webui/themes/default/tml/settings.html:184 -#: module/webui/themes/default/tml/admin.html:76 +#: pyload/webui/themes/default/tml/settings.html:184 +#: pyload/webui/themes/default/tml/admin.html:76 msgid "The password for this account." msgstr "åœåå¯ç ä»
䞺æ€åžå·æçš." -#: module/webui/themes/default/tml/settings.html:188 +#: pyload/webui/themes/default/tml/settings.html:188 msgid "Type" msgstr "çš®é¡" -#: module/webui/themes/default/tml/settings.html:189 +#: pyload/webui/themes/default/tml/settings.html:189 msgid "Choose the hoster for your account." msgstr "è¯·éæ©æšåžå·å¯¹åºççœçç±»å." -#: module/webui/themes/default/tml/logs.html:12 -#: module/webui/themes/default/tml/base.html:114 +#: pyload/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/base.html:114 msgid "Start" msgstr "å¯åš" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "prev" msgstr "äžäžé¡µ" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "next" msgstr "äžäžé¡µ" -#: module/webui/themes/default/tml/logs.html:12 +#: pyload/webui/themes/default/tml/logs.html:12 msgid "End" msgstr "宿" -#: module/webui/themes/default/tml/info.html:18 +#: pyload/webui/themes/default/tml/info.html:18 msgid "News" msgstr "æ°é»" -#: module/webui/themes/default/tml/info.html:21 +#: pyload/webui/themes/default/tml/info.html:21 msgid "Support" msgstr "ææ¯æ¯æ" -#: module/webui/themes/default/tml/info.html:37 +#: pyload/webui/themes/default/tml/info.html:37 msgid "System" msgstr "系統" -#: module/webui/themes/default/tml/info.html:40 +#: pyload/webui/themes/default/tml/info.html:40 msgid "Python:" msgstr "" -#: module/webui/themes/default/tml/info.html:44 +#: pyload/webui/themes/default/tml/info.html:44 msgid "OS:" msgstr "æäœç³»ç»:" -#: module/webui/themes/default/tml/info.html:48 +#: pyload/webui/themes/default/tml/info.html:48 msgid "pyLoad version:" msgstr "pyLoad çæ¬:" -#: module/webui/themes/default/tml/info.html:52 +#: pyload/webui/themes/default/tml/info.html:52 msgid "Installation Folder:" msgstr "å®è£
æä»¶å€¹:" -#: module/webui/themes/default/tml/info.html:56 +#: pyload/webui/themes/default/tml/info.html:56 msgid "Config Folder:" msgstr "é
眮æä»¶å€¹:" -#: module/webui/themes/default/tml/info.html:60 +#: pyload/webui/themes/default/tml/info.html:60 msgid "Download Folder:" msgstr "äžèœœæä»¶å€¹:" -#: module/webui/themes/default/tml/info.html:64 +#: pyload/webui/themes/default/tml/info.html:64 msgid "Free Space:" msgstr "空é²ç©ºéŽ:" -#: module/webui/themes/default/tml/info.html:68 +#: pyload/webui/themes/default/tml/info.html:68 msgid "Language:" msgstr "è¯èš:" -#: module/webui/themes/default/tml/info.html:72 +#: pyload/webui/themes/default/tml/info.html:72 msgid "Webinterface Port:" msgstr "Webçé¢ç«¯å£:" -#: module/webui/themes/default/tml/info.html:76 +#: pyload/webui/themes/default/tml/info.html:76 msgid "Remote Interface Port:" msgstr "è¿çšæ¥å£ç«¯å£:" -#: module/webui/themes/default/tml/setup.html:3 -#: module/webui/themes/default/tml/setup.html:4 +#: pyload/webui/themes/default/tml/setup.html:3 +#: pyload/webui/themes/default/tml/setup.html:4 msgid "Setup" msgstr "èšå®" -#: module/webui/themes/default/tml/filemanager.html:19 +#: pyload/webui/themes/default/tml/filemanager.html:19 msgid "FileManager" msgstr "æä»¶ç®¡çåš" -#: module/webui/themes/default/tml/window.html:5 -#: module/webui/themes/default/tml/window.html:40 +#: pyload/webui/themes/default/tml/window.html:5 +#: pyload/webui/themes/default/tml/window.html:40 msgid "Add Package" msgstr "æ·»å äžèœœ" -#: module/webui/themes/default/tml/window.html:6 +#: pyload/webui/themes/default/tml/window.html:6 msgid "Paste your links or upload a container." msgstr "ç²èŽŽéŸæ¥æè
äžäŒ äžå®¹åš." -#: module/webui/themes/default/tml/window.html:8 +#: pyload/webui/themes/default/tml/window.html:8 msgid "The name of the new package." msgstr "æ°å»ºäžèœœçåå." -#: module/webui/themes/default/tml/window.html:12 +#: pyload/webui/themes/default/tml/window.html:12 msgid "Links" msgstr "éŸæ¥" -#: module/webui/themes/default/tml/window.html:13 +#: pyload/webui/themes/default/tml/window.html:13 msgid "Paste your links here or any text and press the filter button." msgstr "åšè¿éç²èŽŽæšçéŸæ¥æä»»äœææ¬å
容, ç¶åæ\"è¿æ»€\"æé®." -#: module/webui/themes/default/tml/window.html:14 +#: pyload/webui/themes/default/tml/window.html:14 msgid "Filter urls" msgstr "è¿æ»€" -#: module/webui/themes/default/tml/window.html:22 +#: pyload/webui/themes/default/tml/window.html:22 msgid "Password for RAR-Archive" msgstr "RARå猩å
å¯ç " -#: module/webui/themes/default/tml/window.html:26 +#: pyload/webui/themes/default/tml/window.html:26 msgid "File" msgstr "æä»¶" -#: module/webui/themes/default/tml/window.html:27 +#: pyload/webui/themes/default/tml/window.html:27 msgid "Upload a container." msgstr "äžäŒ äžå®¹åš." -#: module/webui/themes/default/tml/window.html:31 +#: pyload/webui/themes/default/tml/window.html:31 msgid "Destination" msgstr "ç®çå°" -#: module/webui/themes/default/tml/captcha.html:6 +#: pyload/webui/themes/default/tml/captcha.html:6 msgid "Captcha reading" msgstr "éªè¯ç 读åäž..." -#: module/webui/themes/default/tml/captcha.html:13 +#: pyload/webui/themes/default/tml/captcha.html:13 msgid "Captcha" msgstr "éªè¯ç " -#: module/webui/themes/default/tml/captcha.html:14 +#: pyload/webui/themes/default/tml/captcha.html:14 msgid "The captcha." msgstr "éªè¯ç ." -#: module/webui/themes/default/tml/captcha.html:20 +#: pyload/webui/themes/default/tml/captcha.html:20 msgid "Text" msgstr "ææ¬" -#: module/webui/themes/default/tml/captcha.html:21 +#: pyload/webui/themes/default/tml/captcha.html:21 msgid "Input the text on the captcha." msgstr "èŸå
¥éªè¯ç äžçææ¬." -#: module/webui/themes/default/tml/captcha.html:34 +#: pyload/webui/themes/default/tml/captcha.html:34 msgid "Close" msgstr "éé" -#: module/webui/themes/default/tml/base.html:20 -#: module/webui/themes/default/tml/base.html:139 +#: pyload/webui/themes/default/tml/base.html:20 +#: pyload/webui/themes/default/tml/base.html:139 msgid "Webinterface" msgstr "Webçé¢" -#: module/webui/themes/default/tml/base.html:39 +#: pyload/webui/themes/default/tml/base.html:39 msgid "pyLoad Update available!" msgstr "pyLoad æŽæ°å¯çš!" -#: module/webui/themes/default/tml/base.html:46 +#: pyload/webui/themes/default/tml/base.html:46 msgid "Plugins updated, please restart!" msgstr "æä»¶å·²æŽæ°, è¯·éæ°å¯åšçšåº!" -#: module/webui/themes/default/tml/base.html:52 +#: pyload/webui/themes/default/tml/base.html:52 msgid "Captcha waiting" msgstr "éªè¯ç çåŸ
äž" -#: module/webui/themes/default/tml/base.html:57 +#: pyload/webui/themes/default/tml/base.html:57 msgid "Logout" msgstr "泚é" -#: module/webui/themes/default/tml/base.html:59 -#: module/webui/themes/default/tml/admin.html:8 -#: module/webui/themes/default/tml/admin.html:9 +#: pyload/webui/themes/default/tml/base.html:59 +#: pyload/webui/themes/default/tml/admin.html:8 +#: pyload/webui/themes/default/tml/admin.html:9 msgid "Administrate" msgstr "管ç" -#: module/webui/themes/default/tml/base.html:61 +#: pyload/webui/themes/default/tml/base.html:61 msgid "Info" msgstr "ä¿¡æ¯" -#: module/webui/themes/default/tml/base.html:65 +#: pyload/webui/themes/default/tml/base.html:65 msgid "Please Login!" msgstr "请ç»åœ!" -#: module/webui/themes/default/tml/base.html:115 +#: pyload/webui/themes/default/tml/base.html:115 msgid "Stop" msgstr "忢" -#: module/webui/themes/default/tml/base.html:116 +#: pyload/webui/themes/default/tml/base.html:116 msgid "Cancel" msgstr "åæ¶" -#: module/webui/themes/default/tml/base.html:123 +#: pyload/webui/themes/default/tml/base.html:123 msgid "Download:" msgstr "äžèœœ:" -#: module/webui/themes/default/tml/base.html:124 +#: pyload/webui/themes/default/tml/base.html:124 msgid "Reconnect:" msgstr "éæ°è¿æ¥:" -#: module/webui/themes/default/tml/base.html:125 +#: pyload/webui/themes/default/tml/base.html:125 msgid "Speed:" msgstr "é床:" -#: module/webui/themes/default/tml/base.html:126 +#: pyload/webui/themes/default/tml/base.html:126 msgid "Active:" msgstr "掻åš:" -#: module/webui/themes/default/tml/base.html:127 +#: pyload/webui/themes/default/tml/base.html:127 msgid "Reload page" msgstr "å·æ°é¡µé¢" -#: module/webui/themes/default/tml/base.html:157 +#: pyload/webui/themes/default/tml/base.html:157 msgid "loading" msgstr "å 蜜äž" -#: module/webui/themes/default/tml/base.html:166 +#: pyload/webui/themes/default/tml/base.html:166 msgid "Back to top" msgstr "è¿åé¡¶éš" -#: module/webui/themes/default/tml/admin.html:13 +#: pyload/webui/themes/default/tml/admin.html:13 msgid "Quit pyLoad" msgstr "éåºpyLoad" -#: module/webui/themes/default/tml/admin.html:14 +#: pyload/webui/themes/default/tml/admin.html:14 msgid "Restart pyLoad" msgstr "éå¯pyLoad" -#: module/webui/themes/default/tml/admin.html:18 +#: pyload/webui/themes/default/tml/admin.html:18 msgid "To add user or change passwords use:" msgstr "æ·»å çšæ·ææŽæ¹å¯ç 请䜿çš:" -#: module/webui/themes/default/tml/admin.html:19 +#: pyload/webui/themes/default/tml/admin.html:19 msgid "Important: Admin user have always all permissions!" msgstr "éèŠæç€ºïŒç®¡çå莊æ·å
·ææææäœæéïŒ" -#: module/webui/themes/default/tml/admin.html:28 -#: module/webui/themes/default/tml/admin.html:67 +#: pyload/webui/themes/default/tml/admin.html:28 +#: pyload/webui/themes/default/tml/admin.html:67 msgid "Change Password" msgstr "æŽæ¹å¯ç " -#: module/webui/themes/default/tml/admin.html:31 +#: pyload/webui/themes/default/tml/admin.html:31 msgid "Admin" msgstr "" -#: module/webui/themes/default/tml/admin.html:34 +#: pyload/webui/themes/default/tml/admin.html:34 msgid "Permissions" msgstr "讞å¯" -#: module/webui/themes/default/tml/admin.html:41 +#: pyload/webui/themes/default/tml/admin.html:41 msgid "change" msgstr "æŽæ¹" -#: module/webui/themes/default/tml/admin.html:69 +#: pyload/webui/themes/default/tml/admin.html:69 msgid "Enter your current and desired Password." msgstr "请èŸå
¥æšåœå以åéèŠä¿®æ¹çå¯ç ." -#: module/webui/themes/default/tml/admin.html:70 +#: pyload/webui/themes/default/tml/admin.html:70 msgid "User" msgstr "çšæ·" -#: module/webui/themes/default/tml/admin.html:75 +#: pyload/webui/themes/default/tml/admin.html:75 msgid "Current password" msgstr "åœåå¯ç " -#: module/webui/themes/default/tml/admin.html:80 +#: pyload/webui/themes/default/tml/admin.html:80 msgid "New password" msgstr "æ°å¯ç " -#: module/webui/themes/default/tml/admin.html:81 +#: pyload/webui/themes/default/tml/admin.html:81 msgid "The new password." msgstr "æ°çå¯ç ." -#: module/webui/themes/default/tml/admin.html:85 +#: pyload/webui/themes/default/tml/admin.html:85 msgid "New password (repeat)" msgstr "æ°å¯ç (éå€)" -#: module/webui/themes/default/tml/admin.html:86 +#: pyload/webui/themes/default/tml/admin.html:86 msgid "Please repeat the new password." msgstr "请确讀æšçæ°å¯ç ." -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "ç¡éå¶" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" diff --git a/locale/zh/LC_MESSAGES/pyLoad.po b/locale/zh/LC_MESSAGES/pyLoad.po index 19a8a1487..c8d759aab 100644 --- a/locale/zh/LC_MESSAGES/pyLoad.po +++ b/locale/zh/LC_MESSAGES/pyLoad.po @@ -12,854 +12,854 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/Core.py:182 +#: pyload/Core.py:182 msgid "Received Quit signal" msgstr "æ¶å°éåºèšè" -#: module/Core.py:303 +#: pyload/Core.py:303 #, python-format msgid "pyLoad already running with pid %s" msgstr "pyLoadå·²ç¶åšå·è¡ïŒpid %s" -#: module/Core.py:317 +#: pyload/Core.py:317 #, python-format msgid "Failed changing group: %s" msgstr "ç¡æ³æ¹è®çŸ€çµïŒ %s" -#: module/Core.py:327 +#: pyload/Core.py:327 #, python-format msgid "Failed changing user: %s" msgstr "ç¡æ³æ¹è®äœ¿çšè
ïŒ %s" -#: module/Core.py:329 +#: pyload/Core.py:329 msgid "folder for logs" msgstr "LOGæä»¶å€¹" -#: module/Core.py:340 +#: pyload/Core.py:340 msgid "Starting" msgstr "éå§" -#: module/Core.py:341 +#: pyload/Core.py:341 #, python-format msgid "Using home directory: %s" msgstr "䜿çšå®¶ç®éïŒ %s" -#: module/Core.py:350 +#: pyload/Core.py:350 msgid "pycrypto to decode container files" msgstr "䜿çšpycryptoè§£å¯æä»¶" -#: module/Core.py:353 +#: pyload/Core.py:353 msgid "folder for temporary files" msgstr "äžŽæ¶æä»¶å€¹" -#: module/Core.py:358 +#: pyload/Core.py:358 msgid "folder for downloads" msgstr "äžèœœæä»¶å€¹" -#: module/Core.py:361 +#: pyload/Core.py:361 msgid "OpenSSL for secure connection" msgstr "䜿çšOpenSSLå®å
šç»é" -#: module/Core.py:365 +#: pyload/Core.py:365 msgid "Moving old user config to DB" msgstr "å°æ§çšæ·è®Ÿå®ç§»å
¥æ°æ®åº" -#: module/Core.py:368 +#: pyload/Core.py:368 msgid "Please check your logindata with ./pyload.py -u" msgstr "请æ§è¡./pyload.py -u æ¥ç¡®è®€äœ çlogindata" -#: module/Core.py:371 +#: pyload/Core.py:371 msgid "All links removed" msgstr "åªé€ææé£çµ" -#: module/Core.py:402 +#: pyload/Core.py:402 #, python-format msgid "Downloadtime: %s" msgstr "äžèœœæ¶éŽïŒ%s" -#: module/Core.py:412 +#: pyload/Core.py:412 #, python-format msgid "Free space: %s" msgstr "å©é€ç©ºéïŒ %s" -#: module/Core.py:432 +#: pyload/Core.py:432 msgid "Activating Accounts..." msgstr "åååž³æ¶..." -#: module/Core.py:438 +#: pyload/Core.py:438 msgid "Activating Plugins..." msgstr "æ¿æŽ»æä»¶äž..." -#: module/Core.py:441 +#: pyload/Core.py:441 msgid "pyLoad is up and running" msgstr "pyLoadå·²æ¯ææ°ççæ
" -#: module/Core.py:460 +#: pyload/Core.py:460 msgid "restarting pyLoad" msgstr "éæ°ååpyLoad" -#: module/Core.py:464 +#: pyload/Core.py:464 msgid "pyLoad quits" msgstr "é¢épyLoad" -#: module/Core.py:521 +#: pyload/Core.py:521 #, python-format msgid "Install %s" msgstr "å®è£
%s" -#: module/Core.py:557 +#: pyload/Core.py:557 #, python-format msgid "could not find %(desc)s: %(name)s" msgstr "æ æ³æŸå°%(desc)s: %(name)s" -#: module/Core.py:559 +#: pyload/Core.py:559 #, python-format msgid "could not create %(desc)s: %(name)s" msgstr "æ æ³å建%(desc)s: %(name)s" -#: module/Core.py:580 +#: pyload/Core.py:580 msgid "shutting down..." msgstr "éé..." -#: module/Core.py:597 +#: pyload/Core.py:597 msgid "error while shutting down" msgstr "ééæåºçŸé¯èª€" -#: module/Core.py:661 +#: pyload/Core.py:661 msgid "killed pyLoad from Terminal" msgstr "" -#: module/database/DatabaseBackend.py:174 +#: pyload/database/DatabaseBackend.py:174 msgid "Filedatabase was deleted due to incompatible version." msgstr "" -#: module/database/DatabaseBackend.py:189 +#: pyload/database/DatabaseBackend.py:189 msgid "Filedatabase could NOT be converted." msgstr "" -#: module/database/DatabaseBackend.py:198 +#: pyload/database/DatabaseBackend.py:198 msgid "Database was converted from v2 to v3." msgstr "" -#: module/database/DatabaseBackend.py:206 +#: pyload/database/DatabaseBackend.py:206 msgid "Database was converted from v3 to v4." msgstr "" -#: module/database/DatabaseBackend.py:252 +#: pyload/database/DatabaseBackend.py:252 msgid "Converting old Django DB" msgstr "" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "finished" msgstr "已宿" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "offline" msgstr "é¢ç·" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "online" msgstr "ç·äž" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "queued" msgstr "äœå" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "skipped" msgstr "è·³é" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "waiting" msgstr "çåŸ
äž" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "temp. offline" msgstr "æ«æé¢ç·" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "starting" msgstr "éå§" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "failed" msgstr "倱æ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "aborted" msgstr "äžæ¢" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "decrypting" msgstr "è§£æ" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "custom" msgstr "èªèš" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "downloading" msgstr "äžèŒäž" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "processing" msgstr "èçäž" -#: module/database/FileDatabase.py:45 +#: pyload/database/FileDatabase.py:45 msgid "unknown" msgstr "æªç¥" -#: module/database/FileDatabase.py:531 module/plugins/hooks/IRCInterface.py:74 -#: module/plugins/hooks/XMPPInterface.py:83 +#: pyload/database/FileDatabase.py:531 pyload/plugins/hooks/IRCInterface.py:74 +#: pyload/plugins/hooks/XMPPInterface.py:83 #, python-format msgid "Package finished: %s" msgstr "å¥ä»¶å·²å®æïŒ %s" -#: module/remote/ThriftBackend.py:39 +#: pyload/remote/ThriftBackend.py:39 msgid "Using SSL ThriftBackend" msgstr "" -#: module/remote/RemoteManager.py:35 +#: pyload/remote/RemoteManager.py:35 #, python-format msgid "Remote backend error: %s" msgstr "é 端é¯èª€ïŒ %s" -#: module/remote/RemoteManager.py:82 +#: pyload/remote/RemoteManager.py:82 #, python-format msgid "Starting %(name)s: %(addr)s:%(port)s" msgstr "%(name)s ïŒ%(addr)s:%(port)s ååäž" -#: module/remote/RemoteManager.py:84 +#: pyload/remote/RemoteManager.py:84 #, python-format msgid "Failed loading backend %(name)s | %(error)s" msgstr "ç¡æ³èŒå
¥ %(name)sïŒ %(error)s" -#: module/webui/app/json.py:57 +#: pyload/webui/app/json.py:57 #, python-format msgid "waiting %s" msgstr "" -#: module/threads/ServerThread.py:35 +#: pyload/threads/ServerThread.py:35 msgid "SSL certificates not found." msgstr "æ²ææŸå°SSLæè" -#: module/threads/ServerThread.py:39 +#: pyload/threads/ServerThread.py:39 #, python-format msgid "Sorry, we dropped support for starting %s directly within pyLoad" msgstr "" -#: module/threads/ServerThread.py:40 +#: pyload/threads/ServerThread.py:40 msgid "You can use the threaded server which offers good performance and ssl," msgstr "" -#: module/threads/ServerThread.py:41 +#: pyload/threads/ServerThread.py:41 #, python-format msgid "of course you can still use your existing %s with pyLoads fastcgi server" msgstr "" -#: module/threads/ServerThread.py:42 -msgid "sample configs are located in the module/webui/servers directory" +#: pyload/threads/ServerThread.py:42 +msgid "sample configs are located in the pyload/webui/servers directory" msgstr "" -#: module/threads/ServerThread.py:49 +#: pyload/threads/ServerThread.py:49 #, python-format msgid "Can't use %(server)s, python-flup is not installed!" msgstr "" -#: module/threads/ServerThread.py:56 +#: pyload/threads/ServerThread.py:56 #, python-format msgid "Error importing lightweight server: %s" msgstr "" -#: module/threads/ServerThread.py:57 +#: pyload/threads/ServerThread.py:57 msgid "You need to download and compile bjoern, https://github.com/jonashaag/bjoern" msgstr "" -#: module/threads/ServerThread.py:58 -msgid "Copy the boern.so to module/lib folder or use setup.py install" +#: pyload/threads/ServerThread.py:58 +msgid "Copy the boern.so to pyload/lib folder or use setup.py install" msgstr "" -#: module/threads/ServerThread.py:59 +#: pyload/threads/ServerThread.py:59 msgid "Of course you need to be familiar with linux and know how to compile software" msgstr "" -#: module/threads/ServerThread.py:63 +#: pyload/threads/ServerThread.py:63 msgid "Server set to threaded, due to known performance problems on windows." msgstr "" -#: module/threads/ServerThread.py:80 module/threads/ServerThread.py:103 +#: pyload/threads/ServerThread.py:80 pyload/threads/ServerThread.py:103 msgid "This server offers no SSL, please consider using threaded instead" msgstr "ç®åçæååšäžæ¯æŽSSLïŒè«å°äŒºæåšæš¡åŒæ¹çºThreaded" -#: module/threads/ServerThread.py:82 +#: pyload/threads/ServerThread.py:82 #, python-format msgid "Starting builtin webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:87 +#: pyload/threads/ServerThread.py:87 #, python-format msgid "Starting threaded SSL webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:91 +#: pyload/threads/ServerThread.py:91 #, python-format msgid "Starting threaded webserver: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:97 +#: pyload/threads/ServerThread.py:97 #, python-format msgid "Starting fastcgi server: %(host)s:%(port)d" msgstr "" -#: module/threads/ServerThread.py:105 +#: pyload/threads/ServerThread.py:105 #, python-format msgid "Starting lightweight webserver (bjoern): %(host)s:%(port)d" msgstr "" -#: module/webui/app/pyload.py:125 +#: pyload/webui/app/pyload.py:125 msgid "You dont have permission to access this page." msgstr "" -#: module/webui/app/pyload.py:193 +#: pyload/webui/app/pyload.py:193 msgid "Download directory not found." msgstr "" -#: module/webui/app/pyload.py:260 module/webui/app/pyload.py:267 +#: pyload/webui/app/pyload.py:260 pyload/webui/app/pyload.py:267 msgid "unlimited" msgstr "ç¡éå¶" -#: module/webui/app/pyload.py:262 module/webui/app/pyload.py:269 +#: pyload/webui/app/pyload.py:262 pyload/webui/app/pyload.py:269 msgid "not available" msgstr "" -#: module/webui/app/pyload.py:508 +#: pyload/webui/app/pyload.py:508 msgid "Run pyload.py -s to access the setup." msgstr "" -#: module/network/HTTPDownload.py:245 +#: pyload/network/HTTPDownload.py:245 #, python-format msgid "Download chunks failed, fallback to single connection | %s" msgstr "ååäžèŒå€±æïŒæ¡çšå®äžé£æ¥äžèŒïœ%s" -#: module/threads/PluginThread.py:183 +#: pyload/threads/PluginThread.py:183 #, python-format msgid "Download starts: %s" msgstr "éå§äžèŒ %s" -#: module/threads/PluginThread.py:189 +#: pyload/threads/PluginThread.py:189 #, python-format msgid "Download finished: %s" msgstr "%s äžèŒå®æ" -#: module/threads/PluginThread.py:194 module/threads/PluginThread.py:365 +#: pyload/threads/PluginThread.py:194 pyload/threads/PluginThread.py:365 #, python-format msgid "Plugin %s is missing a function." msgstr "%s æš¡çµçŒºå°çžéåèœ" -#: module/threads/PluginThread.py:202 module/threads/PluginThread.py:265 -#: module/threads/PluginThread.py:382 +#: pyload/threads/PluginThread.py:202 pyload/threads/PluginThread.py:265 +#: pyload/threads/PluginThread.py:382 #, python-format msgid "Download aborted: %s" msgstr "åæ¶äžèŒ %s" -#: module/threads/PluginThread.py:222 +#: pyload/threads/PluginThread.py:222 #, python-format msgid "Download restarted: %(name)s | %(msg)s" msgstr "éæ°äžèŒ%(name)s ïœ%(msg)s" -#: module/threads/PluginThread.py:231 module/threads/PluginThread.py:373 +#: pyload/threads/PluginThread.py:231 pyload/threads/PluginThread.py:373 #, python-format msgid "Download is offline: %s" msgstr "äžèŒä»»åæ·ç·ïŒ%s" -#: module/threads/PluginThread.py:234 +#: pyload/threads/PluginThread.py:234 #, python-format msgid "Download is temporary offline: %s" msgstr "äžèŒä»»åæ«ææ·ç·ïŒ%s" -#: module/threads/PluginThread.py:237 module/threads/PluginThread.py:304 +#: pyload/threads/PluginThread.py:237 pyload/threads/PluginThread.py:304 #, python-format msgid "Download failed: %(name)s | %(msg)s" msgstr "%(name)s äžèŒå€±æïœ%(msg)s" -#: module/threads/PluginThread.py:254 +#: pyload/threads/PluginThread.py:254 msgid "Couldn't connect to host or connection reset, waiting 1 minute and retry." msgstr "ç¡æ³é£ç·è³hostïŒäžåéåŸé詊" -#: module/threads/PluginThread.py:290 +#: pyload/threads/PluginThread.py:290 #, python-format msgid "Download skipped: %(name)s due to %(plugin)s" msgstr "%(name)s åæ¶äžèŒïŒç±æŒ %(plugin)s" -#: module/threads/PluginThread.py:361 +#: pyload/threads/PluginThread.py:361 #, python-format msgid "Decrypting starts: %s" msgstr "" -#: module/threads/PluginThread.py:376 module/threads/PluginThread.py:394 +#: pyload/threads/PluginThread.py:376 pyload/threads/PluginThread.py:394 #, python-format msgid "Decrypting failed: %(name)s | %(msg)s" msgstr "" -#: module/threads/PluginThread.py:388 +#: pyload/threads/PluginThread.py:388 #, python-format msgid "Retrying %s" msgstr "" -#: module/threads/PluginThread.py:635 +#: pyload/threads/PluginThread.py:635 #, python-format msgid "Info Fetching for %(name)s failed | %(err)s" msgstr "ååŸ %(name)sçé¯èª€è³èš|%(err)s" -#: module/HookManager.py:90 module/plugins/Hook.py:102 +#: pyload/HookManager.py:90 pyload/plugins/Hook.py:102 #, python-format msgid "Error executing hooks: %s" msgstr "" -#: module/HookManager.py:140 +#: pyload/HookManager.py:140 #, python-format msgid "Failed activating %(name)s" msgstr "åçš %(name)s æçŒçé¯èª€" -#: module/HookManager.py:144 +#: pyload/HookManager.py:144 #, python-format msgid "Activated plugins: %s" msgstr "" -#: module/HookManager.py:145 +#: pyload/HookManager.py:145 #, python-format msgid "Deactivate plugins: %s" msgstr "" -#: module/ThreadManager.py:137 +#: pyload/ThreadManager.py:137 #, python-format msgid "Reconnect Failed: %s" msgstr "鿰飿¥å€±æ: %s" -#: module/ThreadManager.py:176 +#: pyload/ThreadManager.py:176 msgid "Reconnect script not found!" msgstr "鿰飿¥è
³æ¬æªæŸå° ïŒ" -#: module/ThreadManager.py:182 +#: pyload/ThreadManager.py:182 msgid "Starting reconnect" msgstr "éå§é詊" -#: module/ThreadManager.py:196 +#: pyload/ThreadManager.py:196 msgid "Failed executing reconnect script!" msgstr "å·è¡é詊è
³æ¬å€±æ" -#: module/ThreadManager.py:208 +#: pyload/ThreadManager.py:208 #, python-format msgid "Reconnected, new IP: %s" msgstr "äœ¿çšæ°IP: %s é詊" -#: module/ThreadManager.py:288 +#: pyload/ThreadManager.py:288 msgid "Not enough space left on device" msgstr "å²å空éäžè¶³" -#: module/plugins/Account.py:85 module/plugins/Account.py:91 +#: pyload/plugins/Account.py:85 pyload/plugins/Account.py:91 #, python-format msgid "Could not login with account %(user)s | %(msg)s" msgstr "ç¡æ³ç»å
¥%(user)s ïœ%(msg)s" -#: module/plugins/Account.py:86 +#: pyload/plugins/Account.py:86 msgid "Wrong Password" msgstr "å¯ç¢Œé¯èª€" -#: module/plugins/Account.py:240 +#: pyload/plugins/Account.py:240 #, python-format msgid "Your Time %s has wrong format, use: 1:22-3:44" msgstr "" -#: module/plugins/Account.py:266 +#: pyload/plugins/Account.py:266 #, python-format msgid "Account %s has not enough traffic, checking again in 30min" msgstr "åž³æ¶ %s æµéçšé¿ïŒ30åéåŸéæ°æª¢æ¥" -#: module/plugins/Account.py:273 +#: pyload/plugins/Account.py:273 #, python-format msgid "Account %s is expired, checking again in 1h" msgstr "åž³æ¶ %s å·²éæïŒäžå°æåŸé詊" -#: module/plugins/crypter/SerienjunkiesOrg.py:128 +#: pyload/plugins/crypter/SerienjunkiesOrg.py:128 msgid "Downloadlimit reached" msgstr "å·²éå°äžèŒæµéäžé" -#: module/plugins/PluginManager.py:153 +#: pyload/plugins/PluginManager.py:153 #, python-format msgid "%s has a invalid pattern." msgstr "" -#: module/plugins/PluginManager.py:272 +#: pyload/plugins/PluginManager.py:272 #, python-format msgid "Error importing %(name)s: %(msg)s" msgstr "çŒçŸé¯èª€ %(name)s: %(msg)s" -#: module/plugins/internal/MultiHoster.py:133 +#: pyload/plugins/internal/MultiHoster.py:133 msgid "No Hoster loaded" msgstr "æŸäžå°ä»»äœHoster" -#: module/plugins/accounts/BitshareCom.py:37 +#: pyload/plugins/accounts/BitshareCom.py:37 msgid "Activate direct Download in your Bitshare Account" msgstr "åŸæšçBitshareåž³èäžçŽæ¥äžèŒ" -#: module/plugins/container/LinkList.py:65 +#: pyload/plugins/container/LinkList.py:65 msgid "LinkList could not be cleared." msgstr "" -#: module/plugins/AccountManager.py:88 +#: pyload/plugins/AccountManager.py:88 msgid "Account settings deleted, due to new config format." msgstr "" -#: module/plugins/hoster/BasePlugin.py:65 +#: pyload/plugins/hoster/BasePlugin.py:65 msgid "Authorization required (username:password)" msgstr "éèŠèªèïŒåž³èïŒå¯ç¢ŒïŒ" -#: module/plugins/hoster/SimplydebridCom.py:25 -#: module/plugins/hoster/RealdebridCom.py:41 -#: module/plugins/hoster/FreeWayMe.py:38 module/plugins/hoster/ZeveraCom.py:22 -#: module/plugins/hoster/UnrestrictLi.py:53 -#: module/plugins/hoster/Premium4Me.py:28 module/plugins/hoster/FastixRu.py:36 -#: module/plugins/hoster/AlldebridCom.py:38 -#: module/plugins/hoster/DebridItaliaCom.py:40 -#: module/plugins/hoster/RPNetBiz.py:26 -#: module/plugins/hoster/MultiDebridCom.py:41 -#: module/plugins/hoster/ReloadCc.py:24 module/plugins/hoster/RehostTo.py:26 -#: module/plugins/hoster/PremiumizeMe.py:22 -#: module/plugins/hooks/RPNetBiz.py:43 +#: pyload/plugins/hoster/SimplydebridCom.py:25 +#: pyload/plugins/hoster/RealdebridCom.py:41 +#: pyload/plugins/hoster/FreeWayMe.py:38 pyload/plugins/hoster/ZeveraCom.py:22 +#: pyload/plugins/hoster/UnrestrictLi.py:53 +#: pyload/plugins/hoster/Premium4Me.py:28 pyload/plugins/hoster/FastixRu.py:36 +#: pyload/plugins/hoster/AlldebridCom.py:38 +#: pyload/plugins/hoster/DebridItaliaCom.py:40 +#: pyload/plugins/hoster/RPNetBiz.py:26 +#: pyload/plugins/hoster/MultiDebridCom.py:41 +#: pyload/plugins/hoster/ReloadCc.py:24 pyload/plugins/hoster/RehostTo.py:26 +#: pyload/plugins/hoster/PremiumizeMe.py:22 +#: pyload/plugins/hooks/RPNetBiz.py:43 #, python-format msgid "Please enter your %s account or deactivate this plugin" msgstr "è«èŒžå
¥äœ çåž³æ¶ææ¯åçšæ€æš¡çµ" -#: module/plugins/hoster/FilesMailRu.py:99 +#: pyload/plugins/hoster/FilesMailRu.py:99 #, python-format msgid "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." msgstr "äžèŒæªæ¡äžå
å«HTMLèªæ³ïŒè§£æé¯èª€åïŒæºåé詊" -#: module/plugins/hoster/NetloadIn.py:146 -#: module/plugins/hoster/NetloadIn.py:170 +#: pyload/plugins/hoster/NetloadIn.py:146 +#: pyload/plugins/hoster/NetloadIn.py:170 msgid "File temporarily not available" msgstr "æªæ¡æ«æç¡æ³äžèŒ" -#: module/plugins/hoster/NetloadIn.py:183 +#: pyload/plugins/hoster/NetloadIn.py:183 #, python-format msgid "Netload: waiting between downloads %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:214 +#: pyload/plugins/hoster/NetloadIn.py:214 #, python-format msgid "Netload: waiting for captcha %d s." msgstr "" -#: module/plugins/hoster/NetloadIn.py:252 +#: pyload/plugins/hoster/NetloadIn.py:252 msgid "Downloaded File was empty" msgstr "äžèŒçæªæ¡æ¯ç©ºç" -#: module/plugins/hoster/UploadedTo.py:129 +#: pyload/plugins/hoster/UploadedTo.py:129 msgid "API key invalid" msgstr "APIéé°ç¡æ" -#: module/plugins/hoster/UploadedTo.py:153 +#: pyload/plugins/hoster/UploadedTo.py:153 #, python-format msgid "%s: Not enough traffic left" msgstr "%s: æµéå·²çšå®" -#: module/plugins/hoster/UploadedTo.py:156 +#: pyload/plugins/hoster/UploadedTo.py:156 msgid "Traffic exceeded" msgstr "è¶
åºæµééå¶" -#: module/plugins/hoster/RapidshareCom.py:100 +#: pyload/plugins/hoster/RapidshareCom.py:100 msgid "Rapidshare: Traffic Share (direct download)" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:127 -#: module/plugins/hoster/RapidshareCom.py:194 +#: pyload/plugins/hoster/RapidshareCom.py:127 +#: pyload/plugins/hoster/RapidshareCom.py:194 msgid "Already downloading from this ip address, waiting 60 seconds" msgstr "æ€IPäœåå·²åšäžèŒåŠäžé
ç®ïŒè«çåŸ
å
åç§åŸé詊" -#: module/plugins/hoster/RapidshareCom.py:131 +#: pyload/plugins/hoster/RapidshareCom.py:131 msgid "Invalid Auth Code, download will be restarted" msgstr "é©è倱æïŒä»»åå³å°é詊" -#: module/plugins/hoster/RapidshareCom.py:199 +#: pyload/plugins/hoster/RapidshareCom.py:199 msgid "RapidShareCom: No free slots" msgstr "" -#: module/plugins/hoster/RapidshareCom.py:202 +#: pyload/plugins/hoster/RapidshareCom.py:202 msgid "You need a premium account for this file" msgstr "æ€æªæ¡éèŠé«çŽçšæ¶æèœäžèŒ" -#: module/plugins/hoster/RapidshareCom.py:204 +#: pyload/plugins/hoster/RapidshareCom.py:204 msgid "Filename reported invalid" msgstr "äžæ£ç¢ºçæªå" -#: module/plugins/hoster/FileserveCom.py:99 +#: pyload/plugins/hoster/FileserveCom.py:99 msgid "Parallel download error, now waiting 60s." msgstr "åæäžèŒé¯èª€ïŒ60ç§åŸé詊" -#: module/plugins/hoster/FileserveCom.py:215 +#: pyload/plugins/hoster/FileserveCom.py:215 msgid "Not logged in." msgstr "æªç»å
¥" -#: module/plugins/hoster/MegaNz.py:56 +#: pyload/plugins/hoster/MegaNz.py:56 msgid "Decryption failed" msgstr "è§£æå€±æ" -#: module/plugins/hoster/MegaNz.py:106 +#: pyload/plugins/hoster/MegaNz.py:106 msgid "No file key provided in the URL" msgstr "URLæªæäŸéé°" -#: module/plugins/hoster/MegaNz.py:118 +#: pyload/plugins/hoster/MegaNz.py:118 msgid "Error code:" msgstr "é¯èª€ç¢ŒïŒ" -#: module/plugins/Container.py:68 +#: pyload/plugins/Container.py:68 msgid "File not exists." msgstr "" -#: module/plugins/hooks/UpdateManager.py:74 +#: pyload/plugins/hooks/UpdateManager.py:74 msgid "*** Plugins have been updated, please restart pyLoad ***" msgstr "ïŒïŒïŒå€æå·²æŽæ°ïŒè«éæ°ååpyLoadïŒïŒïŒ" -#: module/plugins/hooks/UpdateManager.py:76 +#: pyload/plugins/hooks/UpdateManager.py:76 msgid "Plugins updated and reloaded" msgstr "å€æå·²æŽæ°" -#: module/plugins/hooks/UpdateManager.py:79 +#: pyload/plugins/hooks/UpdateManager.py:79 msgid "No plugin updates available" msgstr "å€ææ²æå¯çšçæŽæ°" -#: module/plugins/hooks/UpdateManager.py:96 +#: pyload/plugins/hooks/UpdateManager.py:96 msgid "No Updates for pyLoad" msgstr "pyLoadæ²æå¯çšçæŽæ°" -#: module/plugins/hooks/UpdateManager.py:100 +#: pyload/plugins/hooks/UpdateManager.py:100 #, python-format msgid "*** New pyLoad Version %s available ***" msgstr "ïŒïŒïŒpyLoadææ°çæ¬%så¯äœ¿çšïŒïŒïŒ" -#: module/plugins/hooks/UpdateManager.py:101 +#: pyload/plugins/hooks/UpdateManager.py:101 msgid "*** Get it here: http://pyload.org/download ***" msgstr "*** è«åŸæ€äžèŒ http://pyload.org/download ***" -#: module/plugins/hooks/UpdateManager.py:104 +#: pyload/plugins/hooks/UpdateManager.py:104 msgid "Not able to connect server for updates" msgstr "ç¡æ³é£ç·è³æŽæ°äŒºæåš" -#: module/plugins/hooks/UpdateManager.py:148 +#: pyload/plugins/hooks/UpdateManager.py:148 #, python-format msgid "New version of %(type)s|%(name)s : %(version).2f" msgstr "æ°çæ¬ %(type)s|%(name)s : %(version).2f" -#: module/plugins/hooks/UpdateManager.py:157 -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:157 +#: pyload/plugins/hooks/UpdateManager.py:162 #, python-format msgid "Error when updating %s" msgstr "æŽæ° %s æçŒçé¯èª€" -#: module/plugins/hooks/UpdateManager.py:162 +#: pyload/plugins/hooks/UpdateManager.py:162 msgid "Version mismatch" msgstr "çæ¬äžå" -#: module/plugins/hooks/IRCInterface.py:82 +#: pyload/plugins/hooks/IRCInterface.py:82 #, python-format msgid "Download finished: %(name)s @ %(plugin)s " msgstr "%(name)s @ %(plugin)s 已宿" -#: module/plugins/hooks/IRCInterface.py:95 +#: pyload/plugins/hooks/IRCInterface.py:95 #, python-format msgid "New Captcha Request: %s" msgstr "é©èç¢Œè«æ±: %s" -#: module/plugins/hooks/IRCInterface.py:96 +#: pyload/plugins/hooks/IRCInterface.py:96 #, python-format msgid "Answer with 'c %s text on the captcha'" msgstr "è«èŒžå
¥é©è碌äžçæå %s" -#: module/plugins/hooks/Premium4Me.py:29 +#: pyload/plugins/hooks/Premium4Me.py:29 msgid "Please add your premium.to account first and restart pyLoad" msgstr "è«å
æ·»å premium.toåž³æ¶äžŠéæ°ååpyLoad" -#: module/plugins/hooks/HotFolder.py:82 +#: pyload/plugins/hooks/HotFolder.py:82 #, python-format msgid "Added %s from HotFolder" msgstr "åŸHotFolderå¢å %s" -#: module/plugins/hooks/ExtractArchive.py:95 +#: pyload/plugins/hooks/ExtractArchive.py:95 #, python-format msgid "No %s installed" msgstr "æªå®è£ %s" -#: module/plugins/hooks/ExtractArchive.py:97 -#: module/plugins/hooks/ExtractArchive.py:102 +#: pyload/plugins/hooks/ExtractArchive.py:97 +#: pyload/plugins/hooks/ExtractArchive.py:102 #, python-format msgid "Could not activate %s" msgstr "ç¡æ³åçš %s" -#: module/plugins/hooks/ExtractArchive.py:107 +#: pyload/plugins/hooks/ExtractArchive.py:107 msgid "Activated" msgstr "å·²åçš" -#: module/plugins/hooks/ExtractArchive.py:109 +#: pyload/plugins/hooks/ExtractArchive.py:109 msgid "No Extract plugins activated" msgstr "è§£å£çž®å€ææªåçš" -#: module/plugins/hooks/ExtractArchive.py:121 +#: pyload/plugins/hooks/ExtractArchive.py:121 #, python-format msgid "Package %s queued for later extracting" msgstr "ä»»å %s å·²æå
¥è§£å£äœå" -#: module/plugins/hooks/ExtractArchive.py:144 +#: pyload/plugins/hooks/ExtractArchive.py:144 #, python-format msgid "Check package %s" msgstr "檢æ¥äžèŒä»»å %s" -#: module/plugins/hooks/ExtractArchive.py:185 +#: pyload/plugins/hooks/ExtractArchive.py:185 #, python-format msgid "Extract to %s" msgstr "è§£å£çž®è³ %s" -#: module/plugins/hooks/ExtractArchive.py:200 +#: pyload/plugins/hooks/ExtractArchive.py:200 msgid "No files found to extract" msgstr "ç¡æ³æŸå°å£çž®æª" -#: module/plugins/hooks/ExtractArchive.py:207 +#: pyload/plugins/hooks/ExtractArchive.py:207 msgid "extracting" msgstr "è§£å£çž®äž" -#: module/plugins/hooks/ExtractArchive.py:218 +#: pyload/plugins/hooks/ExtractArchive.py:218 msgid "Password protected" msgstr "被å å¯çå£çž®æª" -#: module/plugins/hooks/ExtractArchive.py:239 +#: pyload/plugins/hooks/ExtractArchive.py:239 msgid "Wrong password" msgstr "å¯ç¢Œé¯èª€" -#: module/plugins/hooks/ExtractArchive.py:247 +#: pyload/plugins/hooks/ExtractArchive.py:247 #, python-format msgid "Deleting %s files" msgstr "åªé€æªæ¡ %s" -#: module/plugins/hooks/ExtractArchive.py:254 +#: pyload/plugins/hooks/ExtractArchive.py:254 msgid "Extracting finished" msgstr "è§£å£çž®å®æ" -#: module/plugins/hooks/ExtractArchive.py:260 +#: pyload/plugins/hooks/ExtractArchive.py:260 msgid "Archive Error" msgstr "å£çž®æªææ¯" -#: module/plugins/hooks/ExtractArchive.py:262 +#: pyload/plugins/hooks/ExtractArchive.py:262 msgid "CRC Mismatch" msgstr "CRCäžæ£ç¢º" -#: module/plugins/hooks/ExtractArchive.py:266 +#: pyload/plugins/hooks/ExtractArchive.py:266 msgid "Unknown Error" msgstr "æªç¥é¯èª€" -#: module/plugins/hooks/ExtractArchive.py:318 +#: pyload/plugins/hooks/ExtractArchive.py:318 msgid "Setting User and Group failed" msgstr "èšå®äœ¿çšè
å矀çµå€±æ" -#: module/plugins/hooks/ClickAndLoad.py:75 +#: pyload/plugins/hooks/ClickAndLoad.py:75 msgid "Click'N'Load: Port 9666 already in use" msgstr "Click'N'Load: 9666é已被䜿çš" -#: module/plugins/hooks/CaptchaTrader.py:69 -#: module/plugins/hooks/Captcha9kw.py:59 -#: module/plugins/hooks/ExpertDecoders.py:50 +#: pyload/plugins/hooks/CaptchaTrader.py:69 +#: pyload/plugins/hooks/Captcha9kw.py:59 +#: pyload/plugins/hooks/ExpertDecoders.py:50 #, python-format msgid "%s credits left" msgstr "é¡åºŠå©é€ %s" -#: module/plugins/hooks/CaptchaTrader.py:117 +#: pyload/plugins/hooks/CaptchaTrader.py:117 msgid "Could not send response." msgstr "ç¡æ³çŒéåæã" -#: module/plugins/hooks/CaptchaTrader.py:135 +#: pyload/plugins/hooks/CaptchaTrader.py:135 msgid "Your CaptchaTrader Account has not enough credits" msgstr "CaptchaTraderåž³æ¶é¡åºŠäžè¶³" -#: module/plugins/hooks/LinkdecrypterCom.py:43 +#: pyload/plugins/hooks/LinkdecrypterCom.py:43 msgid "Crypter list not found" msgstr "æªæŸå°Crypteræž
å®" -#: module/plugins/hooks/LinkdecrypterCom.py:57 +#: pyload/plugins/hooks/LinkdecrypterCom.py:57 msgid "Crypter list is empty" msgstr "Crypteræž
宿¯ç©ºç" -#: module/plugins/hooks/XMPPInterface.py:91 +#: pyload/plugins/hooks/XMPPInterface.py:91 #, python-format msgid "Download finished: %(name)s @ %(plugin)s" msgstr "%(name)s @ %(plugin)s 宿" -#: module/plugins/hooks/Captcha9kw.py:93 +#: pyload/plugins/hooks/Captcha9kw.py:93 #, python-format msgid "New CaptchaID from upload: %s : %s" msgstr "äžå³æ°çCaptchaIDïŒ%s:%s" -#: module/plugins/hooks/Captcha9kw.py:129 +#: pyload/plugins/hooks/Captcha9kw.py:129 msgid "Your Captcha 9kw.eu Account has not enough credits" msgstr "9kw.euåž³æ¶é¡åºŠäžè¶³" -#: module/plugins/hooks/ExternalScripts.py:54 +#: pyload/plugins/hooks/ExternalScripts.py:54 #, python-format msgid "Installed scripts for %s: " msgstr "%s å·²å®è£çè
³æ¬" -#: module/plugins/hooks/ExternalScripts.py:69 +#: pyload/plugins/hooks/ExternalScripts.py:69 msgid "Script not executable:" msgstr "ç¡æ³å·è¡è
³æ¬" -#: module/plugins/hooks/ExternalScripts.py:80 +#: pyload/plugins/hooks/ExternalScripts.py:80 #, python-format msgid "Error in %(script)s: %(error)s" msgstr "%(script)sïŒ %(error)s" -#: module/plugins/hooks/ExpertDecoders.py:95 +#: pyload/plugins/hooks/ExpertDecoders.py:95 msgid "Your ExpertDecoders Account has not enough credits" msgstr "ExpertDecodersåž³æ¶é¡åºŠäžè¶³" -#: module/plugins/hooks/RehostTo.py:32 +#: pyload/plugins/hooks/RehostTo.py:32 msgid "Please add your rehost.to account first and restart pyLoad" msgstr "è«å
æ·»å rehost.toåž³æ¶äžŠéæ°ååpyLoad" -#: module/plugins/hooks/PremiumizeMe.py:48 +#: pyload/plugins/hooks/PremiumizeMe.py:48 msgid "Please add a valid premiumize.me account first and restart pyLoad." msgstr "è«å
èšå®premiumize.meåž³æ¶äžŠéæ°ååpyLoad" -#: module/plugins/hooks/CaptchaBrotherhood.py:69 +#: pyload/plugins/hooks/CaptchaBrotherhood.py:69 #, python-format msgid "%d credits left" msgstr "é¡åºŠå©äž %d" -#: module/plugins/Plugin.py:389 +#: pyload/plugins/Plugin.py:389 msgid "Pil and tesseract not installed and no Client connected for captcha decrypting" msgstr "å°æªå®è£PilåtesseractïŒå°æªé£æ¥è³éèŠè§£æç客æ¶ç«¯" -#: module/plugins/Plugin.py:393 +#: pyload/plugins/Plugin.py:393 msgid "No captcha result obtained in appropiate time by any of the plugins." msgstr "" -#: module/plugins/Plugin.py:498 module/plugins/Plugin.py:532 +#: pyload/plugins/Plugin.py:498 pyload/plugins/Plugin.py:532 #, python-format msgid "Setting User and Group failed: %s" msgstr "èšçœ®äœ¿çšè
åçµå€±æïŒ %s" -#: module/CaptchaManager.py:78 +#: pyload/CaptchaManager.py:78 msgid "No Client connected for captcha decrypting" msgstr "" -#: module/Api.py:330 +#: pyload/Api.py:330 #, python-format msgid "Added package %(name)s containing %(count)d links" msgstr "" -#: module/Api.py:593 +#: pyload/Api.py:593 #, python-format msgid "Added %(count)d links to package #%(package)d " msgstr "" -#: module/common/JsEngine.py:156 +#: pyload/common/JsEngine.py:156 msgid "No js engine detected, please install either Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" diff --git a/locale/zh/LC_MESSAGES/pyLoadCli.po b/locale/zh/LC_MESSAGES/pyLoadCli.po index 47d8acb01..fd5ebd330 100644 --- a/locale/zh/LC_MESSAGES/pyLoadCli.po +++ b/locale/zh/LC_MESSAGES/pyLoadCli.po @@ -12,284 +12,284 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/cli/Cli.py:75 module/cli/Cli.py:133 +#: pyload/cli/Cli.py:75 pyload/cli/Cli.py:133 msgid " Command Line Interface" msgstr "åœä»€åä»é¢" -#: module/cli/Cli.py:165 +#: pyload/cli/Cli.py:165 #, python-format msgid "%s Downloads:" msgstr "å·²äžèŒ %s:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Speed: " msgstr "é床:" -#: module/cli/Cli.py:177 +#: pyload/cli/Cli.py:177 msgid " Size: " msgstr "倧å°:" -#: module/cli/Cli.py:178 +#: pyload/cli/Cli.py:178 msgid " Finished in: " msgstr "è·é¢å®æ:" -#: module/cli/Cli.py:179 +#: pyload/cli/Cli.py:179 msgid " ID: " msgstr "ç·šè:" -#: module/cli/Cli.py:184 +#: pyload/cli/Cli.py:184 msgid "waiting: " msgstr "çåŸ
äž:" -#: module/cli/Cli.py:191 module/cli/Cli.py:193 +#: pyload/cli/Cli.py:191 pyload/cli/Cli.py:193 msgid "Status:" msgstr "çæ
:" -#: module/cli/Cli.py:191 +#: pyload/cli/Cli.py:191 msgid "paused" msgstr "å·²æ«å" -#: module/cli/Cli.py:193 +#: pyload/cli/Cli.py:193 msgid "running" msgstr "å·è¡äž" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "total Speed" msgstr "çžœé床" -#: module/cli/Cli.py:196 +#: pyload/cli/Cli.py:196 msgid "Files in queue" msgstr "äœåäžæªæ¡" -#: module/cli/Cli.py:197 +#: pyload/cli/Cli.py:197 msgid "Total" msgstr "çžœèš" -#: module/cli/Cli.py:203 +#: pyload/cli/Cli.py:203 msgid "Menu:" msgstr "衚å®:" -#: module/cli/Cli.py:205 +#: pyload/cli/Cli.py:205 msgid " Add Links" msgstr "å å
¥é£çµ" -#: module/cli/Cli.py:206 +#: pyload/cli/Cli.py:206 msgid " Manage Queue" msgstr "äœå管ç" -#: module/cli/Cli.py:207 +#: pyload/cli/Cli.py:207 msgid " Manage Collector" msgstr "æ¶éåšç®¡ç" -#: module/cli/Cli.py:208 +#: pyload/cli/Cli.py:208 msgid " (Un)Pause Server" msgstr "æ«å/åå 䌺æåš" -#: module/cli/Cli.py:209 +#: pyload/cli/Cli.py:209 msgid " Kill Server" msgstr "çµæ¢äŒºæåš" -#: module/cli/Cli.py:210 +#: pyload/cli/Cli.py:210 msgid " Quit" msgstr "é¢é" -#: module/cli/Cli.py:289 module/cli/Cli.py:296 +#: pyload/cli/Cli.py:289 pyload/cli/Cli.py:296 msgid "Please use this syntax: add <Package name> <link> <link2> ..." msgstr "è«äœ¿çšæ€èªæ³: add ä»»ååçš±> <é£çµ> <é£çµ2> ..." -#: module/cli/Cli.py:315 +#: pyload/cli/Cli.py:315 #, python-format msgid "Checking %d links:" msgstr "æª¢æ¥ %d é£çµ:" -#: module/cli/Cli.py:324 +#: pyload/cli/Cli.py:324 msgid "File does not exists." msgstr "æªæ¡äžååšã" -#: module/cli/Cli.py:385 +#: pyload/cli/Cli.py:385 msgid "pyLoad was terminated" msgstr "pyLoad å·²çµæ¢" -#: module/cli/Cli.py:443 +#: pyload/cli/Cli.py:443 msgid "Prints server status" msgstr "顯瀺䌺æåšçæ
" -#: module/cli/Cli.py:444 +#: pyload/cli/Cli.py:444 msgid "Prints downloads in queue" msgstr "顯瀺äœåäžäžèŒé
ç®" -#: module/cli/Cli.py:445 +#: pyload/cli/Cli.py:445 msgid "Prints downloads in collector" msgstr "顯瀺æ¶éåšäžäžèŒé
ç®" -#: module/cli/Cli.py:446 +#: pyload/cli/Cli.py:446 msgid "Adds package to queue" msgstr "æ°å¢ä»»åå°äœå" -#: module/cli/Cli.py:447 +#: pyload/cli/Cli.py:447 msgid "Adds package to collector" msgstr "æ°å¢ä»»åå°æ¶éåš" -#: module/cli/Cli.py:448 +#: pyload/cli/Cli.py:448 msgid "Delete Files from Queue/Collector" msgstr "åŸäœå/æ¶éåšäžåªé€æªæ¡" -#: module/cli/Cli.py:449 +#: pyload/cli/Cli.py:449 msgid "Delete Packages from Queue/Collector" msgstr "åŸäœå/æ¶éåšäžåªé€ä»»å" -#: module/cli/Cli.py:450 +#: pyload/cli/Cli.py:450 msgid "Move Packages from Queue to Collector or vice versa" msgstr "åšäœåææ¶éåšäžç§»åä»»å" -#: module/cli/Cli.py:451 +#: pyload/cli/Cli.py:451 msgid "Restart files" msgstr "éæ°éå§æªæ¡" -#: module/cli/Cli.py:452 +#: pyload/cli/Cli.py:452 msgid "Restart packages" msgstr "éæ°éå§ä»»å" -#: module/cli/Cli.py:453 +#: pyload/cli/Cli.py:453 msgid "Check online status, works with local container" msgstr "æ¥çç·äžçæ
ïŒå·¥äœèæ¬æ©å®¹åš" -#: module/cli/Cli.py:454 +#: pyload/cli/Cli.py:454 msgid "Checks online status of a container file" msgstr "檢æ¥å®¹åšå
§æªæ¡äžç·çæ
" -#: module/cli/Cli.py:455 +#: pyload/cli/Cli.py:455 msgid "Pause the server" msgstr "æ«å䌺æåš" -#: module/cli/Cli.py:456 +#: pyload/cli/Cli.py:456 msgid "continue downloads" msgstr "繌çºäžèŒ" -#: module/cli/Cli.py:457 +#: pyload/cli/Cli.py:457 msgid "Toggle pause/unpause" msgstr "æ«å/繌çº" -#: module/cli/Cli.py:458 +#: pyload/cli/Cli.py:458 msgid "kill server" msgstr "çµæ¢äŒºæåš" -#: module/cli/Cli.py:460 +#: pyload/cli/Cli.py:460 msgid "List of commands:" msgstr "åœä»€æž
å®ïŒ" -#: module/cli/Cli.py:473 +#: pyload/cli/Cli.py:473 msgid "Couldn't write user config file" msgstr "äžèœå¯«å
¥äœ¿çšè
èšå®æª" -#: module/cli/Cli.py:548 +#: pyload/cli/Cli.py:548 msgid "You need py-openssl to connect to this pyLoad Core." msgstr "æšéèŠå®è£
py-opensslæ¥è¿æ¥è¿äžªpyLoadæ žå¿ã" -#: module/cli/Cli.py:555 +#: pyload/cli/Cli.py:555 msgid "Address: " msgstr "äœå:" -#: module/cli/Cli.py:556 +#: pyload/cli/Cli.py:556 msgid "Port: " msgstr "飿¥å :" -#: module/cli/Cli.py:557 +#: pyload/cli/Cli.py:557 msgid "Username: " msgstr "䜿çšè
åçš±:" -#: module/cli/Cli.py:561 +#: pyload/cli/Cli.py:561 msgid "Password: " msgstr "å¯ç¢Œ:" -#: module/cli/Cli.py:566 module/cli/Cli.py:575 +#: pyload/cli/Cli.py:566 pyload/cli/Cli.py:575 msgid "Login data is wrong." msgstr "ç»å
¥è³èšé¯èª€ã" -#: module/cli/Cli.py:568 module/cli/Cli.py:577 +#: pyload/cli/Cli.py:568 pyload/cli/Cli.py:577 #, python-format msgid "Could not establish connection to %(addr)s:%(port)s." msgstr "ç¡æ³å»ºç« %(addr)s:%(port)s é£ç·ã" -#: module/cli/Cli.py:580 +#: pyload/cli/Cli.py:580 msgid "You need py-openssl to connect to this pyLoad core." msgstr "æšéèŠ py-openssl äŸé£æ¥ pyLoad æ žå¿ã" -#: module/cli/Cli.py:582 +#: pyload/cli/Cli.py:582 msgid "Interactive mode ignored since you passed some commands." msgstr "å·è¡åœä»€äžïŒå¿œç¥äºåæš¡åŒã" -#: module/cli/AddPackage.py:48 +#: pyload/cli/AddPackage.py:48 msgid "Add Package:" msgstr "æ°å¢äžèŒä»»åïŒ" -#: module/cli/AddPackage.py:53 +#: pyload/cli/AddPackage.py:53 msgid "Enter a name for the new package" msgstr "茞å
¥æ°ä»»ååçš±" -#: module/cli/AddPackage.py:57 +#: pyload/cli/AddPackage.py:57 #, python-format msgid "Package: %s" msgstr "ä»»åïŒ%s" -#: module/cli/AddPackage.py:58 +#: pyload/cli/AddPackage.py:58 msgid "Parse the links you want to add." msgstr "åæäœ æ³å å
¥çé£çµã" -#: module/cli/AddPackage.py:59 +#: pyload/cli/AddPackage.py:59 #, python-format msgid "Type %s when done." msgstr "宿åŸè«èŒžå
¥ %s" -#: module/cli/AddPackage.py:60 +#: pyload/cli/AddPackage.py:60 msgid "Links added: " msgstr "å å
¥çé£çµ:" -#: module/cli/AddPackage.py:64 module/cli/ManageFiles.py:149 +#: pyload/cli/AddPackage.py:64 pyload/cli/ManageFiles.py:149 msgid " back to main menu" msgstr "åå°äž»éžå®" -#: module/cli/ManageFiles.py:97 +#: pyload/cli/ManageFiles.py:97 msgid "Manage Packages:" msgstr "管çä»»å" -#: module/cli/ManageFiles.py:99 +#: pyload/cli/ManageFiles.py:99 msgid "Manage Links:" msgstr "管çé£çµïŒ" -#: module/cli/ManageFiles.py:104 +#: pyload/cli/ManageFiles.py:104 msgid "What do you want to move?" msgstr "äœ æ³èŠç§»å?" -#: module/cli/ManageFiles.py:106 +#: pyload/cli/ManageFiles.py:106 msgid "What do you want to delete?" msgstr "äœ æ³èŠåªé€?" -#: module/cli/ManageFiles.py:108 +#: pyload/cli/ManageFiles.py:108 msgid "What do you want to restart?" msgstr "äœ æ³èŠéå?" -#: module/cli/ManageFiles.py:113 +#: pyload/cli/ManageFiles.py:113 msgid "Choose what yout want to do or enter package number." msgstr "" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "delete" msgstr "åªé€" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "move" msgstr "ç§»å" -#: module/cli/ManageFiles.py:115 +#: pyload/cli/ManageFiles.py:115 msgid "restart" msgstr "éå" -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - previous" msgstr " - äžäžé " -#: module/cli/ManageFiles.py:148 +#: pyload/cli/ManageFiles.py:148 msgid " - next" msgstr "- äžäžé " diff --git a/locale/zh/LC_MESSAGES/setup.po b/locale/zh/LC_MESSAGES/setup.po index 323d06cea..4496c4010 100644 --- a/locale/zh/LC_MESSAGES/setup.po +++ b/locale/zh/LC_MESSAGES/setup.po @@ -12,448 +12,448 @@ msgstr "Project-Id-Version: pyload\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: crowdin.net\n" -#: module/setup.py:51 +#: pyload/setup.py:51 msgid "y" msgstr "æ¯" -#: module/setup.py:53 +#: pyload/setup.py:53 msgid "n" msgstr "åŠ" -#: module/setup.py:72 +#: pyload/setup.py:72 msgid "Welcome to the pyLoad Configuration Assistent." msgstr "æ¡è¿äœ¿çšpyLoadèšå®å©æ" -#: module/setup.py:73 +#: pyload/setup.py:73 msgid "It will check your system and make a basic setup in order to run pyLoad." msgstr "å®å°ææª¢æ¥æšçç³»çµ±äžŠå®æåºæ¬èšå®" -#: module/setup.py:75 +#: pyload/setup.py:75 msgid "The value in brackets [] always is the default value," msgstr "äžæ¬åŒ§å
§çåŒçºé èšåŒ" -#: module/setup.py:76 +#: pyload/setup.py:76 msgid "in case you don't want to change it or you are unsure what to choose, just hit enter." msgstr "åŠææšäžç¥é該åŠäœèšå®ææ¯äžéæ¹è®ïŒè«çŽæ¥æäžEnter" -#: module/setup.py:78 +#: pyload/setup.py:78 msgid "Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyload.py ." msgstr "å°æéïŒ æšä»¥åŸå¯ä»¥éépyLoadCore -s ææ¯ pyload.py --setupéæ°å·è¡èšå®å©æ" -#: module/setup.py:79 +#: pyload/setup.py:79 msgid "If you have any problems with this assistent hit STRG-C," msgstr "åŠæäœ å¯¹æ¬å©çæä»»äœçé®ïŒè¯·æSTRG-CïŒ" -#: module/setup.py:80 +#: pyload/setup.py:80 msgid "to abort and don't let him start with pyload.py automatically anymore." msgstr "äžåè®èšå®å©æèpyLoadåæåå" -#: module/setup.py:82 +#: pyload/setup.py:82 msgid "When you are ready for system check, hit enter." msgstr "æäžç¢ºå®åŸéå§æª¢æ¥ç³»çµ±çæ
" -#: module/setup.py:89 +#: pyload/setup.py:89 msgid "You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad." msgstr "äœ éèŠpycurlïŒsqlite以åpython 2.5ïŒ2.6ææ¯2.7æ¥è¿è¡pyLoadã" -#: module/setup.py:90 +#: pyload/setup.py:90 msgid "Please correct this and re-run pyLoad." msgstr "请修æ¹åéæ°è¿è¡pyLoad" -#: module/setup.py:91 +#: pyload/setup.py:91 msgid "Setup will now close." msgstr "å®è£
å富å
³éã" -#: module/setup.py:95 +#: pyload/setup.py:95 msgid "System check finished, hit enter to see your status report." msgstr "ç³»ç»æ£æ¥å®æ¯ïŒæ©äžå蜊以æ¥çç³»ç»æ¥åã" -#: module/setup.py:97 +#: pyload/setup.py:97 msgid "## Status ##" msgstr "ïŒïŒè¿çšïŒïŒ" -#: module/setup.py:101 +#: pyload/setup.py:101 msgid "container decrypting" msgstr "" -#: module/setup.py:102 +#: pyload/setup.py:102 msgid "ssl connection" msgstr "" -#: module/setup.py:103 +#: pyload/setup.py:103 msgid "automatic captcha decryption" msgstr "" -#: module/setup.py:104 +#: pyload/setup.py:104 msgid "GUI" msgstr "" -#: module/setup.py:105 +#: pyload/setup.py:105 msgid "Webinterface" msgstr "Webçé¢" -#: module/setup.py:106 +#: pyload/setup.py:106 msgid "extended Click'N'Load" msgstr "" -#: module/setup.py:113 +#: pyload/setup.py:113 msgid "Features available:" msgstr "" -#: module/setup.py:117 +#: pyload/setup.py:117 msgid "Featues missing: " msgstr "" -#: module/setup.py:121 +#: pyload/setup.py:121 msgid "no py-crypto available" msgstr "" -#: module/setup.py:122 +#: pyload/setup.py:122 msgid "You need this if you want to decrypt container files." msgstr "" -#: module/setup.py:126 +#: pyload/setup.py:126 msgid "no SSL available" msgstr "" -#: module/setup.py:127 +#: pyload/setup.py:127 msgid "This is needed if you want to establish a secure connection to core or webinterface." msgstr "" -#: module/setup.py:128 +#: pyload/setup.py:128 msgid "If you only want to access locally to pyLoad ssl is not usefull." msgstr "" -#: module/setup.py:132 +#: pyload/setup.py:132 msgid "no Captcha Recognition available" msgstr "" -#: module/setup.py:133 +#: pyload/setup.py:133 msgid "Only needed for some hosters and as freeuser." msgstr "" -#: module/setup.py:137 +#: pyload/setup.py:137 msgid "Gui not available" msgstr "" -#: module/setup.py:138 +#: pyload/setup.py:138 msgid "The Graphical User Interface." msgstr "" -#: module/setup.py:142 +#: pyload/setup.py:142 msgid "no JavaScript engine found" msgstr "" -#: module/setup.py:143 +#: pyload/setup.py:143 msgid "You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino" msgstr "" -#: module/setup.py:145 +#: pyload/setup.py:145 msgid "You can abort the setup now and fix some dependicies if you want." msgstr "" -#: module/setup.py:147 +#: pyload/setup.py:147 msgid "Continue with setup?" msgstr "æ¯åŠç¹Œçºèšå®ïŒ" -#: module/setup.py:153 +#: pyload/setup.py:153 #, python-format msgid "Do you want to change the config path? Current is %s" msgstr "ç®ååæŸèšå®æªçäœçœ®çº %sïŒæ¯åŠèŠä¿®æ¹ïŒ" -#: module/setup.py:155 +#: pyload/setup.py:155 msgid "If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it." msgstr "" -#: module/setup.py:156 +#: pyload/setup.py:156 msgid "Change config path?" msgstr "æ¹è®èšå®æè·¯åŸïŒ" -#: module/setup.py:162 +#: pyload/setup.py:162 msgid "Do you want to configure login data and basic settings?" msgstr "æ¯åŠèŠé²è¡åºæ¬èšå®ïŒ" -#: module/setup.py:163 +#: pyload/setup.py:163 msgid "This is recommend for first run." msgstr "ç¬¬äžæ¬¡äœ¿çšpyLoadæå»ºè°äœ¿çš" -#: module/setup.py:164 +#: pyload/setup.py:164 msgid "Make basic setup?" msgstr "éå§åºç€èšå®åïŒ" -#: module/setup.py:171 +#: pyload/setup.py:171 msgid "Do you want to configure ssl?" msgstr "éå§èšå®SSLåïŒ" -#: module/setup.py:172 +#: pyload/setup.py:172 msgid "Configure ssl?" msgstr "èšå®SSLïŒ" -#: module/setup.py:178 +#: pyload/setup.py:178 msgid "Do you want to configure webinterface?" msgstr "éå§èšå®ç¶²é ä»é¢ïŒ" -#: module/setup.py:179 +#: pyload/setup.py:179 msgid "Configure webinterface?" msgstr "èšå®ç¶²é ä»é¢ïŒ" -#: module/setup.py:184 +#: pyload/setup.py:184 msgid "Setup finished successfully." msgstr "èšå®å®æ" -#: module/setup.py:185 +#: pyload/setup.py:185 msgid "Hit enter to exit and restart pyLoad" msgstr "æäžEnteré¢éèšå®ä»é¢äžŠéæ°ååpyLoad" -#: module/setup.py:191 +#: pyload/setup.py:191 msgid "## System Check ##" msgstr "" -#: module/setup.py:194 +#: pyload/setup.py:194 msgid "Your python version is to new, Please use Python 2.6/2.7" msgstr "" -#: module/setup.py:197 +#: pyload/setup.py:197 msgid "Your python version is to old, Please use at least Python 2.5" msgstr "" -#: module/setup.py:200 +#: pyload/setup.py:200 msgid "Python Version: OK" msgstr "" -#: module/setup.py:247 +#: pyload/setup.py:247 #, python-format msgid "Your installed jinja2 version %s seems too old." msgstr "" -#: module/setup.py:248 +#: pyload/setup.py:248 msgid "You can safely continue but if the webinterface is not working," msgstr "" -#: module/setup.py:249 +#: pyload/setup.py:249 msgid "please upgrade or deinstall it, pyLoad includes a sufficient jinja2 libary." msgstr "" -#: module/setup.py:264 +#: pyload/setup.py:264 msgid "JS engine" msgstr "" -#: module/setup.py:270 +#: pyload/setup.py:270 msgid "## Basic Setup ##" msgstr "ïŒïŒåºæ¬èšå®ïŒïŒ" -#: module/setup.py:273 +#: pyload/setup.py:273 msgid "The following logindata is valid for CLI, GUI and webinterface." msgstr "äžåèšæ¯åšCLIãGUIåç¶²é ä»é¢çæ¯ææç" -#: module/setup.py:279 module/setup.py:370 module/setup.py:386 +#: pyload/setup.py:279 pyload/setup.py:370 pyload/setup.py:386 msgid "Username" msgstr "䜿çšè
åçš±" -#: module/setup.py:285 +#: pyload/setup.py:285 msgid "External clients (GUI, CLI or other) need remote access to work over the network." msgstr "" -#: module/setup.py:286 +#: pyload/setup.py:286 msgid "However, if you only want to use the webinterface you may disable it to save ram." msgstr "" -#: module/setup.py:287 +#: pyload/setup.py:287 msgid "Enable remote access" msgstr "" -#: module/setup.py:291 +#: pyload/setup.py:291 msgid "Language" msgstr "èªèš" -#: module/setup.py:293 +#: pyload/setup.py:293 msgid "Downloadfolder" msgstr "" -#: module/setup.py:294 +#: pyload/setup.py:294 msgid "Max parallel downloads" msgstr "忿倧äžèŒæžé" -#: module/setup.py:298 +#: pyload/setup.py:298 msgid "Use Reconnect?" msgstr "éåé詊æ©å¶ïŒ" -#: module/setup.py:301 +#: pyload/setup.py:301 msgid "Reconnect script location" msgstr "é詊è
³æ¬è·¯åŸ" -#: module/setup.py:306 +#: pyload/setup.py:306 msgid "## Webinterface Setup ##" msgstr "ïŒïŒç¶²é ä»é¢èšå®ïŒïŒ" -#: module/setup.py:309 +#: pyload/setup.py:309 msgid "Activate webinterface?" msgstr "éåç¶²é ä»é¢ïŒ" -#: module/setup.py:311 +#: pyload/setup.py:311 msgid "Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally." msgstr "ç£èœäœåïŒäœ¿çš127.0.0.1ælocalhostïŒå¯è®ç¶²é ä»é¢åªæåšæ¬å°ç«¯å¯äœ¿çš" -#: module/setup.py:312 +#: pyload/setup.py:312 msgid "Address" msgstr "IPäœå" -#: module/setup.py:313 +#: pyload/setup.py:313 msgid "Port" msgstr "å " -#: module/setup.py:315 +#: pyload/setup.py:315 msgid "pyLoad offers several server backends, now following a short explanation." msgstr "pyLoadæäŸäºå¹Ÿçš®serveræš¡åŒïŒä»¥äžäœç°¡ç說æ" -#: module/setup.py:316 +#: pyload/setup.py:316 msgid "Default server, best choice if you dont know which one to choose." msgstr "" -#: module/setup.py:317 +#: pyload/setup.py:317 msgid "This server offers SSL and is a good alternative to builtin." msgstr "" -#: module/setup.py:319 +#: pyload/setup.py:319 msgid "Can be used by apache, lighttpd, requires you to configure them, which is not too easy job." msgstr "åé©ç¶çèšå®åŸå¯ä»¥è¢«apacheãlighttpd䜿çšïŒå°æ¥æš¡åŒïŒ" -#: module/setup.py:320 +#: pyload/setup.py:320 msgid "Very fast alternative written in C, requires libev and linux knowlegde." msgstr "" -#: module/setup.py:321 +#: pyload/setup.py:321 msgid "Get it from here: https://github.com/jonashaag/bjoern, compile it" msgstr "ç±æ€äžèŒ ïŒhttps://github.com/jonashaag/bjoernïŒäžŠç·šè¯" -#: module/setup.py:322 -msgid "and copy bjoern.so to module/lib" +#: pyload/setup.py:322 +msgid "and copy bjoern.so to pyload/lib" msgstr "" -#: module/setup.py:326 +#: pyload/setup.py:326 msgid "Attention: In some rare cases the builtin server is not working, if you notice problems with the webinterface" msgstr "èŠåïŒå
§å»º(buildin)䌺æåšåšæäºæ
æ³æç¡æ³éäœ" -#: module/setup.py:327 +#: pyload/setup.py:327 msgid "come back here and change the builtin server to the threaded one here." msgstr "åŠæäœ çŒçŸç¶²é ä»é¢æä»»äœåé¡ïŒè«éæ°å·è¡èšå®å©æäžŠå°äŒºæåšæš¡åŒèšå®çºå
¶é€æš¡åŒ" -#: module/setup.py:329 +#: pyload/setup.py:329 msgid "Server" msgstr "䌺æåš" -#: module/setup.py:334 +#: pyload/setup.py:334 msgid "## SSL Setup ##" msgstr "ïŒïŒSSLèšå®ïŒïŒ" -#: module/setup.py:336 +#: pyload/setup.py:336 msgid "Execute these commands from pyLoad config folder to make ssl certificates:" msgstr "åšpyLoadèšå®æªç®éäžå·è¡äžåæä»€ä»¥ååŸSSLæè" -#: module/setup.py:342 +#: pyload/setup.py:342 msgid "If you're done and everything went fine, you can activate ssl now." msgstr "åŠæäžåé å©çŸåšå°±å¯ä»¥éåSSL" -#: module/setup.py:344 +#: pyload/setup.py:344 msgid "Activate SSL?" msgstr "åçšSSLïŒ" -#: module/setup.py:360 +#: pyload/setup.py:360 msgid "Select action" msgstr "éžæåäœ " -#: module/setup.py:361 +#: pyload/setup.py:361 msgid "1 - Create/Edit user" msgstr "1. å»ºç«æç·šèŒ¯äœ¿çšè
" -#: module/setup.py:362 +#: pyload/setup.py:362 msgid "2 - List users" msgstr "2. ååºææäœ¿çšè
" -#: module/setup.py:363 +#: pyload/setup.py:363 msgid "3 - Remove user" msgstr "3. åªé€äœ¿çšè
" -#: module/setup.py:364 +#: pyload/setup.py:364 msgid "4 - Quit" msgstr "4. é¢é" -#: module/setup.py:376 +#: pyload/setup.py:376 msgid "Users" msgstr "䜿çšè
" -#: module/setup.py:403 +#: pyload/setup.py:403 msgid "Setting new configpath, current configuration will not be transfered!" msgstr "" -#: module/setup.py:404 +#: pyload/setup.py:404 msgid "Configpath" msgstr "" -#: module/setup.py:412 +#: pyload/setup.py:412 msgid "Configpath changed, setup will now close, please restart to go on." msgstr "" -#: module/setup.py:413 +#: pyload/setup.py:413 msgid "Press Enter to exit." msgstr "æäž Enter é¢éã" -#: module/setup.py:417 +#: pyload/setup.py:417 #, python-format msgid "Setting config path failed: %s" msgstr "èšå®æªè·¯åŸæèª€ %s" -#: module/setup.py:422 +#: pyload/setup.py:422 #, python-format msgid "%s: OK" msgstr "" -#: module/setup.py:424 +#: pyload/setup.py:424 #, python-format msgid "%s: missing" msgstr "" -#: module/setup.py:464 +#: pyload/setup.py:464 msgid "Password: " msgstr "å¯ç¢Œ:" -#: module/setup.py:468 +#: pyload/setup.py:468 msgid "Password too short. Use at least 4 symbols." msgstr "å¯ç¢Œè³å°éèŠåååå
" -#: module/setup.py:471 +#: pyload/setup.py:471 msgid "Password (again): " msgstr "å茞å
¥äžæ¬¡å¯ç¢ŒïŒ" -#: module/setup.py:477 +#: pyload/setup.py:477 msgid "Passwords did not match." msgstr "å¯ç äžç¬Š" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "yes" msgstr "æ¯" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "true" msgstr "æ¯" -#: module/setup.py:493 +#: pyload/setup.py:493 msgid "t" msgstr "" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "no" msgstr "åŠ" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "false" msgstr "åŠ" -#: module/setup.py:496 +#: pyload/setup.py:496 msgid "f" msgstr "" -#: module/setup.py:499 module/setup.py:509 +#: pyload/setup.py:499 pyload/setup.py:509 msgid "Invalid Input" msgstr "äžåæ³ç茞å
¥" diff --git a/module/ConfigParser.py b/module/ConfigParser.py deleted file mode 100644 index 9de405a3d..000000000 --- a/module/ConfigParser.py +++ /dev/null @@ -1,373 +0,0 @@ -# -*- coding: utf-8 -*- - -from __future__ import with_statement -from time import sleep -from os.path import exists, join -from shutil import copy - -from traceback import print_exc -from utils import chmod - -# ignore these plugin configs, mainly because plugins were wiped out -IGNORE = ( - "FreakshareNet", "SpeedManager", "ArchiveTo", "ShareCx", ('hooks', 'UnRar'), - 'EasyShareCom', 'FlyshareCz' - ) - -CONF_VERSION = 1 - -class ConfigParser: - """ - holds and manage the configuration - - current dict layout: - - { - - section: { - option: { - value: - type: - desc: - } - desc: - - } - - """ - - - def __init__(self): - """Constructor""" - self.config = {} # the config values - self.plugin = {} # the config for plugins - self.oldRemoteData = {} - - self.pluginCB = None # callback when plugin config value is changed - - self.checkVersion() - - self.readConfig() - - self.deleteOldPlugins() - - - def checkVersion(self, n=0): - """determines if config need to be copied""" - try: - if not exists("pyload.conf"): - copy(join(pypath, "module", "config", "default.conf"), "pyload.conf") - - if not exists("plugin.conf"): - f = open("plugin.conf", "wb") - f.write("version: " + str(CONF_VERSION)) - f.close() - - f = open("pyload.conf", "rb") - v = f.readline() - f.close() - v = v[v.find(":") + 1:].strip() - - if not v or int(v) < CONF_VERSION: - copy(join(pypath, "module", "config", "default.conf"), "pyload.conf") - print "Old version of config was replaced" - - f = open("plugin.conf", "rb") - v = f.readline() - f.close() - v = v[v.find(":") + 1:].strip() - - if not v or int(v) < CONF_VERSION: - f = open("plugin.conf", "wb") - f.write("version: " + str(CONF_VERSION)) - f.close() - print "Old version of plugin-config replaced" - except: - if n < 3: - sleep(0.3) - self.checkVersion(n + 1) - else: - raise - - def readConfig(self): - """reads the config file""" - - self.config = self.parseConfig(join(pypath, "module", "config", "default.conf")) - self.plugin = self.parseConfig("plugin.conf") - - try: - homeconf = self.parseConfig("pyload.conf") - if "username" in homeconf["remote"]: - if "password" in homeconf["remote"]: - self.oldRemoteData = {"username": homeconf["remote"]["username"]["value"], - "password": homeconf["remote"]["username"]["value"]} - del homeconf["remote"]["password"] - del homeconf["remote"]["username"] - self.updateValues(homeconf, self.config) - - except Exception, e: - print "Config Warning" - print_exc() - - - def parseConfig(self, config): - """parses a given configfile""" - - f = open(config) - - config = f.read() - - config = config.splitlines()[1:] - - conf = {} - - section, option, value, typ, desc = "", "", "", "", "" - - listmode = False - - for line in config: - comment = line.rfind("#") - if line.find(":", comment) < 0 > line.find("=", comment) and comment > 0 and line[comment - 1].isspace(): - line = line.rpartition("#") # removes comments - if line[1]: - line = line[0] - else: - line = line[2] - - line = line.strip() - - try: - if line == "": - continue - elif line.endswith(":"): - section, none, desc = line[:-1].partition('-') - section = section.strip() - desc = desc.replace('"', "").strip() - conf[section] = {"desc": desc} - else: - if listmode: - if line.endswith("]"): - listmode = False - line = line.replace("]", "") - - value += [self.cast(typ, x.strip()) for x in line.split(",") if x] - - if not listmode: - conf[section][option] = {"desc": desc, - "type": typ, - "value": value} - - - else: - content, none, value = line.partition("=") - - content, none, desc = content.partition(":") - - desc = desc.replace('"', "").strip() - - typ, none, option = content.strip().rpartition(" ") - - value = value.strip() - - if value.startswith("["): - if value.endswith("]"): - listmode = False - value = value[:-1] - else: - listmode = True - - value = [self.cast(typ, x.strip()) for x in value[1:].split(",") if x] - else: - value = self.cast(typ, value) - - if not listmode: - conf[section][option] = {"desc": desc, - "type": typ, - "value": value} - - except Exception, e: - print "Config Warning" - print_exc() - - f.close() - return conf - - - def updateValues(self, config, dest): - """sets the config values from a parsed config file to values in destination""" - - for section in config.iterkeys(): - if section in dest: - for option in config[section].iterkeys(): - if option in ("desc", "outline"): continue - - if option in dest[section]: - dest[section][option]["value"] = config[section][option]["value"] - - #else: - # dest[section][option] = config[section][option] - - - #else: - # dest[section] = config[section] - - def saveConfig(self, config, filename): - """saves config to filename""" - with open(filename, "wb") as f: - chmod(filename, 0600) - f.write("version: %i \n" % CONF_VERSION) - for section in config.iterkeys(): - f.write('\n%s - "%s":\n' % (section, config[section]["desc"])) - - for option, data in config[section].iteritems(): - if option in ("desc", "outline"): continue - - if isinstance(data["value"], list): - value = "[ \n" - for x in data["value"]: - value += "\t\t" + str(x) + ",\n" - value += "\t\t]\n" - else: - if type(data["value"]) in (str, unicode): - value = data["value"] + "\n" - else: - value = str(data["value"]) + "\n" - try: - f.write('\t%s %s : "%s" = %s' % (data["type"], option, data["desc"], value)) - except UnicodeEncodeError: - f.write('\t%s %s : "%s" = %s' % (data["type"], option, data["desc"], value.encode("utf8"))) - - def cast(self, typ, value): - """cast value to given format""" - if type(value) not in (str, unicode): - return value - - elif typ == "int": - return int(value) - elif typ == "bool": - return True if value.lower() in ("1", "true", "on", "an", "yes") else False - elif typ == "time": - if not value: value = "0:00" - if not ":" in value: value += ":00" - return value - elif typ in ("str", "file", "folder"): - try: - return value.encode("utf8") - except: - return value - else: - return value - - - def save(self): - """saves the configs to disk""" - - self.saveConfig(self.config, "pyload.conf") - self.saveConfig(self.plugin, "plugin.conf") - - - def __getitem__(self, section): - """provides dictonary like access: c['section']['option']""" - return Section(self, section) - - - def get(self, section, option): - """get value""" - val = self.config[section][option]["value"] - try: - if type(val) in (str, unicode): - return val.decode("utf8") - else: - return val - except: - return val - - def set(self, section, option, value): - """set value""" - - value = self.cast(self.config[section][option]["type"], value) - - self.config[section][option]["value"] = value - self.save() - - def getPlugin(self, plugin, option): - """gets a value for a plugin""" - val = self.plugin[plugin][option]["value"] - try: - if type(val) in (str, unicode): - return val.decode("utf8") - else: - return val - except: - return val - - def setPlugin(self, plugin, option, value): - """sets a value for a plugin""" - - value = self.cast(self.plugin[plugin][option]["type"], value) - - if self.pluginCB: self.pluginCB(plugin, option, value) - - self.plugin[plugin][option]["value"] = value - self.save() - - def getMetaData(self, section, option): - """ get all config data for an option """ - return self.config[section][option] - - def addPluginConfig(self, name, config, outline=""): - """adds config options with tuples (name, type, desc, default)""" - if name not in self.plugin: - conf = {"desc": name, - "outline": outline} - self.plugin[name] = conf - else: - conf = self.plugin[name] - conf["outline"] = outline - - for item in config: - if item[0] in conf: - conf[item[0]]["type"] = item[1] - conf[item[0]]["desc"] = item[2] - else: - conf[item[0]] = { - "desc": item[2], - "type": item[1], - "value": self.cast(item[1], item[3]) - } - - values = [x[0] for x in config] + ["desc", "outline"] - #delete old values - for item in conf.keys(): - if item not in values: - del conf[item] - - def deleteConfig(self, name): - """Removes a plugin config""" - if name in self.plugin: - del self.plugin[name] - - - def deleteOldPlugins(self): - """ remove old plugins from config """ - - for name in IGNORE: - if name in self.plugin: - del self.plugin[name] - - -class Section: - """provides dictionary like access for configparser""" - - def __init__(self, parser, section): - """Constructor""" - self.parser = parser - self.section = section - - def __getitem__(self, item): - """getitem""" - return self.parser.get(self.section, item) - - def __setitem__(self, item, value): - """setitem""" - self.parser.set(self.section, item, value) diff --git a/module/Core.py b/module/Core.py deleted file mode 100644 index a3156d804..000000000 --- a/module/Core.py +++ /dev/null @@ -1,663 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. - - @author: spoob - @author: sebnapi - @author: RaNaN - @author: mkaay - @version: v0.4.10 -""" -CURRENT_VERSION = '0.4.10' - -import __builtin__ - -from getopt import getopt, GetoptError -import module.common.pylgettext as gettext -from imp import find_module -import logging -import logging.handlers -import os -from os import _exit, execl, getcwd, makedirs, remove, sep, walk, chdir, close -from os.path import exists, join -import signal -import subprocess -import sys -from sys import argv, executable, exit -from time import time, sleep -from traceback import print_exc - -from module import InitHomeDir -from module.plugins.AccountManager import AccountManager -from module.CaptchaManager import CaptchaManager -from module.ConfigParser import ConfigParser -from module.plugins.PluginManager import PluginManager -from module.PullEvents import PullManager -from module.network.RequestFactory import RequestFactory -from module.threads.ServerThread import WebServer -from module.Scheduler import Scheduler -from module.common.JsEngine import JsEngine -from module import remote -from module.remote.RemoteManager import RemoteManager -from module.database import DatabaseBackend, FileHandler - -from module.utils import freeSpace, formatSize, get_console_encoding - -from codecs import getwriter - -enc = get_console_encoding(sys.stdout.encoding) -sys.stdout = getwriter(enc)(sys.stdout, errors="replace") - -# TODO List -# - configurable auth system ldap/mysql -# - cron job like sheduler - -class Core(object): - """pyLoad Core, one tool to rule them all... (the filehosters) :D""" - - def __init__(self): - self.doDebug = False - self.running = False - self.daemon = False - self.remote = True - self.arg_links = [] - self.pidfile = "pyload.pid" - self.deleteLinks = False # will delete links on startup - - if len(argv) > 1: - try: - options, args = getopt(argv[1:], 'vchdusqp:', - ["version", "clear", "clean", "help", "debug", "user", - "setup", "configdir=", "changedir", "daemon", - "quit", "status", "no-remote","pidfile="]) - - for option, argument in options: - if option in ("-v", "--version"): - print "pyLoad", CURRENT_VERSION - exit() - elif option in ("-p", "--pidfile"): - self.pidfile = argument - elif option == "--daemon": - self.daemon = True - elif option in ("-c", "--clear"): - self.deleteLinks = True - elif option in ("-h", "--help"): - self.print_help() - exit() - elif option in ("-d", "--debug"): - self.doDebug = True - elif option in ("-u", "--user"): - from module.setup import Setup - - self.config = ConfigParser() - s = Setup(pypath, self.config) - s.set_user() - exit() - elif option in ("-s", "--setup"): - from module.setup import Setup - - self.config = ConfigParser() - s = Setup(pypath, self.config) - s.start() - exit() - elif option == "--changedir": - from module.setup import Setup - - self.config = ConfigParser() - s = Setup(pypath, self.config) - s.conf_path(True) - exit() - elif option in ("-q", "--quit"): - self.quitInstance() - exit() - elif option == "--status": - pid = self.isAlreadyRunning() - if self.isAlreadyRunning(): - print pid - exit(0) - else: - print "false" - exit(1) - elif option == "--clean": - self.cleanTree() - exit() - elif option == "--no-remote": - self.remote = False - - except GetoptError: - print 'Unknown Argument(s) "%s"' % " ".join(argv[1:]) - self.print_help() - exit() - - def print_help(self): - print - print "pyLoad v%s 2008-2014 the pyLoad Team" % CURRENT_VERSION - print - if sys.argv[0].endswith(".py"): - print "Usage: python pyload.py [options]" - else: - print "Usage: pyload [options]" - print - print "<Options>" - print " -v, --version", " " * 10, "Print version to terminal" - print " -c, --clear", " " * 12, "Delete all saved packages/links" - #print " -a, --add=<link/list>", " " * 2, "Add the specified links" - print " -u, --user", " " * 13, "Manages users" - print " -d, --debug", " " * 12, "Enable debug mode" - print " -s, --setup", " " * 12, "Run Setup Assistant" - print " --configdir=<dir>", " " * 6, "Run with <dir> as config directory" - print " -p, --pidfile=<file>", " " * 3, "Set pidfile to <file>" - print " --changedir", " " * 12, "Change config dir permanently" - print " --daemon", " " * 15, "Daemonmize after start" - print " --no-remote", " " * 12, "Disable remote access (saves RAM)" - print " --status", " " * 15, "Display pid if running or False" - print " --clean", " " * 16, "Remove .pyc/.pyo files" - print " -q, --quit", " " * 13, "Quit running pyLoad instance" - print " -h, --help", " " * 13, "Display this help screen" - print - - def toggle_pause(self): - if self.threadManager.pause: - self.threadManager.pause = False - return False - elif not self.threadManager.pause: - self.threadManager.pause = True - return True - - def quit(self, a, b): - self.shutdown() - self.log.info(_("Received Quit signal")) - _exit(1) - - def writePidFile(self): - self.deletePidFile() - pid = os.getpid() - f = open(self.pidfile, "wb") - f.write(str(pid)) - f.close() - - def deletePidFile(self): - if self.checkPidFile(): - self.log.debug("Deleting old pidfile %s" % self.pidfile) - os.remove(self.pidfile) - - def checkPidFile(self): - """ return pid as int or 0""" - if os.path.isfile(self.pidfile): - f = open(self.pidfile, "rb") - pid = f.read().strip() - f.close() - if pid: - pid = int(pid) - return pid - - return 0 - - def isAlreadyRunning(self): - pid = self.checkPidFile() - if not pid or os.name == "nt": return False - try: - os.kill(pid, 0) # 0 - default signal (does nothing) - except: - return 0 - - return pid - - def quitInstance(self): - if os.name == "nt": - print "Not supported on windows." - return - - pid = self.isAlreadyRunning() - if not pid: - print "No pyLoad running." - return - - try: - os.kill(pid, 3) #SIGUIT - - t = time() - print "waiting for pyLoad to quit" - - while exists(self.pidfile) and t + 10 > time(): - sleep(0.25) - - if not exists(self.pidfile): - print "pyLoad successfully stopped" - else: - os.kill(pid, 9) #SIGKILL - print "pyLoad did not respond" - print "Kill signal was send to process with id %s" % pid - - except: - print "Error quitting pyLoad" - - - def cleanTree(self): - for path, dirs, files in walk(self.path("")): - for f in files: - if not f.endswith(".pyo") and not f.endswith(".pyc"): - continue - - if "_25" in f or "_26" in f or "_27" in f: - continue - - print join(path, f) - remove(join(path, f)) - - def start(self, rpc=True, web=True): - """ starts the fun :D """ - - self.version = CURRENT_VERSION - - if not exists("pyload.conf"): - from module.setup import Setup - - print "This is your first start, running configuration assistent now." - self.config = ConfigParser() - s = Setup(pypath, self.config) - res = False - try: - res = s.start() - except SystemExit: - pass - except KeyboardInterrupt: - print "\nSetup interrupted" - except: - res = False - print_exc() - print "Setup failed" - if not res: - remove("pyload.conf") - - exit() - - try: signal.signal(signal.SIGQUIT, self.quit) - except: pass - - self.config = ConfigParser() - - gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None]) - translation = gettext.translation("pyLoad", self.path("locale"), - languages=[self.config['general']['language'], "en"], fallback=True) - translation.install(True) - - self.debug = self.doDebug or self.config['general']['debug_mode'] - self.remote &= self.config['remote']['activated'] - - pid = self.isAlreadyRunning() - if pid: - print _("pyLoad already running with pid %s") % pid - exit() - - if os.name != "nt" and self.config["general"]["renice"]: - os.system("renice %d %d" % (self.config["general"]["renice"], os.getpid())) - - if self.config["permission"]["change_group"]: - if os.name != "nt": - try: - from grp import getgrnam - - group = getgrnam(self.config["permission"]["group"]) - os.setgid(group[2]) - except Exception, e: - print _("Failed changing group: %s") % e - - if self.config["permission"]["change_user"]: - if os.name != "nt": - try: - from pwd import getpwnam - - user = getpwnam(self.config["permission"]["user"]) - os.setuid(user[2]) - except Exception, e: - print _("Failed changing user: %s") % e - - self.check_file(self.config['log']['log_folder'], _("folder for logs"), True) - - if self.debug: - self.init_logger(logging.DEBUG) # logging level - else: - self.init_logger(logging.INFO) # logging level - - self.do_kill = False - self.do_restart = False - self.shuttedDown = False - - self.log.info(_("Starting") + " pyLoad %s" % CURRENT_VERSION) - self.log.info(_("Using home directory: %s") % getcwd()) - - self.writePidFile() - - #@TODO refractor - - remote.activated = self.remote - self.log.debug("Remote activated: %s" % self.remote) - - self.check_install("Crypto", _("pycrypto to decode container files")) - #img = self.check_install("Image", _("Python Image Library (PIL) for captcha reading")) - #self.check_install("pycurl", _("pycurl to download any files"), True, True) - self.check_file("tmp", _("folder for temporary files"), True) - #tesser = self.check_install("tesseract", _("tesseract for captcha reading"), False) if os.name != "nt" else True - - self.captcha = True # checks seems to fail, although tesseract is available - - self.check_file(self.config['general']['download_folder'], _("folder for downloads"), True) - - if self.config['ssl']['activated']: - self.check_install("OpenSSL", _("OpenSSL for secure connection")) - - self.setupDB() - if self.config.oldRemoteData: - self.log.info(_("Moving old user config to DB")) - self.db.addUser(self.config.oldRemoteData["username"], self.config.oldRemoteData["password"]) - - self.log.info(_("Please check your logindata with ./pyload.py -u")) - - if self.deleteLinks: - self.log.info(_("All links removed")) - self.db.purgeLinks() - - self.requestFactory = RequestFactory(self) - __builtin__.pyreq = self.requestFactory - - self.lastClientConnected = 0 - - # later imported because they would trigger api import, and remote value not set correctly - from module import Api - from module.HookManager import HookManager - from module.ThreadManager import ThreadManager - - if Api.activated != self.remote: - self.log.warning("Import error: API remote status not correct.") - - self.api = Api.Api(self) - - self.scheduler = Scheduler(self) - - #hell yeah, so many important managers :D - self.pluginManager = PluginManager(self) - self.pullManager = PullManager(self) - self.accountManager = AccountManager(self) - self.threadManager = ThreadManager(self) - self.captchaManager = CaptchaManager(self) - self.hookManager = HookManager(self) - self.remoteManager = RemoteManager(self) - - self.js = JsEngine() - - self.log.info(_("Downloadtime: %s") % self.api.isTimeDownload()) - - if rpc: - self.remoteManager.startBackends() - - if web: - self.init_webserver() - - spaceLeft = freeSpace(self.config["general"]["download_folder"]) - - self.log.info(_("Free space: %s") % formatSize(spaceLeft)) - - self.config.save() #save so config files gets filled - - link_file = join(pypath, "links.txt") - - if exists(link_file): - f = open(link_file, "rb") - if f.read().strip(): - self.api.addPackage("links.txt", [link_file], 1) - f.close() - - link_file = "links.txt" - if exists(link_file): - f = open(link_file, "rb") - if f.read().strip(): - self.api.addPackage("links.txt", [link_file], 1) - f.close() - - #self.scheduler.addJob(0, self.accountManager.getAccountInfos) - self.log.info(_("Activating Accounts...")) - self.accountManager.getAccountInfos() - - self.threadManager.pause = False - self.running = True - - self.log.info(_("Activating Plugins...")) - self.hookManager.coreReady() - - self.log.info(_("pyLoad is up and running")) - - #test api -# from module.common.APIExerciser import startApiExerciser -# startApiExerciser(self, 3) - - #some memory stats -# from guppy import hpy -# hp=hpy() -# import objgraph -# objgraph.show_most_common_types(limit=20) -# import memdebug -# memdebug.start(8002) - - locals().clear() - - while True: - sleep(2) - if self.do_restart: - self.log.info(_("restarting pyLoad")) - self.restart() - if self.do_kill: - self.shutdown() - self.log.info(_("pyLoad quits")) - self.removeLogger() - _exit(0) #@TODO thrift blocks shutdown - - self.threadManager.work() - self.scheduler.work() - - def setupDB(self): - self.db = DatabaseBackend(self) # the backend - self.db.setup() - - self.files = FileHandler(self) - self.db.manager = self.files #ugly? - - def init_webserver(self): - if self.config['webinterface']['activated']: - self.webserver = WebServer(self) - self.webserver.start() - - def init_logger(self, level): - console = logging.StreamHandler(sys.stdout) - frm = logging.Formatter("%(asctime)s %(levelname)-8s %(message)s", "%d.%m.%Y %H:%M:%S") - console.setFormatter(frm) - self.log = logging.getLogger("log") # settable in config - - if self.config['log']['file_log']: - if self.config['log']['log_rotate']: - file_handler = logging.handlers.RotatingFileHandler(join(self.config['log']['log_folder'], 'log.txt'), - maxBytes=self.config['log']['log_size'] * 1024, - backupCount=int(self.config['log']['log_count']), - encoding="utf8") - else: - file_handler = logging.FileHandler(join(self.config['log']['log_folder'], 'log.txt'), encoding="utf8") - - file_handler.setFormatter(frm) - self.log.addHandler(file_handler) - - self.log.addHandler(console) #if console logging - self.log.setLevel(level) - - def removeLogger(self): - for h in list(self.log.handlers): - self.log.removeHandler(h) - h.close() - - def check_install(self, check_name, legend, python=True, essential=False): - """check wether needed tools are installed""" - try: - if python: - find_module(check_name) - else: - pipe = subprocess.PIPE - subprocess.Popen(check_name, stdout=pipe, stderr=pipe) - - return True - except: - if essential: - self.log.info(_("Install %s") % legend) - exit() - - return False - - def check_file(self, check_names, description="", folder=False, empty=True, essential=False, quiet=False): - """check wether needed files exists""" - tmp_names = [] - if not type(check_names) == list: - tmp_names.append(check_names) - else: - tmp_names.extend(check_names) - file_created = True - file_exists = True - for tmp_name in tmp_names: - if not exists(tmp_name): - file_exists = False - if empty: - try: - if folder: - tmp_name = tmp_name.replace("/", sep) - makedirs(tmp_name) - else: - open(tmp_name, "w") - except: - file_created = False - else: - file_created = False - - if not file_exists and not quiet: - if file_created: - #self.log.info( _("%s created") % description ) - pass - else: - if not empty: - self.log.warning( - _("could not find %(desc)s: %(name)s") % {"desc": description, "name": tmp_name}) - else: - print _("could not create %(desc)s: %(name)s") % {"desc": description, "name": tmp_name} - if essential: - exit() - - def isClientConnected(self): - return (self.lastClientConnected + 30) > time() - - def restart(self): - self.shutdown() - chdir(owd) - # close some open fds - for i in range(3, 50): - try: - close(i) - except : - pass - - execl(executable, executable, *sys.argv) - _exit(0) - - def shutdown(self): - self.log.info(_("shutting down...")) - try: - if self.config['webinterface']['activated'] and hasattr(self, "webserver"): - self.webserver.quit() - - for thread in self.threadManager.threads: - thread.put("quit") - pyfiles = self.files.cache.values() - - for pyfile in pyfiles: - pyfile.abortDownload() - - self.hookManager.coreExiting() - - except: - if self.debug: - print_exc() - self.log.info(_("error while shutting down")) - - finally: - self.files.syncSave() - self.shuttedDown = True - - self.deletePidFile() - - - def path(self, *args): - return join(pypath, *args) - - -def deamon(): - try: - pid = os.fork() - if pid > 0: - sys.exit(0) - except OSError, e: - print >> sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror) - sys.exit(1) - - # decouple from parent environment - os.setsid() - os.umask(0) - - # do second fork - try: - pid = os.fork() - if pid > 0: - # exit from second parent, print eventual PID before - print "Daemon PID %d" % pid - sys.exit(0) - except OSError, e: - print >> sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror) - sys.exit(1) - - # Iterate through and close some file descriptors. - for fd in range(0, 3): - try: - os.close(fd) - except OSError: # ERROR, fd wasn't open to begin with (ignored) - pass - - os.open(os.devnull, os.O_RDWR) # standard input (0) - os.dup2(0, 1) # standard output (1) - os.dup2(0, 2) - - pyload_core = Core() - pyload_core.start() - - -def main(): - if "--daemon" in sys.argv: - deamon() - else: - pyload_core = Core() - try: - pyload_core.start() - except KeyboardInterrupt: - pyload_core.shutdown() - pyload_core.log.info(_("killed pyLoad from Terminal")) - pyload_core.removeLogger() - _exit(1) - -# And so it begins... -if __name__ == "__main__": - main() diff --git a/module/HookManager.py b/module/HookManager.py deleted file mode 100644 index 6fd1162a7..000000000 --- a/module/HookManager.py +++ /dev/null @@ -1,305 +0,0 @@ -# -*- coding: utf-8 -*- - -""" - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. - - @author: RaNaN, mkaay - @interface-version: 0.1 -""" -import __builtin__ - -import traceback -from thread import start_new_thread -from threading import RLock - -from types import MethodType - -from module.threads.PluginThread import HookThread -from module.plugins.PluginManager import literal_eval -from utils import lock - -class HookManager: - """Manages hooks, delegates and handles Events. - - Every plugin can define events, \ - but some very usefull events are called by the Core. - Contrary to overwriting hook methods you can use event listener, - which provides additional entry point in the control flow. - Only do very short tasks or use threads. - - **Known Events:** - Most hook methods exists as events. These are the additional known events. - - ===================== ============== ================================== - Name Arguments Description - ===================== ============== ================================== - downloadPreparing fid A download was just queued and will be prepared now. - downloadStarts fid A plugin will immediately starts the download afterwards. - linksAdded links, pid Someone just added links, you are able to modify the links. - allDownloadsProcessed Every link was handled, pyload would idle afterwards. - allDownloadsFinished Every download in queue is finished. - unrarFinished folder, fname An Unrar job finished - configChanged The config was changed via the api. - pluginConfigChanged The plugin config changed, due to api or internal process. - ===================== ============== ================================== - - | Notes: - | allDownloadsProcessed is *always* called before allDownloadsFinished. - | configChanged is *always* called before pluginConfigChanged. - - - """ - - def __init__(self, core): - self.core = core - self.config = self.core.config - - __builtin__.hookManager = self #needed to let hooks register themself - - self.log = self.core.log - self.plugins = [] - self.pluginMap = {} - self.methods = {} #dict of names and list of methods usable by rpc - - self.events = {} # contains events - - #registering callback for config event - self.config.pluginCB = MethodType(self.dispatchEvent, "pluginConfigChanged", basestring) - - self.addEvent("pluginConfigChanged", self.manageHooks) - - self.lock = RLock() - self.createIndex() - - def try_catch(func): - def new(*args): - try: - return func(*args) - except Exception, e: - args[0].log.error(_("Error executing hooks: %s") % str(e)) - if args[0].core.debug: - traceback.print_exc() - - return new - - - def addRPC(self, plugin, func, doc): - plugin = plugin.rpartition(".")[2] - doc = doc.strip() if doc else "" - - if plugin in self.methods: - self.methods[plugin][func] = doc - else: - self.methods[plugin] = {func: doc} - - def callRPC(self, plugin, func, args, parse): - if not args: args = tuple() - if parse: - args = tuple([literal_eval(x) for x in args]) - - plugin = self.pluginMap[plugin] - f = getattr(plugin, func) - return f(*args) - - - def createIndex(self): - plugins = [] - - active = [] - deactive = [] - - for pluginname in self.core.pluginManager.hookPlugins: - try: - #hookClass = getattr(plugin, plugin.__name__) - - if self.config.getPlugin(pluginname, "activated"): - pluginClass = self.core.pluginManager.loadClass("hooks", pluginname) - if not pluginClass: continue - - plugin = pluginClass(self.core, self) - plugins.append(plugin) - self.pluginMap[pluginClass.__name__] = plugin - if plugin.isActivated(): - active.append(pluginClass.__name__) - else: - deactive.append(pluginname) - - - except: - self.log.warning(_("Failed activating %(name)s") % {"name": pluginname}) - if self.core.debug: - traceback.print_exc() - - self.log.info(_("Activated plugins: %s") % ", ".join(sorted(active))) - self.log.info(_("Deactivate plugins: %s") % ", ".join(sorted(deactive))) - - self.plugins = plugins - - def manageHooks(self, plugin, name, value): - if name == "activated" and value: - self.activateHook(plugin) - elif name == "activated" and not value: - self.deactivateHook(plugin) - - def activateHook(self, plugin): - - #check if already loaded - for inst in self.plugins: - if inst.__name__ == plugin: - return - - pluginClass = self.core.pluginManager.loadClass("hooks", plugin) - - if not pluginClass: return - - self.log.debug("Plugin loaded: %s" % plugin) - - plugin = pluginClass(self.core, self) - self.plugins.append(plugin) - self.pluginMap[pluginClass.__name__] = plugin - - # call core Ready - start_new_thread(plugin.coreReady, tuple()) - - def deactivateHook(self, plugin): - - hook = None - for inst in self.plugins: - if inst.__name__ == plugin: - hook = inst - - if not hook: return - - self.log.debug("Plugin unloaded: %s" % plugin) - - hook.unload() - - #remove periodic call - self.log.debug("Removed callback %s" % self.core.scheduler.removeJob(hook.cb)) - self.plugins.remove(hook) - del self.pluginMap[hook.__name__] - - - @try_catch - def coreReady(self): - for plugin in self.plugins: - if plugin.isActivated(): - plugin.coreReady() - - self.dispatchEvent("coreReady") - - @try_catch - def coreExiting(self): - for plugin in self.plugins: - if plugin.isActivated(): - plugin.coreExiting() - - self.dispatchEvent("coreExiting") - - @lock - def downloadPreparing(self, pyfile): - for plugin in self.plugins: - if plugin.isActivated(): - plugin.downloadPreparing(pyfile) - - self.dispatchEvent("downloadPreparing", pyfile) - - @lock - def downloadFinished(self, pyfile): - for plugin in self.plugins: - if plugin.isActivated(): - plugin.downloadFinished(pyfile) - - self.dispatchEvent("downloadFinished", pyfile) - - @lock - @try_catch - def downloadFailed(self, pyfile): - for plugin in self.plugins: - if plugin.isActivated(): - plugin.downloadFailed(pyfile) - - self.dispatchEvent("downloadFailed", pyfile) - - @lock - def packageFinished(self, package): - for plugin in self.plugins: - if plugin.isActivated(): - plugin.packageFinished(package) - - self.dispatchEvent("packageFinished", package) - - @lock - def beforeReconnecting(self, ip): - for plugin in self.plugins: - plugin.beforeReconnecting(ip) - - self.dispatchEvent("beforeReconnecting", ip) - - @lock - def afterReconnecting(self, ip): - for plugin in self.plugins: - if plugin.isActivated(): - plugin.afterReconnecting(ip) - - self.dispatchEvent("afterReconnecting", ip) - - def startThread(self, function, *args, **kwargs): - t = HookThread(self.core.threadManager, function, args, kwargs) - - def activePlugins(self): - """ returns all active plugins """ - return [x for x in self.plugins if x.isActivated()] - - def getAllInfo(self): - """returns info stored by hook plugins""" - info = {} - for name, plugin in self.pluginMap.iteritems(): - if plugin.info: - #copy and convert so str - info[name] = dict([(x, str(y) if not isinstance(y, basestring) else y) for x, y in plugin.info.iteritems()]) - return info - - - def getInfo(self, plugin): - info = {} - if plugin in self.pluginMap and self.pluginMap[plugin].info: - info = dict([(x, str(y) if not isinstance(y, basestring) else y) - for x, y in self.pluginMap[plugin].info.iteritems()]) - - return info - - def addEvent(self, event, func): - """Adds an event listener for event name""" - if event in self.events: - self.events[event].append(func) - else: - self.events[event] = [func] - - def removeEvent(self, event, func): - """removes previously added event listener""" - if event in self.events: - self.events[event].remove(func) - - def dispatchEvent(self, event, *args): - """dispatches event with args""" - if event in self.events: - for f in self.events[event]: - try: - f(*args) - except Exception, e: - self.log.warning("Error calling event handler %s: %s, %s, %s" - % (event, f, args, str(e))) - if self.core.debug: - traceback.print_exc() diff --git a/module/InitHomeDir.py b/module/InitHomeDir.py deleted file mode 100644 index b8ea29180..000000000 --- a/module/InitHomeDir.py +++ /dev/null @@ -1,79 +0,0 @@ -# -*- coding: utf-8 -*- -""" - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. - - @author: RaNaN - - This modules inits working directories and global variables, pydir and homedir -""" - -from os import makedirs, path, chdir -from os.path import join -import sys -from sys import argv, platform - -import __builtin__ - -__builtin__.owd = path.abspath("") # original working directory -__builtin__.pypath = path.abspath(path.join(__file__, "..", "..")) - -sys.path.append(join(pypath, "module", "lib")) - -homedir = "" - -if platform == 'nt': - homedir = path.expanduser("~") - if homedir == "~": - import ctypes - - CSIDL_APPDATA = 26 - _SHGetFolderPath = ctypes.windll.shell32.SHGetFolderPathW - _SHGetFolderPath.argtypes = [ctypes.wintypes.HWND, - ctypes.c_int, - ctypes.wintypes.HANDLE, - ctypes.wintypes.DWORD, ctypes.wintypes.LPCWSTR] - - path_buf = ctypes.wintypes.create_unicode_buffer(ctypes.wintypes.MAX_PATH) - result = _SHGetFolderPath(0, CSIDL_APPDATA, 0, 0, path_buf) - homedir = path_buf.value -else: - homedir = path.expanduser("~") - -__builtin__.homedir = homedir - -args = " ".join(argv[1:]) - -# dirty method to set configdir from commandline arguments -if "--configdir=" in args: - for aa in argv: - if aa.startswith("--configdir="): - configdir = aa.replace("--configdir=", "", 1).strip() -elif path.exists(path.join(pypath, "module", "config", "configdir")): - f = open(path.join(pypath, "module", "config", "configdir"), "rb") - c = f.read().strip() - f.close() - configdir = path.join(pypath, c) -else: - if platform in ("posix", "linux2"): - configdir = path.join(homedir, ".pyload") - else: - configdir = path.join(homedir, "pyload") - -if not path.exists(configdir): - makedirs(configdir, 0700) - -__builtin__.configdir = configdir -chdir(configdir) - -#print "Using %s as working directory." % configdir diff --git a/module/PullEvents.py b/module/PullEvents.py deleted file mode 100644 index 3835a34ac..000000000 --- a/module/PullEvents.py +++ /dev/null @@ -1,120 +0,0 @@ -# -*- coding: utf-8 -*- - -""" - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. - - @author: mkaay -""" - -from time import time -from module.utils import uniqify - -class PullManager: - def __init__(self, core): - self.core = core - self.clients = [] - - def newClient(self, uuid): - self.clients.append(Client(uuid)) - - def clean(self): - for n, client in enumerate(self.clients): - if client.lastActive + 30 < time(): - del self.clients[n] - - def getEvents(self, uuid): - events = [] - validUuid = False - for client in self.clients: - if client.uuid == uuid: - client.lastActive = time() - validUuid = True - while client.newEvents(): - events.append(client.popEvent().toList()) - break - if not validUuid: - self.newClient(uuid) - events = [ReloadAllEvent("queue").toList(), ReloadAllEvent("collector").toList()] - return uniqify(events) - - def addEvent(self, event): - for client in self.clients: - client.addEvent(event) - -class Client: - def __init__(self, uuid): - self.uuid = uuid - self.lastActive = time() - self.events = [] - - def newEvents(self): - return len(self.events) > 0 - - def popEvent(self): - if not len(self.events): - return None - return self.events.pop(0) - - def addEvent(self, event): - self.events.append(event) - -class UpdateEvent: - def __init__(self, itype, iid, destination): - assert itype == "pack" or itype == "file" - assert destination == "queue" or destination == "collector" - self.type = itype - self.id = iid - self.destination = destination - - def toList(self): - return ["update", self.destination, self.type, self.id] - -class RemoveEvent: - def __init__(self, itype, iid, destination): - assert itype == "pack" or itype == "file" - assert destination == "queue" or destination == "collector" - self.type = itype - self.id = iid - self.destination = destination - - def toList(self): - return ["remove", self.destination, self.type, self.id] - -class InsertEvent: - def __init__(self, itype, iid, after, destination): - assert itype == "pack" or itype == "file" - assert destination == "queue" or destination == "collector" - self.type = itype - self.id = iid - self.after = after - self.destination = destination - - def toList(self): - return ["insert", self.destination, self.type, self.id, self.after] - -class ReloadAllEvent: - def __init__(self, destination): - assert destination == "queue" or destination == "collector" - self.destination = destination - - def toList(self): - return ["reload", self.destination] - -class AccountUpdateEvent: - def toList(self): - return ["account"] - -class ConfigUpdateEvent: - def toList(self): - return ["config"] diff --git a/module/PyFile.py b/module/PyFile.py deleted file mode 100644 index 69ccc4baf..000000000 --- a/module/PyFile.py +++ /dev/null @@ -1,284 +0,0 @@ -""" - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. - - @author: RaNaN - @author: mkaay -""" - -from module.PullEvents import UpdateEvent -from module.utils import formatSize, lock - -from time import sleep, time - -from threading import RLock - -statusMap = { - "finished": 0, - "offline": 1, - "online": 2, - "queued": 3, - "skipped": 4, - "waiting": 5, - "temp. offline": 6, - "starting": 7, - "failed": 8, - "aborted": 9, - "decrypting": 10, - "custom": 11, - "downloading": 12, - "processing": 13, - "unknown": 14, -} - - -def setSize(self, value): - self._size = int(value) - -class PyFile(object): - """ - Represents a file object at runtime - """ - __slots__ = ("m", "id", "url", "name", "size", "_size", "status", "pluginname", "packageid", - "error", "order", "lock", "plugin", "waitUntil", "active", "abort", "statusname", - "reconnected", "progress", "maxprogress", "pluginmodule", "pluginclass") - - def __init__(self, manager, id, url, name, size, status, error, pluginname, package, order): - self.m = manager - - self.id = int(id) - self.url = url - self.name = name - self.size = size - self.status = status - self.pluginname = pluginname - self.packageid = package #should not be used, use package() instead - self.error = error - self.order = order - # database information ends here - - self.lock = RLock() - - self.plugin = None - #self.download = None - - self.waitUntil = 0 # time() + time to wait - - # status attributes - self.active = False #obsolete? - self.abort = False - self.reconnected = False - - self.statusname = None - - self.progress = 0 - self.maxprogress = 100 - - self.m.cache[int(id)] = self - - - # will convert all sizes to ints - size = property(lambda self: self._size, setSize) - - def __repr__(self): - return "PyFile %s: %s@%s" % (self.id, self.name, self.pluginname) - - @lock - def initPlugin(self): - """ inits plugin instance """ - if not self.plugin: - self.pluginmodule = self.m.core.pluginManager.getPlugin(self.pluginname) - self.pluginclass = getattr(self.pluginmodule, self.m.core.pluginManager.getPluginName(self.pluginname)) - self.plugin = self.pluginclass(self) - - @lock - def hasPlugin(self): - """Thread safe way to determine this file has initialized plugin attribute - - :return: - """ - return hasattr(self, "plugin") and self.plugin - - def package(self): - """ return package instance""" - return self.m.getPackage(self.packageid) - - def setStatus(self, status): - self.status = statusMap[status] - self.sync() #@TODO needed aslong no better job approving exists - - def setCustomStatus(self, msg, status="processing"): - self.statusname = msg - self.setStatus(status) - - def getStatusName(self): - if self.status not in (13, 14) or not self.statusname: - return self.m.statusMsg[self.status] - else: - return self.statusname - - def hasStatus(self, status): - return statusMap[status] == self.status - - def sync(self): - """sync PyFile instance with database""" - self.m.updateLink(self) - - @lock - def release(self): - """sync and remove from cache""" - # file has valid package - if self.packageid > 0: - self.sync() - - if hasattr(self, "plugin") and self.plugin: - self.plugin.clean() - del self.plugin - - self.m.releaseLink(self.id) - - def delete(self): - """delete pyfile from database""" - self.m.deleteLink(self.id) - - def toDict(self): - """return dict with all information for interface""" - return self.toDbDict() - - def toDbDict(self): - """return data as dict for databse - - format: - - { - id: {'url': url, 'name': name ... } - } - - """ - return { - self.id: { - 'id': self.id, - 'url': self.url, - 'name': self.name, - 'plugin': self.pluginname, - 'size': self.getSize(), - 'format_size': self.formatSize(), - 'status': self.status, - 'statusmsg': self.getStatusName(), - 'package': self.packageid, - 'error': self.error, - 'order': self.order - } - } - - def abortDownload(self): - """abort pyfile if possible""" - while self.id in self.m.core.threadManager.processingIds(): - self.abort = True - if self.plugin and self.plugin.req: - self.plugin.req.abortDownloads() - sleep(0.1) - - self.abort = False - if self.hasPlugin() and self.plugin.req: - self.plugin.req.abortDownloads() - - self.release() - - def finishIfDone(self): - """set status to finish and release file if every thread is finished with it""" - - if self.id in self.m.core.threadManager.processingIds(): - return False - - self.setStatus("finished") - self.release() - self.m.checkAllLinksFinished() - return True - - def checkIfProcessed(self): - self.m.checkAllLinksProcessed(self.id) - - def formatWait(self): - """ formats and return wait time in humanreadable format """ - seconds = self.waitUntil - time() - - if seconds < 0: return "00:00:00" - - hours, seconds = divmod(seconds, 3600) - minutes, seconds = divmod(seconds, 60) - return "%.2i:%.2i:%.2i" % (hours, minutes, seconds) - - def formatSize(self): - """ formats size to readable format """ - return formatSize(self.getSize()) - - def formatETA(self): - """ formats eta to readable format """ - seconds = self.getETA() - - if seconds < 0: return "00:00:00" - - hours, seconds = divmod(seconds, 3600) - minutes, seconds = divmod(seconds, 60) - return "%.2i:%.2i:%.2i" % (hours, minutes, seconds) - - def getSpeed(self): - """ calculates speed """ - try: - return self.plugin.req.speed - except: - return 0 - - def getETA(self): - """ gets established time of arrival""" - try: - return self.getBytesLeft() / self.getSpeed() - except: - return 0 - - def getBytesLeft(self): - """ gets bytes left """ - try: - return self.getSize() - self.plugin.req.arrived - except: - return 0 - - def getPercent(self): - """ get % of download """ - if self.status == 12: - try: - return self.plugin.req.percent - except: - return 0 - else: - return self.progress - - def getSize(self): - """ get size of download """ - try: - if self.plugin.req.size: - return self.plugin.req.size - else: - return self.size - except: - return self.size - - def notifyChange(self): - e = UpdateEvent("file", self.id, "collector" if not self.package().queue else "queue") - self.m.core.pullManager.addEvent(e) - - def setProgress(self, value): - if not value == self.progress: - self.progress = value - self.notifyChange() diff --git a/module/PyPackage.py b/module/PyPackage.py deleted file mode 100644 index 7e6962d43..000000000 --- a/module/PyPackage.py +++ /dev/null @@ -1,79 +0,0 @@ -""" - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. - - @author: RaNaN - @author: mkaay -""" - -from module.PullEvents import UpdateEvent -from module.utils import safe_filename - -class PyPackage: - """ - Represents a package object at runtime - """ - def __init__(self, manager, id, name, folder, site, password, queue, order): - self.m = manager - self.m.packageCache[int(id)] = self - - self.id = int(id) - self.name = name - self._folder = folder - self.site = site - self.password = password - self.queue = queue - self.order = order - self.setFinished = False - - @property - def folder(self): - return safe_filename(self._folder) - - def toDict(self): - """ Returns a dictionary representation of the data. - - :return: dict: {id: { attr: value }} - """ - return { - self.id: { - 'id': self.id, - 'name': self.name, - 'folder': self.folder, - 'site': self.site, - 'password': self.password, - 'queue': self.queue, - 'order': self.order, - 'links': {} - } - } - - def getChildren(self): - """get information about contained links""" - return self.m.getPackageData(self.id)["links"] - - def sync(self): - """sync with db""" - self.m.updatePackage(self) - - def release(self): - """sync and delete from cache""" - self.sync() - self.m.releasePackage(self.id) - - def delete(self): - self.m.deletePackage(self.id) - - def notifyChange(self): - e = UpdateEvent("pack", self.id, "collector" if not self.queue else "queue") - self.m.core.pullManager.addEvent(e) diff --git a/module/ThreadManager.py b/module/ThreadManager.py deleted file mode 100644 index bdc6ca6e2..000000000 --- a/module/ThreadManager.py +++ /dev/null @@ -1,317 +0,0 @@ -# -*- coding: utf-8 -*- - -""" - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. - - @author: RaNaN -""" - -from os.path import exists, join -import re -from subprocess import Popen -from threading import Event, Lock -from time import sleep, time -from traceback import print_exc -from random import choice - -import pycurl - -from module.threads import PluginThread -from module.PyFile import PyFile -from module.network.RequestFactory import getURL -from module.utils import freeSpace, lock - - -class ThreadManager: - """manages the download threads, assign jobs, reconnect etc""" - - - def __init__(self, core): - """Constructor""" - self.core = core - self.log = core.log - - self.threads = [] # thread list - self.localThreads = [] #hook+decrypter threads - - self.pause = True - - self.reconnecting = Event() - self.reconnecting.clear() - self.downloaded = 0 #number of files downloaded since last cleanup - - self.lock = Lock() - - # some operations require to fetch url info from hoster, so we caching them so it wont be done twice - # contains a timestamp and will be purged after timeout - self.infoCache = {} - - # pool of ids for online check - self.resultIDs = 0 - - # threads which are fetching hoster results - self.infoResults = {} - #timeout for cache purge - self.timestamp = 0 - - pycurl.global_init(pycurl.GLOBAL_DEFAULT) - - for i in range(0, self.core.config.get("download", "max_downloads")): - self.createThread() - - - def createThread(self): - """create a download thread""" - - thread = PluginThread.DownloadThread(self) - self.threads.append(thread) - - def createInfoThread(self, data, pid): - """ - start a thread whichs fetches online status and other infos - data = [ .. () .. ] - """ - self.timestamp = time() + 5 * 60 - - PluginThread.InfoThread(self, data, pid) - - @lock - def createResultThread(self, data, add=False): - """ creates a thread to fetch online status, returns result id """ - self.timestamp = time() + 5 * 60 - - rid = self.resultIDs - self.resultIDs += 1 - - PluginThread.InfoThread(self, data, rid=rid, add=add) - - return rid - - - @lock - def getInfoResult(self, rid): - """returns result and clears it""" - self.timestamp = time() + 5 * 60 - - if rid in self.infoResults: - data = self.infoResults[rid] - self.infoResults[rid] = {} - return data - else: - return {} - - @lock - def setInfoResults(self, rid, result): - self.infoResults[rid].update(result) - - def getActiveFiles(self): - active = [x.active for x in self.threads if x.active and isinstance(x.active, PyFile)] - - for t in self.localThreads: - active.extend(t.getActiveFiles()) - - return active - - def processingIds(self): - """get a id list of all pyfiles processed""" - return [x.id for x in self.getActiveFiles()] - - - def work(self): - """run all task which have to be done (this is for repetivive call by core)""" - try: - self.tryReconnect() - except Exception, e: - self.log.error(_("Reconnect Failed: %s") % str(e) ) - self.reconnecting.clear() - if self.core.debug: - print_exc() - self.checkThreadCount() - - try: - self.assignJob() - except Exception, e: - self.log.warning("Assign job error", e) - if self.core.debug: - print_exc() - - sleep(0.5) - self.assignJob() - #it may be failed non critical so we try it again - - if (self.infoCache or self.infoResults) and self.timestamp < time(): - self.infoCache.clear() - self.infoResults.clear() - self.log.debug("Cleared Result cache") - - #-------------------------------------------------------------------------- - def tryReconnect(self): - """checks if reconnect needed""" - - if not (self.core.config["reconnect"]["activated"] and self.core.api.isTimeReconnect()): - return False - - active = [x.active.plugin.wantReconnect and x.active.plugin.waiting for x in self.threads if x.active] - - if not (0 < active.count(True) == len(active)): - return False - - if not exists(self.core.config['reconnect']['method']): - if exists(join(pypath, self.core.config['reconnect']['method'])): - self.core.config['reconnect']['method'] = join(pypath, self.core.config['reconnect']['method']) - else: - self.core.config["reconnect"]["activated"] = False - self.log.warning(_("Reconnect script not found!")) - return - - self.reconnecting.set() - - #Do reconnect - self.log.info(_("Starting reconnect")) - - while [x.active.plugin.waiting for x in self.threads if x.active].count(True) != 0: - sleep(0.25) - - ip = self.getIP() - - self.core.hookManager.beforeReconnecting(ip) - - self.log.debug("Old IP: %s" % ip) - - try: - reconn = Popen(self.core.config['reconnect']['method'], bufsize=-1, shell=True)#, stdout=subprocess.PIPE) - except: - self.log.warning(_("Failed executing reconnect script!")) - self.core.config["reconnect"]["activated"] = False - self.reconnecting.clear() - if self.core.debug: - print_exc() - return - - reconn.wait() - sleep(1) - ip = self.getIP() - self.core.hookManager.afterReconnecting(ip) - - self.log.info(_("Reconnected, new IP: %s") % ip) - - self.reconnecting.clear() - - def getIP(self): - """retrieve current ip""" - services = [("http://automation.whatismyip.com/n09230945.asp", "(\S+)"), - ("http://checkip.dyndns.org/",".*Current IP Address: (\S+)</body>.*")] - - ip = "" - for i in range(10): - try: - sv = choice(services) - ip = getURL(sv[0]) - ip = re.match(sv[1], ip).group(1) - break - except: - ip = "" - sleep(1) - - return ip - - #-------------------------------------------------------------------------- - def checkThreadCount(self): - """checks if there are need for increasing or reducing thread count""" - - if len(self.threads) == self.core.config.get("download", "max_downloads"): - return True - elif len(self.threads) < self.core.config.get("download", "max_downloads"): - self.createThread() - else: - free = [x for x in self.threads if not x.active] - if free: - free[0].put("quit") - - - def cleanPycurl(self): - """ make a global curl cleanup (currently ununused) """ - if self.processingIds(): - return False - pycurl.global_cleanup() - pycurl.global_init(pycurl.GLOBAL_DEFAULT) - self.downloaded = 0 - self.log.debug("Cleaned up pycurl") - return True - - #-------------------------------------------------------------------------- - def assignJob(self): - """assing a job to a thread if possible""" - - if self.pause or not self.core.api.isTimeDownload(): return - - #if self.downloaded > 20: - # if not self.cleanPyCurl(): return - - free = [x for x in self.threads if not x.active] - - inuse = set([(x.active.pluginname, self.getLimit(x)) for x in self.threads if x.active and x.active.hasPlugin() and x.active.plugin.account]) - inuse = map(lambda x: (x[0], x[1], len([y for y in self.threads if y.active and y.active.pluginname == x[0]])) ,inuse) - onlimit = [x[0] for x in inuse if x[1] > 0 and x[2] >= x[1]] - - occ = [x.active.pluginname for x in self.threads if x.active and x.active.hasPlugin() and not x.active.plugin.multiDL] + onlimit - - occ.sort() - occ = tuple(set(occ)) - job = self.core.files.getJob(occ) - if job: - try: - job.initPlugin() - except Exception, e: - self.log.critical(str(e)) - print_exc() - job.setStatus("failed") - job.error = str(e) - job.release() - return - - if job.plugin.__type__ == "hoster": - spaceLeft = freeSpace(self.core.config["general"]["download_folder"]) / 1024 / 1024 - if spaceLeft < self.core.config["general"]["min_free_space"]: - self.log.warning(_("Not enough space left on device")) - self.pause = True - - if free and not self.pause: - thread = free[0] - #self.downloaded += 1 - - thread.put(job) - else: - #put job back - if occ not in self.core.files.jobCache: - self.core.files.jobCache[occ] = [] - self.core.files.jobCache[occ].append(job.id) - - #check for decrypt jobs - job = self.core.files.getDecryptJob() - if job: - job.initPlugin() - thread = PluginThread.DecrypterThread(self, job) - - - else: - thread = PluginThread.DecrypterThread(self, job) - - def getLimit(self, thread): - limit = thread.active.plugin.account.getAccountData(thread.active.plugin.user)["options"].get("limitDL", ["0"])[0] - return int(limit) - - def cleanup(self): - """do global cleanup, should be called when finished with pycurl""" - pycurl.global_cleanup() diff --git a/module/cli/Cli.py b/module/cli/Cli.py deleted file mode 100644 index 929cf9881..000000000 --- a/module/cli/Cli.py +++ /dev/null @@ -1,585 +0,0 @@ -# -*- coding: utf-8 -*- -# -#Copyright (C) 2008-2014 RaNaN -# -#This program is free software; you can redistribute it and/or modify -#it under the terms of the GNU General Public License as published by -#the Free Software Foundation; either version 3 of the License, -#or (at your option) any later version. -# -#This program is distributed in the hope that it will be useful, -#but WITHOUT ANY WARRANTY; without even the implied warranty of -#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -#See the GNU General Public License for more details. -# -#You should have received a copy of the GNU General Public License -# along with this program; if not, see <http://www.gnu.org/licenses/>. -# -### -from __future__ import with_statement -from getopt import GetoptError, getopt - -import module.common.pylgettext as gettext -import os -from os import _exit -from os.path import join, exists, abspath, basename -import sys -from sys import exit -from threading import Thread, Lock -from time import sleep -from traceback import print_exc - -import ConfigParser - -from codecs import getwriter - -if os.name == "nt": - enc = "cp850" -else: - enc = "utf8" - -sys.stdout = getwriter(enc)(sys.stdout, errors="replace") - -from module import InitHomeDir -from module.cli.printer import * -from module.cli import AddPackage, ManageFiles - -from module.Api import Destination -from module.utils import formatSize, decode -from module.remote.thriftbackend.ThriftClient import ThriftClient, NoConnection, NoSSL, WrongLogin, ConnectionClosed -from module.lib.Getch import Getch -from module.lib.rename_process import renameProcess - -class Cli: - def __init__(self, client, command): - self.client = client - self.command = command - - if not self.command: - renameProcess('pyload-cli') - self.getch = Getch() - self.input = "" - self.inputline = 0 - self.lastLowestLine = 0 - self.menuline = 0 - - self.lock = Lock() - - #processor funcions, these will be changed dynamically depending on control flow - self.headerHandler = self #the download status - self.bodyHandler = self #the menu section - self.inputHandler = self - - os.system("clear") - println(1, blue("py") + yellow("Load") + white(_(" Command Line Interface"))) - println(2, "") - - self.thread = RefreshThread(self) - self.thread.start() - - self.start() - else: - self.processCommand() - - def reset(self): - """ reset to initial main menu """ - self.input = "" - self.headerHandler = self.bodyHandler = self.inputHandler = self - - def start(self): - """ main loop. handle input """ - while True: - #inp = raw_input() - inp = self.getch.impl() - if ord(inp) == 3: - os.system("clear") - sys.exit() # ctrl + c - elif ord(inp) == 13: #enter - try: - self.lock.acquire() - self.inputHandler.onEnter(self.input) - - except Exception, e: - println(2, red(e)) - finally: - self.lock.release() - - elif ord(inp) == 127: - self.input = self.input[:-1] #backspace - try: - self.lock.acquire() - self.inputHandler.onBackSpace() - finally: - self.lock.release() - - elif ord(inp) == 27: #ugly symbol - pass - else: - self.input += inp - try: - self.lock.acquire() - self.inputHandler.onChar(inp) - finally: - self.lock.release() - - self.inputline = self.bodyHandler.renderBody(self.menuline) - self.renderFooter(self.inputline) - - - def refresh(self): - """refresh screen""" - - println(1, blue("py") + yellow("Load") + white(_(" Command Line Interface"))) - println(2, "") - - self.lock.acquire() - - self.menuline = self.headerHandler.renderHeader(3) + 1 - println(self.menuline - 1, "") - self.inputline = self.bodyHandler.renderBody(self.menuline) - self.renderFooter(self.inputline) - - self.lock.release() - - - def setInput(self, string=""): - self.input = string - - def setHandler(self, klass): - #create new handler with reference to cli - self.bodyHandler = self.inputHandler = klass(self) - self.input = "" - - def renderHeader(self, line): - """ prints download status """ - #print updated information - # print "\033[J" #clear screen - # self.println(1, blue("py") + yellow("Load") + white(_(" Command Line Interface"))) - # self.println(2, "") - # self.println(3, white(_("%s Downloads:") % (len(data)))) - - data = self.client.statusDownloads() - speed = 0 - - println(line, white(_("%s Downloads:") % (len(data)))) - line += 1 - - for download in data: - if download.status == 12: # downloading - percent = download.percent - z = percent / 4 - speed += download.speed - println(line, cyan(download.name)) - line += 1 - println(line, - blue("[") + yellow(z * "#" + (25 - z) * " ") + blue("] ") + green(str(percent) + "%") + _( - " Speed: ") + green(formatSize(download.speed) + "/s") + _(" Size: ") + green( - download.format_size) + _(" Finished in: ") + green(download.format_eta) + _( - " ID: ") + green(download.fid)) - line += 1 - if download.status == 5: - println(line, cyan(download.name)) - line += 1 - println(line, _("waiting: ") + green(download.format_wait)) - line += 1 - - println(line, "") - line += 1 - status = self.client.statusServer() - if status.pause: - paused = _("Status:") + " " + red(_("paused")) - else: - paused = _("Status:") + " " + red(_("running")) - - println(line,"%s %s: %s %s: %s %s: %s" % ( - paused, _("total Speed"), red(formatSize(speed) + "/s"), _("Files in queue"), red( - status.queue), _("Total"), red(status.total))) - - return line + 1 - - def renderBody(self, line): - """ prints initial menu """ - println(line, white(_("Menu:"))) - println(line + 1, "") - println(line + 2, mag("1.") + _(" Add Links")) - println(line + 3, mag("2.") + _(" Manage Queue")) - println(line + 4, mag("3.") + _(" Manage Collector")) - println(line + 5, mag("4.") + _(" (Un)Pause Server")) - println(line + 6, mag("5.") + _(" Kill Server")) - println(line + 7, mag("6.") + _(" Quit")) - - return line + 8 - - def renderFooter(self, line): - """ prints out the input line with input """ - println(line, "") - line += 1 - - println(line, white(" Input: ") + decode(self.input)) - - #clear old output - if line < self.lastLowestLine: - for i in range(line + 1, self.lastLowestLine + 1): - println(i, "") - - self.lastLowestLine = line - - #set cursor to position - print "\033[" + str(self.inputline) + ";0H" - - def onChar(self, char): - """ default no special handling for single chars """ - if char == "1": - self.setHandler(AddPackage) - elif char == "2": - self.setHandler(ManageFiles) - elif char == "3": - self.setHandler(ManageFiles) - self.bodyHandler.target = Destination.Collector - elif char == "4": - self.client.togglePause() - self.setInput() - elif char == "5": - self.client.kill() - self.client.close() - sys.exit() - elif char == "6": - os.system('clear') - sys.exit() - - def onEnter(self, inp): - pass - - def onBackSpace(self): - pass - - def processCommand(self): - command = self.command[0] - args = [] - if len(self.command) > 1: - args = self.command[1:] - - if command == "status": - files = self.client.statusDownloads() - - if not files: - print "No downloads running." - - for download in files: - if download.status == 12: # downloading - print print_status(download) - print "\tDownloading: %s @ %s/s\t %s (%s%%)" % ( - download.format_eta, formatSize(download.speed), formatSize(download.size - download.bleft), - download.percent) - elif download.status == 5: - print print_status(download) - print "\tWaiting: %s" % download.format_wait - else: - print print_status(download) - - elif command == "queue": - print_packages(self.client.getQueueData()) - - elif command == "collector": - print_packages(self.client.getCollectorData()) - - elif command == "add": - if len(args) < 2: - print _("Please use this syntax: add <Package name> <link> <link2> ...") - return - - self.client.addPackage(args[0], args[1:], Destination.Queue) - - elif command == "add_coll": - if len(args) < 2: - print _("Please use this syntax: add <Package name> <link> <link2> ...") - return - - self.client.addPackage(args[0], args[1:], Destination.Collector) - - elif command == "del_file": - self.client.deleteFiles([int(x) for x in args]) - print "Files deleted." - - elif command == "del_package": - self.client.deletePackages([int(x) for x in args]) - print "Packages deleted." - - elif command == "move": - for pid in args: - pack = self.client.getPackageInfo(int(pid)) - self.client.movePackage((pack.dest + 1) % 2, pack.pid) - - elif command == "check": - print _("Checking %d links:") % len(args) - print - rid = self.client.checkOnlineStatus(args).rid - self.printOnlineCheck(self.client, rid) - - - elif command == "check_container": - path = args[0] - if not exists(join(owd, path)): - print _("File does not exists.") - return - - f = open(join(owd, path), "rb") - content = f.read() - f.close() - - rid = self.client.checkOnlineStatusContainer([], basename(f.name), content).rid - self.printOnlineCheck(self.client, rid) - - - elif command == "pause": - self.client.pause() - - elif command == "unpause": - self.client.unpause() - - elif command == "toggle": - self.client.togglePause() - - elif command == "kill": - self.client.kill() - elif command == "restart_file": - for x in args: - self.client.restartFile(int(x)) - print "Files restarted." - elif command == "restart_package": - for pid in args: - self.client.restartPackage(int(pid)) - print "Packages restarted." - - else: - print_commands() - - def printOnlineCheck(self, client, rid): - while True: - sleep(1) - result = client.pollResults(rid) - for url, status in result.data.iteritems(): - if status.status == 2: check = "Online" - elif status.status == 1: check = "Offline" - else: check = "Unknown" - - print "%-45s %-12s\t %-15s\t %s" % (status.name, formatSize(status.size), status.plugin, check) - - if result.rid == -1: break - - -class RefreshThread(Thread): - def __init__(self, cli): - Thread.__init__(self) - self.setDaemon(True) - self.cli = cli - - def run(self): - while True: - sleep(1) - try: - self.cli.refresh() - except ConnectionClosed: - os.system("clear") - print _("pyLoad was terminated") - _exit(0) - except Exception, e: - println(2, red(str(e))) - self.cli.reset() - print_exc() - - -def print_help(config): - print - print "pyLoad CLI Copyright (c) 2008-2014 the pyLoad Team" - print - print "Usage: [python] pyload-cli.py [options] [command]" - print - print "<Commands>" - print "See pyload-cli.py -c for a complete listing." - print - print "<Options>" - print " -i, --interactive", " Start in interactive mode" - print - print " -u, --username=", " " * 2, "Specify Username" - print " --pw=<password>", " " * 2, "Password" - print " -a, --address=", " " * 3, "Specify address (current=%s)" % config["addr"] - print " -p, --port", " " * 7, "Specify port (current=%s)" % config["port"] - print - print " -l, --language", " " * 3, "Set user interface language (current=%s)" % config["language"] - print " -h, --help", " " * 7, "Display this help screen" - print " -c, --commands", " " * 3, "List all available commands" - print - - -def print_packages(data): - for pack in data: - print "Package %s (#%s):" % (pack.name, pack.pid) - for download in pack.links: - print "\t" + print_file(download) - print - - -def print_file(download): - return "#%(id)-6d %(name)-30s %(statusmsg)-10s %(plugin)-8s" % { - "id": download.fid, - "name": download.name, - "statusmsg": download.statusmsg, - "plugin": download.plugin - } - - -def print_status(download): - return "#%(id)-6s %(name)-40s Status: %(statusmsg)-10s Size: %(size)s" % { - "id": download.fid, - "name": download.name, - "statusmsg": download.statusmsg, - "size": download.format_size - } - - -def print_commands(): - commands = [("status", _("Prints server status")), - ("queue", _("Prints downloads in queue")), - ("collector", _("Prints downloads in collector")), - ("add <name> <link1> <link2>...", _("Adds package to queue")), - ("add_coll <name> <link1> <link2>...", _("Adds package to collector")), - ("del_file <fid> <fid2>...", _("Delete Files from Queue/Collector")), - ("del_package <pid> <pid2>...", _("Delete Packages from Queue/Collector")), - ("move <pid> <pid2>...", _("Move Packages from Queue to Collector or vice versa")), - ("restart_file <fid> <fid2>...", _("Restart files")), - ("restart_package <pid> <pid2>...", _("Restart packages")), - ("check <container|url> ...", _("Check online status, works with local container")), - ("check_container path", _("Checks online status of a container file")), - ("pause", _("Pause the server")), - ("unpause", _("continue downloads")), - ("toggle", _("Toggle pause/unpause")), - ("kill", _("kill server")), ] - - print _("List of commands:") - print - for c in commands: - print "%-35s %s" % c - - -def writeConfig(opts): - try: - with open(join(homedir, ".pyload-cli"), "w") as cfgfile: - cfgfile.write("[cli]") - for opt in opts: - cfgfile.write("%s=%s\n" % (opt, opts[opt])) - except: - print _("Couldn't write user config file") - - -def main(): - config = {"addr": "127.0.0.1", "port": "7227", "language": "en"} - try: - config["language"] = os.environ["LANG"][0:2] - except: - pass - - if (not exists(join(pypath, "locale", config["language"]))) or config["language"] == "": - config["language"] = "en" - - configFile = ConfigParser.ConfigParser() - configFile.read(join(homedir, ".pyload-cli")) - - if configFile.has_section("cli"): - for opt in configFile.items("cli"): - config[opt[0]] = opt[1] - - gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None]) - translation = gettext.translation("Cli", join(pypath, "locale"), - languages=[config["language"], "en"], fallback=True) - translation.install(unicode=True) - - interactive = False - command = None - username = "" - password = "" - - shortOptions = 'iu:p:a:hcl:' - longOptions = ['interactive', "username=", "pw=", "address=", "port=", "help", "commands", "language="] - - try: - opts, extraparams = getopt(sys.argv[1:], shortOptions, longOptions) - for option, params in opts: - if option in ("-i", "--interactive"): - interactive = True - elif option in ("-u", "--username"): - username = params - elif option in ("-a", "--address"): - config["addr"] = params - elif option in ("-p", "--port"): - config["port"] = params - elif option in ("-l", "--language"): - config["language"] = params - gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None]) - translation = gettext.translation("Cli", join(pypath, "locale"), - languages=[config["language"], "en"], fallback=True) - translation.install(unicode=True) - elif option in ("-h", "--help"): - print_help(config) - exit() - elif option in ("--pw"): - password = params - elif option in ("-c", "--comands"): - print_commands() - exit() - - except GetoptError: - print 'Unknown Argument(s) "%s"' % " ".join(sys.argv[1:]) - print_help(config) - exit() - - if len(extraparams) >= 1: - command = extraparams - - client = False - - if interactive: - try: - client = ThriftClient(config["addr"], int(config["port"]), username, password) - except WrongLogin: - pass - except NoSSL: - print _("You need py-openssl to connect to this pyLoad Core.") - exit() - except NoConnection: - config["addr"] = False - config["port"] = False - - if not client: - if not config["addr"]: config["addr"] = raw_input(_("Address: ")) - if not config["port"]: config["port"] = raw_input(_("Port: ")) - if not username: username = raw_input(_("Username: ")) - if not password: - from getpass import getpass - - password = getpass(_("Password: ")) - - try: - client = ThriftClient(config["addr"], int(config["port"]), username, password) - except WrongLogin: - print _("Login data is wrong.") - except NoConnection: - print _("Could not establish connection to %(addr)s:%(port)s." % {"addr": config["addr"], - "port": config["port"]}) - - else: - try: - client = ThriftClient(config["addr"], int(config["port"]), username, password) - except WrongLogin: - print _("Login data is wrong.") - except NoConnection: - print _("Could not establish connection to %(addr)s:%(port)s." % {"addr": config["addr"], - "port": config["port"]}) - except NoSSL: - print _("You need py-openssl to connect to this pyLoad core.") - - if interactive and command: print _("Interactive mode ignored since you passed some commands.") - - if client: - writeConfig(config) - cli = Cli(client, command) diff --git a/module/cli/ManageFiles.py b/module/cli/ManageFiles.py deleted file mode 100644 index 8f202c59d..000000000 --- a/module/cli/ManageFiles.py +++ /dev/null @@ -1,203 +0,0 @@ -# -*- coding: utf-8 -*- -# -#Copyright (C) 2011-2014 RaNaN -# -#This program is free software; you can redistribute it and/or modify -#it under the terms of the GNU General Public License as published by -#the Free Software Foundation; either version 3 of the License, -#or (at your option) any later version. -# -#This program is distributed in the hope that it will be useful, -#but WITHOUT ANY WARRANTY; without even the implied warranty of -#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -#See the GNU General Public License for more details. -# -#You should have received a copy of the GNU General Public License -# along with this program; if not, see <http://www.gnu.org/licenses/>. -# -### - -from itertools import islice -from time import time - -from Handler import Handler -from printer import * - -from module.Api import Destination, PackageData - -class ManageFiles(Handler): - """ possibility to manage queue/collector """ - - def init(self): - self.target = Destination.Queue - self.pos = 0 #position in queue - self.package = -1 #choosen package - self.mode = "" # move/delete/restart - - self.cache = None - self.links = None - self.time = 0 - - def onChar(self, char): - if char in ("m", "d", "r"): - self.mode = char - self.setInput() - elif char == "p": - self.pos = max(0, self.pos - 5) - self.backspace() - elif char == "n": - self.pos += 5 - self.backspace() - - def onBackSpace(self): - if not self.input and self.mode: - self.mode = "" - if not self.input and self.package > -1: - self.package = -1 - - def onEnter(self, input): - if input == "0": - self.cli.reset() - elif self.package < 0 and self.mode: - #mode select - packs = self.parseInput(input) - if self.mode == "m": - [self.client.movePackage((self.target + 1) % 2, x) for x in packs] - elif self.mode == "d": - self.client.deletePackages(packs) - elif self.mode == "r": - [self.client.restartPackage(x) for x in packs] - - elif self.mode: - #edit links - links = self.parseInput(input, False) - - if self.mode == "d": - self.client.deleteFiles(links) - elif self.mode == "r": - map(self.client.restartFile, links) - - else: - #look into package - try: - self.package = int(input) - except: - pass - - self.cache = None - self.links = None - self.pos = 0 - self.mode = "" - self.setInput() - - - def renderBody(self, line): - if self.package < 0: - println(line, white(_("Manage Packages:"))) - else: - println(line, white((_("Manage Links:")))) - line += 1 - - if self.mode: - if self.mode == "m": - println(line, _("What do you want to move?")) - elif self.mode == "d": - println(line, _("What do you want to delete?")) - elif self.mode == "r": - println(line, _("What do you want to restart?")) - - println(line + 1, "Enter single number, comma seperated numbers or ranges. eg. 1, 2, 3 or 1-3.") - line += 2 - else: - println(line, _("Choose what yout want to do or enter package number.")) - println(line + 1, ("%s - %%s, %s - %%s, %s - %%s" % (mag("d"), mag("m"), mag("r"))) % ( - _("delete"), _("move"), _("restart"))) - line += 2 - - if self.package < 0: - #print package info - pack = self.getPackages() - i = 0 - for value in islice(pack, self.pos, self.pos + 5): - try: - println(line, mag(str(value.pid)) + ": " + value.name) - line += 1 - i += 1 - except Exception, e: - pass - for x in range(5 - i): - println(line, "") - line += 1 - else: - #print links info - pack = self.getLinks() - i = 0 - for value in islice(pack.links, self.pos, self.pos + 5): - try: - println(line, mag(value.fid) + ": %s | %s | %s" % ( - value.name, value.statusmsg, value.plugin)) - line += 1 - i += 1 - except Exception, e: - pass - for x in range(5 - i): - println(line, "") - line += 1 - - println(line, mag("p") + _(" - previous") + " | " + mag("n") + _(" - next")) - println(line + 1, mag("0.") + _(" back to main menu")) - - return line + 2 - - - def getPackages(self): - if self.cache and self.time + 2 < time(): - return self.cache - - if self.target == Destination.Queue: - data = self.client.getQueue() - else: - data = self.client.getCollector() - - - self.cache = data - self.time = time() - - return data - - def getLinks(self): - if self.links and self.time + 1 < time(): - return self.links - - try: - data = self.client.getPackageData(self.package) - except: - data = PackageData(links=[]) - - self.links = data - self.time = time() - - return data - - def parseInput(self, inp, package=True): - inp = inp.strip() - if "-" in inp: - l, n, h = inp.partition("-") - l = int(l) - h = int(h) - r = range(l, h + 1) - - ret = [] - if package: - for p in self.cache: - if p.pid in r: - ret.append(p.pid) - else: - for l in self.links.links: - if l.lid in r: - ret.append(l.lid) - - return ret - - else: - return [int(x) for x in inp.split(",")] diff --git a/module/common/APIExerciser.py b/module/common/APIExerciser.py deleted file mode 100644 index 34b1529b5..000000000 --- a/module/common/APIExerciser.py +++ /dev/null @@ -1,157 +0,0 @@ -# -*- coding: utf-8 -*- - -import string -from threading import Thread -from random import choice, random, sample, randint -from time import time, sleep -from math import floor -import gc - -from traceback import print_exc, format_exc - -from module.remote.thriftbackend.ThriftClient import ThriftClient, Destination - -def createURLs(): - """ create some urls, some may fail """ - urls = [] - for x in range(0, randint(20, 100)): - name = "DEBUG_API" - if randint(0, 5) == 5: - name = "" #this link will fail - - urls.append(name + "".join(sample(string.ascii_letters, randint(10, 20)))) - - return urls - -AVOID = (0, 3, 8) - -idPool = 0 -sumCalled = 0 - - -def startApiExerciser(core, n): - for i in range(n): - APIExerciser(core).start() - -class APIExerciser(Thread): - - - def __init__(self, core, thrift=False, user=None, pw=None): - global idPool - - Thread.__init__(self) - self.setDaemon(True) - self.core = core - self.count = 0 #number of methods - self.time = time() - - if thrift: - self.api = ThriftClient(user=user, password=pw) - else: - self.api = core.api - - - self.id = idPool - - idPool += 1 - - #self.start() - - def run(self): - - self.core.log.info("API Excerciser started %d" % self.id) - - out = open("error.log", "ab") - #core errors are not logged of course - out.write("\n" + "Starting\n") - out.flush() - - while True: - try: - self.testAPI() - except Exception: - self.core.log.error("Excerciser %d throw an execption" % self.id) - print_exc() - out.write(format_exc() + 2 * "\n") - out.flush() - - if not self.count % 100: - self.core.log.info("Exerciser %d tested %d api calls" % (self.id, self.count)) - if not self.count % 1000: - out.flush() - - if not sumCalled % 1000: #not thread safe - self.core.log.info("Exercisers tested %d api calls" % sumCalled) - persec = sumCalled / (time() - self.time) - self.core.log.info("Approx. %.2f calls per second." % persec) - self.core.log.info("Approx. %.2f ms per call." % (1000 / persec)) - self.core.log.info("Collected garbage: %d" % gc.collect()) - - - #sleep(random() / 500) - - def testAPI(self): - global sumCalled - - m = ["statusDownloads", "statusServer", "addPackage", "getPackageData", "getFileData", "deleteFiles", - "deletePackages", "getQueue", "getCollector", "getQueueData", "getCollectorData", "isCaptchaWaiting", - "getCaptchaTask", "stopAllDownloads", "getAllInfo", "getServices" , "getAccounts", "getAllUserData"] - - method = choice(m) - #print "Testing:", method - - if hasattr(self, method): - res = getattr(self, method)() - else: - res = getattr(self.api, method)() - - self.count += 1 - sumCalled += 1 - - #print res - - def addPackage(self): - name = "".join(sample(string.ascii_letters, 10)) - urls = createURLs() - - self.api.addPackage(name, urls, choice([Destination.Queue, Destination.Collector])) - - - def deleteFiles(self): - info = self.api.getQueueData() - if not info: return - - pack = choice(info) - fids = pack.links - - if len(fids): - fids = [f.fid for f in sample(fids, randint(1, max(len(fids) / 2, 1)))] - self.api.deleteFiles(fids) - - - def deletePackages(self): - info = choice([self.api.getQueue(), self.api.getCollector()]) - if not info: return - - pids = [p.pid for p in info] - if len(pids): - pids = sample(pids, randint(1, max(floor(len(pids) / 2.5), 1))) - self.api.deletePackages(pids) - - def getFileData(self): - info = self.api.getQueueData() - if info: - p = choice(info) - if p.links: - self.api.getFileData(choice(p.links).fid) - - def getPackageData(self): - info = self.api.getQueue() - if info: - self.api.getPackageData(choice(info).pid) - - def getAccounts(self): - self.api.getAccounts(False) - - def getCaptchaTask(self): - self.api.getCaptchaTask(False) diff --git a/module/common/pavement.py b/module/common/pavement.py deleted file mode 100644 index 9d36e9c1d..000000000 --- a/module/common/pavement.py +++ /dev/null @@ -1,412 +0,0 @@ -# -*- coding: utf-8 -*- - -from paver.easy import * -from paver.setuputils import setup -from paver.doctools import cog - -import os -import sys -import shutil -import re -from glob import glob -from tempfile import mkdtemp -from urllib import urlretrieve -from subprocess import call, Popen, PIPE -from zipfile import ZipFile - -PROJECT_DIR = path(__file__).dirname() -sys.path.append(PROJECT_DIR) - -options = environment.options -path('pyload').mkdir() - -extradeps = [] -if sys.version_info <= (2, 5): - extradeps += 'simplejson' - -setup( - name="pyload", - version="0.4.10", - description='Fast, lightweight and full featured download manager.', - long_description=open(PROJECT_DIR / "README.md").read(), - keywords = ('pyload', 'download-manager', 'one-click-hoster', 'download'), - url="http://pyload.org", - download_url='http://pyload.org/download', - license='GPL v3', - author="pyLoad Team", - author_email="support@pyload.org", - platforms = ('Any',), - #package_dir={'pyload': 'src'}, - packages=['pyload'], - #package_data=find_package_data(), - #data_files=[], - include_package_data=True, - exclude_package_data={'pyload': ['docs*', 'scripts*', 'tests*']}, #exluced from build but not from sdist - # 'bottle >= 0.10.0' not in list, because its small and contain little modifications - install_requires=['thrift >= 0.8.0', 'jinja2', 'pycurl', 'Beaker', 'BeautifulSoup >= 3.2, < 3.3'] + extradeps, - extras_require={ - 'SSL': ["pyOpenSSL"], - 'DLC': ['pycrypto'], - 'lightweight webserver': ['bjoern'], - 'RSS plugins': ['feedparser'], - }, - #setup_requires=["setuptools_hg"], - entry_points={ - 'console_scripts': [ - 'pyLoadCore = pyLoadCore:main', - 'pyLoadCli = pyLoadCli:main' - ]}, - zip_safe=False, - classifiers=[ - "Development Status :: 5 - Production/Stable", - "Topic :: Internet :: WWW/HTTP", - "Environment :: Console", - "Environment :: Web Environment", - "Intended Audience :: End Users/Desktop", - "License :: OSI Approved :: GNU General Public License (GPL)", - "Operating System :: OS Independent", - "Programming Language :: Python :: 2" - ] -) - -options( - sphinx=Bunch( - builddir="_build", - sourcedir="" - ), - get_source=Bunch( - src="https://bitbucket.org/spoob/pyload/get/tip.zip", - rev=None, - clean=False - ), - thrift=Bunch( - path="../thrift/trunk/compiler/cpp/thrift", - gen="" - ), - virtualenv=Bunch( - dir="env", - python="python2", - virtual="virtualenv2", - ), - cog=Bunch( - pattern="*.py", - ) -) - -# xgettext args -xargs = ["--language=Python", "--add-comments=L10N", - "--from-code=utf-8", "--copyright-holder=pyLoad Team", "--package-name=pyLoad", - "--package-version=%s" % options.version, "--msgid-bugs-address='bugs@pyload.org'"] - -@task -@needs('cog') -def html(): - """Build html documentation""" - module = path("docs") / "module" - module.rmtree() - call_task('paver.doctools.html') - - -@task -@cmdopts([ - ('src=', 's', 'Url to source'), - ('rev=', 'r', "HG revision"), - ("clean", 'c', 'Delete old source folder') -]) -def get_source(options): - """ Downloads pyload source from bitbucket tip or given rev""" - if options.rev: options.url = "https://bitbucket.org/spoob/pyload/get/%s.zip" % options.rev - - pyload = path("pyload") - - if len(pyload.listdir()) and not options.clean: - return - elif pyload.exists(): - pyload.rmtree() - - urlretrieve(options.src, "pyload_src.zip") - zip = ZipFile("pyload_src.zip") - zip.extractall() - path("pyload_src.zip").remove() - - folder = [x for x in path(".").dirs() if x.name.startswith("spoob-pyload-")][0] - folder.move(pyload) - - change_mode(pyload, 0644) - change_mode(pyload, 0755, folder=True) - - for file in pyload.files(): - if file.name.endswith(".py"): - file.chmod(0755) - - (pyload / ".hgtags").remove() - (pyload / ".gitignore").remove() - #(pyload / "docs").rmtree() - - f = open(pyload / "__init__.py", "wb") - f.close() - - #options.setup.packages = find_packages() - #options.setup.package_data = find_package_data() - - -@task -@needs('clean', 'generate_setup', 'minilib', 'get_source', 'setuptools.command.sdist') -def sdist(): - """ Build source code package with distutils """ - - -@task -@cmdopts([ - ('path=', 'p', 'Thrift path'), - ('gen=', 'g', "Extra --gen option") -]) -def thrift(options): - """ Generate Thrift stubs """ - - print "add import for TApplicationException manually as long it is not fixed" - - outdir = path("module") / "remote" / "thriftbackend" - (outdir / "gen-py").rmtree() - - cmd = [options.thrift.path, "-strict", "-o", outdir, "--gen", "py:slots, dynamic", outdir / "pyload.thrift"] - - if options.gen: - cmd.insert(len(cmd) - 1, "--gen") - cmd.insert(len(cmd) - 1, options.gen) - - print "running", cmd - - p = Popen(cmd) - p.communicate() - - (outdir / "thriftgen").rmtree() - (outdir / "gen-py").move(outdir / "thriftgen") - - #create light ttypes - from module.remote.socketbackend.create_ttypes import main - main() - -@task -def compile_js(): - """ Compile .coffee files to javascript""" - - root = path("module") / "web" / "media" / "js" - for f in root.glob("*.coffee"): - print "generate", f - coffee = Popen(["coffee", "-cbs"], stdin=open(f, "rb"), stdout=PIPE) - yui = Popen(["yuicompressor", "--type", "js"], stdin=coffee.stdout, stdout=PIPE) - coffee.stdout.close() - content = yui.communicate()[0] - with open(root / f.name.replace(".coffee", ".js"), "wb") as js: - js.write("{% autoescape true %}\n") - js.write(content) - js.write("\n{% endautoescape %}") - - -@task -def generate_locale(): - """ Generates localization files """ - - EXCLUDE = ["BeautifulSoup.py", "module/cli", "web/locale", "web/ajax", "web/cnl", "web/pyload", - "setup.py"] - makepot("core", path("module"), EXCLUDE, "./pyload.py\n") - - makepot("cli", path("module") / "cli", [], includes="./pyload-cli.py\n") - makepot("setup", "", [], includes="./module/setup.py\n") - - EXCLUDE = ["ServerThread.py", "web/media/default"] - - # strings from js files - strings = set() - - for fi in path("module/web").walkfiles(): - if not fi.name.endswith(".js") and not fi.endswith(".coffee"): continue - with open(fi, "rb") as c: - content = c.read() - - strings.update(re.findall(r"_\s*\(\s*\"([^\"]+)", content)) - strings.update(re.findall(r"_\s*\(\s*\'([^\']+)", content)) - - trans = path("module") / "web" / "translations.js" - - with open(trans, "wb") as js: - for s in strings: - js.write('_("%s")\n' % s) - - makepot("django", path("module/web"), EXCLUDE, "./%s\n" % trans.relpath(), [".py", ".html"], ["--language=Python"]) - - trans.remove() - - path("includes.txt").remove() - - print "Locale generated" - - -@task -@cmdopts([ - ('key=', 'k', 'api key') -]) -def upload_translations(options): - """ Uploads the locale files to translation server """ - tmp = path(mkdtemp()) - - shutil.copy('locale/crowdin.yaml', tmp) - os.mkdir(tmp / 'pyLoad') - for f in glob('locale/*.pot'): - if os.path.isfile(f): - shutil.copy(f, tmp / 'pyLoad') - - config = tmp / 'crowdin.yaml' - content = open(config, 'rb').read() - content = content.format(key=options.key, tmp=tmp) - f = open(config, 'wb') - f.write(content) - f.close() - - call(['crowdin-cli', '-c', config, 'upload', 'source']) - - shutil.rmtree(tmp) - - print "Translations uploaded" - - -@task -@cmdopts([ - ('key=', 'k', 'api key') -]) -def download_translations(options): - """ Downloads the translated files from translation server """ - tmp = path(mkdtemp()) - - shutil.copy('locale/crowdin.yaml', tmp) - os.mkdir(tmp / 'pyLoad') - for f in glob('locale/*.pot'): - if os.path.isfile(f): - shutil.copy(f, tmp / 'pyLoad') - - config = tmp / 'crowdin.yaml' - content = open(config, 'rb').read() - content = content.format(key=options.key, tmp=tmp) - f = open(config, 'wb') - f.write(content) - f.close() - - call(['crowdin-cli', '-c', config, 'download']) - - for language in (tmp / 'pyLoad').listdir(): - if not language.isdir(): - continue - - target = path('locale') / language.basename() - print "Copy language %s" % target - if target.exists(): - shutil.rmtree(target) - - shutil.copytree(language, target) - - shutil.rmtree(tmp) - - -@task -def compile_translations(): - """ Compile PO files to MO """ - for language in path('locale').listdir(): - if not language.isdir(): - continue - - for f in glob(language / 'LC_MESSAGES' / '*.po'): - print "Compiling %s" % f - call(['msgfmt', '-o', f.replace('.po', '.mo'), f]) - - -@task -def tests(): - call(["nosetests2"]) - -@task -def virtualenv(options): - """Setup virtual environment""" - if path(options.dir).exists(): - return - - call([options.virtual, "--no-site-packages", "--python", options.python, options.dir]) - print "$ source %s/bin/activate" % options.dir - - -@task -def clean_env(): - """Deletes the virtual environment""" - env = path(options.virtualenv.dir) - if env.exists(): - env.rmtree() - - -@task -@needs('generate_setup', 'minilib', 'get_source', 'virtualenv') -def env_install(): - """Install pyLoad into the virtualenv""" - venv = options.virtualenv - call([path(venv.dir) / "bin" / "easy_install", "."]) - - -@task -def clean(): - """Cleans build directories""" - path("build").rmtree() - path("dist").rmtree() - - -#helper functions - -def walk_trans(path, EXCLUDE, endings=[".py"]): - result = "" - - for f in path.walkfiles(): - if [True for x in EXCLUDE if x in f.dirname().relpath()]: continue - if f.name in EXCLUDE: continue - - for e in endings: - if f.name.endswith(e): - result += "./%s\n" % f.relpath() - break - - return result - - -def makepot(domain, p, excludes=[], includes="", endings=[".py"], xxargs=[]): - print "Generate %s.pot" % domain - - f = open("includes.txt", "wb") - if includes: - f.write(includes) - - if p: - f.write(walk_trans(path(p), excludes, endings)) - - f.close() - - call(["xgettext", "--files-from=includes.txt", "--default-domain=%s" % domain] + xargs + xxargs) - - # replace charset und move file - with open("%s.po" % domain, "rb") as f: - content = f.read() - - path("%s.po" % domain).remove() - content = content.replace("charset=CHARSET", "charset=UTF-8") - - with open("locale/%s.pot" % domain, "wb") as f: - f.write(content) - - -def change_owner(dir, uid, gid): - for p in dir.walk(): - p.chown(uid, gid) - - -def change_mode(dir, mode, folder=False): - for p in dir.walk(): - if folder and p.isdir(): - p.chmod(mode) - elif p.isfile() and not folder: - p.chmod(mode) diff --git a/module/common/test_api.py b/module/common/test_api.py deleted file mode 100644 index f8901f731..000000000 --- a/module/common/test_api.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.common import APIExerciser -from nose.tools import nottest - - -class TestApi: - - def __init__(self): - self.api = APIExerciser.APIExerciser(None, True, "TestUser", "pwhere") - - def test_login(self): - assert self.api.api.login("crapp", "wrong pw") is False - - #takes really long, only test when needed - @nottest - def test_random(self): - - for i in range(0, 100): - self.api.testAPI() diff --git a/module/database/DatabaseBackend.py b/module/database/DatabaseBackend.py deleted file mode 100644 index df2660063..000000000 --- a/module/database/DatabaseBackend.py +++ /dev/null @@ -1,305 +0,0 @@ -""" - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. - - @author: RaNaN - @author: mkaay -""" -from threading import Thread -from threading import Event -from os import remove -from os.path import exists -from shutil import move - -from Queue import Queue -from traceback import print_exc - -from module.utils import chmod - -try: - from pysqlite2 import dbapi2 as sqlite3 -except: - import sqlite3 - -DB_VERSION = 4 - -class style: - db = None - - @classmethod - def setDB(cls, db): - cls.db = db - - @classmethod - def inner(cls, f): - @staticmethod - def x(*args, **kwargs): - if cls.db: - return f(cls.db, *args, **kwargs) - return x - - @classmethod - def queue(cls, f): - @staticmethod - def x(*args, **kwargs): - if cls.db: - return cls.db.queue(f, *args, **kwargs) - return x - - @classmethod - def async(cls, f): - @staticmethod - def x(*args, **kwargs): - if cls.db: - return cls.db.async(f, *args, **kwargs) - return x - -class DatabaseJob: - def __init__(self, f, *args, **kwargs): - self.done = Event() - - self.f = f - self.args = args - self.kwargs = kwargs - - self.result = None - self.exception = False - -# import inspect -# self.frame = inspect.currentframe() - - def __repr__(self): - from os.path import basename - frame = self.frame.f_back - output = "" - for i in range(5): - output += "\t%s:%s, %s\n" % (basename(frame.f_code.co_filename), frame.f_lineno, frame.f_code.co_name) - frame = frame.f_back - del frame - del self.frame - - return "DataBase Job %s:%s\n%sResult: %s" % (self.f.__name__, self.args[1:], output, self.result) - - def processJob(self): - try: - self.result = self.f(*self.args, **self.kwargs) - except Exception, e: - print_exc() - try: - print "Database Error @", self.f.__name__, self.args[1:], self.kwargs, e - except: - pass - - self.exception = e - finally: - self.done.set() - - def wait(self): - self.done.wait() - -class DatabaseBackend(Thread): - subs = [] - def __init__(self, core): - Thread.__init__(self) - self.setDaemon(True) - self.core = core - - self.jobs = Queue() - - self.setuplock = Event() - - style.setDB(self) - - def setup(self): - self.start() - self.setuplock.wait() - - def run(self): - """main loop, which executes commands""" - convert = self._checkVersion() #returns None or current version - - self.conn = sqlite3.connect("files.db") - chmod("files.db", 0600) - - self.c = self.conn.cursor() #compatibility - - if convert is not None: - self._convertDB(convert) - - self._createTables() - self._migrateUser() - - self.conn.commit() - - self.setuplock.set() - - while True: - j = self.jobs.get() - if j == "quit": - self.c.close() - self.conn.close() - break - j.processJob() - - @style.queue - def shutdown(self): - self.conn.commit() - self.jobs.put("quit") - - def _checkVersion(self): - """ check db version and delete it if needed""" - if not exists("files.version"): - f = open("files.version", "wb") - f.write(str(DB_VERSION)) - f.close() - return - - f = open("files.version", "rb") - v = int(f.read().strip()) - f.close() - if v < DB_VERSION: - if v < 2: - try: - self.manager.core.log.warning(_("Filedatabase was deleted due to incompatible version.")) - except: - print "Filedatabase was deleted due to incompatible version." - remove("files.version") - move("files.db", "files.backup.db") - f = open("files.version", "wb") - f.write(str(DB_VERSION)) - f.close() - return v - - def _convertDB(self, v): - try: - getattr(self, "_convertV%i" % v)() - except: - try: - self.core.log.error(_("Filedatabase could NOT be converted.")) - except: - print "Filedatabase could NOT be converted." - - #convert scripts start----------------------------------------------------- - - def _convertV2(self): - self.c.execute('CREATE TABLE IF NOT EXISTS "storage" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "identifier" TEXT NOT NULL, "key" TEXT NOT NULL, "value" TEXT DEFAULT "")') - try: - self.manager.core.log.info(_("Database was converted from v2 to v3.")) - except: - print "Database was converted from v2 to v3." - self._convertV3() - - def _convertV3(self): - self.c.execute('CREATE TABLE IF NOT EXISTS "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT NOT NULL, "email" TEXT DEFAULT "" NOT NULL, "password" TEXT NOT NULL, "role" INTEGER DEFAULT 0 NOT NULL, "permission" INTEGER DEFAULT 0 NOT NULL, "template" TEXT DEFAULT "default" NOT NULL)') - try: - self.manager.core.log.info(_("Database was converted from v3 to v4.")) - except: - print "Database was converted from v3 to v4." - - #convert scripts end------------------------------------------------------- - - def _createTables(self): - """create tables for database""" - - self.c.execute('CREATE TABLE IF NOT EXISTS "packages" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT NOT NULL, "folder" TEXT, "password" TEXT DEFAULT "", "site" TEXT DEFAULT "", "queue" INTEGER DEFAULT 0 NOT NULL, "packageorder" INTEGER DEFAULT 0 NOT NULL)') - self.c.execute('CREATE TABLE IF NOT EXISTS "links" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "url" TEXT NOT NULL, "name" TEXT, "size" INTEGER DEFAULT 0 NOT NULL, "status" INTEGER DEFAULT 3 NOT NULL, "plugin" TEXT DEFAULT "BasePlugin" NOT NULL, "error" TEXT DEFAULT "", "linkorder" INTEGER DEFAULT 0 NOT NULL, "package" INTEGER DEFAULT 0 NOT NULL, FOREIGN KEY(package) REFERENCES packages(id))') - self.c.execute('CREATE INDEX IF NOT EXISTS "pIdIndex" ON links(package)') - self.c.execute('CREATE TABLE IF NOT EXISTS "storage" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "identifier" TEXT NOT NULL, "key" TEXT NOT NULL, "value" TEXT DEFAULT "")') - self.c.execute('CREATE TABLE IF NOT EXISTS "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT NOT NULL, "email" TEXT DEFAULT "" NOT NULL, "password" TEXT NOT NULL, "role" INTEGER DEFAULT 0 NOT NULL, "permission" INTEGER DEFAULT 0 NOT NULL, "template" TEXT DEFAULT "default" NOT NULL)') - - self.c.execute('CREATE VIEW IF NOT EXISTS "pstats" AS \ - SELECT p.id AS id, SUM(l.size) AS sizetotal, COUNT(l.id) AS linkstotal, linksdone, sizedone\ - FROM packages p JOIN links l ON p.id = l.package LEFT OUTER JOIN\ - (SELECT p.id AS id, COUNT(*) AS linksdone, SUM(l.size) AS sizedone \ - FROM packages p JOIN links l ON p.id = l.package AND l.status in (0, 4, 13) GROUP BY p.id) s ON s.id = p.id \ - GROUP BY p.id') - - #try to lower ids - self.c.execute('SELECT max(id) FROM LINKS') - fid = self.c.fetchone()[0] - if fid: - fid = int(fid) - else: - fid = 0 - self.c.execute('UPDATE SQLITE_SEQUENCE SET seq=? WHERE name=?', (fid, "links")) - - - self.c.execute('SELECT max(id) FROM packages') - pid = self.c.fetchone()[0] - if pid: - pid = int(pid) - else: - pid = 0 - self.c.execute('UPDATE SQLITE_SEQUENCE SET seq=? WHERE name=?', (pid, "packages")) - - self.c.execute('VACUUM') - - - def _migrateUser(self): - if exists("pyload.db"): - try: - self.core.log.info(_("Converting old Django DB")) - except: - print "Converting old Django DB" - conn = sqlite3.connect('pyload.db') - c = conn.cursor() - c.execute("SELECT username, password, email from auth_user WHERE is_superuser") - users = [] - for r in c: - pw = r[1].split("$") - users.append((r[0], pw[1] + pw[2], r[2])) - c.close() - conn.close() - - self.c.executemany("INSERT INTO users(name, password, email) VALUES (?, ?, ?)", users) - move("pyload.db", "pyload.old.db") - - def createCursor(self): - return self.conn.cursor() - - @style.async - def commit(self): - self.conn.commit() - - @style.queue - def syncSave(self): - self.conn.commit() - - @style.async - def rollback(self): - self.conn.rollback() - - def async(self, f, *args, **kwargs): - args = (self,) + args - job = DatabaseJob(f, *args, **kwargs) - self.jobs.put(job) - - def queue(self, f, *args, **kwargs): - args = (self,) + args - job = DatabaseJob(f, *args, **kwargs) - self.jobs.put(job) - job.wait() - return job.result - - @classmethod - def registerSub(cls, klass): - cls.subs.append(klass) - - @classmethod - def unregisterSub(cls, klass): - cls.subs.remove(klass) - - def __getattr__(self, attr): - for sub in DatabaseBackend.subs: - if hasattr(sub, attr): - return getattr(sub, attr) diff --git a/module/database/FileDatabase.py b/module/database/FileDatabase.py deleted file mode 100644 index f01d02769..000000000 --- a/module/database/FileDatabase.py +++ /dev/null @@ -1,891 +0,0 @@ -""" - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. - - @author: RaNaN - @author: mkaay -""" - - -from threading import RLock -from time import time - -from module.utils import formatSize, lock -from module.PullEvents import InsertEvent, ReloadAllEvent, RemoveEvent, UpdateEvent -from module.PyPackage import PyPackage -from module.PyFile import PyFile -from module.database import style, DatabaseBackend - -try: - from pysqlite2 import dbapi2 as sqlite3 -except: - import sqlite3 - - -class FileHandler: - """Handles all request made to obtain information, - modify status or other request for links or packages""" - - def __init__(self, core): - """Constructor""" - self.core = core - - # translations - self.statusMsg = [_("finished"), _("offline"), _("online"), _("queued"), _("skipped"), _("waiting"), _("temp. offline"), _("starting"), _("failed"), _("aborted"), _("decrypting"), _("custom"), _("downloading"), _("processing"), _("unknown")] - - self.cache = {} #holds instances for files - self.packageCache = {} # same for packages - #@TODO: purge the cache - - self.jobCache = {} - - self.lock = RLock() #@TODO should be a Lock w/o R - #self.lock._Verbose__verbose = True - - self.filecount = -1 # if an invalid value is set get current value from db - self.queuecount = -1 #number of package to be loaded - self.unchanged = False #determines if any changes was made since last call - - self.db = self.core.db - - def change(func): - def new(*args): - args[0].unchanged = False - args[0].filecount = -1 - args[0].queuecount = -1 - args[0].jobCache = {} - return func(*args) - return new - - #-------------------------------------------------------------------------- - def save(self): - """saves all data to backend""" - self.db.commit() - - #-------------------------------------------------------------------------- - def syncSave(self): - """saves all data to backend and waits until all data are written""" - pyfiles = self.cache.values() - for pyfile in pyfiles: - pyfile.sync() - - pypacks = self.packageCache.values() - for pypack in pypacks: - pypack.sync() - - self.db.syncSave() - - @lock - def getCompleteData(self, queue=1): - """gets a complete data representation""" - - data = self.db.getAllLinks(queue) - packs = self.db.getAllPackages(queue) - - data.update([(x.id, x.toDbDict()[x.id]) for x in self.cache.values()]) - - for x in self.packageCache.itervalues(): - if x.queue != queue or x.id not in packs: continue - packs[x.id].update(x.toDict()[x.id]) - - for key, value in data.iteritems(): - if value["package"] in packs: - packs[value["package"]]["links"][key] = value - - return packs - - @lock - def getInfoData(self, queue=1): - """gets a data representation without links""" - - packs = self.db.getAllPackages(queue) - for x in self.packageCache.itervalues(): - if x.queue != queue or x.id not in packs: continue - packs[x.id].update(x.toDict()[x.id]) - - return packs - - @lock - @change - def addLinks(self, urls, package): - """adds links""" - - self.core.hookManager.dispatchEvent("linksAdded", urls, package) - - data = self.core.pluginManager.parseUrls(urls) - - self.db.addLinks(data, package) - self.core.threadManager.createInfoThread(data, package) - - #@TODO change from reloadAll event to package update event - self.core.pullManager.addEvent(ReloadAllEvent("collector")) - - #-------------------------------------------------------------------------- - @lock - @change - def addPackage(self, name, folder, queue=0): - """adds a package, default to link collector""" - lastID = self.db.addPackage(name, folder, queue) - p = self.db.getPackage(lastID) - e = InsertEvent("pack", lastID, p.order, "collector" if not queue else "queue") - self.core.pullManager.addEvent(e) - return lastID - - #-------------------------------------------------------------------------- - @lock - @change - def deletePackage(self, id): - """delete package and all contained links""" - - p = self.getPackage(id) - if not p: - if id in self.packageCache: del self.packageCache[id] - return - - oldorder = p.order - queue = p.queue - - e = RemoveEvent("pack", id, "collector" if not p.queue else "queue") - - pyfiles = self.cache.values() - - for pyfile in pyfiles: - if pyfile.packageid == id: - pyfile.abortDownload() - pyfile.release() - - self.db.deletePackage(p) - self.core.pullManager.addEvent(e) - self.core.hookManager.dispatchEvent("packageDeleted", id) - - if id in self.packageCache: - del self.packageCache[id] - - packs = self.packageCache.values() - for pack in packs: - if pack.queue == queue and pack.order > oldorder: - pack.order -= 1 - pack.notifyChange() - - #-------------------------------------------------------------------------- - @lock - @change - def deleteLink(self, id): - """deletes links""" - - f = self.getFile(id) - if not f: - return None - - pid = f.packageid - e = RemoveEvent("file", id, "collector" if not f.package().queue else "queue") - - oldorder = f.order - - if id in self.core.threadManager.processingIds(): - self.cache[id].abortDownload() - - if id in self.cache: - del self.cache[id] - - self.db.deleteLink(f) - - self.core.pullManager.addEvent(e) - - p = self.getPackage(pid) - if not len(p.getChildren()): - p.delete() - - pyfiles = self.cache.values() - for pyfile in pyfiles: - if pyfile.packageid == pid and pyfile.order > oldorder: - pyfile.order -= 1 - pyfile.notifyChange() - - #-------------------------------------------------------------------------- - def releaseLink(self, id): - """removes pyfile from cache""" - if id in self.cache: - del self.cache[id] - - #-------------------------------------------------------------------------- - def releasePackage(self, id): - """removes package from cache""" - if id in self.packageCache: - del self.packageCache[id] - - #-------------------------------------------------------------------------- - def updateLink(self, pyfile): - """updates link""" - self.db.updateLink(pyfile) - - e = UpdateEvent("file", pyfile.id, "collector" if not pyfile.package().queue else "queue") - self.core.pullManager.addEvent(e) - - #-------------------------------------------------------------------------- - def updatePackage(self, pypack): - """updates a package""" - self.db.updatePackage(pypack) - - e = UpdateEvent("pack", pypack.id, "collector" if not pypack.queue else "queue") - self.core.pullManager.addEvent(e) - - #-------------------------------------------------------------------------- - def getPackage(self, id): - """return package instance""" - - if id in self.packageCache: - return self.packageCache[id] - else: - return self.db.getPackage(id) - - #-------------------------------------------------------------------------- - def getPackageData(self, id): - """returns dict with package information""" - pack = self.getPackage(id) - - if not pack: - return None - - pack = pack.toDict()[id] - - data = self.db.getPackageData(id) - - tmplist = [] - - cache = self.cache.values() - for x in cache: - if int(x.toDbDict()[x.id]["package"]) == int(id): - tmplist.append((x.id, x.toDbDict()[x.id])) - data.update(tmplist) - - pack["links"] = data - - return pack - - #-------------------------------------------------------------------------- - def getFileData(self, id): - """returns dict with file information""" - if id in self.cache: - return self.cache[id].toDbDict() - - return self.db.getLinkData(id) - - #-------------------------------------------------------------------------- - def getFile(self, id): - """returns pyfile instance""" - if id in self.cache: - return self.cache[id] - else: - return self.db.getFile(id) - - #-------------------------------------------------------------------------- - @lock - def getJob(self, occ): - """get suitable job""" - - #@TODO clean mess - #@TODO improve selection of valid jobs - - if occ in self.jobCache: - if self.jobCache[occ]: - id = self.jobCache[occ].pop() - if id == "empty": - pyfile = None - self.jobCache[occ].append("empty") - else: - pyfile = self.getFile(id) - else: - jobs = self.db.getJob(occ) - jobs.reverse() - if not jobs: - self.jobCache[occ].append("empty") - pyfile = None - else: - self.jobCache[occ].extend(jobs) - pyfile = self.getFile(self.jobCache[occ].pop()) - - else: - self.jobCache = {} #better not caching to much - jobs = self.db.getJob(occ) - jobs.reverse() - self.jobCache[occ] = jobs - - if not jobs: - self.jobCache[occ].append("empty") - pyfile = None - else: - pyfile = self.getFile(self.jobCache[occ].pop()) - - #@TODO: maybe the new job has to be approved... - - - #pyfile = self.getFile(self.jobCache[occ].pop()) - return pyfile - - @lock - def getDecryptJob(self): - """return job for decrypting""" - if "decrypt" in self.jobCache: - return None - - plugins = self.core.pluginManager.crypterPlugins.keys() + self.core.pluginManager.containerPlugins.keys() - plugins = str(tuple(plugins)) - - jobs = self.db.getPluginJob(plugins) - if jobs: - return self.getFile(jobs[0]) - else: - self.jobCache["decrypt"] = "empty" - return None - - def getFileCount(self): - """returns number of files""" - - if self.filecount == -1: - self.filecount = self.db.filecount(1) - - return self.filecount - - def getQueueCount(self, force=False): - """number of files that have to be processed""" - if self.queuecount == -1 or force: - self.queuecount = self.db.queuecount(1) - - return self.queuecount - - def checkAllLinksFinished(self): - """checks if all files are finished and dispatch event""" - - if not self.getQueueCount(True): - self.core.hookManager.dispatchEvent("allDownloadsFinished") - self.core.log.debug("All downloads finished") - return True - - return False - - def checkAllLinksProcessed(self, fid): - """checks if all files was processed and pyload would idle now, needs fid which will be ignored when counting""" - - # reset count so statistic will update (this is called when dl was processed) - self.resetCount() - - if not self.db.processcount(1, fid): - self.core.hookManager.dispatchEvent("allDownloadsProcessed") - self.core.log.debug("All downloads processed") - return True - - return False - - def resetCount(self): - self.queuecount = -1 - - @lock - @change - def restartPackage(self, id): - """restart package""" - pyfiles = self.cache.values() - for pyfile in pyfiles: - if pyfile.packageid == id: - self.restartFile(pyfile.id) - - self.db.restartPackage(id) - - if id in self.packageCache: - self.packageCache[id].setFinished = False - - e = UpdateEvent("pack", id, "collector" if not self.getPackage(id).queue else "queue") - self.core.pullManager.addEvent(e) - - @lock - @change - def restartFile(self, id): - """ restart file""" - if id in self.cache: - self.cache[id].status = 3 - self.cache[id].name = self.cache[id].url - self.cache[id].error = "" - self.cache[id].abortDownload() - - - self.db.restartFile(id) - - e = UpdateEvent("file", id, "collector" if not self.getFile(id).package().queue else "queue") - self.core.pullManager.addEvent(e) - - @lock - @change - def setPackageLocation(self, id, queue): - """push package to queue""" - - p = self.db.getPackage(id) - oldorder = p.order - - e = RemoveEvent("pack", id, "collector" if not p.queue else "queue") - self.core.pullManager.addEvent(e) - - self.db.clearPackageOrder(p) - - p = self.db.getPackage(id) - - p.queue = queue - self.db.updatePackage(p) - - self.db.reorderPackage(p, -1, True) - - packs = self.packageCache.values() - for pack in packs: - if pack.queue != queue and pack.order > oldorder: - pack.order -= 1 - pack.notifyChange() - - self.db.commit() - self.releasePackage(id) - p = self.getPackage(id) - - e = InsertEvent("pack", id, p.order, "collector" if not p.queue else "queue") - self.core.pullManager.addEvent(e) - - @lock - @change - def reorderPackage(self, id, position): - p = self.getPackage(id) - - e = RemoveEvent("pack", id, "collector" if not p.queue else "queue") - self.core.pullManager.addEvent(e) - self.db.reorderPackage(p, position) - - packs = self.packageCache.values() - for pack in packs: - if pack.queue != p.queue or pack.order < 0 or pack == p: continue - if p.order > position: - if pack.order >= position and pack.order < p.order: - pack.order += 1 - pack.notifyChange() - elif p.order < position: - if pack.order <= position and pack.order > p.order: - pack.order -= 1 - pack.notifyChange() - - p.order = position - self.db.commit() - - e = InsertEvent("pack", id, position, "collector" if not p.queue else "queue") - self.core.pullManager.addEvent(e) - - @lock - @change - def reorderFile(self, id, position): - f = self.getFileData(id) - f = f[id] - - e = RemoveEvent("file", id, "collector" if not self.getPackage(f["package"]).queue else "queue") - self.core.pullManager.addEvent(e) - - self.db.reorderLink(f, position) - - pyfiles = self.cache.values() - for pyfile in pyfiles: - if pyfile.packageid != f["package"] or pyfile.order < 0: continue - if f["order"] > position: - if pyfile.order >= position and pyfile.order < f["order"]: - pyfile.order += 1 - pyfile.notifyChange() - elif f["order"] < position: - if pyfile.order <= position and pyfile.order > f["order"]: - pyfile.order -= 1 - pyfile.notifyChange() - - if id in self.cache: - self.cache[id].order = position - - self.db.commit() - - e = InsertEvent("file", id, position, "collector" if not self.getPackage(f["package"]).queue else "queue") - self.core.pullManager.addEvent(e) - - @change - def updateFileInfo(self, data, pid): - """ updates file info (name, size, status, url)""" - ids = self.db.updateLinkInfo(data) - e = UpdateEvent("pack", pid, "collector" if not self.getPackage(pid).queue else "queue") - self.core.pullManager.addEvent(e) - - def checkPackageFinished(self, pyfile): - """ checks if package is finished and calls hookmanager """ - - ids = self.db.getUnfinished(pyfile.packageid) - if not ids or (pyfile.id in ids and len(ids) == 1): - if not pyfile.package().setFinished: - self.core.log.info(_("Package finished: %s") % pyfile.package().name) - self.core.hookManager.packageFinished(pyfile.package()) - pyfile.package().setFinished = True - - - def reCheckPackage(self, pid): - """ recheck links in package """ - data = self.db.getPackageData(pid) - - urls = [] - - for pyfile in data.itervalues(): - if pyfile["status"] not in (0, 12, 13): - urls.append((pyfile["url"], pyfile["plugin"])) - - self.core.threadManager.createInfoThread(urls, pid) - - @lock - @change - def deleteFinishedLinks(self): - """ deletes finished links and packages, return deleted packages """ - - old_packs = self.getInfoData(0) - old_packs.update(self.getInfoData(1)) - - self.db.deleteFinished() - - new_packs = self.db.getAllPackages(0) - new_packs.update(self.db.getAllPackages(1)) - #get new packages only from db - - deleted = [] - for id in old_packs.iterkeys(): - if id not in new_packs: - deleted.append(id) - self.deletePackage(int(id)) - - return deleted - - @lock - @change - def restartFailed(self): - """ restart all failed links """ - self.db.restartFailed() - -class FileMethods: - @style.queue - def filecount(self, queue): - """returns number of files in queue""" - self.c.execute("SELECT COUNT(*) FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE p.queue=?", (queue,)) - return self.c.fetchone()[0] - - @style.queue - def queuecount(self, queue): - """ number of files in queue not finished yet""" - self.c.execute("SELECT COUNT(*) FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE p.queue=? AND l.status NOT IN (0, 4)", (queue,)) - return self.c.fetchone()[0] - - @style.queue - def processcount(self, queue, fid): - """ number of files which have to be proccessed """ - self.c.execute("SELECT COUNT(*) FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE p.queue=? AND l.status IN (2, 3, 5, 7, 12) AND l.id != ?", (queue, str(fid))) - return self.c.fetchone()[0] - - @style.inner - def _nextPackageOrder(self, queue=0): - self.c.execute('SELECT MAX(packageorder) FROM packages WHERE queue=?', (queue,)) - max = self.c.fetchone()[0] - if max is not None: - return max + 1 - else: - return 0 - - @style.inner - def _nextFileOrder(self, package): - self.c.execute('SELECT MAX(linkorder) FROM links WHERE package=?', (package,)) - max = self.c.fetchone()[0] - if max is not None: - return max + 1 - else: - return 0 - - @style.queue - def addLink(self, url, name, plugin, package): - order = self._nextFileOrder(package) - self.c.execute('INSERT INTO links(url, name, plugin, package, linkorder) VALUES(?,?,?,?,?)', (url, name, plugin, package, order)) - return self.c.lastrowid - - @style.queue - def addLinks(self, links, package): - """ links is a list of tupels (url, plugin)""" - order = self._nextFileOrder(package) - orders = [order + x for x in range(len(links))] - links = [(x[0], x[0], x[1], package, o) for x, o in zip(links, orders)] - self.c.executemany('INSERT INTO links(url, name, plugin, package, linkorder) VALUES(?,?,?,?,?)', links) - - @style.queue - def addPackage(self, name, folder, queue): - order = self._nextPackageOrder(queue) - self.c.execute('INSERT INTO packages(name, folder, queue, packageorder) VALUES(?,?,?,?)', (name, folder, queue, order)) - return self.c.lastrowid - - @style.queue - def deletePackage(self, p): - - self.c.execute('DELETE FROM links WHERE package=?', (str(p.id),)) - self.c.execute('DELETE FROM packages WHERE id=?', (str(p.id),)) - self.c.execute('UPDATE packages SET packageorder=packageorder-1 WHERE packageorder > ? AND queue=?', (p.order, p.queue)) - - @style.queue - def deleteLink(self, f): - - self.c.execute('DELETE FROM links WHERE id=?', (str(f.id),)) - self.c.execute('UPDATE links SET linkorder=linkorder-1 WHERE linkorder > ? AND package=?', (f.order, str(f.packageid))) - - - @style.queue - def getAllLinks(self, q): - """return information about all links in queue q - - q0 queue - q1 collector - - format: - - { - id: {'name': name, ... 'package': id }, ... - } - - """ - self.c.execute('SELECT l.id, l.url, l.name, l.size, l.status, l.error, l.plugin, l.package, l.linkorder FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE p.queue=? ORDER BY l.linkorder', (q,)) - data = {} - for r in self.c: - data[r[0]] = { - 'id': r[0], - 'url': r[1], - 'name': r[2], - 'size': r[3], - 'format_size': formatSize(r[3]), - 'status': r[4], - 'statusmsg': self.manager.statusMsg[r[4]], - 'error': r[5], - 'plugin': r[6], - 'package': r[7], - 'order': r[8], - } - - return data - - @style.queue - def getAllPackages(self, q): - """return information about packages in queue q - (only useful in get all data) - - q0 queue - q1 collector - - format: - - { - id: {'name': name ... 'links': {}}, ... - } - """ - self.c.execute('SELECT p.id, p.name, p.folder, p.site, p.password, p.queue, p.packageorder, s.sizetotal, s.sizedone, s.linksdone, s.linkstotal \ - FROM packages p JOIN pstats s ON p.id = s.id \ - WHERE p.queue=? ORDER BY p.packageorder', str(q)) - - data = {} - for r in self.c: - data[r[0]] = { - 'id': r[0], - 'name': r[1], - 'folder': r[2], - 'site': r[3], - 'password': r[4], - 'queue': r[5], - 'order': r[6], - 'sizetotal': int(r[7]), - 'sizedone': r[8] if r[8] else 0, #these can be None - 'linksdone': r[9] if r[9] else 0, - 'linkstotal': r[10], - 'links': {} - } - - return data - - @style.queue - def getLinkData(self, id): - """get link information as dict""" - self.c.execute('SELECT id, url, name, size, status, error, plugin, package, linkorder FROM links WHERE id=?', (str(id),)) - data = {} - r = self.c.fetchone() - if not r: - return None - data[r[0]] = { - 'id': r[0], - 'url': r[1], - 'name': r[2], - 'size': r[3], - 'format_size': formatSize(r[3]), - 'status': r[4], - 'statusmsg': self.manager.statusMsg[r[4]], - 'error': r[5], - 'plugin': r[6], - 'package': r[7], - 'order': r[8], - } - - return data - - @style.queue - def getPackageData(self, id): - """get data about links for a package""" - self.c.execute('SELECT id, url, name, size, status, error, plugin, package, linkorder FROM links WHERE package=? ORDER BY linkorder', (str(id),)) - - data = {} - for r in self.c: - data[r[0]] = { - 'id': r[0], - 'url': r[1], - 'name': r[2], - 'size': r[3], - 'format_size': formatSize(r[3]), - 'status': r[4], - 'statusmsg': self.manager.statusMsg[r[4]], - 'error': r[5], - 'plugin': r[6], - 'package': r[7], - 'order': r[8], - } - - return data - - - @style.async - def updateLink(self, f): - self.c.execute('UPDATE links SET url=?, name=?, size=?, status=?, error=?, package=? WHERE id=?', (f.url, f.name, f.size, f.status, f.error, str(f.packageid), str(f.id))) - - @style.queue - def updatePackage(self, p): - self.c.execute('UPDATE packages SET name=?, folder=?, site=?, password=?, queue=? WHERE id=?', (p.name, p.folder, p.site, p.password, p.queue, str(p.id))) - - @style.queue - def updateLinkInfo(self, data): - """ data is list of tupels (name, size, status, url) """ - self.c.executemany('UPDATE links SET name=?, size=?, status=? WHERE url=? AND status IN (1, 2, 3, 14)', data) - ids = [] - self.c.execute('SELECT id FROM links WHERE url IN (\'%s\')' % "','".join([x[3] for x in data])) - for r in self.c: - ids.append(int(r[0])) - return ids - - @style.queue - def reorderPackage(self, p, position, noMove=False): - if position == -1: - position = self._nextPackageOrder(p.queue) - if not noMove: - if p.order > position: - self.c.execute('UPDATE packages SET packageorder=packageorder+1 WHERE packageorder >= ? AND packageorder < ? AND queue=? AND packageorder >= 0', (position, p.order, p.queue)) - elif p.order < position: - self.c.execute('UPDATE packages SET packageorder=packageorder-1 WHERE packageorder <= ? AND packageorder > ? AND queue=? AND packageorder >= 0', (position, p.order, p.queue)) - - self.c.execute('UPDATE packages SET packageorder=? WHERE id=?', (position, str(p.id))) - - @style.queue - def reorderLink(self, f, position): - """ reorder link with f as dict for pyfile """ - if f["order"] > position: - self.c.execute('UPDATE links SET linkorder=linkorder+1 WHERE linkorder >= ? AND linkorder < ? AND package=?', (position, f["order"], f["package"])) - elif f["order"] < position: - self.c.execute('UPDATE links SET linkorder=linkorder-1 WHERE linkorder <= ? AND linkorder > ? AND package=?', (position, f["order"], f["package"])) - - self.c.execute('UPDATE links SET linkorder=? WHERE id=?', (position, f["id"])) - - @style.queue - def clearPackageOrder(self, p): - self.c.execute('UPDATE packages SET packageorder=? WHERE id=?', (-1, str(p.id))) - self.c.execute('UPDATE packages SET packageorder=packageorder-1 WHERE packageorder > ? AND queue=? AND id != ?', (p.order, p.queue, str(p.id))) - - @style.async - def restartFile(self, id): - self.c.execute('UPDATE links SET status=3, error="" WHERE id=?', (str(id),)) - - @style.async - def restartPackage(self, id): - self.c.execute('UPDATE links SET status=3 WHERE package=?', (str(id),)) - - @style.queue - def getPackage(self, id): - """return package instance from id""" - self.c.execute("SELECT name, folder, site, password, queue, packageorder FROM packages WHERE id=?", (str(id),)) - r = self.c.fetchone() - if not r: return None - return PyPackage(self.manager, id, * r) - - #-------------------------------------------------------------------------- - @style.queue - def getFile(self, id): - """return link instance from id""" - self.c.execute("SELECT url, name, size, status, error, plugin, package, linkorder FROM links WHERE id=?", (str(id),)) - r = self.c.fetchone() - if not r: return None - return PyFile(self.manager, id, * r) - - - @style.queue - def getJob(self, occ): - """return pyfile ids, which are suitable for download and dont use a occupied plugin""" - - #@TODO improve this hardcoded method - pre = "('DLC', 'LinkList', 'SerienjunkiesOrg', 'CCF', 'RSDF')" #plugins which are processed in collector - - cmd = "(" - for i, item in enumerate(occ): - if i: cmd += ", " - cmd += "'%s'" % item - - cmd += ")" - - cmd = "SELECT l.id FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE ((p.queue=1 AND l.plugin NOT IN %s) OR l.plugin IN %s) AND l.status IN (2, 3, 14) ORDER BY p.packageorder ASC, l.linkorder ASC LIMIT 5" % (cmd, pre) - - self.c.execute(cmd) # very bad! - - return [x[0] for x in self.c] - - @style.queue - def getPluginJob(self, plugins): - """returns pyfile ids with suited plugins""" - cmd = "SELECT l.id FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE l.plugin IN %s AND l.status IN (2, 3, 14) ORDER BY p.packageorder ASC, l.linkorder ASC LIMIT 5" % plugins - - self.c.execute(cmd) # very bad! - - return [x[0] for x in self.c] - - @style.queue - def getUnfinished(self, pid): - """return list of max length 3 ids with pyfiles in package not finished or processed""" - - self.c.execute("SELECT id FROM links WHERE package=? AND status NOT IN (0, 4, 13) LIMIT 3", (str(pid),)) - return [r[0] for r in self.c] - - @style.queue - def deleteFinished(self): - self.c.execute("DELETE FROM links WHERE status IN (0, 4)") - self.c.execute("DELETE FROM packages WHERE NOT EXISTS(SELECT 1 FROM links WHERE packages.id=links.package)") - - @style.queue - def restartFailed(self): - self.c.execute("UPDATE links SET status=3, error='' WHERE status IN (6, 8, 9)") - - @style.queue - def findDuplicates(self, id, folder, filename): - """ checks if filename exists with different id and same package """ - self.c.execute("SELECT l.plugin FROM links as l INNER JOIN packages as p ON l.package=p.id AND p.folder=? WHERE l.id!=? AND l.status=0 AND l.name=?", (folder, id, filename)) - return self.c.fetchone() - - @style.queue - def purgeLinks(self): - self.c.execute("DELETE FROM links;") - self.c.execute("DELETE FROM packages;") - -DatabaseBackend.registerSub(FileMethods) diff --git a/module/database/StorageDatabase.py b/module/database/StorageDatabase.py deleted file mode 100644 index 074d97d3e..000000000 --- a/module/database/StorageDatabase.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- -""" - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. - - @author: mkaay -""" - -from module.database import style -from module.database import DatabaseBackend - -class StorageMethods: - @style.queue - def setStorage(db, identifier, key, value): - db.c.execute("SELECT id FROM storage WHERE identifier=? AND key=?", (identifier, key)) - if db.c.fetchone() is not None: - db.c.execute("UPDATE storage SET value=? WHERE identifier=? AND key=?", (value, identifier, key)) - else: - db.c.execute("INSERT INTO storage (identifier, key, value) VALUES (?, ?, ?)", (identifier, key, value)) - - @style.queue - def getStorage(db, identifier, key=None): - if key is not None: - db.c.execute("SELECT value FROM storage WHERE identifier=? AND key=?", (identifier, key)) - row = db.c.fetchone() - if row is not None: - return row[0] - else: - db.c.execute("SELECT key, value FROM storage WHERE identifier=?", (identifier,)) - d = {} - for row in db.c: - d[row[0]] = row[1] - return d - - @style.queue - def delStorage(db, identifier, key): - db.c.execute("DELETE FROM storage WHERE identifier=? AND key=?", (identifier, key)) - -DatabaseBackend.registerSub(StorageMethods) diff --git a/module/network/HTTPChunk.py b/module/network/HTTPChunk.py deleted file mode 100644 index 719c3ed0b..000000000 --- a/module/network/HTTPChunk.py +++ /dev/null @@ -1,292 +0,0 @@ -# -*- coding: utf-8 -*- -""" - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. - - @author: RaNaN -""" -from os import remove, stat, fsync -from os.path import exists -from time import sleep -from re import search -from module.utils import fs_encode -import codecs -import pycurl - -from HTTPRequest import HTTPRequest - -class WrongFormat(Exception): - pass - - -class ChunkInfo: - def __init__(self, name): - self.name = unicode(name) - self.size = 0 - self.resume = False - self.chunks = [] - - def __repr__(self): - ret = "ChunkInfo: %s, %s\n" % (self.name, self.size) - for i, c in enumerate(self.chunks): - ret += "%s# %s\n" % (i, c[1]) - - return ret - - def setSize(self, size): - self.size = int(size) - - def addChunk(self, name, range): - self.chunks.append((name, range)) - - def clear(self): - self.chunks = [] - - def createChunks(self, chunks): - self.clear() - chunk_size = self.size / chunks - - current = 0 - for i in range(chunks): - end = self.size - 1 if (i == chunks - 1) else current + chunk_size - self.addChunk("%s.chunk%s" % (self.name, i), (current, end)) - current += chunk_size + 1 - - - def save(self): - fs_name = fs_encode("%s.chunks" % self.name) - fh = codecs.open(fs_name, "w", "utf_8") - fh.write("name:%s\n" % self.name) - fh.write("size:%s\n" % self.size) - for i, c in enumerate(self.chunks): - fh.write("#%d:\n" % i) - fh.write("\tname:%s\n" % c[0]) - fh.write("\trange:%i-%i\n" % c[1]) - fh.close() - - @staticmethod - def load(name): - fs_name = fs_encode("%s.chunks" % name) - if not exists(fs_name): - raise IOError() - fh = codecs.open(fs_name, "r", "utf_8") - name = fh.readline()[:-1] - size = fh.readline()[:-1] - if name.startswith("name:") and size.startswith("size:"): - name = name[5:] - size = size[5:] - else: - fh.close() - raise WrongFormat() - ci = ChunkInfo(name) - ci.loaded = True - ci.setSize(size) - while True: - if not fh.readline(): #skip line - break - name = fh.readline()[1:-1] - range = fh.readline()[1:-1] - if name.startswith("name:") and range.startswith("range:"): - name = name[5:] - range = range[6:].split("-") - else: - raise WrongFormat() - - ci.addChunk(name, (long(range[0]), long(range[1]))) - fh.close() - return ci - - def remove(self): - fs_name = fs_encode("%s.chunks" % self.name) - if exists(fs_name): remove(fs_name) - - def getCount(self): - return len(self.chunks) - - def getChunkName(self, index): - return self.chunks[index][0] - - def getChunkRange(self, index): - return self.chunks[index][1] - - -class HTTPChunk(HTTPRequest): - def __init__(self, id, parent, range=None, resume=False): - self.id = id - self.p = parent # HTTPDownload instance - self.range = range # tuple (start, end) - self.resume = resume - self.log = parent.log - - self.size = range[1] - range[0] if range else -1 - self.arrived = 0 - self.lastURL = self.p.referer - - self.c = pycurl.Curl() - - self.header = "" - self.headerParsed = False #indicates if the header has been processed - - self.fp = None #file handle - - self.initHandle() - self.setInterface(self.p.options) - - self.BOMChecked = False # check and remove byte order mark - - self.rep = None - - self.sleep = 0.000 - self.lastSize = 0 - - def __repr__(self): - return "<HTTPChunk id=%d, size=%d, arrived=%d>" % (self.id, self.size, self.arrived) - - @property - def cj(self): - return self.p.cj - - def getHandle(self): - """ returns a Curl handle ready to use for perform/multiperform """ - - self.setRequestContext(self.p.url, self.p.get, self.p.post, self.p.referer, self.p.cj) - self.c.setopt(pycurl.WRITEFUNCTION, self.writeBody) - self.c.setopt(pycurl.HEADERFUNCTION, self.writeHeader) - - # request all bytes, since some servers in russia seems to have a defect arihmetic unit - - fs_name = fs_encode(self.p.info.getChunkName(self.id)) - if self.resume: - self.fp = open(fs_name, "ab") - self.arrived = self.fp.tell() - if not self.arrived: - self.arrived = stat(fs_name).st_size - - if self.range: - #do nothing if chunk already finished - if self.arrived + self.range[0] >= self.range[1]: return None - - if self.id == len(self.p.info.chunks) - 1: #as last chunk dont set end range, so we get everything - range = "%i-" % (self.arrived + self.range[0]) - else: - range = "%i-%i" % (self.arrived + self.range[0], min(self.range[1] + 1, self.p.size - 1)) - - self.log.debug("Chunked resume with range %s" % range) - self.c.setopt(pycurl.RANGE, range) - else: - self.log.debug("Resume File from %i" % self.arrived) - self.c.setopt(pycurl.RESUME_FROM, self.arrived) - - else: - if self.range: - if self.id == len(self.p.info.chunks) - 1: # see above - range = "%i-" % self.range[0] - else: - range = "%i-%i" % (self.range[0], min(self.range[1] + 1, self.p.size - 1)) - - self.log.debug("Chunked with range %s" % range) - self.c.setopt(pycurl.RANGE, range) - - self.fp = open(fs_name, "wb") - - return self.c - - def writeHeader(self, buf): - self.header += buf - #@TODO forward headers?, this is possibly unneeeded, when we just parse valid 200 headers - # as first chunk, we will parse the headers - if not self.range and self.header.endswith("\r\n\r\n"): - self.parseHeader() - elif not self.range and buf.startswith("150") and "data connection" in buf.lower(): #: ftp file size parsing - size = search(r"(\d+) bytes", buf) - if size: - self.p.size = int(size.group(1)) - self.p.chunkSupport = True - - self.headerParsed = True - - def writeBody(self, buf): - #ignore BOM, it confuses unrar - if not self.BOMChecked: - if [ord(b) for b in buf[:3]] == [239, 187, 191]: - buf = buf[3:] - self.BOMChecked = True - - size = len(buf) - - self.arrived += size - - self.fp.write(buf) - - if self.p.bucket: - sleep(self.p.bucket.consumed(size)) - else: - # Avoid small buffers, increasing sleep time slowly if buffer size gets smaller - # otherwise reduce sleep time percentual (values are based on tests) - # So in general cpu time is saved without reducing bandwith too much - - if size < self.lastSize: - self.sleep += 0.002 - else: - self.sleep *= 0.7 - - self.lastSize = size - - sleep(self.sleep) - - if self.range and self.arrived > self.size: - return 0 #close if we have enough data - - - def parseHeader(self): - """parse data from recieved header""" - for orgline in self.decodeResponse(self.header).splitlines(): - line = orgline.strip().lower() - if line.startswith("accept-ranges") and "bytes" in line: - self.p.chunkSupport = True - - if line.startswith("content-disposition") and "filename=" in line: - name = orgline.partition("filename=")[2] - name = name.replace('"', "").replace("'", "").replace(";", "").strip() - self.p.nameDisposition = name - self.log.debug("Content-Disposition: %s" % name) - - if not self.resume and line.startswith("content-length"): - self.p.size = int(line.split(":")[1]) - - self.headerParsed = True - - def stop(self): - """The download will not proceed after next call of writeBody""" - self.range = [0, 0] - self.size = 0 - - def resetRange(self): - """ Reset the range, so the download will load all data available """ - self.range = None - - def setRange(self, range): - self.range = range - self.size = range[1] - range[0] - - def flushFile(self): - """ flush and close file """ - self.fp.flush() - fsync(self.fp.fileno()) #make sure everything was written to disk - self.fp.close() #needs to be closed, or merging chunks will fail - - def close(self): - """ closes everything, unusable after this """ - if self.fp: self.fp.close() - self.c.close() - if hasattr(self, "p"): del self.p diff --git a/module/network/HTTPDownload.py b/module/network/HTTPDownload.py deleted file mode 100644 index 20ac00e48..000000000 --- a/module/network/HTTPDownload.py +++ /dev/null @@ -1,325 +0,0 @@ -# -*- coding: utf-8 -*- -""" - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. - - @author: RaNaN -""" - -from os import remove, fsync -from os.path import dirname -from time import sleep, time -from shutil import move -from logging import getLogger - -import pycurl - -from HTTPChunk import ChunkInfo, HTTPChunk -from HTTPRequest import BadHeader - -from module.plugins.Plugin import Abort -from module.utils import safe_join, fs_encode - -class HTTPDownload: - """ loads a url http + ftp """ - - def __init__(self, url, filename, get={}, post={}, referer=None, cj=None, bucket=None, - options={}, progressNotify=None, disposition=False): - self.url = url - self.filename = filename #complete file destination, not only name - self.get = get - self.post = post - self.referer = referer - self.cj = cj #cookiejar if cookies are needed - self.bucket = bucket - self.options = options - self.disposition = disposition - # all arguments - - self.abort = False - self.size = 0 - self.nameDisposition = None #will be parsed from content disposition - - self.chunks = [] - - self.log = getLogger("log") - - try: - self.info = ChunkInfo.load(filename) - self.info.resume = True #resume is only possible with valid info file - self.size = self.info.size - self.infoSaved = True - except IOError: - self.info = ChunkInfo(filename) - - self.chunkSupport = None - self.m = pycurl.CurlMulti() - - #needed for speed calculation - self.lastArrived = [] - self.speeds = [] - self.lastSpeeds = [0, 0] - - self.progressNotify = progressNotify - - @property - def speed(self): - last = [sum(x) for x in self.lastSpeeds if x] - return (sum(self.speeds) + sum(last)) / (1 + len(last)) - - @property - def arrived(self): - return sum([c.arrived for c in self.chunks]) - - @property - def percent(self): - if not self.size: return 0 - return (self.arrived * 100) / self.size - - def _copyChunks(self): - init = fs_encode(self.info.getChunkName(0)) #initial chunk name - - if self.info.getCount() > 1: - fo = open(init, "rb+") #first chunkfile - for i in range(1, self.info.getCount()): - #input file - fo.seek( - self.info.getChunkRange(i - 1)[1] + 1) #seek to beginning of chunk, to get rid of overlapping chunks - fname = fs_encode("%s.chunk%d" % (self.filename, i)) - fi = open(fname, "rb") - buf = 32 * 1024 - while True: #copy in chunks, consumes less memory - data = fi.read(buf) - if not data: - break - fo.write(data) - fi.close() - if fo.tell() < self.info.getChunkRange(i)[1]: - fo.close() - remove(init) - self.info.remove() #there are probably invalid chunks - raise Exception("Downloaded content was smaller than expected. Try to reduce download connections.") - remove(fname) #remove chunk - fo.close() - - if self.nameDisposition and self.disposition: - self.filename = safe_join(dirname(self.filename), self.nameDisposition) - - move(init, fs_encode(self.filename)) - self.info.remove() #remove info file - - def download(self, chunks=1, resume=False): - """ returns new filename or None """ - - chunks = max(1, chunks) - resume = self.info.resume and resume - - try: - self._download(chunks, resume) - except pycurl.error, e: - #code 33 - no resume - code = e.args[0] - if code == 33: - # try again without resume - self.log.debug("Errno 33 -> Restart without resume") - - #remove old handles - for chunk in self.chunks: - self.closeChunk(chunk) - - return self._download(chunks, False) - else: - raise - finally: - self.close() - - if self.nameDisposition and self.disposition: return self.nameDisposition - return None - - def _download(self, chunks, resume): - if not resume: - self.info.clear() - self.info.addChunk("%s.chunk0" % self.filename, (0, 0)) #create an initial entry - - self.chunks = [] - - init = HTTPChunk(0, self, None, resume) #initial chunk that will load complete file (if needed) - - self.chunks.append(init) - self.m.add_handle(init.getHandle()) - - lastFinishCheck = 0 - lastTimeCheck = 0 - chunksDone = set() # list of curl handles that are finished - chunksCreated = False - done = False - if self.info.getCount() > 1: # This is a resume, if we were chunked originally assume still can - self.chunkSupport = True - - while 1: - #need to create chunks - if not chunksCreated and self.chunkSupport and self.size: #will be setted later by first chunk - - if not resume: - self.info.setSize(self.size) - self.info.createChunks(chunks) - self.info.save() - - chunks = self.info.getCount() - - init.setRange(self.info.getChunkRange(0)) - - for i in range(1, chunks): - c = HTTPChunk(i, self, self.info.getChunkRange(i), resume) - - handle = c.getHandle() - if handle: - self.chunks.append(c) - self.m.add_handle(handle) - else: - #close immediatly - self.log.debug("Invalid curl handle -> closed") - c.close() - - chunksCreated = True - - while 1: - ret, num_handles = self.m.perform() - if ret != pycurl.E_CALL_MULTI_PERFORM: - break - - t = time() - - # reduce these calls - while lastFinishCheck + 0.5 < t: - # list of failed curl handles - failed = [] - ex = None # save only last exception, we can only raise one anyway - - num_q, ok_list, err_list = self.m.info_read() - for c in ok_list: - chunk = self.findChunk(c) - try: # check if the header implies success, else add it to failed list - chunk.verifyHeader() - except BadHeader, e: - self.log.debug("Chunk %d failed: %s" % (chunk.id + 1, str(e))) - failed.append(chunk) - ex = e - else: - chunksDone.add(c) - - for c in err_list: - curl, errno, msg = c - chunk = self.findChunk(curl) - #test if chunk was finished - if errno != 23 or "0 !=" not in msg: - failed.append(chunk) - ex = pycurl.error(errno, msg) - self.log.debug("Chunk %d failed: %s" % (chunk.id + 1, str(ex))) - continue - - try: # check if the header implies success, else add it to failed list - chunk.verifyHeader() - except BadHeader, e: - self.log.debug("Chunk %d failed: %s" % (chunk.id + 1, str(e))) - failed.append(chunk) - ex = e - else: - chunksDone.add(curl) - if not num_q: # no more infos to get - - # check if init is not finished so we reset download connections - # note that other chunks are closed and downloaded with init too - if failed and init not in failed and init.c not in chunksDone: - self.log.error(_("Download chunks failed, fallback to single connection | %s" % (str(ex)))) - - #list of chunks to clean and remove - to_clean = filter(lambda x: x is not init, self.chunks) - for chunk in to_clean: - self.closeChunk(chunk) - self.chunks.remove(chunk) - remove(fs_encode(self.info.getChunkName(chunk.id))) - - #let first chunk load the rest and update the info file - init.resetRange() - self.info.clear() - self.info.addChunk("%s.chunk0" % self.filename, (0, self.size)) - self.info.save() - elif failed: - raise ex - - lastFinishCheck = t - - if len(chunksDone) >= len(self.chunks): - if len(chunksDone) > len(self.chunks): - self.log.warning("Finished download chunks size incorrect, please report bug.") - done = True #all chunks loaded - - break - - if done: - break #all chunks loaded - - # calc speed once per second, averaging over 3 seconds - if lastTimeCheck + 1 < t: - diff = [c.arrived - (self.lastArrived[i] if len(self.lastArrived) > i else 0) for i, c in - enumerate(self.chunks)] - - self.lastSpeeds[1] = self.lastSpeeds[0] - self.lastSpeeds[0] = self.speeds - self.speeds = [float(a) / (t - lastTimeCheck) for a in diff] - self.lastArrived = [c.arrived for c in self.chunks] - lastTimeCheck = t - self.updateProgress() - - if self.abort: - raise Abort() - - #sleep(0.003) #supress busy waiting - limits dl speed to (1 / x) * buffersize - self.m.select(1) - - for chunk in self.chunks: - chunk.flushFile() #make sure downloads are written to disk - - self._copyChunks() - - def updateProgress(self): - if self.progressNotify: - self.progressNotify(self.percent) - - def findChunk(self, handle): - """ linear search to find a chunk (should be ok since chunk size is usually low) """ - for chunk in self.chunks: - if chunk.c == handle: return chunk - - def closeChunk(self, chunk): - try: - self.m.remove_handle(chunk.c) - except pycurl.error, e: - self.log.debug("Error removing chunk: %s" % str(e)) - finally: - chunk.close() - - def close(self): - """ cleanup """ - for chunk in self.chunks: - self.closeChunk(chunk) - - self.chunks = [] - if hasattr(self, "m"): - self.m.close() - del self.m - if hasattr(self, "cj"): - del self.cj - if hasattr(self, "info"): - del self.info diff --git a/module/network/HTTPRequest.py b/module/network/HTTPRequest.py deleted file mode 100644 index 67635f944..000000000 --- a/module/network/HTTPRequest.py +++ /dev/null @@ -1,303 +0,0 @@ -# -*- coding: utf-8 -*- -""" - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. - - @author: RaNaN -""" - -import pycurl - -from codecs import getincrementaldecoder, lookup, BOM_UTF8 -from urllib import quote, urlencode -from httplib import responses -from logging import getLogger -from cStringIO import StringIO - -from module.plugins.Plugin import Abort - -def myquote(url): - return quote(url.encode('utf_8') if isinstance(url, unicode) else url, safe="%/:=&?~#+!$,;'@()*[]") - -def myurlencode(data): - data = dict(data) - return urlencode(dict((x.encode('utf_8') if isinstance(x, unicode) else x, \ - y.encode('utf_8') if isinstance(y, unicode) else y ) for x, y in data.iteritems())) - -bad_headers = range(400, 404) + range(405, 418) + range(500, 506) - -class BadHeader(Exception): - def __init__(self, code, content=""): - Exception.__init__(self, "Bad server response: %s %s" % (code, responses[int(code)])) - self.code = code - self.content = content - - -class HTTPRequest: - def __init__(self, cookies=None, options=None): - self.c = pycurl.Curl() - self.rep = StringIO() - - self.cj = cookies #cookiejar - - self.lastURL = None - self.lastEffectiveURL = None - self.abort = False - self.code = 0 # last http code - - self.header = "" - - self.headers = [] #temporary request header - - self.initHandle() - self.setInterface(options) - - self.c.setopt(pycurl.WRITEFUNCTION, self.write) - self.c.setopt(pycurl.HEADERFUNCTION, self.writeHeader) - - self.log = getLogger("log") - - - def initHandle(self): - """ sets common options to curl handle """ - self.c.setopt(pycurl.FOLLOWLOCATION, 1) - self.c.setopt(pycurl.MAXREDIRS, 5) - self.c.setopt(pycurl.CONNECTTIMEOUT, 30) - self.c.setopt(pycurl.NOSIGNAL, 1) - self.c.setopt(pycurl.NOPROGRESS, 1) - if hasattr(pycurl, "AUTOREFERER"): - self.c.setopt(pycurl.AUTOREFERER, 1) - self.c.setopt(pycurl.SSL_VERIFYPEER, 0) - self.c.setopt(pycurl.LOW_SPEED_TIME, 30) - self.c.setopt(pycurl.LOW_SPEED_LIMIT, 5) - - #self.c.setopt(pycurl.VERBOSE, 1) - - self.c.setopt(pycurl.USERAGENT, - "Mozilla/5.0 (Windows NT 6.1; Win64; x64;en; rv:5.0) Gecko/20110619 Firefox/5.0") - if pycurl.version_info()[7]: - self.c.setopt(pycurl.ENCODING, "gzip, deflate") - self.c.setopt(pycurl.HTTPHEADER, ["Accept: */*", - "Accept-Language: en-US, en", - "Accept-Charset: ISO-8859-1, utf-8;q=0.7,*;q=0.7", - "Connection: keep-alive", - "Keep-Alive: 300", - "Expect:"]) - - def setInterface(self, options): - - interface, proxy, ipv6 = options["interface"], options["proxies"], options["ipv6"] - - if interface and interface.lower() != "none": - self.c.setopt(pycurl.INTERFACE, str(interface)) - - if proxy: - if proxy["type"] == "socks4": - self.c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS4) - elif proxy["type"] == "socks5": - self.c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5) - else: - self.c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_HTTP) - - self.c.setopt(pycurl.PROXY, str(proxy["address"])) - self.c.setopt(pycurl.PROXYPORT, proxy["port"]) - - if proxy["username"]: - self.c.setopt(pycurl.PROXYUSERPWD, str("%s:%s" % (proxy["username"], proxy["password"]))) - - if ipv6: - self.c.setopt(pycurl.IPRESOLVE, pycurl.IPRESOLVE_WHATEVER) - else: - self.c.setopt(pycurl.IPRESOLVE, pycurl.IPRESOLVE_V4) - - if "auth" in options: - self.c.setopt(pycurl.USERPWD, str(options["auth"])) - - if "timeout" in options: - self.c.setopt(pycurl.LOW_SPEED_TIME, options["timeout"]) - - - def addCookies(self): - """ put cookies from curl handle to cj """ - if self.cj: - self.cj.addCookies(self.c.getinfo(pycurl.INFO_COOKIELIST)) - - def getCookies(self): - """ add cookies from cj to curl handle """ - if self.cj: - for c in self.cj.getCookies(): - self.c.setopt(pycurl.COOKIELIST, c) - return - - def clearCookies(self): - self.c.setopt(pycurl.COOKIELIST, "") - - def setRequestContext(self, url, get, post, referer, cookies, multipart=False): - """ sets everything needed for the request """ - - url = myquote(url) - - if get: - get = urlencode(get) - url = "%s?%s" % (url, get) - - self.c.setopt(pycurl.URL, url) - self.c.lastUrl = url - - if post: - self.c.setopt(pycurl.POST, 1) - if not multipart: - if type(post) == unicode: - post = str(post) #unicode not allowed - elif type(post) == str: - pass - else: - post = myurlencode(post) - - self.c.setopt(pycurl.POSTFIELDS, post) - else: - post = [(x, y.encode('utf8') if type(y) == unicode else y ) for x, y in post.iteritems()] - self.c.setopt(pycurl.HTTPPOST, post) - else: - self.c.setopt(pycurl.POST, 0) - - if referer and self.lastURL: - self.c.setopt(pycurl.REFERER, str(self.lastURL)) - - if cookies: - self.c.setopt(pycurl.COOKIEFILE, "") - self.c.setopt(pycurl.COOKIEJAR, "") - self.getCookies() - - - def load(self, url, get={}, post={}, referer=True, cookies=True, just_header=False, multipart=False, decode=False): - """ load and returns a given page """ - - self.setRequestContext(url, get, post, referer, cookies, multipart) - - self.header = "" - - self.c.setopt(pycurl.HTTPHEADER, self.headers) - - if just_header: - self.c.setopt(pycurl.FOLLOWLOCATION, 0) - self.c.setopt(pycurl.NOBODY, 1) - if post: - self.c.setopt(pycurl.POST, 1) - else: - self.c.setopt(pycurl.HTTPGET, 1) - self.c.perform() - rep = self.header - - self.c.setopt(pycurl.FOLLOWLOCATION, 1) - self.c.setopt(pycurl.NOBODY, 0) - - else: - self.c.perform() - rep = self.getResponse() - - self.c.setopt(pycurl.POSTFIELDS, "") - self.lastEffectiveURL = self.c.getinfo(pycurl.EFFECTIVE_URL) - self.code = self.verifyHeader() - - self.addCookies() - - if decode: - rep = self.decodeResponse(rep) - - return rep - - def verifyHeader(self): - """ raise an exceptions on bad headers """ - code = int(self.c.getinfo(pycurl.RESPONSE_CODE)) - if code in bad_headers: - #404 will NOT raise an exception - raise BadHeader(code, self.getResponse()) - return code - - def checkHeader(self): - """ check if header indicates failure""" - return int(self.c.getinfo(pycurl.RESPONSE_CODE)) not in bad_headers - - def getResponse(self): - """ retrieve response from string io """ - if self.rep is None: return "" - value = self.rep.getvalue() - self.rep.close() - self.rep = StringIO() - return value - - def decodeResponse(self, rep): - """ decode with correct encoding, relies on header """ - header = self.header.splitlines() - encoding = "utf8" # default encoding - - for line in header: - line = line.lower().replace(" ", "") - if not line.startswith("content-type:") or\ - ("text" not in line and "application" not in line): - continue - - none, delemiter, charset = line.rpartition("charset=") - if delemiter: - charset = charset.split(";") - if charset: - encoding = charset[0] - - try: - #self.log.debug("Decoded %s" % encoding ) - if lookup(encoding).name == 'utf-8' and rep.startswith(BOM_UTF8): - encoding = 'utf-8-sig' - - decoder = getincrementaldecoder(encoding)("replace") - rep = decoder.decode(rep, True) - - #TODO: html_unescape as default - - except LookupError: - self.log.debug("No Decoder foung for %s" % encoding) - except Exception: - self.log.debug("Error when decoding string from %s." % encoding) - - return rep - - def write(self, buf): - """ writes response """ - if self.rep.tell() > 1000000 or self.abort: - rep = self.getResponse() - if self.abort: raise Abort() - f = open("response.dump", "wb") - f.write(rep) - f.close() - raise Exception("Loaded Url exceeded limit") - - self.rep.write(buf) - - def writeHeader(self, buf): - """ writes header """ - self.header += buf - - def putHeader(self, name, value): - self.headers.append("%s: %s" % (name, value)) - - def clearHeaders(self): - self.headers = [] - - def close(self): - """ cleanup, unusable after this """ - self.rep.close() - if hasattr(self, "cj"): - del self.cj - if hasattr(self, "c"): - self.c.close() - del self.c diff --git a/module/network/XDCCRequest.py b/module/network/XDCCRequest.py deleted file mode 100644 index 74769da96..000000000 --- a/module/network/XDCCRequest.py +++ /dev/null @@ -1,159 +0,0 @@ -# -*- coding: utf-8 -*- -""" - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. - - @author: jeix -""" - -import socket -import re - -from os import remove -from os.path import exists - -from time import time - -import struct -from select import select - -from module.plugins.Plugin import Abort - - -class XDCCRequest: - def __init__(self, timeout=30, proxies={}): - - self.proxies = proxies - self.timeout = timeout - - self.filesize = 0 - self.recv = 0 - self.speed = 0 - - self.abort = False - - def createSocket(self): - # proxytype = None - # proxy = None - # if self.proxies.has_key("socks5"): - # proxytype = socks.PROXY_TYPE_SOCKS5 - # proxy = self.proxies["socks5"] - # elif self.proxies.has_key("socks4"): - # proxytype = socks.PROXY_TYPE_SOCKS4 - # proxy = self.proxies["socks4"] - # if proxytype: - # sock = socks.socksocket() - # t = _parse_proxy(proxy) - # sock.setproxy(proxytype, addr=t[3].split(":")[0], port=int(t[3].split(":")[1]), username=t[1], password=t[2]) - # else: - # sock = socket.socket() - # return sock - - return socket.socket() - - def download(self, ip, port, filename, irc, progressNotify=None): - - ircbuffer = "" - lastUpdate = time() - cumRecvLen = 0 - - dccsock = self.createSocket() - - dccsock.settimeout(self.timeout) - dccsock.connect((ip, port)) - - if exists(filename): - i = 0 - nameParts = filename.rpartition(".") - while True: - newfilename = "%s-%d%s%s" % (nameParts[0], i, nameParts[1], nameParts[2]) - i += 1 - - if not exists(newfilename): - filename = newfilename - break - - fh = open(filename, "wb") - - # recv loop for dcc socket - while True: - if self.abort: - dccsock.close() - fh.close() - remove(filename) - raise Abort() - - self._keepAlive(irc, ircbuffer) - - data = dccsock.recv(4096) - dataLen = len(data) - self.recv += dataLen - - cumRecvLen += dataLen - - now = time() - timespan = now - lastUpdate - if timespan > 1: - self.speed = cumRecvLen / timespan - cumRecvLen = 0 - lastUpdate = now - - if progressNotify: - progressNotify(self.percent) - - if not data: - break - - fh.write(data) - - # acknowledge data by sending number of recceived bytes - dccsock.send(struct.pack('!I', self.recv)) - - dccsock.close() - fh.close() - - return filename - - def _keepAlive(self, sock, readbuffer): - fdset = select([sock], [], [], 0) - if sock not in fdset[0]: - return - - readbuffer += sock.recv(1024) - temp = readbuffer.split("\n") - readbuffer = temp.pop() - - for line in temp: - line = line.rstrip() - first = line.split() - if first[0] == "PING": - sock.send("PONG %s\r\n" % first[1]) - - def abortDownloads(self): - self.abort = True - - @property - def size(self): - return self.filesize - - @property - def arrived(self): - return self.recv - - @property - def percent(self): - if not self.filesize: return 0 - return (self.recv * 100) / self.filesize - - def close(self): - pass diff --git a/module/plugins/Account.py b/module/plugins/Account.py deleted file mode 100644 index bd7f97cba..000000000 --- a/module/plugins/Account.py +++ /dev/null @@ -1,281 +0,0 @@ -# -*- coding: utf-8 -*- - -from random import choice -from time import time -from traceback import print_exc -from threading import RLock - -from module.plugins.Plugin import Base -from module.utils import compare_time, parseFileSize, lock - - -class WrongPassword(Exception): - pass - - -class Account(Base): - """ - Base class for every Account plugin. - Just overwrite `login` and cookies will be stored and account becomes accessible in\ - associated hoster plugin. Plugin should also provide `loadAccountInfo` - """ - __name__ = "Account" - __type__ = "account" - __version__ = "0.3" - - __description__ = """Base account plugin""" - __author_name__ = "mkaay" - __author_mail__ = "mkaay@mkaay.de" - - #: after that time (in minutes) pyload will relogin the account - login_timeout = 10 * 60 - #: after that time (in minutes) account data will be reloaded - info_threshold = 10 * 60 - - - def __init__(self, manager, accounts): - Base.__init__(self, manager.core) - - self.manager = manager - self.accounts = {} - self.infos = {} # cache for account information - self.lock = RLock() - - self.timestamps = {} - self.setAccounts(accounts) - self.init() - - def init(self): - pass - - def login(self, user, data, req): - """login into account, the cookies will be saved so user can be recognized - - :param user: loginname - :param data: data dictionary - :param req: `Request` instance - """ - pass - - @lock - def _login(self, user, data): - # set timestamp for login - self.timestamps[user] = time() - - req = self.getAccountRequest(user) - try: - self.login(user, data, req) - except WrongPassword: - self.logWarning( - _("Could not login with account %(user)s | %(msg)s") % {"user": user - , "msg": _("Wrong Password")}) - success = data['valid'] = False - except Exception, e: - self.logWarning( - _("Could not login with account %(user)s | %(msg)s") % {"user": user - , "msg": e}) - success = data['valid'] = False - if self.core.debug: - print_exc() - else: - success = True - finally: - if req: - req.close() - return success - - def relogin(self, user): - req = self.getAccountRequest(user) - if req: - req.cj.clear() - req.close() - if user in self.infos: - del self.infos[user] #delete old information - - return self._login(user, self.accounts[user]) - - def setAccounts(self, accounts): - self.accounts = accounts - for user, data in self.accounts.iteritems(): - self._login(user, data) - self.infos[user] = {} - - def updateAccounts(self, user, password=None, options={}): - """ updates account and return true if anything changed """ - - if user in self.accounts: - self.accounts[user]['valid'] = True #do not remove or accounts will not login - if password: - self.accounts[user]['password'] = password - self.relogin(user) - return True - if options: - before = self.accounts[user]['options'] - self.accounts[user]['options'].update(options) - return self.accounts[user]['options'] != before - else: - self.accounts[user] = {"password": password, "options": options, "valid": True} - self._login(user, self.accounts[user]) - return True - - def removeAccount(self, user): - if user in self.accounts: - del self.accounts[user] - if user in self.infos: - del self.infos[user] - if user in self.timestamps: - del self.timestamps[user] - - @lock - def getAccountInfo(self, name, force=False): - """retrieve account infos for an user, do **not** overwrite this method!\\ - just use it to retrieve infos in hoster plugins. see `loadAccountInfo` - - :param name: username - :param force: reloads cached account information - :return: dictionary with information - """ - data = Account.loadAccountInfo(self, name) - - if force or name not in self.infos: - self.logDebug("Get Account Info for %s" % name) - req = self.getAccountRequest(name) - - try: - infos = self.loadAccountInfo(name, req) - if not type(infos) == dict: - raise Exception("Wrong return format") - except Exception, e: - infos = {"error": str(e)} - - if req: req.close() - - self.logDebug("Account Info: %s" % str(infos)) - - infos['timestamp'] = time() - self.infos[name] = infos - elif "timestamp" in self.infos[name] and self.infos[name][ - "timestamp"] + self.info_threshold * 60 < time(): - self.logDebug("Reached timeout for account data") - self.scheduleRefresh(name) - - data.update(self.infos[name]) - return data - - def isPremium(self, user): - info = self.getAccountInfo(user) - return info['premium'] - - def loadAccountInfo(self, name, req=None): - """this should be overwritten in account plugin,\ - and retrieving account information for user - - :param name: - :param req: `Request` instance - :return: - """ - return { - "validuntil": None, # -1 for unlimited - "login": name, - #"password": self.accounts[name]['password'], #@XXX: security - "options": self.accounts[name]['options'], - "valid": self.accounts[name]['valid'], - "trafficleft": None, # in kb, -1 for unlimited - "maxtraffic": None, - "premium": True, #useful for free accounts - "timestamp": 0, #time this info was retrieved - "type": self.__name__, - } - - def getAllAccounts(self, force=False): - return [self.getAccountInfo(user, force) for user, data in self.accounts.iteritems()] - - def getAccountRequest(self, user=None): - if not user: - user, data = self.selectAccount() - if not user: - return None - - req = self.core.requestFactory.getRequest(self.__name__, user) - return req - - def getAccountCookies(self, user=None): - if not user: - user, data = self.selectAccount() - if not user: - return None - - cj = self.core.requestFactory.getCookieJar(self.__name__, user) - return cj - - def getAccountData(self, user): - return self.accounts[user] - - def selectAccount(self): - """ returns an valid account name and data""" - usable = [] - for user, data in self.accounts.iteritems(): - if not data['valid']: continue - - if "time" in data['options'] and data['options']['time']: - time_data = "" - try: - time_data = data['options']['time'][0] - start, end = time_data.split("-") - if not compare_time(start.split(":"), end.split(":")): - continue - except: - self.logWarning(_("Your Time %s has wrong format, use: 1:22-3:44") % time_data) - - if user in self.infos: - if "validuntil" in self.infos[user]: - if self.infos[user]['validuntil'] > 0 and time() > self.infos[user]['validuntil']: - continue - if "trafficleft" in self.infos[user]: - if self.infos[user]['trafficleft'] == 0: - continue - - usable.append((user, data)) - - if not usable: return None, None - return choice(usable) - - def canUse(self): - return False if self.selectAccount() == (None, None) else True - - def parseTraffic(self, string): #returns kbyte - return parseFileSize(string) / 1024 - - def wrongPassword(self): - raise WrongPassword - - def empty(self, user): - if user in self.infos: - self.logWarning(_("Account %s has not enough traffic, checking again in 30min") % user) - - self.infos[user].update({"trafficleft": 0}) - self.scheduleRefresh(user, 30 * 60) - - def expired(self, user): - if user in self.infos: - self.logWarning(_("Account %s is expired, checking again in 1h") % user) - - self.infos[user].update({"validuntil": time() - 1}) - self.scheduleRefresh(user, 60 * 60) - - def scheduleRefresh(self, user, time=0, force=True): - """ add task to refresh account info to sheduler """ - self.logDebug("Scheduled Account refresh for %s in %s seconds." % (user, time)) - self.core.scheduler.addJob(time, self.getAccountInfo, [user, force]) - - @lock - def checkLogin(self, user): - """ checks if user is still logged in """ - if user in self.timestamps: - if self.login_timeout > 0 and self.timestamps[user] + self.login_timeout * 60 < time(): - self.logDebug("Reached login timeout for %s" % user) - return self.relogin(user) - else: - return True - else: - return False diff --git a/module/plugins/AccountManager.py b/module/plugins/AccountManager.py deleted file mode 100644 index 6c908738c..000000000 --- a/module/plugins/AccountManager.py +++ /dev/null @@ -1,173 +0,0 @@ -# -*- coding: utf-8 -*- - -from os.path import exists -from shutil import copy - -from threading import Lock - -from module.PullEvents import AccountUpdateEvent -from module.utils import chmod, lock - -ACC_VERSION = 1 - - -class AccountManager: - """manages all accounts""" - - #-------------------------------------------------------------------------- - def __init__(self, core): - """Constructor""" - - self.core = core - self.lock = Lock() - - self.initPlugins() - self.saveAccounts() # save to add categories to conf - - def initPlugins(self): - self.accounts = {} # key = ( plugin ) - self.plugins = {} - - self.initAccountPlugins() - self.loadAccounts() - - def getAccountPlugin(self, plugin): - """get account instance for plugin or None if anonymous""" - if plugin in self.accounts: - if plugin not in self.plugins: - try: - self.plugins[plugin] = self.core.pluginManager.loadClass("accounts", plugin)(self, self.accounts[plugin]) - except TypeError: # The account class no longer exists (blacklisted plugin). Skipping the account to avoid crash - return None - - return self.plugins[plugin] - else: - return None - - def getAccountPlugins(self): - """ get all account instances""" - - plugins = [] - for plugin in self.accounts.keys(): - plugins.append(self.getAccountPlugin(plugin)) - - return plugins - - #-------------------------------------------------------------------------- - def loadAccounts(self): - """loads all accounts available""" - - if not exists("accounts.conf"): - f = open("accounts.conf", "wb") - f.write("version: " + str(ACC_VERSION)) - f.close() - - f = open("accounts.conf", "rb") - content = f.readlines() - version = content[0].split(":")[1].strip() if content else "" - f.close() - - if not version or int(version) < ACC_VERSION: - copy("accounts.conf", "accounts.backup") - f = open("accounts.conf", "wb") - f.write("version: " + str(ACC_VERSION)) - f.close() - self.core.log.warning(_("Account settings deleted, due to new config format.")) - return - - plugin = "" - name = "" - - for line in content[1:]: - line = line.strip() - - if not line: continue - if line.startswith("#"): continue - if line.startswith("version"): continue - - if line.endswith(":") and line.count(":") == 1: - plugin = line[:-1] - self.accounts[plugin] = {} - - elif line.startswith("@"): - try: - option = line[1:].split() - self.accounts[plugin][name]['options'][option[0]] = [] if len(option) < 2 else ([option[1]] if len(option) < 3 else option[1:]) - except: - pass - - elif ":" in line: - name, sep, pw = line.partition(":") - self.accounts[plugin][name] = {"password": pw, "options": {}, "valid": True} - - #-------------------------------------------------------------------------- - def saveAccounts(self): - """save all account information""" - - f = open("accounts.conf", "wb") - f.write("version: " + str(ACC_VERSION) + "\n") - - for plugin, accounts in self.accounts.iteritems(): - f.write("\n") - f.write(plugin+":\n") - - for name,data in accounts.iteritems(): - f.write("\n\t%s:%s\n" % (name,data['password']) ) - if data['options']: - for option, values in data['options'].iteritems(): - f.write("\t@%s %s\n" % (option, " ".join(values))) - - f.close() - chmod(f.name, 0600) - - #-------------------------------------------------------------------------- - def initAccountPlugins(self): - """init names""" - for name in self.core.pluginManager.getAccountPlugins(): - self.accounts[name] = {} - - @lock - def updateAccount(self, plugin , user, password=None, options={}): - """add or update account""" - if plugin in self.accounts: - p = self.getAccountPlugin(plugin) - updated = p.updateAccounts(user, password, options) - #since accounts is a ref in plugin self.accounts doesnt need to be updated here - - self.saveAccounts() - if updated: p.scheduleRefresh(user, force=False) - - @lock - def removeAccount(self, plugin, user): - """remove account""" - - if plugin in self.accounts: - p = self.getAccountPlugin(plugin) - p.removeAccount(user) - - self.saveAccounts() - - @lock - def getAccountInfos(self, force=True, refresh=False): - data = {} - - if refresh: - self.core.scheduler.addJob(0, self.core.accountManager.getAccountInfos) - force = False - - for p in self.accounts.keys(): - if self.accounts[p]: - p = self.getAccountPlugin(p) - if p: - data[p.__name__] = p.getAllAccounts(force) - else: # When an account has been skipped, p is None - data[p] = [] - else: - data[p] = [] - e = AccountUpdateEvent() - self.core.pullManager.addEvent(e) - return data - - def sendChange(self): - e = AccountUpdateEvent() - self.core.pullManager.addEvent(e) diff --git a/module/plugins/Container.py b/module/plugins/Container.py deleted file mode 100644 index 59efbd8dd..000000000 --- a/module/plugins/Container.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from os import remove -from os.path import basename, exists - -from module.plugins.Crypter import Crypter -from module.utils import safe_join - - -class Container(Crypter): - __name__ = "Container" - __type__ = "container" - __version__ = "0.1" - - __pattern__ = None - - __description__ = """Base container decrypter plugin""" - __author_name__ = "mkaay" - __author_mail__ = "mkaay@mkaay.de" - - - def preprocessing(self, thread): - """prepare""" - - self.setup() - self.thread = thread - - self.loadToDisk() - - self.decrypt(self.pyfile) - self.deleteTmp() - - self.createPackages() - - - def loadToDisk(self): - """loads container to disk if its stored remotely and overwrite url, - or check existent on several places at disk""" - - if self.pyfile.url.startswith("http"): - self.pyfile.name = re.findall("([^\/=]+)", self.pyfile.url)[-1] - content = self.load(self.pyfile.url) - self.pyfile.url = safe_join(self.config['general']['download_folder'], self.pyfile.name) - f = open(self.pyfile.url, "wb" ) - f.write(content) - f.close() - - else: - self.pyfile.name = basename(self.pyfile.url) - if not exists(self.pyfile.url): - if exists(safe_join(pypath, self.pyfile.url)): - self.pyfile.url = safe_join(pypath, self.pyfile.url) - else: - self.fail(_("File not exists.")) - - - def deleteTmp(self): - if self.pyfile.name.startswith("tmp_"): - remove(self.pyfile.url) diff --git a/module/plugins/Crypter.py b/module/plugins/Crypter.py deleted file mode 100644 index b127777e7..000000000 --- a/module/plugins/Crypter.py +++ /dev/null @@ -1,64 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Plugin import Plugin - - -class Crypter(Plugin): - __name__ = "Crypter" - __type__ = "crypter" - __version__ = "0.1" - - __pattern__ = None - - __description__ = """Base decrypter plugin""" - __author_name__ = "mkaay" - __author_mail__ = "mkaay@mkaay.de" - - - def __init__(self, pyfile): - Plugin.__init__(self, pyfile) - - #: Put all packages here. It's a list of tuples like: ( name, [list of links], folder ) - self.packages = [] - - #: List of urls, pyLoad will generate packagenames - self.urls = [] - - self.multiDL = True - self.limitDL = 0 - - - def preprocessing(self, thread): - """prepare""" - self.setup() - self.thread = thread - - self.decrypt(self.pyfile) - - self.createPackages() - - - def decrypt(self, pyfile): - raise NotImplementedError - - def createPackages(self): - """ create new packages from self.packages """ - for pack in self.packages: - - name, links, folder = pack - - self.logDebug("Parsed package %(name)s with %(len)d links" % {"name": name, "len": len(links)}) - - links = [x.decode("utf-8") for x in links] - - pid = self.api.addPackage(name, links, self.pyfile.package().queue) - - if name != folder is not None: - self.api.setPackageData(pid, {"folder": folder}) #: Due to not break API addPackage method right now - self.logDebug("Set package %(name)s folder to %(folder)s" % {"name": name, "folder": folder}) - - if self.pyfile.package().password: - self.api.setPackageData(pid, {"password": self.pyfile.package().password}) - - if self.urls: - self.api.generateAndAddPackages(self.urls) diff --git a/module/plugins/Hook.py b/module/plugins/Hook.py deleted file mode 100644 index e72ab7ebb..000000000 --- a/module/plugins/Hook.py +++ /dev/null @@ -1,149 +0,0 @@ -# -*- coding: utf-8 -*- - -from traceback import print_exc - -from module.plugins.Plugin import Base - - -class Expose(object): - """ used for decoration to declare rpc services """ - - def __new__(cls, f, *args, **kwargs): - hookManager.addRPC(f.__module__, f.func_name, f.func_doc) - return f - - -def threaded(f): - - def run(*args,**kwargs): - hookManager.startThread(f, *args, **kwargs) - return run - - -class Hook(Base): - """ - Base class for hook plugins. - """ - __name__ = "Hook" - __type__ = "hook" - __version__ = "0.2" - - __config__ = [("name", "type", "desc", "default")] - - __description__ = """Interface for hook""" - __author_name__ = ("mkaay", "RaNaN") - __author_mail__ = ("mkaay@mkaay.de", "RaNaN@pyload.org") - - #: automatically register event listeners for functions, attribute will be deleted dont use it yourself - event_map = None - - # Alternative to event_map - #: List of events the plugin can handle, name the functions exactly like eventname. - event_list = None # dont make duplicate entries in event_map - - #: periodic call interval in secondc - interval = 60 - - - def __init__(self, core, manager): - Base.__init__(self, core) - - #: Provide information in dict here, usable by API `getInfo` - self.info = None - - #: Callback of periodical job task, used by hookmanager - self.cb = None - - #: `HookManager` - self.manager = manager - - #register events - if self.event_map: - for event, funcs in self.event_map.iteritems(): - if type(funcs) in (list, tuple): - for f in funcs: - self.manager.addEvent(event, getattr(self,f)) - else: - self.manager.addEvent(event, getattr(self,funcs)) - - #delete for various reasons - self.event_map = None - - if self.event_list: - for f in self.event_list: - self.manager.addEvent(f, getattr(self,f)) - - self.event_list = None - - self.setup() - self.initPeriodical() - - - def initPeriodical(self): - if self.interval >=1: - self.cb = self.core.scheduler.addJob(0, self._periodical, threaded=False) - - def _periodical(self): - try: - if self.isActivated(): self.periodical() - except Exception, e: - self.logError(_("Error executing hooks: %s") % str(e)) - if self.core.debug: - print_exc() - - self.cb = self.core.scheduler.addJob(self.interval, self._periodical, threaded=False) - - - def __repr__(self): - return "<Hook %s>" % self.__name__ - - def setup(self): - """ more init stuff if needed """ - pass - - def unload(self): - """ called when hook was deactivated """ - pass - - def isActivated(self): - """ checks if hook is activated""" - return self.config.getPlugin(self.__name__, "activated") - - - #event methods - overwrite these if needed - def coreReady(self): - pass - - def coreExiting(self): - pass - - def downloadPreparing(self, pyfile): - pass - - def downloadFinished(self, pyfile): - pass - - def downloadFailed(self, pyfile): - pass - - def packageFinished(self, pypack): - pass - - def beforeReconnecting(self, ip): - pass - - def afterReconnecting(self, ip): - pass - - def periodical(self): - pass - - def newCaptchaTask(self, task): - """ new captcha task for the plugin, it MUST set the handler and timeout or will be ignored """ - pass - - def captchaCorrect(self, task): - pass - - def captchaInvalid(self, task): - pass diff --git a/module/plugins/Hoster.py b/module/plugins/Hoster.py deleted file mode 100644 index bedfce129..000000000 --- a/module/plugins/Hoster.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Plugin import Plugin - - -def getInfo(self): - #result = [ .. (name, size, status, url) .. ] - return - - -class Hoster(Plugin): - __name__ = "Hoster" - __type__ = "hoster" - __version__ = "0.1" - - __pattern__ = None - - __description__ = """Base hoster plugin""" - __author_name__ = "mkaay" - __author_mail__ = "mkaay@mkaay.de" diff --git a/module/plugins/Plugin.py b/module/plugins/Plugin.py deleted file mode 100644 index 03ff58418..000000000 --- a/module/plugins/Plugin.py +++ /dev/null @@ -1,629 +0,0 @@ -# -*- coding: utf-8 -*- - -from time import time, sleep -from random import randint - -import os -from os import remove, makedirs, chmod, stat -from os.path import exists, join - -if os.name != "nt": - from os import chown - from pwd import getpwnam - from grp import getgrnam - -from itertools import islice - -from module.utils import safe_join, safe_filename, fs_encode, fs_decode - -def chunks(iterable, size): - it = iter(iterable) - item = list(islice(it, size)) - while item: - yield item - item = list(islice(it, size)) - - -class Abort(Exception): - """ raised when aborted """ - - -class Fail(Exception): - """ raised when failed """ - - -class Reconnect(Exception): - """ raised when reconnected """ - - -class Retry(Exception): - """ raised when start again from beginning """ - - -class SkipDownload(Exception): - """ raised when download should be skipped """ - - -class Base(object): - """ - A Base class with log/config/db methods *all* plugin types can use - """ - - def __init__(self, core): - #: Core instance - self.core = core - #: logging instance - self.log = core.log - #: core config - self.config = core.config - - #log functions - def logInfo(self, *args): - self.log.info("%s: %s" % (self.__name__, " | ".join([a if isinstance(a, basestring) else str(a) for a in args]))) - - def logWarning(self, *args): - self.log.warning("%s: %s" % (self.__name__, " | ".join([a if isinstance(a, basestring) else str(a) for a in args]))) - - def logError(self, *args): - self.log.error("%s: %s" % (self.__name__, " | ".join([a if isinstance(a, basestring) else str(a) for a in args]))) - - def logDebug(self, *args): - self.log.debug("%s: %s" % (self.__name__, " | ".join([a if isinstance(a, basestring) else str(a) for a in args]))) - - - def setConf(self, option, value): - """ see `setConfig` """ - self.config.setPlugin(self.__name__, option, value) - - def setConfig(self, option, value): - """ Set config value for current plugin - - :param option: - :param value: - :return: - """ - self.setConf(option, value) - - #: Deprecated method - def getConf(self, option): - """ see `getConfig` """ - return self.getConfig(option) - - def getConfig(self, option): - """ Returns config value for current plugin - - :param option: - :return: - """ - return self.config.getPlugin(self.__name__, option) - - def setStorage(self, key, value): - """ Saves a value persistently to the database """ - self.core.db.setStorage(self.__name__, key, value) - - def store(self, key, value): - """ same as `setStorage` """ - self.core.db.setStorage(self.__name__, key, value) - - def getStorage(self, key=None, default=None): - """ Retrieves saved value or dict of all saved entries if key is None """ - if key is not None: - return self.core.db.getStorage(self.__name__, key) or default - return self.core.db.getStorage(self.__name__, key) - - def retrieve(self, *args, **kwargs): - """ same as `getStorage` """ - return self.getStorage(*args, **kwargs) - - def delStorage(self, key): - """ Delete entry in db """ - self.core.db.delStorage(self.__name__, key) - - -class Plugin(Base): - """ - Base plugin for hoster/crypter. - Overwrite `process` / `decrypt` in your subclassed plugin. - """ - __name__ = "Plugin" - __type__ = "hoster" - __version__ = "0.5" - - __pattern__ = None - __config__ = [("name", "type", "desc", "default")] - - __description__ = """Base plugin""" - __author_name__ = ("RaNaN", "spoob", "mkaay") - __author_mail__ = ("RaNaN@pyload.org", "spoob@pyload.org", "mkaay@mkaay.de") - - - def __init__(self, pyfile): - Base.__init__(self, pyfile.m.core) - - #: engage wan reconnection - self.wantReconnect = False - - #: enable simultaneous processing of multiple downloads - self.multiDL = True - self.limitDL = 0 - - #: chunk limit - self.chunkLimit = 1 - self.resumeDownload = False - - #: time() + wait in seconds - self.waitUntil = 0 - self.waiting = False - - #: captcha reader instance - self.ocr = None - - #: account handler instance, see :py:class:`Account` - self.account = pyfile.m.core.accountManager.getAccountPlugin(self.__name__) - - #: premium status - self.premium = False - #: username/login - self.user = None - - if self.account and not self.account.canUse(): - self.account = None - - if self.account: - self.user, data = self.account.selectAccount() - #: Browser instance, see `network.Browser` - self.req = self.account.getAccountRequest(self.user) - self.chunkLimit = -1 # chunk limit, -1 for unlimited - #: enables resume (will be ignored if server dont accept chunks) - self.resumeDownload = True - self.multiDL = True #every hoster with account should provide multiple downloads - #: premium status - self.premium = self.account.isPremium(self.user) - else: - self.req = pyfile.m.core.requestFactory.getRequest(self.__name__) - - #: associated pyfile instance, see `PyFile` - self.pyfile = pyfile - - self.thread = None # holds thread in future - - #: location where the last call to download was saved - self.lastDownload = "" - #: re match of the last call to `checkDownload` - self.lastCheck = None - - #: js engine, see `JsEngine` - self.js = self.core.js - - #: captcha task - self.cTask = None - - #: amount of retries already made - self.retries = 0 - - #: some plugins store html code here - self.html = None - - #: quick caller for API - self.api = self.core.api - - self.init() - - def getChunkCount(self): - if self.chunkLimit <= 0: - return self.config['download']['chunks'] - return min(self.config['download']['chunks'], self.chunkLimit) - - def __call__(self): - return self.__name__ - - def init(self): - """initialize the plugin (in addition to `__init__`)""" - pass - - def setup(self): - """ setup for enviroment and other things, called before downloading (possibly more than one time)""" - pass - - def preprocessing(self, thread): - """ handles important things to do before starting """ - self.thread = thread - - if self.account: - self.account.checkLogin(self.user) - else: - self.req.clearCookies() - - self.setup() - - self.pyfile.setStatus("starting") - - return self.process(self.pyfile) - - - def process(self, pyfile): - """the 'main' method of every plugin, you **have to** overwrite it""" - raise NotImplementedError - - def resetAccount(self): - """ dont use account and retry download """ - self.account = None - self.req = self.core.requestFactory.getRequest(self.__name__) - self.retry() - - def checksum(self, local_file=None): - """ - return codes: - 0 - checksum ok - 1 - checksum wrong - 5 - can't get checksum - 10 - not implemented - 20 - unknown error - """ - #@TODO checksum check hook - - return True, 10 - - - def setWait(self, seconds, reconnect=None): - """Set a specific wait time later used with `wait` - - :param seconds: wait time in seconds - :param reconnect: True if a reconnect would avoid wait time - """ - if reconnect: - self.wantReconnect = True - self.pyfile.waitUntil = time() + int(seconds) - - def wait(self, seconds=None, reconnect=None): - """ Waits the time previously set or use these from arguments. See `setWait` - """ - if seconds: - self.setWait(seconds, reconnect) - - self._wait() - - def _wait(self): - self.waiting = True - self.pyfile.setStatus("waiting") - - while self.pyfile.waitUntil > time(): - self.thread.m.reconnecting.wait(2) - - if self.pyfile.abort: - raise Abort - if self.thread.m.reconnecting.isSet(): - self.waiting = False - self.wantReconnect = False - raise Reconnect - - self.waiting = False - self.pyfile.setStatus("starting") - - def fail(self, reason): - """ fail and give reason """ - raise Fail(reason) - - def offline(self): - """ fail and indicate file is offline """ - raise Fail("offline") - - def tempOffline(self): - """ fail and indicates file ist temporary offline, the core may take consequences """ - raise Fail("temp. offline") - - def retry(self, max_tries=3, wait_time=1, reason=""): - """Retries and begin again from the beginning - - :param max_tries: number of maximum retries - :param wait_time: time to wait in seconds - :param reason: reason for retrying, will be passed to fail if max_tries reached - """ - if 0 < max_tries <= self.retries: - if not reason: reason = "Max retries reached" - raise Fail(reason) - - self.wantReconnect = False - self.setWait(wait_time) - self.wait() - - self.retries += 1 - raise Retry(reason) - - def invalidCaptcha(self): - if self.cTask: - self.cTask.invalid() - - def correctCaptcha(self): - if self.cTask: - self.cTask.correct() - - def decryptCaptcha(self, url, get={}, post={}, cookies=False, forceUser=False, imgtype='jpg', - result_type='textual'): - """ Loads a captcha and decrypts it with ocr, plugin, user input - - :param url: url of captcha image - :param get: get part for request - :param post: post part for request - :param cookies: True if cookies should be enabled - :param forceUser: if True, ocr is not used - :param imgtype: Type of the Image - :param result_type: 'textual' if text is written on the captcha\ - or 'positional' for captcha where the user have to click\ - on a specific region on the captcha - - :return: result of decrypting - """ - - img = self.load(url, get=get, post=post, cookies=cookies) - - id = ("%.2f" % time())[-6:].replace(".", "") - temp_file = open(join("tmp", "tmpCaptcha_%s_%s.%s" % (self.__name__, id, imgtype)), "wb") - temp_file.write(img) - temp_file.close() - - has_plugin = self.__name__ in self.core.pluginManager.captchaPlugins - - if self.core.captcha: - Ocr = self.core.pluginManager.loadClass("captcha", self.__name__) - else: - Ocr = None - - if Ocr and not forceUser: - sleep(randint(3000, 5000) / 1000.0) - if self.pyfile.abort: raise Abort - - ocr = Ocr() - result = ocr.get_captcha(temp_file.name) - else: - captchaManager = self.core.captchaManager - task = captchaManager.newTask(img, imgtype, temp_file.name, result_type) - self.cTask = task - captchaManager.handleCaptcha(task) - - while task.isWaiting(): - if self.pyfile.abort: - captchaManager.removeTask(task) - raise Abort - sleep(1) - - captchaManager.removeTask(task) - - if task.error and has_plugin: #ignore default error message since the user could use OCR - self.fail(_("Pil and tesseract not installed and no Client connected for captcha decrypting")) - elif task.error: - self.fail(task.error) - elif not task.result: - self.fail(_("No captcha result obtained in appropiate time by any of the plugins.")) - - result = task.result - self.logDebug("Received captcha result: %s" % str(result)) - - if not self.core.debug: - try: - remove(temp_file.name) - except: - pass - - return result - - - def load(self, url, get={}, post={}, ref=True, cookies=True, just_header=False, decode=False): - """Load content at url and returns it - - :param url: - :param get: - :param post: - :param ref: - :param cookies: - :param just_header: if True only the header will be retrieved and returned as dict - :param decode: Wether to decode the output according to http header, should be True in most cases - :return: Loaded content - """ - if self.pyfile.abort: raise Abort - #utf8 vs decode -> please use decode attribute in all future plugins - if type(url) == unicode: url = str(url) - - res = self.req.load(url, get, post, ref, cookies, just_header, decode=decode) - - if self.core.debug: - from inspect import currentframe - - frame = currentframe() - if not exists(join("tmp", self.__name__)): - makedirs(join("tmp", self.__name__)) - - f = open( - join("tmp", self.__name__, "%s_line%s.dump.html" % (frame.f_back.f_code.co_name, frame.f_back.f_lineno)) - , "wb") - del frame # delete the frame or it wont be cleaned - - try: - tmp = res.encode("utf8") - except: - tmp = res - - f.write(tmp) - f.close() - - if just_header: - #parse header - header = {"code": self.req.code} - for line in res.splitlines(): - line = line.strip() - if not line or ":" not in line: continue - - key, none, value = line.partition(":") - key = key.lower().strip() - value = value.strip() - - if key in header: - if type(header[key]) == list: - header[key].append(value) - else: - header[key] = [header[key], value] - else: - header[key] = value - res = header - - return res - - def download(self, url, get={}, post={}, ref=True, cookies=True, disposition=False): - """Downloads the content at url to download folder - - :param url: - :param get: - :param post: - :param ref: - :param cookies: - :param disposition: if True and server provides content-disposition header\ - the filename will be changed if needed - :return: The location where the file was saved - """ - - self.checkForSameFiles() - - self.pyfile.setStatus("downloading") - - download_folder = self.config['general']['download_folder'] - - location = safe_join(download_folder, self.pyfile.package().folder) - - if not exists(location): - makedirs(location, int(self.config['permission']['folder'], 8)) - - if self.config['permission']['change_dl'] and os.name != "nt": - try: - uid = getpwnam(self.config['permission']['user'])[2] - gid = getgrnam(self.config['permission']['group'])[2] - - chown(location, uid, gid) - except Exception, e: - self.logWarning(_("Setting User and Group failed: %s") % str(e)) - - # convert back to unicode - location = fs_decode(location) - name = safe_filename(self.pyfile.name) - - filename = join(location, name) - - self.core.hookManager.dispatchEvent("downloadStarts", self.pyfile, url, filename) - - try: - newname = self.req.httpDownload(url, filename, get=get, post=post, ref=ref, cookies=cookies, - chunks=self.getChunkCount(), resume=self.resumeDownload, - progressNotify=self.pyfile.setProgress, disposition=disposition) - finally: - self.pyfile.size = self.req.size - - if disposition and newname and newname != name: #triple check, just to be sure - self.logInfo("%(name)s saved as %(newname)s" % {"name": name, "newname": newname}) - self.pyfile.name = newname - filename = join(location, newname) - - fs_filename = fs_encode(filename) - - if self.config['permission']['change_file']: - chmod(fs_filename, int(self.config['permission']['file'], 8)) - - if self.config['permission']['change_dl'] and os.name != "nt": - try: - uid = getpwnam(self.config['permission']['user'])[2] - gid = getgrnam(self.config['permission']['group'])[2] - - chown(fs_filename, uid, gid) - except Exception, e: - self.logWarning(_("Setting User and Group failed: %s") % str(e)) - - self.lastDownload = filename - return self.lastDownload - - def checkDownload(self, rules, api_size=0, max_size=50000, delete=True, read_size=0): - """ checks the content of the last downloaded file, re match is saved to `lastCheck` - - :param rules: dict with names and rules to match (compiled regexp or strings) - :param api_size: expected file size - :param max_size: if the file is larger then it wont be checked - :param delete: delete if matched - :param read_size: amount of bytes to read from files larger then max_size - :return: dictionary key of the first rule that matched - """ - lastDownload = fs_encode(self.lastDownload) - if not exists(lastDownload): return None - - size = stat(lastDownload) - size = size.st_size - - if api_size and api_size <= size: return None - elif size > max_size and not read_size: return None - self.logDebug("Download Check triggered") - f = open(lastDownload, "rb") - content = f.read(read_size if read_size else -1) - f.close() - #produces encoding errors, better log to other file in the future? - #self.logDebug("Content: %s" % content) - for name, rule in rules.iteritems(): - if type(rule) in (str, unicode): - if rule in content: - if delete: - remove(lastDownload) - return name - elif hasattr(rule, "search"): - m = rule.search(content) - if m: - if delete: - remove(lastDownload) - self.lastCheck = m - return name - - - def getPassword(self): - """ get the password the user provided in the package""" - password = self.pyfile.package().password - if not password: return "" - return password - - - def checkForSameFiles(self, starting=False): - """ checks if same file was/is downloaded within same package - - :param starting: indicates that the current download is going to start - :raises SkipDownload: - """ - - pack = self.pyfile.package() - - for pyfile in self.core.files.cache.values(): - if pyfile != self.pyfile and pyfile.name == self.pyfile.name and pyfile.package().folder == pack.folder: - if pyfile.status in (0, 12): #finished or downloading - raise SkipDownload(pyfile.pluginname) - elif pyfile.status in ( - 5, 7) and starting: #a download is waiting/starting and was appenrently started before - raise SkipDownload(pyfile.pluginname) - - download_folder = self.config['general']['download_folder'] - location = safe_join(download_folder, pack.folder, self.pyfile.name) - - if starting and self.config['download']['skip_existing'] and exists(location): - size = os.stat(location).st_size - if size >= self.pyfile.size: - raise SkipDownload("File exists.") - - pyfile = self.core.db.findDuplicates(self.pyfile.id, self.pyfile.package().folder, self.pyfile.name) - if pyfile: - if exists(location): - raise SkipDownload(pyfile[0]) - - self.logDebug("File %s not skipped, because it does not exists." % self.pyfile.name) - - def clean(self): - """ clean everything and remove references """ - if hasattr(self, "pyfile"): - del self.pyfile - if hasattr(self, "req"): - self.req.close() - del self.req - if hasattr(self, "thread"): - del self.thread - if hasattr(self, "html"): - del self.html diff --git a/module/plugins/PluginManager.py b/module/plugins/PluginManager.py deleted file mode 100644 index 32ea4d16b..000000000 --- a/module/plugins/PluginManager.py +++ /dev/null @@ -1,356 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -import sys - -from itertools import chain -from os import listdir, makedirs -from os.path import isfile, join, exists, abspath -from sys import version_info -from traceback import print_exc - -from module.lib.SafeEval import const_eval as literal_eval - -from module.ConfigParser import IGNORE - - -class PluginManager: - ROOT = "module.plugins." - USERROOT = "userplugins." - TYPES = ("accounts", "container", "crypter", "hooks", "hoster", "internal", "ocr") - - PATTERN = re.compile(r'__pattern__.*=.*r("|\')([^"\']+)') - VERSION = re.compile(r'__version__.*=.*("|\')([0-9.]+)') - CONFIG = re.compile(r'__config__.*=.*\[([^\]]+)', re.MULTILINE) - DESC = re.compile(r'__description__.?=.?("|"""|\')([^"\']+)') - - - def __init__(self, core): - self.core = core - - self.config = core.config - self.log = core.log - - self.plugins = {} - self.createIndex() - - #register for import hook - sys.meta_path.append(self) - - - def createIndex(self): - """create information for all plugins available""" - - sys.path.append(abspath("")) - - if not exists("userplugins"): - makedirs("userplugins") - if not exists(join("userplugins", "__init__.py")): - f = open(join("userplugins", "__init__.py"), "wb") - f.close() - - self.plugins['crypter'] = self.crypterPlugins = self.parse("crypter", pattern=True) - self.plugins['container'] = self.containerPlugins = self.parse("container", pattern=True) - self.plugins['hoster'] = self.hosterPlugins = self.parse("hoster", pattern=True) - - self.plugins['ocr'] = self.captchaPlugins = self.parse("ocr") - self.plugins['accounts'] = self.accountPlugins = self.parse("accounts") - self.plugins['hooks'] = self.hookPlugins = self.parse("hooks") - self.plugins['internal'] = self.internalPlugins = self.parse("internal") - - self.log.debug("created index of plugins") - - def parse(self, folder, pattern=False, home={}): - """ - returns dict with information - home contains parsed plugins from module. - - { - name : {path, version, config, (pattern, re), (plugin, class)} - } - - """ - plugins = {} - if home: - pfolder = join("userplugins", folder) - if not exists(pfolder): - makedirs(pfolder) - if not exists(join(pfolder, "__init__.py")): - f = open(join(pfolder, "__init__.py"), "wb") - f.close() - - else: - pfolder = join(pypath, "module", "plugins", folder) - - for f in listdir(pfolder): - if (isfile(join(pfolder, f)) and f.endswith(".py") or f.endswith("_25.pyc") or f.endswith( - "_26.pyc") or f.endswith("_27.pyc")) and not f.startswith("_"): - data = open(join(pfolder, f)) - content = data.read() - data.close() - - if f.endswith("_25.pyc") and version_info[0:2] != (2, 5): - continue - elif f.endswith("_26.pyc") and version_info[0:2] != (2, 6): - continue - elif f.endswith("_27.pyc") and version_info[0:2] != (2, 7): - continue - - name = f[:-3] - if name[-1] == ".": name = name[:-4] - - version = self.VERSION.findall(content) - if version: - version = float(version[0][1]) - else: - version = 0 - - # home contains plugins from pyload root - if home and name in home: - if home[name]['v'] >= version: - continue - - if name in IGNORE or (folder, name) in IGNORE: - continue - - plugins[name] = {} - plugins[name]['v'] = version - - module = f.replace(".pyc", "").replace(".py", "") - - # the plugin is loaded from user directory - plugins[name]['user'] = True if home else False - plugins[name]['name'] = module - - if pattern: - pattern = self.PATTERN.findall(content) - - if pattern: - pattern = pattern[0][1] - else: - pattern = "^unmachtable$" - - plugins[name]['pattern'] = pattern - - try: - plugins[name]['re'] = re.compile(pattern) - except: - self.log.error(_("%s has a invalid pattern.") % name) - - - # internals have no config - if folder == "internal": - self.config.deleteConfig(name) - continue - - config = self.CONFIG.findall(content) - if config: - config = literal_eval(config[0].strip().replace("\n", "").replace("\r", "")) - desc = self.DESC.findall(content) - desc = desc[0][1] if desc else "" - - if type(config[0]) == tuple: - config = [list(x) for x in config] - else: - config = [list(config)] - - if folder == "hooks": - append = True - for item in config: - if item[0] == "activated": append = False - - # activated flag missing - if append: config.append(["activated", "bool", "Activated", False]) - - try: - self.config.addPluginConfig(name, config, desc) - except: - self.log.error("Invalid config in %s: %s" % (name, config)) - - elif folder == "hooks": #force config creation - desc = self.DESC.findall(content) - desc = desc[0][1] if desc else "" - config = (["activated", "bool", "Activated", False],) - - try: - self.config.addPluginConfig(name, config, desc) - except: - self.log.error("Invalid config in %s: %s" % (name, config)) - - if not home: - temp = self.parse(folder, pattern, plugins) - plugins.update(temp) - - return plugins - - - def parseUrls(self, urls): - """parse plugins for given list of urls""" - - last = None - res = [] # tupels of (url, plugin) - - for url in urls: - if type(url) not in (str, unicode, buffer): continue - found = False - - if last and last[1]['re'].match(url): - res.append((url, last[0])) - continue - - for name, value in chain(self.crypterPlugins.iteritems(), self.hosterPlugins.iteritems(), - self.containerPlugins.iteritems()): - if value['re'].match(url): - res.append((url, name)) - last = (name, value) - found = True - break - - if not found: - res.append((url, "BasePlugin")) - - return res - - def findPlugin(self, name, pluginlist=("hoster", "crypter", "container")): - for ptype in pluginlist: - if name in self.plugins[ptype]: - return self.plugins[ptype][name], ptype - return None, None - - def getPlugin(self, name, original=False): - """return plugin module from hoster|decrypter|container""" - plugin, type = self.findPlugin(name) - - if not plugin: - self.log.warning("Plugin %s not found." % name) - plugin = self.hosterPlugins['BasePlugin'] - - if "new_module" in plugin and not original: - return plugin['new_module'] - - return self.loadModule(type, name) - - def getPluginName(self, name): - """ used to obtain new name if other plugin was injected""" - plugin, type = self.findPlugin(name) - - if "new_name" in plugin: - return plugin['new_name'] - - return name - - def loadModule(self, type, name): - """ Returns loaded module for plugin - - :param type: plugin type, subfolder of module.plugins - :param name: - """ - plugins = self.plugins[type] - if name in plugins: - if "module" in plugins[name]: return plugins[name]['module'] - try: - module = __import__(self.ROOT + "%s.%s" % (type, plugins[name]['name']), globals(), locals(), - plugins[name]['name']) - plugins[name]['module'] = module #cache import, maybe unneeded - return module - except Exception, e: - self.log.error(_("Error importing %(name)s: %(msg)s") % {"name": name, "msg": str(e)}) - if self.core.debug: - print_exc() - - def loadClass(self, type, name): - """Returns the class of a plugin with the same name""" - module = self.loadModule(type, name) - if module: return getattr(module, name) - - def getAccountPlugins(self): - """return list of account plugin names""" - return self.accountPlugins.keys() - - def find_module(self, fullname, path=None): - #redirecting imports if necesarry - if fullname.startswith(self.ROOT) or fullname.startswith(self.USERROOT): #seperate pyload plugins - if fullname.startswith(self.USERROOT): user = 1 - else: user = 0 #used as bool and int - - split = fullname.split(".") - if len(split) != 4 - user: return - type, name = split[2 - user:4 - user] - - if type in self.plugins and name in self.plugins[type]: - #userplugin is a newer version - if not user and self.plugins[type][name]['user']: - return self - #imported from userdir, but pyloads is newer - if user and not self.plugins[type][name]['user']: - return self - - - def load_module(self, name, replace=True): - if name not in sys.modules: #could be already in modules - if replace: - if self.ROOT in name: - newname = name.replace(self.ROOT, self.USERROOT) - else: - newname = name.replace(self.USERROOT, self.ROOT) - else: newname = name - - base, plugin = newname.rsplit(".", 1) - - self.log.debug("Redirected import %s -> %s" % (name, newname)) - - module = __import__(newname, globals(), locals(), [plugin]) - #inject under new an old name - sys.modules[name] = module - sys.modules[newname] = module - - return sys.modules[name] - - - def reloadPlugins(self, type_plugins): - """ reload and reindex plugins """ - if not type_plugins: - return None - - self.log.debug("Request reload of plugins: %s" % type_plugins) - - reloaded = [] - - as_dict = {} - for t,n in type_plugins: - if t in ("hooks", "internal"): #: do not reload hooks or internals, because would cause to much side effects - continue - elif t in as_dict: - as_dict[t].append(n) - else: - as_dict[t] = [n] - - for type in as_dict.iterkeys(): - for plugin in as_dict[type]: - if plugin in self.plugins[type] and "module" in self.plugins[type][plugin]: - self.log.debug("Reloading %s" % plugin) - id = (type, plugin) - try: - reload(self.plugins[type][plugin]['module']) - except Exception, e: - self.log.error("Error when reloading %s" % id, str(e)) - continue - else: - reloaded.append(id) - - #index creation - self.plugins['crypter'] = self.crypterPlugins = self.parse("crypter", pattern=True) - self.plugins['container'] = self.containerPlugins = self.parse("container", pattern=True) - self.plugins['hoster'] = self.hosterPlugins = self.parse("hoster", pattern=True) - self.plugins['ocr'] = self.captchaPlugins = self.parse("ocr") - self.plugins['accounts'] = self.accountPlugins = self.parse("accounts") - - if "accounts" in as_dict: #: accounts needs to be reloaded - self.core.accountManager.initPlugins() - self.core.scheduler.addJob(0, self.core.accountManager.getAccountInfos) - - return reloaded #: return a list of the plugins successfully reloaded - - def reloadPlugin(self, type_plugin): - """ reload and reindex ONE plugin """ - return True if self.reloadPlugins(type_plugin) else False diff --git a/module/plugins/accounts/AlldebridCom.py b/module/plugins/accounts/AlldebridCom.py deleted file mode 100644 index dbf4ad800..000000000 --- a/module/plugins/accounts/AlldebridCom.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -import xml.dom.minidom as dom - -from time import time -from urllib import urlencode - -from BeautifulSoup import BeautifulSoup - -from module.plugins.Account import Account - - -class AlldebridCom(Account): - __name__ = "AlldebridCom" - __type__ = "account" - __version__ = "0.22" - - __description__ = """AllDebrid.com account plugin""" - __author_name__ = "Andy Voigt" - __author_mail__ = "spamsales@online.de" - - - def loadAccountInfo(self, user, req): - data = self.getAccountData(user) - page = req.load("http://www.alldebrid.com/account/") - soup = BeautifulSoup(page) - #Try to parse expiration date directly from the control panel page (better accuracy) - try: - time_text = soup.find('div', attrs={'class': 'remaining_time_text'}).strong.string - self.logDebug("Account expires in: %s" % time_text) - p = re.compile('\d+') - exp_data = p.findall(time_text) - exp_time = time() + int(exp_data[0]) * 24 * 60 * 60 + int( - exp_data[1]) * 60 * 60 + (int(exp_data[2]) - 1) * 60 - #Get expiration date from API - except: - data = self.getAccountData(user) - page = req.load("http://www.alldebrid.com/api.php?action=info_user&login=%s&pw=%s" % (user, - data['password'])) - self.logDebug(page) - xml = dom.parseString(page) - exp_time = time() + int(xml.getElementsByTagName("date")[0].childNodes[0].nodeValue) * 24 * 60 * 60 - account_info = {"validuntil": exp_time, "trafficleft": -1} - return account_info - - def login(self, user, data, req): - urlparams = urlencode({'action': 'login', 'login_login': user, 'login_password': data['password']}) - page = req.load("http://www.alldebrid.com/register/?%s" % urlparams) - - if "This login doesn't exist" in page: - self.wrongPassword() - - if "The password is not valid" in page: - self.wrongPassword() - - if "Invalid captcha" in page: - self.wrongPassword() diff --git a/module/plugins/accounts/BayfilesCom.py b/module/plugins/accounts/BayfilesCom.py deleted file mode 100644 index 7c4708f7d..000000000 --- a/module/plugins/accounts/BayfilesCom.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- - -from time import time - -from module.plugins.Account import Account -from module.common.json_layer import json_loads - - -class BayfilesCom(Account): - __name__ = "BayfilesCom" - __type__ = "account" - __version__ = "0.03" - - __description__ = """Bayfiles.com account plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - - def loadAccountInfo(self, user, req): - for _ in xrange(2): - response = json_loads(req.load("http://api.bayfiles.com/v1/account/info")) - self.logDebug(response) - if not response['error']: - break - self.logWarning(response['error']) - self.relogin(user) - - return {"premium": bool(response['premium']), "trafficleft": -1, - "validuntil": response['expires'] if response['expires'] >= int(time()) else -1} - - def login(self, user, data, req): - response = json_loads(req.load("http://api.bayfiles.com/v1/account/login/%s/%s" % (user, data['password']))) - self.logDebug(response) - if response['error']: - self.logError(response['error']) - self.wrongPassword() diff --git a/module/plugins/accounts/BitshareCom.py b/module/plugins/accounts/BitshareCom.py deleted file mode 100644 index 272bbeb6e..000000000 --- a/module/plugins/accounts/BitshareCom.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Account import Account - - -class BitshareCom(Account): - __name__ = "BitshareCom" - __type__ = "account" - __version__ = "0.12" - - __description__ = """Bitshare account plugin""" - __author_name__ = "Paul King" - __author_mail__ = None - - - def loadAccountInfo(self, user, req): - page = req.load("http://bitshare.com/mysettings.html") - - if "\"http://bitshare.com/myupgrade.html\">Free" in page: - return {"validuntil": -1, "trafficleft": -1, "premium": False} - - if not '<input type="checkbox" name="directdownload" checked="checked" />' in page: - self.logWarning(_("Activate direct Download in your Bitshare Account")) - - return {"validuntil": -1, "trafficleft": -1, "premium": True} - - def login(self, user, data, req): - page = req.load("http://bitshare.com/login.html", - post={"user": user, "password": data['password'], "submit": "Login"}, cookies=True) - if "login" in req.lastEffectiveURL: - self.wrongPassword() diff --git a/module/plugins/accounts/CramitIn.py b/module/plugins/accounts/CramitIn.py deleted file mode 100644 index 34aa3ab40..000000000 --- a/module/plugins/accounts/CramitIn.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.XFSPAccount import XFSPAccount - - -class CramitIn(XFSPAccount): - __name__ = "CramitIn" - __type__ = "account" - __version__ = "0.01" - - __description__ = """Cramit.in account plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - MAIN_PAGE = "http://cramit.in/" diff --git a/module/plugins/accounts/CyberlockerCh.py b/module/plugins/accounts/CyberlockerCh.py deleted file mode 100644 index 729975fb0..000000000 --- a/module/plugins/accounts/CyberlockerCh.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.XFSPAccount import XFSPAccount -from module.plugins.internal.SimpleHoster import parseHtmlForm - - -class CyberlockerCh(XFSPAccount): - __name__ = "CyberlockerCh" - __type__ = "account" - __version__ = "0.01" - - __description__ = """Cyberlocker.ch account plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - MAIN_PAGE = "http://cyberlocker.ch/" - - - def login(self, user, data, req): - html = req.load(self.MAIN_PAGE + 'login.html', decode=True) - - action, inputs = parseHtmlForm('name="FL"', html) - if not inputs: - inputs = {"op": "login", - "redirect": self.MAIN_PAGE} - - inputs.update({"login": user, - "password": data['password']}) - - # Without this a 403 Forbidden is returned - req.http.lastURL = self.MAIN_PAGE + 'login.html' - html = req.load(self.MAIN_PAGE, post=inputs, decode=True) - - if 'Incorrect Login or Password' in html or '>Error<' in html: - self.wrongPassword() diff --git a/module/plugins/accounts/CzshareCom.py b/module/plugins/accounts/CzshareCom.py deleted file mode 100644 index 6f2ee641e..000000000 --- a/module/plugins/accounts/CzshareCom.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- - -from time import mktime, strptime -import re - -from module.plugins.Account import Account - - -class CzshareCom(Account): - __name__ = "CzshareCom" - __type__ = "account" - __version__ = "0.14" - - __description__ = """Czshare.com account plugin, now Sdilej.cz""" - __author_name__ = ("zoidberg", "stickell") - __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") - - CREDIT_LEFT_PATTERN = r'<tr class="active">\s*<td>([0-9 ,]+) (KiB|MiB|GiB)</td>\s*<td>([^<]*)</td>\s*</tr>' - - - def loadAccountInfo(self, user, req): - html = req.load("http://sdilej.cz/prehled_kreditu/") - - m = re.search(self.CREDIT_LEFT_PATTERN, html) - if m is None: - return {"validuntil": 0, "trafficleft": 0} - else: - credits = float(m.group(1).replace(' ', '').replace(',', '.')) - credits = credits * 1024 ** {'KiB': 0, 'MiB': 1, 'GiB': 2}[m.group(2)] - validuntil = mktime(strptime(m.group(3), '%d.%m.%y %H:%M')) - return {"validuntil": validuntil, "trafficleft": credits} - - def login(self, user, data, req): - html = req.load('https://sdilej.cz/index.php', post={ - "Prihlasit": "Prihlasit", - "login-password": data['password'], - "login-name": user - }) - - if '<div class="login' in html: - self.wrongPassword() diff --git a/module/plugins/accounts/DebridItaliaCom.py b/module/plugins/accounts/DebridItaliaCom.py deleted file mode 100644 index f4441c356..000000000 --- a/module/plugins/accounts/DebridItaliaCom.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -import time - -from module.plugins.Account import Account - - -class DebridItaliaCom(Account): - __name__ = "DebridItaliaCom" - __type__ = "account" - __version__ = "0.1" - - __description__ = """Debriditalia.com account plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - WALID_UNTIL_PATTERN = r"Premium valid till: (?P<D>[^|]+) \|" - - - def loadAccountInfo(self, user, req): - if 'Account premium not activated' in self.html: - return {"premium": False, "validuntil": None, "trafficleft": None} - - m = re.search(self.WALID_UNTIL_PATTERN, self.html) - if m: - validuntil = int(time.mktime(time.strptime(m.group('D'), "%d/%m/%Y %H:%M"))) - return {"premium": True, "validuntil": validuntil, "trafficleft": -1} - else: - self.logError('Unable to retrieve account information - Plugin may be out of date') - - def login(self, user, data, req): - self.html = req.load("http://debriditalia.com/login.php", - get={"u": user, "p": data['password']}) - if 'NO' in self.html: - self.wrongPassword() diff --git a/module/plugins/accounts/DepositfilesCom.py b/module/plugins/accounts/DepositfilesCom.py deleted file mode 100644 index 01f1906f4..000000000 --- a/module/plugins/accounts/DepositfilesCom.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from time import strptime, mktime - -from module.plugins.Account import Account - - -class DepositfilesCom(Account): - __name__ = "DepositfilesCom" - __type__ = "account" - __version__ = "0.3" - - __description__ = """Depositfiles.com account plugin""" - __author_name__ = ("mkaay", "stickell", "Walter Purcaro") - __author_mail__ = ("mkaay@mkaay.de", "l.stickell@yahoo.it", "vuolter@gmail.com") - - - def loadAccountInfo(self, user, req): - src = req.load("https://dfiles.eu/de/gold/") - validuntil = re.search(r"Sie haben Gold Zugang bis: <b>(.*?)</b></div>", src).group(1) - - validuntil = int(mktime(strptime(validuntil, "%Y-%m-%d %H:%M:%S"))) - - return {"validuntil": validuntil, "trafficleft": -1} - - def login(self, user, data, req): - src = req.load("https://dfiles.eu/de/login.php", get={"return": "/de/gold/payment.php"}, - post={"login": user, "password": data['password']}) - if r'<div class="error_message">Sie haben eine falsche Benutzername-Passwort-Kombination verwendet.</div>' in src: - self.wrongPassword() diff --git a/module/plugins/accounts/EasybytezCom.py b/module/plugins/accounts/EasybytezCom.py deleted file mode 100644 index 3b8517686..000000000 --- a/module/plugins/accounts/EasybytezCom.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from time import mktime, strptime, gmtime - -from module.plugins.Account import Account -from module.plugins.internal.SimpleHoster import parseHtmlForm -from module.utils import parseFileSize - - -class EasybytezCom(Account): - __name__ = "EasybytezCom" - __type__ = "account" - __version__ = "0.04" - - __description__ = """EasyBytez.com account plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - VALID_UNTIL_PATTERN = r'Premium account expire:</TD><TD><b>([^<]+)</b>' - TRAFFIC_LEFT_PATTERN = r'<TR><TD>Traffic available today:</TD><TD><b>(?P<S>[^<]+)</b>' - - - def loadAccountInfo(self, user, req): - html = req.load("http://www.easybytez.com/?op=my_account", decode=True) - - validuntil = trafficleft = None - premium = False - - m = re.search(self.VALID_UNTIL_PATTERN, html) - if m: - try: - self.logDebug("Expire date: " + m.group(1)) - validuntil = mktime(strptime(m.group(1), "%d %B %Y")) - except Exception, e: - self.logError(e) - if validuntil > mktime(gmtime()): - premium = True - trafficleft = -1 - else: - m = re.search(self.TRAFFIC_LEFT_PATTERN, html) - if m: - trafficleft = m.group(1) - if "Unlimited" in trafficleft: - trafficleft = -1 - else: - trafficleft = parseFileSize(trafficleft) / 1024 - - return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium} - - def login(self, user, data, req): - html = req.load('http://www.easybytez.com/login.html', decode=True) - action, inputs = parseHtmlForm('name="FL"', html) - inputs.update({"login": user, - "password": data['password'], - "redirect": "http://www.easybytez.com/"}) - - html = req.load(action, post=inputs, decode=True) - - if 'Incorrect Login or Password' in html or '>Error<' in html: - self.wrongPassword() diff --git a/module/plugins/accounts/EgoFilesCom.py b/module/plugins/accounts/EgoFilesCom.py deleted file mode 100644 index 41b58c4e7..000000000 --- a/module/plugins/accounts/EgoFilesCom.py +++ /dev/null @@ -1,44 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -import time - -from module.plugins.Account import Account -from module.utils import parseFileSize - - -class EgoFilesCom(Account): - __name__ = "EgoFilesCom" - __type__ = "account" - __version__ = "0.2" - - __description__ = """Egofiles.com account plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - PREMIUM_ACCOUNT_PATTERN = '<br/>\s*Premium: (?P<P>[^/]*) / Traffic left: (?P<T>[\d.]*) (?P<U>\w*)\s*\\n\s*<br/>' - - - def loadAccountInfo(self, user, req): - html = req.load("http://egofiles.com") - if 'You are logged as a Free User' in html: - return {"premium": False, "validuntil": None, "trafficleft": None} - - m = re.search(self.PREMIUM_ACCOUNT_PATTERN, html) - if m: - validuntil = int(time.mktime(time.strptime(m.group('P'), "%Y-%m-%d %H:%M:%S"))) - trafficleft = parseFileSize(m.group('T'), m.group('U')) / 1024 - return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft} - else: - self.logError('Unable to retrieve account information - Plugin may be out of date') - - def login(self, user, data, req): - # Set English language - req.load("https://egofiles.com/ajax/lang.php?lang=en", just_header=True) - - html = req.load("http://egofiles.com/ajax/register.php", - post={"log": 1, - "loginV": user, - "passV": data['password']}) - if 'Login successful' not in html: - self.wrongPassword() diff --git a/module/plugins/accounts/EuroshareEu.py b/module/plugins/accounts/EuroshareEu.py deleted file mode 100644 index f37693206..000000000 --- a/module/plugins/accounts/EuroshareEu.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- - -from time import mktime, strptime -import re - -from module.plugins.Account import Account - - -class EuroshareEu(Account): - __name__ = "EuroshareEu" - __type__ = "account" - __version__ = "0.01" - - __description__ = """Euroshare.eu account plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - - def loadAccountInfo(self, user, req): - self.relogin(user) - html = req.load("http://euroshare.eu/customer-zone/settings/") - - m = re.search('id="input_expire_date" value="(\d+\.\d+\.\d+ \d+:\d+)"', html) - if m is None: - premium, validuntil = False, -1 - else: - premium = True - validuntil = mktime(strptime(m.group(1), "%d.%m.%Y %H:%M")) - - return {"validuntil": validuntil, "trafficleft": -1, "premium": premium} - - def login(self, user, data, req): - - html = req.load('http://euroshare.eu/customer-zone/login/', post={ - "trvale": "1", - "login": user, - "password": data['password'] - }, decode=True) - - if u">Nesprávne prihlasovacie meno alebo heslo" in html: - self.wrongPassword() diff --git a/module/plugins/accounts/FastixRu.py b/module/plugins/accounts/FastixRu.py deleted file mode 100644 index 7e46ccd05..000000000 --- a/module/plugins/accounts/FastixRu.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Account import Account -from module.common.json_layer import json_loads - - -class FastixRu(Account): - __name__ = "FastixRu" - __type__ = "account" - __version__ = "0.02" - - __description__ = """Fastix account plugin""" - __author_name__ = "Massimo Rosamilia" - __author_mail__ = "max@spiritix.eu" - - - def loadAccountInfo(self, user, req): - data = self.getAccountData(user) - page = req.load("http://fastix.ru/api_v2/?apikey=%s&sub=getaccountdetails" % (data['api'])) - page = json_loads(page) - points = page['points'] - kb = float(points) - kb = kb * 1024 ** 2 / 1000 - if points > 0: - account_info = {"validuntil": -1, "trafficleft": kb} - else: - account_info = {"validuntil": None, "trafficleft": None, "premium": False} - return account_info - - def login(self, user, data, req): - page = req.load("http://fastix.ru/api_v2/?sub=get_apikey&email=%s&password=%s" % (user, data['password'])) - api = json_loads(page) - api = api['apikey'] - data['api'] = api - if "error_code" in page: - self.wrongPassword() diff --git a/module/plugins/accounts/FastshareCz.py b/module/plugins/accounts/FastshareCz.py deleted file mode 100644 index a968be19e..000000000 --- a/module/plugins/accounts/FastshareCz.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from module.plugins.Account import Account -from module.utils import parseFileSize - - -class FastshareCz(Account): - __name__ = "FastshareCz" - __type__ = "account" - __version__ = "0.03" - - __description__ = """Fastshare.cz account plugin""" - __author_name__ = ("zoidberg", "stickell") - __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") - - CREDIT_PATTERN = r'(?:Kredit|Credit)\s*</td>\s*<td[^>]*>([\d. \w]+) ' - - - def loadAccountInfo(self, user, req): - html = req.load("http://www.fastshare.cz/user", decode=True) - - m = re.search(self.CREDIT_PATTERN, html) - if m: - trafficleft = parseFileSize(m.group(1)) / 1024 - premium = True if trafficleft else False - else: - trafficleft = None - premium = False - - return {"validuntil": -1, "trafficleft": trafficleft, "premium": premium} - - def login(self, user, data, req): - req.load('http://www.fastshare.cz/login') # Do not remove or it will not login - html = req.load('http://www.fastshare.cz/sql.php', post={ - "heslo": data['password'], - "login": user - }, decode=True) - - if u'>Å patné uÅŸivatelské jméno nebo heslo.<' in html: - self.wrongPassword() diff --git a/module/plugins/accounts/File4safeCom.py b/module/plugins/accounts/File4safeCom.py deleted file mode 100644 index aa7894e98..000000000 --- a/module/plugins/accounts/File4safeCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.XFSPAccount import XFSPAccount - - -class File4safeCom(XFSPAccount): - __name__ = "File4safeCom" - __type__ = "account" - __version__ = "0.01" - - __description__ = """File4safe.com account plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - MAIN_PAGE = "http://file4safe.com/" - - LOGIN_FAIL_PATTERN = r'input_login' - PREMIUM_PATTERN = r'Extend Premium' diff --git a/module/plugins/accounts/FilecloudIo.py b/module/plugins/accounts/FilecloudIo.py deleted file mode 100644 index ec98cf9b2..000000000 --- a/module/plugins/accounts/FilecloudIo.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Account import Account -from module.common.json_layer import json_loads - - -class FilecloudIo(Account): - __name__ = "FilecloudIo" - __type__ = "account" - __version__ = "0.02" - - __description__ = """FilecloudIo account plugin""" - __author_name__ = ("zoidberg", "stickell") - __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") - - - def loadAccountInfo(self, user, req): - # It looks like the first API request always fails, so we retry 5 times, it should work on the second try - for _ in xrange(5): - rep = req.load("https://secure.filecloud.io/api-fetch_apikey.api", - post={"username": user, "password": self.accounts[user]['password']}) - rep = json_loads(rep) - if rep['status'] == 'ok': - break - elif rep['status'] == 'error' and rep['message'] == 'no such user or wrong password': - self.logError("Wrong username or password") - return {"valid": False, "premium": False} - else: - return {"premium": False} - - akey = rep['akey'] - self.accounts[user]['akey'] = akey # Saved for hoster plugin - rep = req.load("http://api.filecloud.io/api-fetch_account_details.api", - post={"akey": akey}) - rep = json_loads(rep) - - if rep['is_premium'] == 1: - return {"validuntil": int(rep['premium_until']), "trafficleft": -1} - else: - return {"premium": False} - - def login(self, user, data, req): - req.cj.setCookie("secure.filecloud.io", "lang", "en") - html = req.load('https://secure.filecloud.io/user-login.html') - - if not hasattr(self, "form_data"): - self.form_data = {} - - self.form_data['username'] = user - self.form_data['password'] = data['password'] - - html = req.load('https://secure.filecloud.io/user-login_p.html', - post=self.form_data, - multipart=True) - - self.logged_in = True if "you have successfully logged in - filecloud.io" in html else False - self.form_data = {} diff --git a/module/plugins/accounts/FilefactoryCom.py b/module/plugins/accounts/FilefactoryCom.py deleted file mode 100644 index 84d80cab7..000000000 --- a/module/plugins/accounts/FilefactoryCom.py +++ /dev/null @@ -1,46 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from time import mktime, strptime - -from pycurl import REFERER - -from module.plugins.Account import Account - - -class FilefactoryCom(Account): - __name__ = "FilefactoryCom" - __type__ = "account" - __version__ = "0.14" - - __description__ = """Filefactory.com account plugin""" - __author_name__ = ("zoidberg", "stickell") - __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") - - VALID_UNTIL_PATTERN = r'Premium valid until: <strong>(?P<d>\d{1,2})\w{1,2} (?P<m>\w{3}), (?P<y>\d{4})</strong>' - - - def loadAccountInfo(self, user, req): - html = req.load("http://www.filefactory.com/account/") - - m = re.search(self.VALID_UNTIL_PATTERN, html) - if m: - premium = True - validuntil = re.sub(self.VALID_UNTIL_PATTERN, '\g<d> \g<m> \g<y>', m.group(0)) - validuntil = mktime(strptime(validuntil, "%d %b %Y")) - else: - premium = False - validuntil = -1 - - return {"premium": premium, "trafficleft": -1, "validuntil": validuntil} - - def login(self, user, data, req): - req.http.c.setopt(REFERER, "http://www.filefactory.com/member/login.php") - - html = req.load("http://www.filefactory.com/member/signin.php", post={ - "loginEmail": user, - "loginPassword": data['password'], - "Submit": "Sign In"}) - - if req.lastEffectiveURL != "http://www.filefactory.com/account/": - self.wrongPassword() diff --git a/module/plugins/accounts/FilejungleCom.py b/module/plugins/accounts/FilejungleCom.py deleted file mode 100644 index 72e275d4f..000000000 --- a/module/plugins/accounts/FilejungleCom.py +++ /dev/null @@ -1,47 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from time import mktime, strptime - -from module.plugins.Account import Account - - -class FilejungleCom(Account): - __name__ = "FilejungleCom" - __type__ = "account" - __version__ = "0.11" - - __description__ = """Filejungle.com account plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - login_timeout = 60 - - URL = "http://filejungle.com/" - TRAFFIC_LEFT_PATTERN = r'"/extend_premium\.php">Until (\d+ [A-Za-z]+ \d+)<br' - LOGIN_FAILED_PATTERN = r'<span htmlfor="loginUser(Name|Password)" generated="true" class="fail_info">' - - - def loadAccountInfo(self, user, req): - html = req.load(self.URL + "dashboard.php") - m = re.search(self.TRAFFIC_LEFT_PATTERN, html) - if m: - premium = True - validuntil = mktime(strptime(m.group(1), "%d %b %Y")) - else: - premium = False - validuntil = -1 - - return {"premium": premium, "trafficleft": -1, "validuntil": validuntil} - - def login(self, user, data, req): - html = req.load(self.URL + "login.php", post={ - "loginUserName": user, - "loginUserPassword": data['password'], - "loginFormSubmit": "Login", - "recaptcha_challenge_field": "", - "recaptcha_response_field": "", - "recaptcha_shortencode_field": ""}) - - if re.search(self.LOGIN_FAILED_PATTERN, html): - self.wrongPassword() diff --git a/module/plugins/accounts/FilerNet.py b/module/plugins/accounts/FilerNet.py deleted file mode 100644 index 2e50298d7..000000000 --- a/module/plugins/accounts/FilerNet.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -import time - -from module.plugins.Account import Account -from module.utils import parseFileSize - - -class FilerNet(Account): - __name__ = "FilerNet" - __type__ = "account" - __version__ = "0.01" - - __description__ = """Filer.net account plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - TOKEN_PATTERN = r'_csrf_token" value="([^"]+)" />' - WALID_UNTIL_PATTERN = r"Der Premium-Zugang ist gÃŒltig bis (.+)\.\s*</td>" - TRAFFIC_PATTERN = r'Traffic</th>\s*<td>([^<]+)</td>' - FREE_PATTERN = r'Account Status</th>\s*<td>\s*Free' - - - def loadAccountInfo(self, user, req): - html = req.load("https://filer.net/profile") - - # Free user - if re.search(self.FREE_PATTERN, html): - return {"premium": False, "validuntil": None, "trafficleft": None} - - until = re.search(self.WALID_UNTIL_PATTERN, html) - traffic = re.search(self.TRAFFIC_PATTERN, html) - if until and traffic: - validuntil = int(time.mktime(time.strptime(until.group(1), "%d.%m.%Y %H:%M:%S"))) - trafficleft = parseFileSize(traffic.group(1)) / 1024 - return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft} - else: - self.logError('Unable to retrieve account information - Plugin may be out of date') - return {"premium": False, "validuntil": None, "trafficleft": None} - - def login(self, user, data, req): - html = req.load("https://filer.net/login") - token = re.search(self.TOKEN_PATTERN, html).group(1) - html = req.load("https://filer.net/login_check", - post={"_username": user, "_password": data['password'], - "_remember_me": "on", "_csrf_token": token, "_target_path": "https://filer.net/"}) - if 'Logout' not in html: - self.wrongPassword() diff --git a/module/plugins/accounts/FilerioCom.py b/module/plugins/accounts/FilerioCom.py deleted file mode 100644 index 544a7f3a6..000000000 --- a/module/plugins/accounts/FilerioCom.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.XFSPAccount import XFSPAccount - - -class FilerioCom(XFSPAccount): - __name__ = "FilerioCom" - __type__ = "account" - __version__ = "0.01" - - __description__ = """FileRio.in account plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - MAIN_PAGE = "http://filerio.in/" diff --git a/module/plugins/accounts/FilesMailRu.py b/module/plugins/accounts/FilesMailRu.py deleted file mode 100644 index 5ece67140..000000000 --- a/module/plugins/accounts/FilesMailRu.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Account import Account - - -class FilesMailRu(Account): - __name__ = "FilesMailRu" - __type__ = "account" - __version__ = "0.1" - - __description__ = """Filesmail.ru account plugin""" - __author_name__ = "RaNaN" - __author_mail__ = "RaNaN@pyload.org" - - - def loadAccountInfo(self, user, req): - return {"validuntil": None, "trafficleft": None} - - def login(self, user, data, req): - user, domain = user.split("@") - - page = req.load("http://swa.mail.ru/cgi-bin/auth", None, - {"Domain": domain, "Login": user, "Password": data['password'], - "Page": "http://files.mail.ru/"}, cookies=True) - - if "ÐевеÑМПе ÐžÐŒÑ Ð¿ÐŸÐ»ÑзПваÑÐµÐ»Ñ ÐžÐ»Ðž паÑПлÑ" in page: # @TODO seems not to work - self.wrongPassword() diff --git a/module/plugins/accounts/FileserveCom.py b/module/plugins/accounts/FileserveCom.py deleted file mode 100644 index 5be5e8d04..000000000 --- a/module/plugins/accounts/FileserveCom.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- - -from time import mktime, strptime - -from module.plugins.Account import Account -from module.common.json_layer import json_loads - - -class FileserveCom(Account): - __name__ = "FileserveCom" - __type__ = "account" - __version__ = "0.2" - - __description__ = """Fileserve.com account plugin""" - __author_name__ = "mkaay" - __author_mail__ = "mkaay@mkaay.de" - - - def loadAccountInfo(self, user, req): - data = self.getAccountData(user) - - page = req.load("http://app.fileserve.com/api/login/", post={"username": user, "password": data['password'], - "submit": "Submit+Query"}) - res = json_loads(page) - - if res['type'] == "premium": - validuntil = mktime(strptime(res['expireTime'], "%Y-%m-%d %H:%M:%S")) - return {"trafficleft": res['traffic'], "validuntil": validuntil} - else: - return {"premium": False, "trafficleft": None, "validuntil": None} - - def login(self, user, data, req): - page = req.load("http://app.fileserve.com/api/login/", post={"username": user, "password": data['password'], - "submit": "Submit+Query"}) - res = json_loads(page) - - if not res['type']: - self.wrongPassword() - - #login at fileserv page - req.load("http://www.fileserve.com/login.php", - post={"loginUserName": user, "loginUserPassword": data['password'], "autoLogin": "checked", - "loginFormSubmit": "Login"}) diff --git a/module/plugins/accounts/FourSharedCom.py b/module/plugins/accounts/FourSharedCom.py deleted file mode 100644 index 206edca23..000000000 --- a/module/plugins/accounts/FourSharedCom.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Account import Account -from module.common.json_layer import json_loads - - -class FourSharedCom(Account): - __name__ = "FourSharedCom" - __type__ = "account" - __version__ = "0.01" - - __description__ = """FourShared.com account plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - - def loadAccountInfo(self, user, req): - #fixme - return {"validuntil": -1, "trafficleft": -1, "premium": False} - - def login(self, user, data, req): - req.cj.setCookie("www.4shared.com", "4langcookie", "en") - response = req.load('http://www.4shared.com/login', - post={"login": user, - "password": data['password'], - "remember": "false", - "doNotRedirect": "true"}) - self.logDebug(response) - response = json_loads(response) - - if not "ok" in response or response['ok'] != True: - if "rejectReason" in response and response['rejectReason'] != True: - self.logError(response['rejectReason']) - self.wrongPassword() diff --git a/module/plugins/accounts/FreakshareCom.py b/module/plugins/accounts/FreakshareCom.py deleted file mode 100644 index dfa5f4541..000000000 --- a/module/plugins/accounts/FreakshareCom.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from time import strptime, mktime - -from module.plugins.Account import Account - - -class FreakshareCom(Account): - __name__ = "FreakshareCom" - __type__ = "account" - __version__ = "0.1" - - __description__ = """Freakshare.com account plugin""" - __author_name__ = "RaNaN" - __author_mail__ = "RaNaN@pyload.org" - - - def loadAccountInfo(self, user, req): - page = req.load("http://freakshare.com/") - - validuntil = r"ltig bis:</td>\s*<td><b>([0-9 \-:.]+)</b></td>" - validuntil = re.search(validuntil, page, re.MULTILINE) - validuntil = validuntil.group(1).strip() - validuntil = mktime(strptime(validuntil, "%d.%m.%Y - %H:%M")) - - traffic = r"Traffic verbleibend:</td>\s*<td>([^<]+)" - traffic = re.search(traffic, page, re.MULTILINE) - traffic = traffic.group(1).strip() - traffic = self.parseTraffic(traffic) - - return {"validuntil": validuntil, "trafficleft": traffic} - - def login(self, user, data, req): - page = req.load("http://freakshare.com/login.html", None, - {"submit": "Login", "user": user, "pass": data['password']}, cookies=True) - - if "Falsche Logindaten!" in page or "Wrong Username or Password!" in page: - self.wrongPassword() diff --git a/module/plugins/accounts/FreeWayMe.py b/module/plugins/accounts/FreeWayMe.py deleted file mode 100644 index fe5a79949..000000000 --- a/module/plugins/accounts/FreeWayMe.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Account import Account -from module.common.json_layer import json_loads - - -class FreeWayMe(Account): - __name__ = "FreeWayMe" - __type__ = "account" - __version__ = "0.11" - - __description__ = """FreeWayMe account plugin""" - __author_name__ = "Nicolas Giese" - __author_mail__ = "james@free-way.me" - - - def loadAccountInfo(self, user, req): - status = self.getAccountStatus(user, req) - if not status: - return False - self.logDebug(status) - - account_info = {"validuntil": -1, "premium": False} - if status['premium'] == "Free": - account_info['trafficleft'] = int(status['guthaben']) * 1024 - elif status['premium'] == "Spender": - account_info['trafficleft'] = -1 - elif status['premium'] == "Flatrate": - account_info = {"validuntil": int(status['Flatrate']), - "trafficleft": -1, - "premium": True} - - return account_info - - def getpw(self, user): - return self.accounts[user]['password'] - - def login(self, user, data, req): - status = self.getAccountStatus(user, req) - - # Check if user and password are valid - if not status: - self.wrongPassword() - - def getAccountStatus(self, user, req): - answer = req.load("https://www.free-way.me/ajax/jd.php", - get={"id": 4, "user": user, "pass": self.accounts[user]['password']}) - self.logDebug("login: %s" % answer) - if answer == "Invalid login": - self.wrongPassword() - return False - return json_loads(answer) diff --git a/module/plugins/accounts/FshareVn.py b/module/plugins/accounts/FshareVn.py deleted file mode 100644 index 78714f238..000000000 --- a/module/plugins/accounts/FshareVn.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- - -from time import mktime, strptime -from pycurl import REFERER -import re - -from module.plugins.Account import Account - - -class FshareVn(Account): - __name__ = "FshareVn" - __type__ = "account" - __version__ = "0.07" - - __description__ = """Fshare.vn account plugin""" - __author_name__ = ("zoidberg", "stickell") - __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") - - VALID_UNTIL_PATTERN = ur'<dt>Thá»i hạn dùng:</dt>\s*<dd>([^<]+)</dd>' - LIFETIME_PATTERN = ur'<dt>Lần ÄÄng nháºp trưá»c:</dt>\s*<dd>[^<]+</dd>' - TRAFFIC_LEFT_PATTERN = ur'<dt>Tá»ng Dung Lượng Tà i Khoản</dt>\s*<dd[^>]*>([0-9.]+) ([kKMG])B</dd>' - DIRECT_DOWNLOAD_PATTERN = ur'<input type="checkbox"\s*([^=>]*)[^>]*/>KÃch hoạt download trá»±c tiếp</dt>' - - - def loadAccountInfo(self, user, req): - html = req.load("http://www.fshare.vn/account_info.php", decode=True) - - if re.search(self.LIFETIME_PATTERN, html): - self.logDebug("Lifetime membership detected") - trafficleft = self.getTrafficLeft() - return {"validuntil": -1, "trafficleft": trafficleft, "premium": True} - - m = re.search(self.VALID_UNTIL_PATTERN, html) - if m: - premium = True - validuntil = mktime(strptime(m.group(1), '%I:%M:%S %p %d-%m-%Y')) - trafficleft = self.getTrafficLeft() - else: - premium = False - validuntil = None - trafficleft = None - - return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium} - - def login(self, user, data, req): - req.http.c.setopt(REFERER, "https://www.fshare.vn/login.php") - - html = req.load('https://www.fshare.vn/login.php', post={ - "login_password": data['password'], - "login_useremail": user, - "url_refe": "http://www.fshare.vn/index.php" - }, referer=True, decode=True) - - if not re.search(r'<img\s+alt="VIP"', html): - self.wrongPassword() - - def getTrafficLeft(self): - m = re.search(self.TRAFFIC_LEFT_PATTERN, html) - return float(m.group(1)) * 1024 ** {'k': 0, 'K': 0, 'M': 1, 'G': 2}[m.group(2)] if m else 0 diff --git a/module/plugins/accounts/Ftp.py b/module/plugins/accounts/Ftp.py deleted file mode 100644 index 1319ea2a7..000000000 --- a/module/plugins/accounts/Ftp.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Account import Account - - -class Ftp(Account): - __name__ = "Ftp" - __type__ = "account" - __version__ = "0.01" - - __description__ = """Ftp dummy account plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - - login_timeout = info_threshold = -1 #: Unlimited diff --git a/module/plugins/accounts/HellshareCz.py b/module/plugins/accounts/HellshareCz.py deleted file mode 100644 index 9207cddab..000000000 --- a/module/plugins/accounts/HellshareCz.py +++ /dev/null @@ -1,74 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -import time - -from module.plugins.Account import Account - - -class HellshareCz(Account): - __name__ = "HellshareCz" - __type__ = "account" - __version__ = "0.14" - - __description__ = """Hellshare.cz account plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - CREDIT_LEFT_PATTERN = r'<div class="credit-link">\s*<table>\s*<tr>\s*<th>(\d+|\d\d\.\d\d\.)</th>' - - - def loadAccountInfo(self, user, req): - self.relogin(user) - html = req.load("http://www.hellshare.com/") - - m = re.search(self.CREDIT_LEFT_PATTERN, html) - if m is None: - trafficleft = None - validuntil = None - premium = False - else: - credit = m.group(1) - premium = True - try: - if "." in credit: - #Time-based account - vt = [int(x) for x in credit.split('.')[:2]] - lt = time.localtime() - year = lt.tm_year + int(vt[1] < lt.tm_mon or (vt[1] == lt.tm_mon and vt[0] < lt.tm_mday)) - validuntil = time.mktime(time.strptime("%s%d 23:59:59" % (credit, year), "%d.%m.%Y %H:%M:%S")) - trafficleft = -1 - else: - #Traffic-based account - trafficleft = int(credit) * 1024 - validuntil = -1 - except Exception, e: - self.logError('Unable to parse credit info', e) - validuntil = -1 - trafficleft = -1 - - return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium} - - def login(self, user, data, req): - html = req.load('http://www.hellshare.com/') - if req.lastEffectiveURL != 'http://www.hellshare.com/': - #Switch to English - self.logDebug('Switch lang - URL: %s' % req.lastEffectiveURL) - json = req.load("%s?do=locRouter-show" % req.lastEffectiveURL) - hash = re.search(r"(--[0-9a-f]+-)", json).group(1) - self.logDebug('Switch lang - HASH: %s' % hash) - html = req.load('http://www.hellshare.com/%s/' % hash) - - if re.search(self.CREDIT_LEFT_PATTERN, html): - self.logDebug('Already logged in') - return - - html = req.load('http://www.hellshare.com/login?do=loginForm-submit', post={ - "login": "Log in", - "password": data['password'], - "username": user, - "perm_login": "on" - }) - - if "<p>You input a wrong user name or wrong password</p>" in html: - self.wrongPassword() diff --git a/module/plugins/accounts/HotfileCom.py b/module/plugins/accounts/HotfileCom.py deleted file mode 100644 index cffbbab8f..000000000 --- a/module/plugins/accounts/HotfileCom.py +++ /dev/null @@ -1,74 +0,0 @@ -# -*- coding: utf-8 -*- - -from time import strptime, mktime -import hashlib - -from module.plugins.Account import Account - - -class HotfileCom(Account): - __name__ = "HotfileCom" - __type__ = "account" - __version__ = "0.2" - - __description__ = """Hotfile.com account plugin""" - __author_name__ = ("mkaay", "JoKoT3") - __author_mail__ = ("mkaay@mkaay.de", "jokot3@gmail.com") - - - def loadAccountInfo(self, user, req): - resp = self.apiCall("getuserinfo", user=user) - if resp.startswith("."): - self.core.debug("HotfileCom API Error: %s" % resp) - raise Exception - info = {} - for p in resp.split("&"): - key, value = p.split("=") - info[key] = value - - if info['is_premium'] == '1': - info['premium_until'] = info['premium_until'].replace("T", " ") - zone = info['premium_until'][19:] - info['premium_until'] = info['premium_until'][:19] - zone = int(zone[:3]) - - validuntil = int(mktime(strptime(info['premium_until'], "%Y-%m-%d %H:%M:%S"))) + (zone * 60 * 60) - tmp = {"validuntil": validuntil, "trafficleft": -1, "premium": True} - - elif info['is_premium'] == '0': - tmp = {"premium": False} - - return tmp - - def apiCall(self, method, post={}, user=None): - if user: - data = self.getAccountData(user) - else: - user, data = self.selectAccount() - - req = self.getAccountRequest(user) - - digest = req.load("http://api.hotfile.com/", post={"action": "getdigest"}) - h = hashlib.md5() - h.update(data['password']) - hp = h.hexdigest() - h = hashlib.md5() - h.update(hp) - h.update(digest) - pwhash = h.hexdigest() - - post.update({"action": method}) - post.update({"username": user, "passwordmd5dig": pwhash, "digest": digest}) - resp = req.load("http://api.hotfile.com/", post=post) - req.close() - return resp - - def login(self, user, data, req): - cj = self.getAccountCookies(user) - cj.setCookie("hotfile.com", "lang", "en") - req.load("http://hotfile.com/", cookies=True) - page = req.load("http://hotfile.com/login.php", post={"returnto": "/", "user": user, "pass": data['password']}, - cookies=True) - - if "Bad username/password" in page: - self.wrongPassword() diff --git a/module/plugins/accounts/Http.py b/module/plugins/accounts/Http.py deleted file mode 100644 index 589a45617..000000000 --- a/module/plugins/accounts/Http.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Account import Account - - -class Http(Account): - __name__ = "Http" - __type__ = "account" - __version__ = "0.01" - - __description__ = """Http dummy account plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - - login_timeout = info_threshold = -1 #: Unlimited diff --git a/module/plugins/accounts/LetitbitNet.py b/module/plugins/accounts/LetitbitNet.py deleted file mode 100644 index c849f9d2d..000000000 --- a/module/plugins/accounts/LetitbitNet.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Account import Account -# from module.common.json_layer import json_loads, json_dumps - - -class LetitbitNet(Account): - __name__ = "LetitbitNet" - __type__ = "account" - __version__ = "0.01" - - __description__ = """Letitbit.net account plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - - def loadAccountInfo(self, user, req): - ## DISABLED BECAUSE IT GET 'key exausted' EVEN IF VALID ## - # api_key = self.accounts[user]['password'] - # json_data = [api_key, ['key/info']] - # api_rep = req.load('http://api.letitbit.net/json', post={'r': json_dumps(json_data)}) - # self.logDebug('API Key Info: ' + api_rep) - # api_rep = json_loads(api_rep) - # - # if api_rep['status'] == 'FAIL': - # self.logWarning(api_rep['data']) - # return {'valid': False, 'premium': False} - - return {"premium": True} - - def login(self, user, data, req): - # API_KEY is the username and the PREMIUM_KEY is the password - self.logInfo('You must use your API KEY as username and the PREMIUM KEY as password.') diff --git a/module/plugins/accounts/LinksnappyCom.py b/module/plugins/accounts/LinksnappyCom.py deleted file mode 100644 index a03357e25..000000000 --- a/module/plugins/accounts/LinksnappyCom.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- - -from hashlib import md5 - -from module.plugins.Account import Account -from module.common.json_layer import json_loads - - -class LinksnappyCom(Account): - __name__ = "LinksnappyCom" - __type__ = "account" - __version__ = "0.02" - - __description__ = """Linksnappy.com account plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - - def loadAccountInfo(self, user, req): - data = self.getAccountData(user) - r = req.load('http://gen.linksnappy.com/lseAPI.php', - get={'act': 'USERDETAILS', 'username': user, 'password': md5(data['password']).hexdigest()}) - self.logDebug("JSON data: " + r) - j = json_loads(r) - - if j['error']: - return {"premium": False} - - validuntil = j['return']['expire'] - if validuntil == 'lifetime': - validuntil = -1 - elif validuntil == 'expired': - return {"premium": False} - else: - validuntil = float(validuntil) - - if 'trafficleft' not in j['return'] or isinstance(j['return']['trafficleft'], str): - trafficleft = -1 - else: - trafficleft = int(j['return']['trafficleft']) * 1024 - - return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft} - - def login(self, user, data, req): - r = req.load('http://gen.linksnappy.com/lseAPI.php', - get={'act': 'USERDETAILS', 'username': user, 'password': md5(data['password']).hexdigest()}) - - if 'Invalid Account Details' in r: - self.wrongPassword() diff --git a/module/plugins/accounts/MegaDebridEu.py b/module/plugins/accounts/MegaDebridEu.py deleted file mode 100644 index 9c5603989..000000000 --- a/module/plugins/accounts/MegaDebridEu.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Account import Account -from module.common.json_layer import json_loads - - -class MegaDebridEu(Account): - __name__ = "MegaDebridEu" - __type__ = "account" - __version__ = "0.2" - - __description__ = """mega-debrid.eu account plugin""" - __author_name__ = "D.Ducatel" - __author_mail__ = "dducatel@je-geek.fr" - - # Define the base URL of MegaDebrid api - API_URL = "https://www.mega-debrid.eu/api.php" - - - def loadAccountInfo(self, user, req): - data = self.getAccountData(user) - jsonResponse = req.load(self.API_URL, - get={'action': 'connectUser', 'login': user, 'password': data['password']}) - response = json_loads(jsonResponse) - - if response['response_code'] == "ok": - return {"premium": True, "validuntil": float(response['vip_end']), "status": True} - else: - self.logError(response) - return {"status": False, "premium": False} - - def login(self, user, data, req): - jsonResponse = req.load(self.API_URL, - get={'action': 'connectUser', 'login': user, 'password': data['password']}) - response = json_loads(jsonResponse) - if response['response_code'] != "ok": - self.wrongPassword() diff --git a/module/plugins/accounts/MegasharesCom.py b/module/plugins/accounts/MegasharesCom.py deleted file mode 100644 index 7c4777706..000000000 --- a/module/plugins/accounts/MegasharesCom.py +++ /dev/null @@ -1,46 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from time import mktime, strptime - -from module.plugins.Account import Account - - -class MegasharesCom(Account): - __name__ = "MegasharesCom" - __type__ = "account" - __version__ = "0.02" - - __description__ = """Megashares.com account plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - VALID_UNTIL_PATTERN = r'<p class="premium_info_box">Period Ends: (\w{3} \d{1,2}, \d{4})</p>' - - - def loadAccountInfo(self, user, req): - #self.relogin(user) - html = req.load("http://d01.megashares.com/myms.php", decode=True) - - premium = False if '>Premium Upgrade<' in html else True - - validuntil = trafficleft = -1 - try: - timestr = re.search(self.VALID_UNTIL_PATTERN, html).group(1) - self.logDebug(timestr) - validuntil = mktime(strptime(timestr, "%b %d, %Y")) - except Exception, e: - self.logError(e) - - return {"validuntil": validuntil, "trafficleft": -1, "premium": premium} - - def login(self, user, data, req): - html = req.load('http://d01.megashares.com/myms_login.php', post={ - "httpref": "", - "myms_login": "Login", - "mymslogin_name": user, - "mymspassword": data['password'] - }, decode=True) - - if not '<span class="b ml">%s</span>' % user in html: - self.wrongPassword() diff --git a/module/plugins/accounts/MovReelCom.py b/module/plugins/accounts/MovReelCom.py deleted file mode 100644 index 34862c4ef..000000000 --- a/module/plugins/accounts/MovReelCom.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.XFSPAccount import XFSPAccount - - -class MovReelCom(XFSPAccount): - __name__ = "MovReelCom" - __type__ = "account" - __version__ = "0.01" - - __description__ = """Movreel.com account plugin""" - __author_name__ = "t4skforce" - __author_mail__ = "t4skforce1337[AT]gmail[DOT]com" - - login_timeout = 60 - info_threshold = 30 - - MAIN_PAGE = "http://movreel.com/" - - TRAFFIC_LEFT_PATTERN = r'Traffic.*?<b>([^<]+)</b>' - LOGIN_FAIL_PATTERN = r'<b[^>]*>Incorrect Login or Password</b><br>' diff --git a/module/plugins/accounts/MultiDebridCom.py b/module/plugins/accounts/MultiDebridCom.py deleted file mode 100644 index c731ce9ae..000000000 --- a/module/plugins/accounts/MultiDebridCom.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- - -from time import time - -from module.plugins.Account import Account -from module.common.json_layer import json_loads - - -class MultiDebridCom(Account): - __name__ = "MultiDebridCom" - __type__ = "account" - __version__ = "0.01" - - __description__ = """Multi-debrid.com account plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - - def loadAccountInfo(self, user, req): - if 'days_left' in self.json_data: - validuntil = int(time() + self.json_data['days_left'] * 24 * 60 * 60) - return {"premium": True, "validuntil": validuntil, "trafficleft": -1} - else: - self.logError('Unable to get account information') - - def login(self, user, data, req): - # Password to use is the API-Password written in http://multi-debrid.com/myaccount - html = req.load("http://multi-debrid.com/api.php", - get={"user": user, "pass": data['password']}) - self.logDebug('JSON data: ' + html) - self.json_data = json_loads(html) - if self.json_data['status'] != 'ok': - self.logError('Invalid login. The password to use is the API-Password you find in your "My Account" page') - self.wrongPassword() diff --git a/module/plugins/accounts/MultishareCz.py b/module/plugins/accounts/MultishareCz.py deleted file mode 100644 index fc13bac69..000000000 --- a/module/plugins/accounts/MultishareCz.py +++ /dev/null @@ -1,44 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Account import Account -#from time import mktime, strptime -#from pycurl import REFERER -import re -from module.utils import parseFileSize - - -class MultishareCz(Account): - __name__ = "MultishareCz" - __type__ = "account" - __version__ = "0.02" - - __description__ = """Multishare.cz account plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - TRAFFIC_LEFT_PATTERN = r'<span class="profil-zvyrazneni">Kredit:</span>\s*<strong>(?P<S>[0-9,]+) (?P<U>\w+)</strong>' - ACCOUNT_INFO_PATTERN = r'<input type="hidden" id="(u_ID|u_hash)" name="[^"]*" value="([^"]+)">' - - - def loadAccountInfo(self, user, req): - #self.relogin(user) - html = req.load("http://www.multishare.cz/profil/", decode=True) - - m = re.search(self.TRAFFIC_LEFT_PATTERN, html) - trafficleft = parseFileSize(m.group('S'), m.group('U')) / 1024 if m else 0 - self.premium = True if trafficleft else False - - html = req.load("http://www.multishare.cz/", decode=True) - mms_info = dict(re.findall(self.ACCOUNT_INFO_PATTERN, html)) - - return dict(mms_info, **{"validuntil": -1, "trafficleft": trafficleft}) - - def login(self, user, data, req): - html = req.load('http://www.multishare.cz/html/prihlaseni_process.php', post={ - "akce": "PÅihlásit", - "heslo": data['password'], - "jmeno": user - }, decode=True) - - if '<div class="akce-chyba akce">' in html: - self.wrongPassword() diff --git a/module/plugins/accounts/NetloadIn.py b/module/plugins/accounts/NetloadIn.py deleted file mode 100755 index 12c5556fb..000000000 --- a/module/plugins/accounts/NetloadIn.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from time import time - -from module.plugins.Account import Account - - -class NetloadIn(Account): - __name__ = "NetloadIn" - __type__ = "account" - __version__ = "0.22" - - __description__ = """Netload.in account plugin""" - __author_name__ = ("RaNaN", "CryNickSystems") - __author_mail__ = ("RaNaN@pyload.org", "webmaster@pcProfil.de") - - - def loadAccountInfo(self, user, req): - page = req.load("http://netload.in/index.php?id=2&lang=de") - left = r">(\d+) (Tag|Tage), (\d+) Stunden<" - left = re.search(left, page) - if left: - validuntil = time() + int(left.group(1)) * 24 * 60 * 60 + int(left.group(3)) * 60 * 60 - trafficleft = -1 - premium = True - else: - validuntil = None - premium = False - trafficleft = None - return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium} - - def login(self, user, data, req): - page = req.load("http://netload.in/index.php", None, - {"txtuser": user, "txtpass": data['password'], "txtcheck": "login", "txtlogin": "Login"}, - cookies=True) - if "password or it might be invalid!" in page: - self.wrongPassword() diff --git a/module/plugins/accounts/OboomCom.py b/module/plugins/accounts/OboomCom.py deleted file mode 100644 index a37759f9a..000000000 --- a/module/plugins/accounts/OboomCom.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- coding: utf-8 -*- - -import time - -from module.lib.beaker.crypto.pbkdf2 import PBKDF2 - -from module.common.json_layer import json_loads -from module.plugins.Account import Account - - -class OboomCom(Account): - __name__ = "OboomCom" - __type__ = "account" - __version__ = "0.1" - - __description__ = """Oboom.com account plugin""" - __author_name__ = "stanley" - __author_mail__ = "stanley.foerster@gmail.com" - - - def loadAccountData(self, user, req): - passwd = self.getAccountData(user)['password'] - salt = passwd[::-1] - pbkdf2 = PBKDF2(passwd, salt, 1000).hexread(16) - result = json_loads(req.load("https://www.oboom.com/1.0/login", get={"auth": user, "pass": pbkdf2})) - if not result[0] == 200: - self.logWarning("Failed to log in: %s" % result[1]) - self.wrongPassword() - return result[1] - - def loadAccountInfo(self, name, req): - accountData = self.loadAccountData(name, req) - userData = accountData['user'] - - if "premium_unix" in userData: - validUntilUtc = int(userData['premium_unix']) - if validUntilUtc > int(time.time()): - premium = True - validUntil = validUntilUtc - traffic = userData['traffic'] - trafficLeft = traffic['current'] - maxTraffic = traffic['max'] - session = accountData['session'] - return {"premium": premium, - "validuntil": validUntil, - "trafficleft": trafficLeft / 1024, - "maxtraffic": maxTraffic / 1024, - "session": session - } - return {"premium": False, "validuntil": -1} - - def login(self, user, data, req): - self.loadAccountData(user, req) diff --git a/module/plugins/accounts/OneFichierCom.py b/module/plugins/accounts/OneFichierCom.py deleted file mode 100644 index 43dd1c2b6..000000000 --- a/module/plugins/accounts/OneFichierCom.py +++ /dev/null @@ -1,48 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from time import strptime, mktime -from pycurl import REFERER - -from module.plugins.Account import Account - - -class OneFichierCom(Account): - __name__ = "OneFichierCom" - __type__ = "account" - __version__ = "0.1" - - __description__ = """1fichier.com account plugin""" - __author_name__ = "Elrick69" - __author_mail__ = "elrick69[AT]rocketmail[DOT]com" - - VALID_UNTIL_PATTERN = r'You are a premium user until (?P<d>\d{2})/(?P<m>\d{2})/(?P<y>\d{4})' - - - def loadAccountInfo(self, user, req): - - html = req.load("http://1fichier.com/console/abo.pl") - - m = re.search(self.VALID_UNTIL_PATTERN, html) - - if m: - premium = True - validuntil = re.sub(self.VALID_UNTIL_PATTERN, '\g<d>/\g<m>/\g<y>', m.group(0)) - validuntil = int(mktime(strptime(validuntil, "%d/%m/%Y"))) - else: - premium = False - validuntil = -1 - - return {"premium": premium, "trafficleft": -1, "validuntil": validuntil} - - def login(self, user, data, req): - - req.http.c.setopt(REFERER, "http://1fichier.com/login.pl?lg=en") - - html = req.load("http://1fichier.com/login.pl?lg=en", post={ - "mail": user, - "pass": data['password'], - "Login": "Login"}) - - if r'<div class="error_message">Invalid username or password.</div>' in html: - self.wrongPassword() diff --git a/module/plugins/accounts/OverLoadMe.py b/module/plugins/accounts/OverLoadMe.py deleted file mode 100644 index 34f684cb1..000000000 --- a/module/plugins/accounts/OverLoadMe.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Account import Account -from module.common.json_layer import json_loads - - -class OverLoadMe(Account): - __name__ = "OverLoadMe" - __type__ = "account" - __version__ = "0.01" - - __description__ = """Over-Load.me account plugin""" - __author_name__ = "marley" - __author_mail__ = "marley@over-load.me" - - - def loadAccountInfo(self, user, req): - data = self.getAccountData(user) - page = req.load("https://api.over-load.me/account.php", get={"user": user, "auth": data['password']}).strip() - data = json_loads(page) - - # Check for premium - if data['membership'] == "Free": - return {"premium": False} - - account_info = {"validuntil": data['expirationunix'], "trafficleft": -1} - return account_info - - def login(self, user, data, req): - jsondata = req.load("https://api.over-load.me/account.php", - get={"user": user, "auth": data['password']}).strip() - data = json_loads(jsondata) - - if data['err'] == 1: - self.wrongPassword() diff --git a/module/plugins/accounts/Premium4Me.py b/module/plugins/accounts/Premium4Me.py deleted file mode 100644 index 9f66af414..000000000 --- a/module/plugins/accounts/Premium4Me.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Account import Account - - -class Premium4Me(Account): - __name__ = "Premium4Me" - __type__ = "account" - __version__ = "0.03" - - __description__ = """Premium.to account plugin""" - __author_name__ = ("RaNaN", "zoidberg", "stickell") - __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz", "l.stickell@yahoo.it") - - - def loadAccountInfo(self, user, req): - traffic = req.load("http://premium.to/api/traffic.php?authcode=%s" % self.authcode) - - account_info = {"trafficleft": int(traffic) / 1024, - "validuntil": -1} - - return account_info - - def login(self, user, data, req): - self.authcode = req.load("http://premium.to/api/getauthcode.php?username=%s&password=%s" % ( - user, data['password'])).strip() - - if "wrong username" in self.authcode: - self.wrongPassword() diff --git a/module/plugins/accounts/PremiumizeMe.py b/module/plugins/accounts/PremiumizeMe.py deleted file mode 100644 index dcf8b8f20..000000000 --- a/module/plugins/accounts/PremiumizeMe.py +++ /dev/null @@ -1,46 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Account import Account - -from module.common.json_layer import json_loads - - -class PremiumizeMe(Account): - __name__ = "PremiumizeMe" - __type__ = "account" - __version__ = "0.11" - - __description__ = """Premiumize.me account plugin""" - __author_name__ = "Florian Franzen" - __author_mail__ = "FlorianFranzen@gmail.com" - - - def loadAccountInfo(self, user, req): - # Get user data from premiumize.me - status = self.getAccountStatus(user, req) - self.logDebug(status) - - # Parse account info - account_info = {"validuntil": float(status['result']['expires']), - "trafficleft": max(0, status['result']['trafficleft_bytes'] / 1024)} - - if status['result']['type'] == 'free': - account_info['premium'] = False - - return account_info - - def login(self, user, data, req): - # Get user data from premiumize.me - status = self.getAccountStatus(user, req) - - # Check if user and password are valid - if status['status'] != 200: - self.wrongPassword() - - def getAccountStatus(self, user, req): - # Use premiumize.me API v1 (see https://secure.premiumize.me/?show=api) - # to retrieve account info and return the parsed json answer - answer = req.load( - "https://api.premiumize.me/pm-api/v1.php?method=accountstatus¶ms[login]=%s¶ms[pass]=%s" % ( - user, self.accounts[user]['password'])) - return json_loads(answer) diff --git a/module/plugins/accounts/QuickshareCz.py b/module/plugins/accounts/QuickshareCz.py deleted file mode 100644 index fcaf14e92..000000000 --- a/module/plugins/accounts/QuickshareCz.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from module.plugins.Account import Account -from module.utils import parseFileSize - - -class QuickshareCz(Account): - __name__ = "QuickshareCz" - __type__ = "account" - __version__ = "0.01" - - __description__ = """Quickshare.cz account plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - - def loadAccountInfo(self, user, req): - html = req.load("http://www.quickshare.cz/premium", decode=True) - - m = re.search(r'Stav kreditu: <strong>(.+?)</strong>', html) - if m: - trafficleft = parseFileSize(m.group(1)) / 1024 - premium = True if trafficleft else False - else: - trafficleft = None - premium = False - - return {"validuntil": -1, "trafficleft": trafficleft, "premium": premium} - - def login(self, user, data, req): - html = req.load('http://www.quickshare.cz/html/prihlaseni_process.php', post={ - "akce": u'PÅihlásit', - "heslo": data['password'], - "jmeno": user - }, decode=True) - - if u'>TakovÜ uÅŸivatel neexistuje.<' in html or u'>Å patné heslo.<' in html: - self.wrongPassword() diff --git a/module/plugins/accounts/RPNetBiz.py b/module/plugins/accounts/RPNetBiz.py deleted file mode 100644 index 358f6ffca..000000000 --- a/module/plugins/accounts/RPNetBiz.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Account import Account -from module.common.json_layer import json_loads - - -class RPNetBiz(Account): - __name__ = "RPNetBiz" - __type__ = "account" - __version__ = "0.1" - - __description__ = """RPNet.biz account plugin""" - __author_name__ = "Dman" - __author_mail__ = "dmanugm@gmail.com" - - - def loadAccountInfo(self, user, req): - # Get account information from rpnet.biz - response = self.getAccountStatus(user, req) - try: - if response['accountInfo']['isPremium']: - # Parse account info. Change the trafficleft later to support per host info. - account_info = {"validuntil": int(response['accountInfo']['premiumExpiry']), - "trafficleft": -1, "premium": True} - else: - account_info = {"validuntil": None, "trafficleft": None, "premium": False} - - except KeyError: - #handle wrong password exception - account_info = {"validuntil": None, "trafficleft": None, "premium": False} - - return account_info - - def login(self, user, data, req): - # Get account information from rpnet.biz - response = self.getAccountStatus(user, req) - - # If we have an error in the response, we have wrong login information - if 'error' in response: - self.wrongPassword() - - def getAccountStatus(self, user, req): - # Using the rpnet API, check if valid premium account - response = req.load("https://premium.rpnet.biz/client_api.php", - get={"username": user, "password": self.accounts[user]['password'], - "action": "showAccountInformation"}) - self.logDebug("JSON data: %s" % response) - - return json_loads(response) diff --git a/module/plugins/accounts/RapidgatorNet.py b/module/plugins/accounts/RapidgatorNet.py deleted file mode 100644 index 849933a87..000000000 --- a/module/plugins/accounts/RapidgatorNet.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Account import Account -from module.common.json_layer import json_loads - - -class RapidgatorNet(Account): - __name__ = "RapidgatorNet" - __type__ = "account" - __version__ = "0.04" - - __description__ = """Rapidgator.net account plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - API_URL = 'http://rapidgator.net/api/user' - - - def loadAccountInfo(self, user, req): - try: - sid = self.getAccountData(user).get('SID') - assert sid - - json = req.load("%s/info?sid=%s" % (self.API_URL, sid)) - self.logDebug("API:USERINFO", json) - json = json_loads(json) - - if json['response_status'] == 200: - if "reset_in" in json['response']: - self.scheduleRefresh(user, json['response']['reset_in']) - - return {"validuntil": json['response']['expire_date'], - "trafficleft": int(json['response']['traffic_left']) / 1024, - "premium": True} - else: - self.logError(json['response_details']) - except Exception, e: - self.logError(e) - - return {"validuntil": None, "trafficleft": None, "premium": False} - - def login(self, user, data, req): - try: - json = req.load('%s/login' % self.API_URL, post={"username": user, "password": data['password']}) - self.logDebug("API:LOGIN", json) - json = json_loads(json) - - if json['response_status'] == 200: - data['SID'] = str(json['response']['session_id']) - return - else: - self.logError(json['response_details']) - except Exception, e: - self.logError(e) - - self.wrongPassword() diff --git a/module/plugins/accounts/RapidshareCom.py b/module/plugins/accounts/RapidshareCom.py deleted file mode 100644 index dc4f09ee1..000000000 --- a/module/plugins/accounts/RapidshareCom.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Account import Account - - -class RapidshareCom(Account): - __name__ = "RapidshareCom" - __type__ = "account" - __version__ = "0.22" - - __description__ = """Rapidshare.com account plugin""" - __author_name__ = "mkaay" - __author_mail__ = "mkaay@mkaay.de" - - - def loadAccountInfo(self, user, req): - data = self.getAccountData(user) - api_url_base = "http://api.rapidshare.com/cgi-bin/rsapi.cgi" - api_param_prem = {"sub": "getaccountdetails", "type": "prem", "login": user, - "password": data['password'], "withcookie": 1} - src = req.load(api_url_base, cookies=False, get=api_param_prem) - if src.startswith("ERROR"): - raise Exception(src) - fields = src.split("\n") - info = {} - for t in fields: - if not t.strip(): - continue - k, v = t.split("=") - info[k] = v - - validuntil = int(info['billeduntil']) - premium = True if validuntil else False - - tmp = {"premium": premium, "validuntil": validuntil, "trafficleft": -1, "maxtraffic": -1} - - return tmp - - def login(self, user, data, req): - api_url_base = "http://api.rapidshare.com/cgi-bin/rsapi.cgi" - api_param_prem = {"sub": "getaccountdetails", "type": "prem", "login": user, - "password": data['password'], "withcookie": 1} - src = req.load(api_url_base, cookies=False, get=api_param_prem) - if src.startswith("ERROR"): - raise Exception(src + "### Note you have to use your account number for login, instead of name.") - fields = src.split("\n") - info = {} - for t in fields: - if not t.strip(): - continue - k, v = t.split("=") - info[k] = v - cj = self.getAccountCookies(user) - cj.setCookie("rapidshare.com", "enc", info['cookie']) diff --git a/module/plugins/accounts/RarefileNet.py b/module/plugins/accounts/RarefileNet.py deleted file mode 100644 index c8eae79a8..000000000 --- a/module/plugins/accounts/RarefileNet.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.XFSPAccount import XFSPAccount - - -class RarefileNet(XFSPAccount): - __name__ = "RarefileNet" - __type__ = "account" - __version__ = "0.02" - - __description__ = """RareFile.net account plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - MAIN_PAGE = "http://rarefile.net/" diff --git a/module/plugins/accounts/RealdebridCom.py b/module/plugins/accounts/RealdebridCom.py deleted file mode 100644 index 9d1939c60..000000000 --- a/module/plugins/accounts/RealdebridCom.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- - -import xml.dom.minidom as dom - -from module.plugins.Account import Account - - -class RealdebridCom(Account): - __name__ = "RealdebridCom" - __type__ = "account" - __version__ = "0.43" - - __description__ = """Real-Debrid.com account plugin""" - __author_name__ = "Devirex Hazzard" - __author_mail__ = "naibaf_11@yahoo.de" - - - def loadAccountInfo(self, user, req): - if self.pin_code: - return {"premium": False} - page = req.load("https://real-debrid.com/api/account.php") - xml = dom.parseString(page) - account_info = {"validuntil": int(xml.getElementsByTagName("expiration")[0].childNodes[0].nodeValue), - "trafficleft": -1} - - return account_info - - def login(self, user, data, req): - self.pin_code = False - page = req.load("https://real-debrid.com/ajax/login.php", get={"user": user, "pass": data['password']}) - if "Your login informations are incorrect" in page: - self.wrongPassword() - elif "PIN Code required" in page: - self.logWarning('PIN code required. Please login to https://real-debrid.com using the PIN or disable the double authentication in your control panel on https://real-debrid.com.') - self.pin_code = True diff --git a/module/plugins/accounts/RehostTo.py b/module/plugins/accounts/RehostTo.py deleted file mode 100644 index f15230f83..000000000 --- a/module/plugins/accounts/RehostTo.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Account import Account - - -class RehostTo(Account): - __name__ = "RehostTo" - __type__ = "account" - __version__ = "0.1" - - __description__ = """Rehost.to account plugin""" - __author_name__ = "RaNaN" - __author_mail__ = "RaNaN@pyload.org" - - - def loadAccountInfo(self, user, req): - data = self.getAccountData(user) - page = req.load("http://rehost.to/api.php?cmd=login&user=%s&pass=%s" % (user, data['password'])) - data = [x.split("=") for x in page.split(",")] - ses = data[0][1] - long_ses = data[1][1] - - page = req.load("http://rehost.to/api.php?cmd=get_premium_credits&long_ses=%s" % long_ses) - traffic, valid = page.split(",") - - account_info = {"trafficleft": int(traffic) * 1024, - "validuntil": int(valid), - "long_ses": long_ses, - "ses": ses} - - return account_info - - def login(self, user, data, req): - page = req.load("http://rehost.to/api.php?cmd=login&user=%s&pass=%s" % (user, data['password'])) - - if "Login failed." in page: - self.wrongPassword() diff --git a/module/plugins/accounts/RyushareCom.py b/module/plugins/accounts/RyushareCom.py deleted file mode 100644 index 7fb373ca7..000000000 --- a/module/plugins/accounts/RyushareCom.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.XFSPAccount import XFSPAccount - - -class RyushareCom(XFSPAccount): - __name__ = "RyushareCom" - __type__ = "account" - __version__ = "0.03" - - __description__ = """Ryushare.com account plugin""" - __author_name__ = ("zoidberg", "trance4us") - __author_mail__ = ("zoidberg@mujmail.cz", "") - - MAIN_PAGE = "http://ryushare.com/" - - - def login(self, user, data, req): - req.lastURL = "http://ryushare.com/login.python" - html = req.load("http://ryushare.com/login.python", - post={"login": user, "password": data['password'], "op": "login"}) - if 'Incorrect Login or Password' in html or '>Error<' in html: - self.wrongPassword() diff --git a/module/plugins/accounts/ShareRapidCom.py b/module/plugins/accounts/ShareRapidCom.py deleted file mode 100644 index 50077b1fb..000000000 --- a/module/plugins/accounts/ShareRapidCom.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from time import mktime, strptime -from module.plugins.Account import Account - - -class ShareRapidCom(Account): - __name__ = "ShareRapidCom" - __type__ = "account" - __version__ = "0.34" - - __description__ = """MegaRapid.cz account plugin""" - __author_name__ = ("MikyWoW", "zoidberg") - __author_mail__ = ("mikywow@seznam.cz", "zoidberg@mujmail.cz") - - login_timeout = 60 - - - def loadAccountInfo(self, user, req): - src = req.load("http://megarapid.cz/mujucet/", decode=True) - - m = re.search(ur'<td>Max. poÄet paralelnÃch stahovánÃ: </td><td>(\d+)', src) - if m: - data = self.getAccountData(user) - data['options']['limitDL'] = [int(m.group(1))] - - m = re.search(ur'<td>Paušálnà stahovánà aktivnÃ. Vypršà </td><td><strong>(.*?)</strong>', src) - if m: - validuntil = mktime(strptime(m.group(1), "%d.%m.%Y - %H:%M")) - return {"premium": True, "trafficleft": -1, "validuntil": validuntil} - - m = re.search(r'<tr><td>Kredit</td><td>(.*?) GiB', src) - if m: - trafficleft = float(m.group(1)) * (1 << 20) - return {"premium": True, "trafficleft": trafficleft, "validuntil": -1} - - return {"premium": False, "trafficleft": None, "validuntil": None} - - def login(self, user, data, req): - htm = req.load("http://megarapid.cz/prihlaseni/", cookies=True) - if "Heslo:" in htm: - start = htm.index('id="inp_hash" name="hash" value="') - htm = htm[start + 33:] - hashes = htm[0:32] - htm = req.load("http://megarapid.cz/prihlaseni/", - post={"hash": hashes, - "login": user, - "pass1": data['password'], - "remember": 0, - "sbmt": u"PÅihlásit"}, cookies=True) diff --git a/module/plugins/accounts/ShareonlineBiz.py b/module/plugins/accounts/ShareonlineBiz.py deleted file mode 100644 index b9ff0096c..000000000 --- a/module/plugins/accounts/ShareonlineBiz.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Account import Account - - -class ShareonlineBiz(Account): - __name__ = "ShareonlineBiz" - __type__ = "account" - __version__ = "0.24" - - __description__ = """Share-online.biz account plugin""" - __author_name__ = ("mkaay", "zoidberg") - __author_mail__ = ("mkaay@mkaay.de", "zoidberg@mujmail.cz") - - - def getUserAPI(self, user, req): - return req.load("http://api.share-online.biz/account.php", - {"username": user, "password": self.accounts[user]['password'], "act": "userDetails"}) - - def loadAccountInfo(self, user, req): - src = self.getUserAPI(user, req) - - info = {} - for line in src.splitlines(): - if "=" in line: - key, value = line.split("=") - info[key] = value - self.logDebug(info) - - if "dl" in info and info['dl'].lower() != "not_available": - req.cj.setCookie("share-online.biz", "dl", info['dl']) - if "a" in info and info['a'].lower() != "not_available": - req.cj.setCookie("share-online.biz", "a", info['a']) - - return {"validuntil": int(info['expire_date']) if "expire_date" in info else -1, - "trafficleft": -1, - "premium": True if ("dl" in info or "a" in info) and (info['group'] != "Sammler") else False} - - def login(self, user, data, req): - src = self.getUserAPI(user, req) - if "EXCEPTION" in src: - self.wrongPassword() diff --git a/module/plugins/accounts/SimplyPremiumCom.py b/module/plugins/accounts/SimplyPremiumCom.py deleted file mode 100644 index b0a62f83b..000000000 --- a/module/plugins/accounts/SimplyPremiumCom.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.common.json_layer import json_loads -from module.plugins.Account import Account - - -class SimplyPremiumCom(Account): - __name__ = "SimplyPremiumCom" - __type__ = "account" - __version__ = "0.01" - - __description__ = """Simply-Premium.com account plugin""" - __author_name__ = "EvolutionClip" - __author_mail__ = "evolutionclip@live.de" - - - def loadAccountInfo(self, user, req): - json_data = req.load('http://www.simply-premium.com/api/user.php?format=json') - self.logDebug("JSON data: " + json_data) - json_data = json_loads(json_data) - - if 'vip' in json_data['result'] and json_data['result']['vip'] == 0: - return {"premium": False} - - #Time package - validuntil = float(json_data['result']['timeend']) - #Traffic package - # {"trafficleft": int(traffic) / 1024, "validuntil": -1} - #trafficleft = int(json_data['result']['traffic'] / 1024) - - #return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft} - return {"premium": True, "validuntil": validuntil} - - def login(self, user, data, req): - req.cj.setCookie("simply-premium.com", "lang", "EN") - - if data['password'] == '' or data['password'] == '0': - post_data = {"key": user} - else: - post_data = {"login_name": user, "login_pass": data['password']} - - html = req.load("http://www.simply-premium.com/login.php", post=post_data) - - if 'logout' not in html: - self.wrongPassword() diff --git a/module/plugins/accounts/SimplydebridCom.py b/module/plugins/accounts/SimplydebridCom.py deleted file mode 100644 index 70f2d39b9..000000000 --- a/module/plugins/accounts/SimplydebridCom.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- - -from time import mktime, strptime - -from module.plugins.Account import Account - - -class SimplydebridCom(Account): - __name__ = "SimplydebridCom" - __type__ = "account" - __version__ = "0.1" - - __description__ = """Simply-Debrid.com account plugin""" - __author_name__ = "Kagenoshin" - __author_mail__ = "kagenoshin@gmx.ch" - - - def loadAccountInfo(self, user, req): - get_data = {'login': 2, 'u': self.loginname, 'p': self.password} - response = req.load("http://simply-debrid.com/api.php", get=get_data, decode=True) - data = [x.strip() for x in response.split(";")] - if str(data[0]) != "1": - return {"premium": False} - else: - return {"trafficleft": -1, "validuntil": mktime(strptime(str(data[2]), "%d/%m/%Y"))} - - def login(self, user, data, req): - self.loginname = user - self.password = data['password'] - get_data = {'login': 1, 'u': self.loginname, 'p': self.password} - response = req.load("http://simply-debrid.com/api.php", get=get_data, decode=True) - if response != "02: loggin success": - self.wrongPassword() diff --git a/module/plugins/accounts/StahnuTo.py b/module/plugins/accounts/StahnuTo.py deleted file mode 100644 index 6d9c3e924..000000000 --- a/module/plugins/accounts/StahnuTo.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.Account import Account -from module.utils import parseFileSize - - -class StahnuTo(Account): - __name__ = "StahnuTo" - __type__ = "account" - __version__ = "0.02" - - __description__ = """StahnuTo account plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - - def loadAccountInfo(self, user, req): - html = req.load("http://www.stahnu.to/") - - m = re.search(r'>VIP: (\d+.*)<', html) - trafficleft = parseFileSize(m.group(1)) * 1024 if m else 0 - - return {"premium": trafficleft > (512 * 1024), "trafficleft": trafficleft, "validuntil": -1} - - def login(self, user, data, req): - html = req.load("http://www.stahnu.to/login.php", post={ - "username": user, - "password": data['password'], - "submit": "Login"}) - - if not '<a href="logout.php">' in html: - self.wrongPassword() diff --git a/module/plugins/accounts/TurbobitNet.py b/module/plugins/accounts/TurbobitNet.py deleted file mode 100644 index a477b06c0..000000000 --- a/module/plugins/accounts/TurbobitNet.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from time import mktime, strptime - -from module.plugins.Account import Account - - -class TurbobitNet(Account): - __name__ = "TurbobitNet" - __type__ = "account" - __version__ = "0.01" - - __description__ = """TurbobitNet account plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - - def loadAccountInfo(self, user, req): - html = req.load("http://turbobit.net") - - m = re.search(r'<u>Turbo Access</u> to ([0-9.]+)', html) - if m: - premium = True - validuntil = mktime(strptime(m.group(1), "%d.%m.%Y")) - else: - premium = False - validuntil = -1 - - return {"premium": premium, "trafficleft": -1, "validuntil": validuntil} - - def login(self, user, data, req): - req.cj.setCookie("turbobit.net", "user_lang", "en") - - html = req.load("http://turbobit.net/user/login", post={ - "user[login]": user, - "user[pass]": data['password'], - "user[submit]": "Login"}) - - if not '<div class="menu-item user-name">' in html: - self.wrongPassword() diff --git a/module/plugins/accounts/UlozTo.py b/module/plugins/accounts/UlozTo.py deleted file mode 100644 index 6f0d0ae7d..000000000 --- a/module/plugins/accounts/UlozTo.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.Account import Account - - -class UlozTo(Account): - __name__ = "UlozTo" - __type__ = "account" - __version__ = "0.06" - - __description__ = """Uloz.to account plugin""" - __author_name__ = ("zoidberg", "pulpe") - __author_mail__ = "zoidberg@mujmail.cz" - - TRAFFIC_LEFT_PATTERN = r'<li class="menu-kredit"><a href="/kredit" title="[^"]*?GB = ([0-9.]+) MB"' - - - def loadAccountInfo(self, user, req): - #this cookie gets lost somehow after each request - self.phpsessid = req.cj.getCookie("ULOSESSID") - html = req.load("http://www.ulozto.net/", decode=True) - req.cj.setCookie("www.ulozto.net", "ULOSESSID", self.phpsessid) - - m = re.search(self.TRAFFIC_LEFT_PATTERN, html) - trafficleft = int(float(m.group(1).replace(' ', '').replace(',', '.')) * 1000 * 1.048) if m else 0 - self.premium = True if trafficleft else False - - return {"validuntil": -1, "trafficleft": trafficleft} - - def login(self, user, data, req): - login_page = req.load('http://www.ulozto.net/?do=web-login', decode=True) - action = re.findall('<form action="(.+?)"', login_page)[1].replace('&', '&') - token = re.search('_token_" value="(.+?)"', login_page).group(1) - - html = req.load('http://www.ulozto.net'+action, post={ - "_token_": token, - "login": "Submit", - "password": data['password'], - "username": user - }, decode=True) - - if '<div class="flash error">' in html: - self.wrongPassword() diff --git a/module/plugins/accounts/UnrestrictLi.py b/module/plugins/accounts/UnrestrictLi.py deleted file mode 100644 index a65f19c5b..000000000 --- a/module/plugins/accounts/UnrestrictLi.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Account import Account -from module.common.json_layer import json_loads - - -class UnrestrictLi(Account): - __name__ = "UnrestrictLi" - __type__ = "account" - __version__ = "0.03" - - __description__ = """Unrestrict.li account plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - - def loadAccountInfo(self, user, req): - json_data = req.load('http://unrestrict.li/api/jdownloader/user.php?format=json') - self.logDebug("JSON data: " + json_data) - json_data = json_loads(json_data) - - if 'vip' in json_data['result'] and json_data['result']['vip'] == 0: - return {"premium": False} - - validuntil = json_data['result']['expires'] - trafficleft = int(json_data['result']['traffic'] / 1024) - - return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft} - - def login(self, user, data, req): - req.cj.setCookie("unrestrict.li", "lang", "EN") - html = req.load("https://unrestrict.li/sign_in") - - if 'solvemedia' in html: - self.logError("A Captcha is required. Go to http://unrestrict.li/sign_in and login, then retry") - return - - post_data = {"username": user, "password": data['password'], - "remember_me": "remember", "signin": "Sign in"} - html = req.load("https://unrestrict.li/sign_in", post=post_data) - - if 'sign_out' not in html: - self.wrongPassword() diff --git a/module/plugins/accounts/UploadedTo.py b/module/plugins/accounts/UploadedTo.py deleted file mode 100644 index 9db496bbc..000000000 --- a/module/plugins/accounts/UploadedTo.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from time import time - -from module.plugins.Account import Account - - -class UploadedTo(Account): - __name__ = "UploadedTo" - __type__ = "account" - __version__ = "0.26" - - __description__ = """Uploaded.to account plugin""" - __author_name__ = "mkaay" - __author_mail__ = "mkaay@mkaay.de" - - - def loadAccountInfo(self, user, req): - - req.load("http://uploaded.net/language/en") - html = req.load("http://uploaded.net/me") - - premium = '<a href="register"><em>Premium</em>' in html or '<em>Premium</em></th>' in html - - if premium: - raw_traffic = re.search(r'<th colspan="2"><b class="cB">([^<]+)', html).group(1).replace('.', '') - raw_valid = re.search(r"<td>Duration:</td>\s*<th>([^<]+)", html, re.MULTILINE).group(1).strip() - - traffic = int(self.parseTraffic(raw_traffic)) - - if raw_valid == "unlimited": - validuntil = -1 - else: - raw_valid = re.findall(r"(\d+) (Week|weeks|days|day|hours|hour)", raw_valid) - validuntil = time() - for n, u in raw_valid: - validuntil += int(n) * 60 * 60 * {"Week": 168, "weeks": 168, "days": 24, - "day": 24, "hours": 1, "hour": 1}[u] - - return {"validuntil": validuntil, "trafficleft": traffic, "maxtraffic": 50 * 1024 * 1024} - else: - return {"premium": False, "validuntil": -1} - - def login(self, user, data, req): - - req.load("http://uploaded.net/language/en") - req.cj.setCookie("uploaded.net", "lang", "en") - - page = req.load("http://uploaded.net/io/login", post={"id": user, "pw": data['password'], "_": ""}) - - if "User and password do not match!" in page: - self.wrongPassword() diff --git a/module/plugins/accounts/UploadheroCom.py b/module/plugins/accounts/UploadheroCom.py deleted file mode 100644 index 20f209268..000000000 --- a/module/plugins/accounts/UploadheroCom.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -import datetime -import time - -from module.plugins.Account import Account - - -class UploadheroCom(Account): - __name__ = "UploadheroCom" - __type__ = "account" - __version__ = "0.2" - - __description__ = """Uploadhero.co account plugin""" - __author_name__ = "mcmyst" - __author_mail__ = "mcmyst@hotmail.fr" - - - def loadAccountInfo(self, user, req): - premium_pattern = re.compile('Il vous reste <span class="bleu">([0-9]+)</span> jours premium.') - - data = self.getAccountData(user) - page = req.load("http://uploadhero.co/my-account") - - if premium_pattern.search(page): - end_date = datetime.date.today() + datetime.timedelta(days=int(premium_pattern.search(page).group(1))) - end_date = time.mktime(future.timetuple()) - account_info = {"validuntil": end_date, "trafficleft": -1, "premium": True} - else: - account_info = {"validuntil": -1, "trafficleft": -1, "premium": False} - - return account_info - - def login(self, user, data, req): - page = req.load("http://uploadhero.co/lib/connexion.php", - post={"pseudo_login": user, "password_login": data['password']}) - - if "mot de passe invalide" in page: - self.wrongPassword() diff --git a/module/plugins/accounts/UploadingCom.py b/module/plugins/accounts/UploadingCom.py deleted file mode 100644 index 416a29b1e..000000000 --- a/module/plugins/accounts/UploadingCom.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- - -from time import time, strptime, mktime -import re - -from module.plugins.Account import Account - - -class UploadingCom(Account): - __name__ = "UploadingCom" - __type__ = "account" - __version__ = "0.1" - - __description__ = """Uploading.com account plugin""" - __author_name__ = "mkaay" - __author_mail__ = "mkaay@mkaay.de" - - - def loadAccountInfo(self, user, req): - src = req.load("http://uploading.com/") - premium = True - if "UPGRADE TO PREMIUM" in src: - return {"validuntil": -1, "trafficleft": -1, "premium": False} - - m = re.search("Valid Until:(.*?)<", src) - if m: - validuntil = int(mktime(strptime(m.group(1).strip(), "%b %d, %Y"))) - else: - validuntil = -1 - - return {"validuntil": validuntil, "trafficleft": -1, "premium": True} - - def login(self, user, data, req): - req.cj.setCookie("uploading.com", "lang", "1") - req.cj.setCookie("uploading.com", "language", "1") - req.cj.setCookie("uploading.com", "setlang", "en") - req.cj.setCookie("uploading.com", "_lang", "en") - req.load("http://uploading.com/") - req.load("http://uploading.com/general/login_form/?JsHttpRequest=%s-xml" % long(time() * 1000), - post={"email": user, "password": data['password'], "remember": "on"}) diff --git a/module/plugins/accounts/UptoboxCom.py b/module/plugins/accounts/UptoboxCom.py deleted file mode 100644 index 60de213ae..000000000 --- a/module/plugins/accounts/UptoboxCom.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.XFSPAccount import XFSPAccount - - -class UptoboxCom(XFSPAccount): - __name__ = "UptoboxCom" - __type__ = "account" - __version__ = "0.02" - - __description__ = """DDLStorage.com account plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - MAIN_PAGE = "http://uptobox.com/" - - VALID_UNTIL_PATTERN = r'>Premium.[Aa]ccount expire: ([^<]+)</strong>' diff --git a/module/plugins/accounts/YibaishiwuCom.py b/module/plugins/accounts/YibaishiwuCom.py deleted file mode 100644 index be62d3f40..000000000 --- a/module/plugins/accounts/YibaishiwuCom.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.Account import Account - - -class YibaishiwuCom(Account): - __name__ = "YibaishiwuCom" - __type__ = "account" - __version__ = "0.01" - - __description__ = """115.com account plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - ACCOUNT_INFO_PATTERN = r'var USER_PERMISSION = {(.*?)}' - - - def loadAccountInfo(self, user, req): - #self.relogin(user) - html = req.load("http://115.com/", decode=True) - - m = re.search(self.ACCOUNT_INFO_PATTERN, html, re.S) - premium = True if (m and 'is_vip: 1' in m.group(1)) else False - validuntil = trafficleft = (-1 if m else 0) - return dict({"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium}) - - def login(self, user, data, req): - html = req.load('http://passport.115.com/?ac=login', post={ - "back": "http://www.115.com/", - "goto": "http://115.com/", - "login[account]": user, - "login[passwd]": data['password'] - }, decode=True) - - if not 'var USER_PERMISSION = {' in html: - self.wrongPassword() diff --git a/module/plugins/accounts/ZeveraCom.py b/module/plugins/accounts/ZeveraCom.py deleted file mode 100644 index db1ebd4ae..000000000 --- a/module/plugins/accounts/ZeveraCom.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- coding: utf-8 -*- - -from time import mktime, strptime - -from module.plugins.Account import Account - - -class ZeveraCom(Account): - __name__ = "ZeveraCom" - __type__ = "account" - __version__ = "0.21" - - __description__ = """Zevera.com account plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - - def loadAccountInfo(self, user, req): - data = self.getAPIData(req) - if data == "No traffic": - account_info = {"trafficleft": 0, "validuntil": 0, "premium": False} - else: - account_info = { - "trafficleft": int(data['availabletodaytraffic']) * 1024, - "validuntil": mktime(strptime(data['endsubscriptiondate'], "%Y/%m/%d %H:%M:%S")), - "premium": True - } - return account_info - - def login(self, user, data, req): - self.loginname = user - self.password = data['password'] - if self.getAPIData(req) == "No traffic": - self.wrongPassword() - - def getAPIData(self, req, just_header=False, **kwargs): - get_data = { - 'cmd': 'accountinfo', - 'login': self.loginname, - 'pass': self.password - } - get_data.update(kwargs) - - response = req.load("http://www.zevera.com/jDownloader.ashx", get=get_data, - decode=True, just_header=just_header) - self.logDebug(response) - - if ':' in response: - if not just_header: - response = response.replace(',', '\n') - return dict((y.strip().lower(), z.strip()) for (y, z) in - [x.split(':', 1) for x in response.splitlines() if ':' in x]) - else: - return response diff --git a/module/plugins/container/CCF.py b/module/plugins/container/CCF.py deleted file mode 100644 index 959eeb1d0..000000000 --- a/module/plugins/container/CCF.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from os import makedirs -from os.path import exists -from urllib2 import build_opener - -from module.lib.MultipartPostHandler import MultipartPostHandler - -from module.plugins.Container import Container -from module.utils import safe_join - - -class CCF(Container): - __name__ = "CCF" - __version__ = "0.2" - - __pattern__ = r'.+\.ccf' - - __description__ = """CCF container decrypter plugin""" - __author_name__ = "Willnix" - __author_mail__ = "Willnix@pyload.org" - - - def decrypt(self, pyfile): - - infile = pyfile.url.replace("\n", "") - - opener = build_opener(MultipartPostHandler) - params = {"src": "ccf", - "filename": "test.ccf", - "upload": open(infile, "rb")} - tempdlc_content = opener.open('http://service.jdownloader.net/dlcrypt/getDLC.php', params).read() - - download_folder = self.config['general']['download_folder'] - - tempdlc_name = safe_join(download_folder, "tmp_%s.dlc" % pyfile.name) - tempdlc = open(tempdlc_name, "w") - tempdlc.write(re.search(r'<dlc>(.*)</dlc>', tempdlc_content, re.DOTALL).group(1)) - tempdlc.close() - - self.urls = [tempdlc_name] diff --git a/module/plugins/container/LinkList.py b/module/plugins/container/LinkList.py deleted file mode 100644 index 7e418bd67..000000000 --- a/module/plugins/container/LinkList.py +++ /dev/null @@ -1,73 +0,0 @@ -# -*- coding: utf-8 -*- - -import codecs - -from module.plugins.Container import Container -from module.utils import fs_encode - - -class LinkList(Container): - __name__ = "LinkList" - __version__ = "0.12" - - __pattern__ = r'.+\.txt' - __config__ = [("clear", "bool", "Clear Linklist after adding", False), - ("encoding", "string", "File encoding (default utf-8)", "")] - - __description__ = """Read link lists in txt format""" - __author_name__ = ("spoob", "jeix") - __author_mail__ = ("spoob@pyload.org", "jeix@hasnomail.com") - - - def decrypt(self, pyfile): - try: - file_enc = codecs.lookup(self.getConfig("encoding")).name - except: - file_enc = "utf-8" - - print repr(pyfile.url) - print pyfile.url - - file_name = fs_encode(pyfile.url) - - txt = codecs.open(file_name, 'r', file_enc) - links = txt.readlines() - curPack = "Parsed links from %s" % pyfile.name - - packages = {curPack:[],} - - for link in links: - link = link.strip() - if not link: - continue - - if link.startswith(";"): - continue - if link.startswith("[") and link.endswith("]"): - # new package - curPack = link[1:-1] - packages[curPack] = [] - continue - packages[curPack].append(link) - txt.close() - - # empty packages fix - - delete = [] - - for key,value in packages.iteritems(): - if not value: - delete.append(key) - - for key in delete: - del packages[key] - - if self.getConfig("clear"): - try: - txt = open(file_name, 'wb') - txt.close() - except: - self.logWarning(_("LinkList could not be cleared.")) - - for name, links in packages.iteritems(): - self.packages.append((name, links, name)) diff --git a/module/plugins/container/RSDF.py b/module/plugins/container/RSDF.py deleted file mode 100644 index c35efacc6..000000000 --- a/module/plugins/container/RSDF.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- coding: utf-8 -*- - -import base64 -import binascii -import re - -from module.plugins.Container import Container - - -class RSDF(Container): - __name__ = "RSDF" - __version__ = "0.22" - - __pattern__ = r'.+\.rsdf' - - __description__ = """RSDF container decrypter plugin""" - __author_name__ = ("RaNaN", "spoob") - __author_mail__ = ("RaNaN@pyload.org", "spoob@pyload.org") - - - def decrypt(self, pyfile): - - from Crypto.Cipher import AES - - infile = pyfile.url.replace("\n", "") - Key = binascii.unhexlify('8C35192D964DC3182C6F84F3252239EB4A320D2500000000') - - IV = binascii.unhexlify('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF') - IV_Cipher = AES.new(Key, AES.MODE_ECB) - IV = IV_Cipher.encrypt(IV) - - obj = AES.new(Key, AES.MODE_CFB, IV) - - rsdf = open(infile, 'r') - - data = rsdf.read() - rsdf.close() - - if re.search(r"<title>404 - Not Found</title>", data) is None: - data = binascii.unhexlify(''.join(data.split())) - data = data.splitlines() - - for link in data: - if not link: - continue - link = base64.b64decode(link) - link = obj.decrypt(link) - decryptedUrl = link.replace('CCF: ', '') - self.urls.append(decryptedUrl) - - self.log.debug("%s: adding package %s with %d links" % (self.__name__,pyfile.package().name,len(links))) diff --git a/module/plugins/crypter/BitshareComFolder.py b/module/plugins/crypter/BitshareComFolder.py deleted file mode 100644 index 219dabce8..000000000 --- a/module/plugins/crypter/BitshareComFolder.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class BitshareComFolder(SimpleCrypter): - __name__ = "BitshareComFolder" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?bitshare\.com/\?d=\w+' - - __description__ = """Bitshare.com folder decrypter plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - LINK_PATTERN = r'<a href="(http://bitshare.com/files/.+)">.+</a></td>' - TITLE_PATTERN = r'View public folder "(?P<title>.+)"</h1>' diff --git a/module/plugins/crypter/C1neonCom.py b/module/plugins/crypter/C1neonCom.py deleted file mode 100644 index 829ed63d6..000000000 --- a/module/plugins/crypter/C1neonCom.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadCrypter import DeadCrypter - - -class C1neonCom(DeadCrypter): - __name__ = "C1neonCom" - __type__ = "crypter" - __version__ = "0.05" - - __pattern__ = r'http://(?:www\.)?c1neon.com/.*?' - - __description__ = """C1neon.com decrypter plugin""" - __author_name__ = "godofdream" - __author_mail__ = "soilfiction@gmail.com" diff --git a/module/plugins/crypter/ChipDe.py b/module/plugins/crypter/ChipDe.py deleted file mode 100644 index a75cc5e0e..000000000 --- a/module/plugins/crypter/ChipDe.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from module.plugins.Crypter import Crypter - - -class ChipDe(Crypter): - __name__ = "ChipDe" - __type__ = "crypter" - __version__ = "0.1" - - __pattern__ = r'http://(?:www\.)?chip.de/video/.*\.html' - - __description__ = """Chip.de decrypter plugin""" - __author_name__ = "4Christopher" - __author_mail__ = "4Christopher@gmx.de" - - - def decrypt(self, pyfile): - self.html = self.load(pyfile.url) - try: - f = re.search(r'"(http://video.chip.de/\d+?/.*)"', self.html) - except: - self.fail('Failed to find the URL') - else: - self.urls = [f.group(1)] - self.logDebug('The file URL is %s' % self.urls[0]) diff --git a/module/plugins/crypter/CrockoComFolder.py b/module/plugins/crypter/CrockoComFolder.py deleted file mode 100644 index 56abeac29..000000000 --- a/module/plugins/crypter/CrockoComFolder.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class CrockoComFolder(SimpleCrypter): - __name__ = "CrockoComFolder" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?crocko.com/f/.*' - - __description__ = """Crocko.com folder decrypter plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - LINK_PATTERN = r'<td class="last"><a href="([^"]+)">download</a>' diff --git a/module/plugins/crypter/CryptItCom.py b/module/plugins/crypter/CryptItCom.py deleted file mode 100644 index 66c5e7ca7..000000000 --- a/module/plugins/crypter/CryptItCom.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadCrypter import DeadCrypter - - -class CryptItCom(DeadCrypter): - __name__ = "CryptItCom" - __type__ = "crypter" - __version__ = "0.11" - - __pattern__ = r'http://(?:www\.)?crypt-it\.com/(s|e|d|c)/[\w]+' - - __description__ = """Crypt-it.com decrypter plugin""" - __author_name__ = "jeix" - __author_mail__ = "jeix@hasnomail.de" diff --git a/module/plugins/crypter/CzshareComFolder.py b/module/plugins/crypter/CzshareComFolder.py deleted file mode 100644 index 64affc867..000000000 --- a/module/plugins/crypter/CzshareComFolder.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from module.plugins.Crypter import Crypter - - -class CzshareComFolder(Crypter): - __name__ = "CzshareComFolder" - __type__ = "crypter" - __version__ = "0.2" - - __pattern__ = r'http://(?:www\.)?(czshare|sdilej)\.(com|cz)/folders/.*' - - __description__ = """Czshare.com folder decrypter plugin, now Sdilej.cz""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FOLDER_PATTERN = r'<tr class="subdirectory">\s*<td>\s*<table>(.*?)</table>' - LINK_PATTERN = r'<td class="col2"><a href="([^"]+)">info</a></td>' - - - def decrypt(self, pyfile): - html = self.load(pyfile.url) - - m = re.search(self.FOLDER_PATTERN, html, re.DOTALL) - if m is None: - self.fail("Parse error (FOLDER)") - - self.urls.extend(re.findall(self.LINK_PATTERN, m.group(1))) - if not self.urls: - self.fail('Could not extract any links') diff --git a/module/plugins/crypter/DDLMusicOrg.py b/module/plugins/crypter/DDLMusicOrg.py deleted file mode 100644 index f5e7203d3..000000000 --- a/module/plugins/crypter/DDLMusicOrg.py +++ /dev/null @@ -1,48 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from time import sleep - -from module.plugins.Crypter import Crypter - - -class DDLMusicOrg(Crypter): - __name__ = "DDLMusicOrg" - __type__ = "crypter" - __version__ = "0.3" - - __pattern__ = r'http://(?:www\.)?ddl-music\.org/captcha/ddlm_cr\d\.php\?\d+\?\d+' - - __description__ = """Ddl-music.org decrypter plugin""" - __author_name__ = "mkaay" - __author_mail__ = "mkaay@mkaay.de" - - - def setup(self): - self.multiDL = False - - def decrypt(self, pyfile): - html = self.req.load(pyfile.url, cookies=True) - - if re.search(r"Wer dies nicht rechnen kann", html) is not None: - self.offline() - - math = re.search(r"(\d+) ([\+-]) (\d+) =\s+<inp", self.html) - id = re.search(r"name=\"id\" value=\"(\d+)\"", self.html).group(1) - linknr = re.search(r"name=\"linknr\" value=\"(\d+)\"", self.html).group(1) - - solve = "" - if math.group(2) == "+": - solve = int(math.group(1)) + int(math.group(3)) - else: - solve = int(math.group(1)) - int(math.group(3)) - sleep(3) - htmlwithlink = self.req.load(pyfile.url, cookies=True, - post={"calc%s" % linknr: solve, "send%s" % linknr: "Send", "id": id, - "linknr": linknr}) - m = re.search(r"<form id=\"ff\" action=\"(.*?)\" method=\"post\">", htmlwithlink) - if m: - self.urls = [m.group(1)] - else: - self.retry() diff --git a/module/plugins/crypter/DailymotionBatch.py b/module/plugins/crypter/DailymotionBatch.py deleted file mode 100644 index e9a1bb98c..000000000 --- a/module/plugins/crypter/DailymotionBatch.py +++ /dev/null @@ -1,98 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urlparse import urljoin - -from module.common.json_layer import json_loads -from module.plugins.Crypter import Crypter -from module.utils import safe_join - - -class DailymotionBatch(Crypter): - __name__ = "DailymotionBatch" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'https?://(?:www\.)?dailymotion\.com/((playlists/)?(?P<TYPE>playlist|user)/)?(?P<ID>[\w^_]+)(?(TYPE)|#)' - - __description__ = """Dailymotion.com channel & playlist decrypter""" - __author_name__ = "Walter Purcaro" - __author_mail__ = "vuolter@gmail.com" - - - def api_response(self, ref, req=None): - url = urljoin("https://api.dailymotion.com/", ref) - page = self.load(url, get=req) - return json_loads(page) - - def getPlaylistInfo(self, id): - ref = "playlist/" + id - req = {"fields": "name,owner.screenname"} - playlist = self.api_response(ref, req) - - if "error" in playlist: - return - - name = playlist['name'] - owner = playlist['owner.screenname'] - return name, owner - - def _getPlaylists(self, user_id, page=1): - ref = "user/%s/playlists" % user_id - req = {"fields": "id", "page": page, "limit": 100} - user = self.api_response(ref, req) - - if "error" in user: - return - - for playlist in user['list']: - yield playlist['id'] - - if user['has_more']: - for item in self._getPlaylists(user_id, page + 1): - yield item - - def getPlaylists(self, user_id): - return [(id,) + self.getPlaylistInfo(id) for id in self._getPlaylists(user_id)] - - def _getVideos(self, id, page=1): - ref = "playlist/%s/videos" % id - req = {"fields": "url", "page": page, "limit": 100} - playlist = self.api_response(ref, req) - - if "error" in playlist: - return - - for video in playlist['list']: - yield video['url'] - - if playlist['has_more']: - for item in self._getVideos(id, page + 1): - yield item - - def getVideos(self, playlist_id): - return list(self._getVideos(playlist_id))[::-1] - - def decrypt(self, pyfile): - m = re.match(self.__pattern__, pyfile.url) - m_id = m.group("ID") - m_type = m.group("TYPE") - - if m_type == "playlist": - self.logDebug("Url recognized as Playlist") - p_info = self.getPlaylistInfo(m_id) - playlists = [(m_id,) + p_info] if p_info else None - else: - self.logDebug("Url recognized as Channel") - playlists = self.getPlaylists(m_id) - self.logDebug("%s playlist\s found on channel \"%s\"" % (len(playlists), m_id)) - - if not playlists: - self.fail("No playlist available") - - for p_id, p_name, p_owner in playlists: - p_videos = self.getVideos(p_id) - p_folder = safe_join(self.config['general']['download_folder'], p_owner, p_name) - self.logDebug("%s video\s found on playlist \"%s\"" % (len(p_videos), p_name)) - self.packages.append((p_name, p_videos, p_folder)) #: folder is NOT recognized by pyload 0.4.9! diff --git a/module/plugins/crypter/DataHuFolder.py b/module/plugins/crypter/DataHuFolder.py deleted file mode 100644 index 4f6116100..000000000 --- a/module/plugins/crypter/DataHuFolder.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class DataHuFolder(SimpleCrypter): - __name__ = "DataHuFolder" - __type__ = "crypter" - __version__ = "0.03" - - __pattern__ = r'http://(?:www\.)?data.hu/dir/\w+' - - __description__ = """Data.hu folder decrypter plugin""" - __author_name__ = ("crash", "stickell") - __author_mail__ = "l.stickell@yahoo.it" - - LINK_PATTERN = r"<a href='(http://data\.hu/get/.+)' target='_blank'>\1</a>" - TITLE_PATTERN = ur'<title>(?P<title>.+) Let\xf6lt\xe9se</title>' - - - def decrypt(self, pyfile): - self.html = self.load(pyfile.url, decode=True) - - if u'K\xe9rlek add meg a jelsz\xf3t' in self.html: # Password protected - password = self.getPassword() - if password is '': - self.fail("No password specified, please set right password on Add package form and retry") - self.logDebug('The folder is password protected', 'Using password: ' + password) - self.html = self.load(pyfile.url, post={'mappa_pass': password}, decode=True) - if u'Hib\xe1s jelsz\xf3' in self.html: # Wrong password - self.fail("Incorrect password, please set right password on Add package form and retry") - - package_name, folder_name = self.getPackageNameAndFolder() - - package_links = re.findall(self.LINK_PATTERN, self.html) - self.logDebug('Package has %d links' % len(package_links)) - - if package_links: - self.packages = [(package_name, package_links, folder_name)] - else: - self.fail('Could not extract any links') diff --git a/module/plugins/crypter/DdlstorageComFolder.py b/module/plugins/crypter/DdlstorageComFolder.py deleted file mode 100644 index 3b1dc6dd6..000000000 --- a/module/plugins/crypter/DdlstorageComFolder.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadCrypter import DeadCrypter, create_getInfo - - -class DdlstorageComFolder(DeadCrypter): - __name__ = "DdlstorageComFolder" - __type__ = "crypter" - __version__ = "0.03" - - __pattern__ = r'https?://(?:www\.)?ddlstorage\.com/folder/\w+' - - __description__ = """DDLStorage.com folder decrypter plugin""" - __author_name__ = ("godofdream", "stickell") - __author_mail__ = ("soilfiction@gmail.com", "l.stickell@yahoo.it") - - -getInfo = create_getInfo(SpeedLoadOrg) diff --git a/module/plugins/crypter/DepositfilesComFolder.py b/module/plugins/crypter/DepositfilesComFolder.py deleted file mode 100644 index b7c273f0b..000000000 --- a/module/plugins/crypter/DepositfilesComFolder.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class DepositfilesComFolder(SimpleCrypter): - __name__ = "DepositfilesComFolder" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?depositfiles.com/folders/\w+' - - __description__ = """Depositfiles.com folder decrypter plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - LINK_PATTERN = r'<div class="progressName"[^>]*>\s*<a href="([^"]+)" title="[^"]*" target="_blank">' diff --git a/module/plugins/crypter/Dereferer.py b/module/plugins/crypter/Dereferer.py deleted file mode 100644 index 21529ddfd..000000000 --- a/module/plugins/crypter/Dereferer.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urllib import unquote - -from module.plugins.Crypter import Crypter - - -class Dereferer(Crypter): - __name__ = "Dereferer" - __type__ = "crypter" - __version__ = "0.1" - - __pattern__ = r'https?://([^/]+)/.*?(?P<url>(ht|f)tps?(://|%3A%2F%2F).*)' - - __description__ = """Crypter for dereferers""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - - def decrypt(self, pyfile): - link = re.match(self.__pattern__, pyfile.url).group('url') - self.urls = [unquote(link).rstrip('+')] diff --git a/module/plugins/crypter/DlProtectCom.py b/module/plugins/crypter/DlProtectCom.py deleted file mode 100644 index 4c958437a..000000000 --- a/module/plugins/crypter/DlProtectCom.py +++ /dev/null @@ -1,62 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from base64 import urlsafe_b64encode -from time import time - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class DlProtectCom(SimpleCrypter): - __name__ = "DlProtectCom" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?dl-protect\.com/((en|fr)/)?(?P<ID>\w+)' - - __description__ = """Dl-protect.com decrypter plugin""" - __author_name__ = "Walter Purcaro" - __author_mail__ = "vuolter@gmail.com" - - OFFLINE_PATTERN = r'>Unfortunately, the link you are looking for is not found' - - - def getLinks(self): - # Direct link with redirect - if not re.match(r"http://(?:www\.)?dl-protect\.com", self.req.http.lastEffectiveURL): - return [self.req.http.lastEffectiveURL] - - #id = re.match(self.__pattern__, self.pyfile.url).group("ID") - key = re.search(r'name="id_key" value="(.+?)"', self.html).group(1) - - post_req = {"id_key": key, "submitform": ""} - - if self.OFFLINE_PATTERN in self.html: - self.offline() - elif ">Please click on continue to see the content" in self.html: - post_req.update({"submitform": "Continue"}) - else: - mstime = int(round(time() * 1000)) - b64time = "_" + urlsafe_b64encode(str(mstime)).replace("=", "%3D") - - post_req.update({"i": b64time, "submitform": "Decrypt+link"}) - - if ">Password :" in self.html: - post_req['pwd'] = self.getPassword() - - if ">Security Code" in self.html: - captcha_id = re.search(r'/captcha\.php\?uid=(.+?)"', self.html).group(1) - captcha_url = "http://www.dl-protect.com/captcha.php?uid=" + captcha_id - captcha_code = self.decryptCaptcha(captcha_url, imgtype="gif") - - post_req['secure'] = captcha_code - - self.html = self.load(self.pyfile.url, post=post_req) - - for errmsg in (">The password is incorrect", ">The security code is incorrect"): - if errmsg in self.html: - self.fail(errmsg[1:]) - - pattern = r'<a href="([^/].+?)" target="_blank">' - return re.findall(pattern, self.html) diff --git a/module/plugins/crypter/DontKnowMe.py b/module/plugins/crypter/DontKnowMe.py deleted file mode 100644 index 23fbb8d52..000000000 --- a/module/plugins/crypter/DontKnowMe.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urllib import unquote - -from module.plugins.Crypter import Crypter - - -class DontKnowMe(Crypter): - __name__ = "DontKnowMe" - __type__ = "crypter" - __version__ = "0.1" - - __pattern__ = r'http://(?:www\.)?dontknow.me/at/\?.+$' - - __description__ = """DontKnow.me decrypter plugin""" - __author_name__ = "selaux" - __author_mail__ = None - - LINK_PATTERN = r'http://dontknow.me/at/\?(.+)$' - - - def decrypt(self, pyfile): - link = re.findall(self.LINK_PATTERN, pyfile.url)[0] - self.urls = [unquote(link)] diff --git a/module/plugins/crypter/DuckCryptInfo.py b/module/plugins/crypter/DuckCryptInfo.py deleted file mode 100644 index e7a5a59e9..000000000 --- a/module/plugins/crypter/DuckCryptInfo.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.lib.BeautifulSoup import BeautifulSoup - -from module.plugins.Crypter import Crypter - - -class DuckCryptInfo(Crypter): - __name__ = "DuckCryptInfo" - __type__ = "crypter" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?duckcrypt.info/(folder|wait|link)/(\w+)/?(\w*)' - - __description__ = """DuckCrypt.info decrypter plugin""" - __author_name__ = "godofdream" - __author_mail__ = "soilfiction@gmail.com" - - TIMER_PATTERN = r'<span id="timer">(.*)</span>' - - - def decrypt(self, pyfile): - url = pyfile.url - # seems we don't need to wait - #src = self.req.load(str(url)) - #m = re.search(self.TIMER_PATTERN, src) - #if m: - # self.logDebug("Sleeping for" % m.group(1)) - # self.setWait(int(m.group(1)) ,False) - m = re.match(self.__pattern__, url) - if m is None: - self.fail('Weird error in link') - if str(m.group(1)) == "link": - self.handleLink(url) - else: - self.handleFolder(m) - - def handleFolder(self, m): - src = self.load("http://duckcrypt.info/ajax/auth.php?hash=" + str(m.group(2))) - m = re.match(self.__pattern__, src) - self.logDebug("Redirectet to " + str(m.group(0))) - src = self.load(str(m.group(0))) - soup = BeautifulSoup(src) - cryptlinks = soup.findAll("div", attrs={"class": "folderbox"}) - self.logDebug("Redirectet to " + str(cryptlinks)) - if not cryptlinks: - self.fail('no links m - (Plugin out of date?)') - for clink in cryptlinks: - if clink.find("a"): - self.handleLink(clink.find("a")['href']) - - def handleLink(self, url): - src = self.load(url) - soup = BeautifulSoup(src) - self.urls = [soup.find("iframe")['src']] - if not self.urls: - self.logDebug('no links m - (Plugin out of date?)') diff --git a/module/plugins/crypter/DuploadOrgFolder.py b/module/plugins/crypter/DuploadOrgFolder.py deleted file mode 100644 index 6f764f687..000000000 --- a/module/plugins/crypter/DuploadOrgFolder.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class DuploadOrgFolder(SimpleCrypter): - __name__ = "DuploadOrgFolder" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?dupload\.org/folder/\d+/' - - __description__ = """Dupload.org folder decrypter plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - LINK_PATTERN = r'<td style="[^"]+"><a href="(http://[^"]+)" target="_blank">[^<]+</a></td>' diff --git a/module/plugins/crypter/EasybytezComFolder.py b/module/plugins/crypter/EasybytezComFolder.py deleted file mode 100644 index 7832bef5f..000000000 --- a/module/plugins/crypter/EasybytezComFolder.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class EasybytezComFolder(SimpleCrypter): - __name__ = "EasybytezComFolder" - __type__ = "crypter" - __version__ = "0.06" - - __pattern__ = r'http://(?:www\.)?easybytez\.com/users/(?P<ID>\d+/\d+)' - - __description__ = """Easybytez.com decrypter plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - URL_REPLACEMENTS = [(__pattern__, r"http://www.easybytez.com/users/\g<ID>?per_page=10000")] - - LINK_PATTERN = r'<td><a href="(http://www\.easybytez\.com/\w+)" target="_blank">.+(?:</a>)?</td>' - TITLE_PATTERN = r'<Title>Files of \d+: (?P<title>.+) folder</Title>' diff --git a/module/plugins/crypter/EmbeduploadCom.py b/module/plugins/crypter/EmbeduploadCom.py deleted file mode 100644 index 6b876ed7f..000000000 --- a/module/plugins/crypter/EmbeduploadCom.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from module.plugins.Crypter import Crypter -from module.network.HTTPRequest import BadHeader - - -class EmbeduploadCom(Crypter): - __name__ = "EmbeduploadCom" - __type__ = "crypter" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?embedupload.com/\?d=.*' - __config__ = [("preferedHoster", "str", "Prefered hoster list (bar-separated) ", "embedupload"), - ("ignoredHoster", "str", "Ignored hoster list (bar-separated) ", "")] - - __description__ = """EmbedUpload.com decrypter plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - LINK_PATTERN = r'<div id="([^"]+)"[^>]*>\s*<a href="([^"]+)" target="_blank" (?:class="DownloadNow"|style="color:red")>' - - - def decrypt(self, pyfile): - self.html = self.load(pyfile.url, decode=True) - tmp_links = [] - - m = re.findall(self.LINK_PATTERN, self.html) - if m: - prefered_set = set(self.getConfig("preferedHoster").split('|')) - prefered_set = map(lambda s: s.lower().split('.')[0], prefered_set) - print "PF", prefered_set - tmp_links.extend([x[1] for x in m if x[0] in prefered_set]) - self.urls = self.getLocation(tmp_links) - - if not self.urls: - ignored_set = set(self.getConfig("ignoredHoster").split('|')) - ignored_set = map(lambda s: s.lower().split('.')[0], ignored_set) - print "IG", ignored_set - tmp_links.extend([x[1] for x in m if x[0] not in ignored_set]) - self.urls = self.getLocation(tmp_links) - - if not self.urls: - self.fail('Could not extract any links') - - def getLocation(self, tmp_links): - new_links = [] - for link in tmp_links: - try: - header = self.load(link, just_header=True) - if "location" in header: - new_links.append(header['location']) - except BadHeader: - pass - return new_links diff --git a/module/plugins/crypter/FilebeerInfoFolder.py b/module/plugins/crypter/FilebeerInfoFolder.py deleted file mode 100644 index 0743dcb0f..000000000 --- a/module/plugins/crypter/FilebeerInfoFolder.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadCrypter import DeadCrypter - - -class FilebeerInfoFolder(DeadCrypter): - __name__ = "FilebeerInfoFolder" - __type__ = "crypter" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?filebeer\.info/(\d+~f).*' - - __description__ = """Filebeer.info folder decrypter plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" diff --git a/module/plugins/crypter/FilecloudIoFolder.py b/module/plugins/crypter/FilecloudIoFolder.py deleted file mode 100644 index 9ec950061..000000000 --- a/module/plugins/crypter/FilecloudIoFolder.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class FilecloudIoFolder(SimpleCrypter): - __name__ = "FilecloudIoFolder" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'https?://(?:www\.)?(filecloud\.io|ifile\.it)/_\w+' - - __description__ = """Filecloud.io folder decrypter plugin""" - __author_name__ = "Walter Purcaro" - __author_mail__ = "vuolter@gmail.com" - - LINK_PATTERN = r'href="(http://filecloud.io/\w+)" title' - TITLE_PATTERN = r'>(?P<title>.+?) - filecloud.io<' diff --git a/module/plugins/crypter/FilefactoryComFolder.py b/module/plugins/crypter/FilefactoryComFolder.py deleted file mode 100644 index 562c56732..000000000 --- a/module/plugins/crypter/FilefactoryComFolder.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class FilefactoryComFolder(SimpleCrypter): - __name__ = "FilefactoryComFolder" - __type__ = "crypter" - __version__ = "0.2" - - __pattern__ = r'https?://(?:www\.)?filefactory\.com/(?:f|folder)/\w+' - - __description__ = """Filefactory.com folder decrypter plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - LINK_PATTERN = r'<td><a href="([^"]+)">' - TITLE_PATTERN = r'<h1>Files in <span>(?P<title>.+)</span></h1>' - PAGES_PATTERN = r'data-paginator-totalPages="(?P<pages>\d+)"' - - SH_COOKIES = [('.filefactory.com', 'locale', 'en_US.utf8')] - - - def loadPage(self, page_n): - return self.load(self.pyfile.url, get={'page': page_n}) diff --git a/module/plugins/crypter/FilerNetFolder.py b/module/plugins/crypter/FilerNetFolder.py deleted file mode 100644 index 9951661b5..000000000 --- a/module/plugins/crypter/FilerNetFolder.py +++ /dev/null @@ -1,22 +0,0 @@ -import re - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class FilerNetFolder(SimpleCrypter): - __name__ = "FilerNetFolder" - __type__ = "crypter" - __version__ = "0.3" - - __pattern__ = r'https?://filer\.net/folder/\w{16}' - - __description__ = """Filer.net decrypter plugin""" - __author_name_ = ("nath_schwarz", "stickell") - __author_mail_ = ("nathan.notwhite@gmail.com", "l.stickell@yahoo.it") - - LINK_PATTERN = r'href="(/get/\w{16})">(?!<)' - TITLE_PATTERN = r'<h3>(?P<title>.+) - <small' - - - def getLinks(self): - return ['http://filer.net%s' % link for link in re.findall(self.LINK_PATTERN, self.html)] diff --git a/module/plugins/crypter/FileserveComFolder.py b/module/plugins/crypter/FileserveComFolder.py deleted file mode 100644 index 2db6baf0e..000000000 --- a/module/plugins/crypter/FileserveComFolder.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.Crypter import Crypter - - -class FileserveComFolder(Crypter): - __name__ = "FileserveComFolder" - __type__ = "crypter" - __version__ = "0.11" - - __pattern__ = r'http://(?:www\.)?fileserve.com/list/\w+' - - __description__ = """FileServe.com folder decrypter plugin""" - __author_name__ = "fionnc" - __author_mail__ = "fionnc@gmail.com" - - FOLDER_PATTERN = r'<table class="file_list">(.*?)</table>' - LINK_PATTERN = r'<a href="([^"]+)" class="sheet_icon wbold">' - - - def decrypt(self, pyfile): - html = self.load(pyfile.url) - - new_links = [] - - folder = re.search(self.FOLDER_PATTERN, html, re.DOTALL) - if folder is None: - self.fail("Parse error (FOLDER)") - - new_links.extend(re.findall(self.LINK_PATTERN, folder.group(1))) - - if new_links: - self.urls = [map(lambda s: "http://fileserve.com%s" % s, new_links)] - else: - self.fail('Could not extract any links') diff --git a/module/plugins/crypter/FilestubeCom.py b/module/plugins/crypter/FilestubeCom.py deleted file mode 100644 index f0aaaa579..000000000 --- a/module/plugins/crypter/FilestubeCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class FilestubeCom(SimpleCrypter): - __name__ = "FilestubeCom" - __type__ = "crypter" - __version__ = "0.03" - - __pattern__ = r'http://(?:www\.)?filestube\.(?:com|to)/\w+' - - __description__ = """Filestube.com decrypter plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - LINK_PATTERN = r'<a class=\"file-link-main(?: noref)?\" [^>]* href=\"(http://[^\"]+)' - TITLE_PATTERN = r'<h1\s*> (?P<title>.+) download\s*</h1>' diff --git a/module/plugins/crypter/FiletramCom.py b/module/plugins/crypter/FiletramCom.py deleted file mode 100644 index 7052955cf..000000000 --- a/module/plugins/crypter/FiletramCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class FiletramCom(SimpleCrypter): - __name__ = "FiletramCom" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?filetram.com/[^/]+/.+' - - __description__ = """Filetram.com decrypter plugin""" - __author_name__ = ("igel", "stickell") - __author_mail__ = ("igelkun@myopera.com", "l.stickell@yahoo.it") - - LINK_PATTERN = r'\s+(http://.+)' - TITLE_PATTERN = r'<title>(?P<title>[^<]+) - Free Download[^<]*</title>' diff --git a/module/plugins/crypter/FiredriveComFolder.py b/module/plugins/crypter/FiredriveComFolder.py deleted file mode 100644 index a94d0847f..000000000 --- a/module/plugins/crypter/FiredriveComFolder.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class FiredriveComFolder(SimpleCrypter): - __name__ = "FiredriveComFolder" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'https?://(?:www\.)?(firedrive|putlocker)\.com/share/.+' - - __description__ = """Firedrive.com folder decrypter plugin""" - __author_name__ = "Walter Purcaro" - __author_mail__ = "vuolter@gmail.com" - - LINK_PATTERN = r'<div class="pf_item pf_(file|folder).+?public=\'(.+?)\'' - TITLE_PATTERN = r'>Shared Folder "(?P<title>.+)" | Firedrive<' - OFFLINE_PATTERN = r'class="sad_face_image"|>No such page here.<' - TEMP_OFFLINE_PATTERN = r'>(File Temporarily Unavailable|Server Error. Try again later)' - - - def getLinks(self): - return map(lambda x: "http://www.firedrive.com/%s/%s" % - ("share" if x[0] == "folder" else "file", x[1]), - re.findall(self.LINK_PATTERN, self.html)) diff --git a/module/plugins/crypter/FourChanOrg.py b/module/plugins/crypter/FourChanOrg.py deleted file mode 100644 index c497fa799..000000000 --- a/module/plugins/crypter/FourChanOrg.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Based on 4chandl by Roland Beermann (https://gist.github.com/enkore/3492599) - -import re - -from module.plugins.Crypter import Crypter - - -class FourChanOrg(Crypter): - __name__ = "FourChanOrg" - __type__ = "crypter" - __version__ = "0.3" - - __pattern__ = r'http://(?:www\.)?boards\.4chan.org/\w+/res/(\d+)' - - __description__ = """4chan.org folder decrypter plugin""" - __author_name__ = None - __author_mail__ = None - - - def decrypt(self, pyfile): - pagehtml = self.load(pyfile.url) - images = set(re.findall(r'(images\.4chan\.org/[^/]*/src/[^"<]*)', pagehtml)) - self.urls = ["http://" + image for image in images] diff --git a/module/plugins/crypter/FreakhareComFolder.py b/module/plugins/crypter/FreakhareComFolder.py deleted file mode 100644 index 2a6877891..000000000 --- a/module/plugins/crypter/FreakhareComFolder.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class FreakhareComFolder(SimpleCrypter): - __name__ = "FreakhareComFolder" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?freakshare\.com/folder/.+' - - __description__ = """Freakhare.com folder decrypter plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - LINK_PATTERN = r'<a href="(http://freakshare.com/files/[^"]+)" target="_blank">' - TITLE_PATTERN = r'Folder:</b> (?P<title>.+)' - PAGES_PATTERN = r'Pages: +(?P<pages>\d+)' - - - def loadPage(self, page_n): - if not hasattr(self, 'f_id') and not hasattr(self, 'f_md5'): - m = re.search(r'http://freakshare.com/\?x=folder&f_id=(\d+)&f_md5=(\w+)', self.html) - if m: - self.f_id = m.group(1) - self.f_md5 = m.group(2) - return self.load('http://freakshare.com/', get={'x': 'folder', - 'f_id': self.f_id, - 'f_md5': self.f_md5, - 'entrys': '20', - 'page': page_n - 1, - 'order': ''}, decode=True) diff --git a/module/plugins/crypter/FreetexthostCom.py b/module/plugins/crypter/FreetexthostCom.py deleted file mode 100644 index bd8a90ce5..000000000 --- a/module/plugins/crypter/FreetexthostCom.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class FreetexthostCom(SimpleCrypter): - __name__ = "FreetexthostCom" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?freetexthost\.com/\w+' - - __description__ = """Freetexthost.com decrypter plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - - def getLinks(self): - m = re.search(r'<div id="contentsinner">\s*(.+)<div class="viewcount">', self.html, re.DOTALL) - if m is None: - self.fail('Unable to extract links | Plugin may be out-of-date') - links = m.group(1) - return links.strip().split("<br />\r\n") diff --git a/module/plugins/crypter/FshareVnFolder.py b/module/plugins/crypter/FshareVnFolder.py deleted file mode 100644 index 5976ff6d5..000000000 --- a/module/plugins/crypter/FshareVnFolder.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class FshareVnFolder(SimpleCrypter): - __name__ = "FshareVnFolder" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?fshare.vn/folder/.*' - - __description__ = """Fshare.vn folder decrypter plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - LINK_PATTERN = r'<li class="w_80pc"><a href="([^"]+)" target="_blank">' diff --git a/module/plugins/crypter/GooGl.py b/module/plugins/crypter/GooGl.py deleted file mode 100644 index 1d9c2801f..000000000 --- a/module/plugins/crypter/GooGl.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Crypter import Crypter -from module.common.json_layer import json_loads - - -class GooGl(Crypter): - __name__ = "GooGl" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'https?://(?:www\.)?goo\.gl/\w+' - - __description__ = """Goo.gl decrypter plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - API_URL = "https://www.googleapis.com/urlshortener/v1/url" - - - def decrypt(self, pyfile): - rep = self.load(self.API_URL, get={'shortUrl': pyfile.url}) - self.logDebug('JSON data: ' + rep) - rep = json_loads(rep) - - if 'longUrl' in rep: - self.urls = [rep['longUrl']] - else: - self.fail('Unable to expand shortened link') diff --git a/module/plugins/crypter/HoerbuchIn.py b/module/plugins/crypter/HoerbuchIn.py deleted file mode 100644 index 924ce5d3a..000000000 --- a/module/plugins/crypter/HoerbuchIn.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.lib.BeautifulSoup import BeautifulSoup, BeautifulStoneSoup - -from module.plugins.Crypter import Crypter - - -class HoerbuchIn(Crypter): - __name__ = "HoerbuchIn" - __type__ = "crypter" - __version__ = "0.6" - - __pattern__ = r'http://(?:www\.)?hoerbuch\.in/(wp/horbucher/\d+/.+/|tp/out.php\?.+|protection/folder_\d+\.html)' - - __description__ = """Hoerbuch.in decrypter plugin""" - __author_name__ = ("spoob", "mkaay") - __author_mail__ = ("spoob@pyload.org", "mkaay@mkaay.de") - - article = re.compile("http://(?:www\.)?hoerbuch\.in/wp/horbucher/\d+/.+/") - protection = re.compile("http://(?:www\.)?hoerbuch\.in/protection/folder_\d+.html") - - - def decrypt(self, pyfile): - self.pyfile = pyfile - - if self.article.match(pyfile.url): - src = self.load(pyfile.url) - soup = BeautifulSoup(src, convertEntities=BeautifulStoneSoup.HTML_ENTITIES) - - abookname = soup.find("a", attrs={"rel": "bookmark"}).text - for a in soup.findAll("a", attrs={"href": self.protection}): - package = "%s (%s)" % (abookname, a.previousSibling.previousSibling.text[:-1]) - links = self.decryptFolder(a['href']) - - self.packages.append((package, links, package)) - else: - self.urls = self.decryptFolder(pyfile.url) - - def decryptFolder(self, url): - m = self.protection.search(url) - if m is None: - self.fail("Bad URL") - url = m.group(0) - - self.pyfile.url = url - src = self.req.load(url, post={"viewed": "adpg"}) - - links = [] - pattern = re.compile("http://www\.hoerbuch\.in/protection/(\w+)/(.*?)\"") - for hoster, lid in pattern.findall(src): - self.req.lastURL = url - self.load("http://www.hoerbuch.in/protection/%s/%s" % (hoster, lid)) - links.append(self.req.lastEffectiveURL) - - return links diff --git a/module/plugins/crypter/HotfileFolderCom.py b/module/plugins/crypter/HotfileFolderCom.py deleted file mode 100644 index 3efd8fc87..000000000 --- a/module/plugins/crypter/HotfileFolderCom.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.Crypter import Crypter - - -class HotfileFolderCom(Crypter): - __name__ = "HotfileFolderCom" - __type__ = "crypter" - __version__ = "0.1" - - __pattern__ = r'http://(?:www\.)?hotfile.com/list/\w+/\w+' - - __description__ = """Hotfile.com folder decrypter plugin""" - __author_name__ = "RaNaN" - __author_mail__ = "RaNaN@pyload.org" - - - def decrypt(self, pyfile): - html = self.load(pyfile.url) - - name = re.findall( - r'<img src="/i/folder.gif" width="23" height="14" style="margin-bottom: -2px;" />([^<]+)', html, - re.MULTILINE)[0].replace("/", "") - new_links = re.findall(r'href="(http://(www.)?hotfile\.com/dl/\d+/[0-9a-zA-Z]+[^"]+)', html) - - new_links = [x[0] for x in new_links] - - self.packages = [(name, new_links, name)] diff --git a/module/plugins/crypter/ILoadTo.py b/module/plugins/crypter/ILoadTo.py deleted file mode 100644 index d7818570a..000000000 --- a/module/plugins/crypter/ILoadTo.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadCrypter import DeadCrypter - - -class ILoadTo(DeadCrypter): - __name__ = "ILoadTo" - __type__ = "crypter" - __version__ = "0.11" - - __pattern__ = r'http://(?:www\.)?iload\.to/go/\d+-[\w\.-]+/' - - __description__ = """Iload.to decrypter plugin""" - __author_name__ = "hzpz" - __author_mail__ = None diff --git a/module/plugins/crypter/ImgurComAlbum.py b/module/plugins/crypter/ImgurComAlbum.py deleted file mode 100644 index eb1f4441a..000000000 --- a/module/plugins/crypter/ImgurComAlbum.py +++ /dev/null @@ -1,24 +0,0 @@ -import re - -from module.plugins.internal.SimpleCrypter import SimpleCrypter -from module.utils import uniqify - - -class ImgurComAlbum(SimpleCrypter): - __name__ = "ImgurComAlbum" - __type__ = "crypter" - __version__ = "0.4" - - __pattern__ = r'https?://(?:www\.|m\.)?imgur\.com/(a|gallery|)/?\w{5,7}' - - __description__ = """Imgur.com decrypter plugin""" - __author_name_ = "nath_schwarz" - __author_mail_ = "nathan.notwhite@gmail.com" - - TITLE_PATTERN = r'(?P<title>.+) - Imgur' - LINK_PATTERN = r'i\.imgur\.com/\w{7}s?\.(?:jpeg|jpg|png|gif|apng)' - - - def getLinks(self): - f = lambda url: "http://" + re.sub(r'(\w{7})s\.', r'\1.', url) - return uniqify(map(f, re.findall(self.LINK_PATTERN, self.html))) diff --git a/module/plugins/crypter/LetitbitNetFolder.py b/module/plugins/crypter/LetitbitNetFolder.py deleted file mode 100644 index 0297d2007..000000000 --- a/module/plugins/crypter/LetitbitNetFolder.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from module.plugins.Crypter import Crypter - - -class LetitbitNetFolder(Crypter): - __name__ = "LetitbitNetFolder" - __type__ = "crypter" - __version__ = "0.1" - - __pattern__ = r'http://(?:www\.)?letitbit.net/folder/\w+' - - __description__ = """Letitbit.net folder decrypter plugin""" - __author_name__ = ("DHMH", "z00nx") - __author_mail__ = ("webmaster@pcProfil.de", "z00nx0@gmail.com") - - FOLDER_PATTERN = r'<table>(.*)</table>' - LINK_PATTERN = r'<a href="([^"]+)" target="_blank">' - - - def decrypt(self, pyfile): - html = self.load(pyfile.url) - - folder = re.search(self.FOLDER_PATTERN, html, re.DOTALL) - if folder is None: - self.fail("Parse error (FOLDER)") - - self.urls.extend(re.findall(self.LINK_PATTERN, folder.group(0))) - - if not self.urls: - self.fail('Could not extract any links') diff --git a/module/plugins/crypter/LinkSaveIn.py b/module/plugins/crypter/LinkSaveIn.py deleted file mode 100644 index 060a434d2..000000000 --- a/module/plugins/crypter/LinkSaveIn.py +++ /dev/null @@ -1,225 +0,0 @@ -# -*- coding: utf-8 -*- -# -# * cnl2 and web links are skipped if JS is not available (instead of failing the package) -# * only best available link source is used (priority: cnl2>rsdf>ccf>dlc>web - -import base64 -import binascii -import re - -from Crypto.Cipher import AES -from module.plugins.Crypter import Crypter -from module.unescape import unescape - - -class LinkSaveIn(Crypter): - __name__ = "LinkSaveIn" - __type__ = "crypter" - __version__ = "2.01" - - __pattern__ = r'http://(?:www\.)?linksave.in/(?P<id>\w+)$' - - __description__ = """LinkSave.in decrypter plugin""" - __author_name__ = "fragonib" - __author_mail__ = "fragonib[AT]yahoo[DOT]es" - - # Constants - _JK_KEY_ = "jk" - _CRYPTED_KEY_ = "crypted" - HOSTER_NAME = "linksave.in" - - - def setup(self): - self.html = None - self.fileid = None - self.captcha = False - self.package = None - self.preferred_sources = ["cnl2", "rsdf", "ccf", "dlc", "web"] - - def decrypt(self, pyfile): - # Init - self.package = pyfile.package() - self.fileid = re.match(self.__pattern__, pyfile.url).group('id') - self.req.cj.setCookie(self.HOSTER_NAME, "Linksave_Language", "english") - - # Request package - self.html = self.load(pyfile.url) - if not self.isOnline(): - self.offline() - - # Check for protection - if self.isPasswordProtected(): - self.unlockPasswordProtection() - self.handleErrors() - - if self.isCaptchaProtected(): - self.captcha = True - self.unlockCaptchaProtection() - self.handleErrors() - - # Get package name and folder - (package_name, folder_name) = self.getPackageInfo() - - # Extract package links - package_links = [] - for type_ in self.preferred_sources: - package_links.extend(self.handleLinkSource(type_)) - if package_links: # use only first source which provides links - break - package_links = set(package_links) - - # Pack - if package_links: - self.packages = [(package_name, package_links, folder_name)] - else: - self.fail('Could not extract any links') - - def isOnline(self): - if "<big>Error 404 - Folder not found!</big>" in self.html: - self.logDebug("File not found") - return False - return True - - def isPasswordProtected(self): - if re.search(r'''<input.*?type="password"''', self.html): - self.logDebug("Links are password protected") - return True - - def isCaptchaProtected(self): - if "<b>Captcha:</b>" in self.html: - self.logDebug("Links are captcha protected") - return True - return False - - def unlockPasswordProtection(self): - password = self.getPassword() - self.logDebug("Submitting password [%s] for protected links" % password) - post = {"id": self.fileid, "besucherpasswort": password, 'login': 'submit'} - self.html = self.load(self.pyfile.url, post=post) - - def unlockCaptchaProtection(self): - captcha_hash = re.search(r'name="hash" value="([^"]+)', self.html).group(1) - captcha_url = re.search(r'src=".(/captcha/cap.php\?hsh=[^"]+)', self.html).group(1) - captcha_code = self.decryptCaptcha("http://linksave.in" + captcha_url, forceUser=True) - self.html = self.load(self.pyfile.url, post={"id": self.fileid, "hash": captcha_hash, "code": captcha_code}) - - def getPackageInfo(self): - name = self.pyfile.package().name - folder = self.pyfile.package().folder - self.logDebug("Defaulting to pyfile name [%s] and folder [%s] for package" % (name, folder)) - return name, folder - - def handleErrors(self): - if "The visitorpassword you have entered is wrong" in self.html: - self.logDebug("Incorrect password, please set right password on 'Edit package' form and retry") - self.fail("Incorrect password, please set right password on 'Edit package' form and retry") - - if self.captcha: - if "Wrong code. Please retry" in self.html: - self.logDebug("Invalid captcha, retrying") - self.invalidCaptcha() - self.retry() - else: - self.correctCaptcha() - - def handleLinkSource(self, type_): - if type_ == "cnl2": - return self.handleCNL2() - elif type_ in ("rsdf", "ccf", "dlc"): - return self.handleContainer(type_) - elif type_ == "web": - return self.handleWebLinks() - else: - self.fail('unknown source type "%s" (this is probably a bug)' % type_) - - def handleWebLinks(self): - package_links = [] - self.logDebug("Search for Web links") - if not self.js: - self.logDebug("no JS -> skip Web links") - else: - #@TODO: Gather paginated web links - pattern = r'<a href="http://linksave\.in/(\w{43})"' - ids = re.findall(pattern, self.html) - self.logDebug("Decrypting %d Web links" % len(ids)) - for i, weblink_id in enumerate(ids): - try: - webLink = "http://linksave.in/%s" % weblink_id - self.logDebug("Decrypting Web link %d, %s" % (i + 1, webLink)) - fwLink = "http://linksave.in/fw-%s" % weblink_id - response = self.load(fwLink) - jscode = re.findall(r'<script type="text/javascript">(.*)</script>', response)[-1] - jseval = self.js.eval("document = { write: function(e) { return e; } }; %s" % jscode) - dlLink = re.search(r'http://linksave\.in/dl-\w+', jseval).group(0) - self.logDebug("JsEngine returns value [%s] for redirection link" % dlLink) - response = self.load(dlLink) - link = unescape(re.search(r'<iframe src="(.+?)"', response).group(1)) - package_links.append(link) - except Exception, detail: - self.logDebug("Error decrypting Web link %s, %s" % (webLink, detail)) - return package_links - - def handleContainer(self, type_): - package_links = [] - type_ = type_.lower() - self.logDebug('Seach for %s Container links' % type_.upper()) - if not type_.isalnum(): # check to prevent broken re-pattern (cnl2,rsdf,ccf,dlc,web are all alpha-numeric) - self.fail('unknown container type "%s" (this is probably a bug)' % type_) - pattern = r"\('%s_link'\).href=unescape\('(.*?\.%s)'\)" % (type_, type_) - containersLinks = re.findall(pattern, self.html) - self.logDebug("Found %d %s Container links" % (len(containersLinks), type_.upper())) - for containerLink in containersLinks: - link = "http://linksave.in/%s" % unescape(containerLink) - package_links.append(link) - return package_links - - def handleCNL2(self): - package_links = [] - self.logDebug("Search for CNL2 links") - if not self.js: - self.logDebug("no JS -> skip CNL2 links") - elif 'cnl2_load' in self.html: - try: - (vcrypted, vjk) = self._getCipherParams() - for (crypted, jk) in zip(vcrypted, vjk): - package_links.extend(self._getLinks(crypted, jk)) - except: - self.fail("Unable to decrypt CNL2 links") - return package_links - - def _getCipherParams(self): - # Get jk - jk_re = r'<INPUT.*?NAME="%s".*?VALUE="(.*?)"' % LinkSaveIn._JK_KEY_ - vjk = re.findall(jk_re, self.html) - - # Get crypted - crypted_re = r'<INPUT.*?NAME="%s".*?VALUE="(.*?)"' % LinkSaveIn._CRYPTED_KEY_ - vcrypted = re.findall(crypted_re, self.html) - - # Log and return - self.logDebug("Detected %d crypted blocks" % len(vcrypted)) - return vcrypted, vjk - - def _getLinks(self, crypted, jk): - # Get key - jreturn = self.js.eval("%s f()" % jk) - self.logDebug("JsEngine returns value [%s]" % jreturn) - key = binascii.unhexlify(jreturn) - - # Decode crypted - crypted = base64.standard_b64decode(crypted) - - # Decrypt - Key = key - IV = key - obj = AES.new(Key, AES.MODE_CBC, IV) - text = obj.decrypt(crypted) - - # Extract links - text = text.replace("\x00", "").replace("\r", "") - links = text.split("\n") - links = filter(lambda x: x != "", links) - - # Log and return - self.logDebug("Package has %d links" % len(links)) - return links diff --git a/module/plugins/crypter/LinkdecrypterCom.py b/module/plugins/crypter/LinkdecrypterCom.py deleted file mode 100644 index 21f05b962..000000000 --- a/module/plugins/crypter/LinkdecrypterCom.py +++ /dev/null @@ -1,91 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from module.plugins.Crypter import Crypter - - -class LinkdecrypterCom(Crypter): - __name__ = "LinkdecrypterCom" - __type__ = "crypter" - __version__ = "0.27" - - __pattern__ = None - - __description__ = """Linkdecrypter.com""" - __author_name__ = ("zoidberg", "flowlee") - __author_mail__ = ("zoidberg@mujmail.cz", "") - - TEXTAREA_PATTERN = r'<textarea name="links" wrap="off" readonly="1" class="caja_des">(.+)</textarea>' - PASSWORD_PATTERN = r'<input type="text" name="password"' - CAPTCHA_PATTERN = r'<img class="captcha" src="(.+?)"(.*?)>' - REDIR_PATTERN = r'<i>(Click <a href="./">here</a> if your browser does not redirect you).</i>' - - - def decrypt(self, pyfile): - - self.passwords = self.getPassword().splitlines() - - # API not working anymore - self.urls = self.decryptHTML() - if not self.urls: - self.fail('Could not extract any links') - - def decryptAPI(self): - - get_dict = {"t": "link", "url": self.pyfile.url, "lcache": "1"} - self.html = self.load('http://linkdecrypter.com/api', get=get_dict) - if self.html.startswith('http://'): - return self.html.splitlines() - - if self.html == 'INTERRUPTION(PASSWORD)': - for get_dict['pass'] in self.passwords: - self.html = self.load('http://linkdecrypter.com/api', get=get_dict) - if self.html.startswith('http://'): - return self.html.splitlines() - - self.logError('API', self.html) - if self.html == 'INTERRUPTION(PASSWORD)': - self.fail("No or incorrect password") - - return None - - def decryptHTML(self): - - retries = 5 - - post_dict = {"link_cache": "on", "pro_links": self.pyfile.url, "modo_links": "text"} - self.html = self.load('http://linkdecrypter.com/', post=post_dict, cookies=True, decode=True) - - while self.passwords or retries: - m = re.search(self.TEXTAREA_PATTERN, self.html, flags=re.DOTALL) - if m: - return [x for x in m.group(1).splitlines() if '[LINK-ERROR]' not in x] - - m = re.search(self.CAPTCHA_PATTERN, self.html) - if m: - captcha_url = 'http://linkdecrypter.com/' + m.group(1) - result_type = "positional" if "getPos" in m.group(2) else "textual" - - m = re.search(r"<p><i><b>([^<]+)</b></i></p>", self.html) - msg = m.group(1) if m else "" - self.logInfo("Captcha protected link", result_type, msg) - - captcha = self.decryptCaptcha(captcha_url, result_type=result_type) - if result_type == "positional": - captcha = "%d|%d" % captcha - self.html = self.load('http://linkdecrypter.com/', post={"captcha": captcha}, decode=True) - retries -= 1 - - elif self.PASSWORD_PATTERN in self.html: - if self.passwords: - password = self.passwords.pop(0) - self.logInfo("Password protected link, trying " + password) - self.html = self.load('http://linkdecrypter.com/', post={'password': password}, decode=True) - else: - self.fail("No or incorrect password") - - else: - retries -= 1 - self.html = self.load('http://linkdecrypter.com/', cookies=True, decode=True) - - return None diff --git a/module/plugins/crypter/LixIn.py b/module/plugins/crypter/LixIn.py deleted file mode 100644 index cdf87eeb2..000000000 --- a/module/plugins/crypter/LixIn.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.Crypter import Crypter - - -class LixIn(Crypter): - __name__ = "LixIn" - __type__ = "crypter" - __version__ = "0.22" - - __pattern__ = r'http://(www.)?lix.in/(?P<id>.*)' - - __description__ = """Lix.in decrypter plugin""" - __author_name__ = "spoob" - __author_mail__ = "spoob@pyload.org" - - CAPTCHA_PATTERN = r'<img src="(?P<image>captcha_img.php\?.*?)"' - SUBMIT_PATTERN = r"value='continue.*?'" - LINK_PATTERN = r'name="ifram" src="(?P<link>.*?)"' - - - def decrypt(self, pyfile): - url = pyfile.url - - m = re.match(self.__pattern__, url) - if m is None: - self.fail("couldn't identify file id") - - id = m.group("id") - self.logDebug("File id is %s" % id) - - self.html = self.req.load(url, decode=True) - - m = re.search(self.SUBMIT_PATTERN, self.html) - if m is None: - self.fail("link doesn't seem valid") - - m = re.search(self.CAPTCHA_PATTERN, self.html) - if m: - for _ in xrange(5): - m = re.search(self.CAPTCHA_PATTERN, self.html) - if m: - self.logDebug("trying captcha") - captcharesult = self.decryptCaptcha("http://lix.in/" + m.group("image")) - self.html = self.req.load(url, decode=True, - post={"capt": captcharesult, "submit": "submit", "tiny": id}) - else: - self.logDebug("no captcha/captcha solved") - else: - self.html = self.req.load(url, decode=True, post={"submit": "submit", "tiny": id}) - - m = re.search(self.LINK_PATTERN, self.html) - if m is None: - self.fail("can't find destination url") - else: - self.urls = [m.group("link")] - self.logDebug("Found link %s, adding to package" % self.urls[0]) diff --git a/module/plugins/crypter/LofCc.py b/module/plugins/crypter/LofCc.py deleted file mode 100644 index 8a5cd86ee..000000000 --- a/module/plugins/crypter/LofCc.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadCrypter import DeadCrypter - - -class LofCc(DeadCrypter): - __name__ = "LofCc" - __type__ = "crypter" - __version__ = "0.21" - - __pattern__ = r'http://(?:www\.)?lof.cc/(.*)' - - __description__ = """Lof.cc decrypter plugin""" - __author_name__ = "mkaay" - __author_mail__ = "mkaay@mkaay.de" diff --git a/module/plugins/crypter/MBLinkInfo.py b/module/plugins/crypter/MBLinkInfo.py deleted file mode 100644 index 4fc066e57..000000000 --- a/module/plugins/crypter/MBLinkInfo.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadCrypter import DeadCrypter - - -class MBLinkInfo(DeadCrypter): - __name__ = "MBLinkInfo" - __type__ = "crypter" - __version__ = "0.03" - - __pattern__ = r'http://(?:www\.)?mblink\.info/?\?id=(\d+)' - - __description__ = """MBLink.info decrypter plugin""" - __author_name__ = ("Gummibaer", "stickell") - __author_mail__ = ("Gummibaer@wiki-bierkiste.de", "l.stickell@yahoo.it") diff --git a/module/plugins/crypter/MediafireComFolder.py b/module/plugins/crypter/MediafireComFolder.py deleted file mode 100644 index bb7c90722..000000000 --- a/module/plugins/crypter/MediafireComFolder.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from module.plugins.Crypter import Crypter -from module.plugins.hoster.MediafireCom import checkHTMLHeader -from module.common.json_layer import json_loads - - -class MediafireComFolder(Crypter): - __name__ = "MediafireComFolder" - __type__ = "crypter" - __version__ = "0.14" - - __pattern__ = r'http://(?:www\.)?mediafire\.com/(folder/|\?sharekey=|\?\w{13}($|[/#]))' - - __description__ = """Mediafire.com folder decrypter plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FOLDER_KEY_PATTERN = r"var afI= '(\w+)';" - FILE_URL_PATTERN = r'<meta property="og:url" content="http://www.mediafire.com/\?(\w+)"/>' - - - def decrypt(self, pyfile): - url, result = checkHTMLHeader(pyfile.url) - self.logDebug('Location (%d): %s' % (result, url)) - - if result == 0: - # load and parse html - html = self.load(pyfile.url) - m = re.search(self.FILE_URL_PATTERN, html) - if m: - # file page - self.urls.append("http://www.mediafire.com/file/%s" % m.group(1)) - else: - # folder page - m = re.search(self.FOLDER_KEY_PATTERN, html) - if m: - folder_key = m.group(1) - self.logDebug("FOLDER KEY: %s" % folder_key) - - json_resp = json_loads(self.load( - "http://www.mediafire.com/api/folder/get_info.php?folder_key=%s&response_format=json&version=1" % folder_key)) - #self.logInfo(json_resp) - if json_resp['response']['result'] == "Success": - for link in json_resp['response']['folder_info']['files']: - self.urls.append("http://www.mediafire.com/file/%s" % link['quickkey']) - else: - self.fail(json_resp['response']['message']) - elif result == 1: - self.offline() - else: - self.urls.append(url) - - if not self.urls: - self.fail('Could not extract any links') diff --git a/module/plugins/crypter/Movie2kTo.py b/module/plugins/crypter/Movie2kTo.py deleted file mode 100644 index ba201621f..000000000 --- a/module/plugins/crypter/Movie2kTo.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadCrypter import DeadCrypter - - -class Movie2kTo(DeadCrypter): - __name__ = "Movie2kTo" - __type__ = "crypter" - __version__ = "0.51" - - __pattern__ = r'http://(?:www\.)?movie2k\.to/(.*)\.html' - - __description__ = """Movie2k.to decrypter plugin""" - __author_name__ = "4Christopher" - __author_mail__ = "4Christopher@gmx.de" diff --git a/module/plugins/crypter/MultiUpOrg.py b/module/plugins/crypter/MultiUpOrg.py deleted file mode 100644 index ffeaa6f04..000000000 --- a/module/plugins/crypter/MultiUpOrg.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from urlparse import urljoin - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class MultiUpOrg(SimpleCrypter): - __name__ = "MultiUpOrg" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?multiup\.org/(en|fr)/(?P<TYPE>project|download|miror)/\w+(/\w+)?' - - __description__ = """MultiUp.org crypter plugin""" - __author_name__ = "Walter Purcaro" - __author_mail__ = "vuolter@gmail.com" - - TITLE_PATTERN = r'<title>.*(Project|Projet|ownload|élécharger) (?P<title>.+?) (\(|- )' - - - def getLinks(self): - m_type = re.match(self.__pattern__, self.pyfile.url).group("TYPE") - - if m_type == "project": - pattern = r'\n(http://www\.multiup\.org/(?:en|fr)/download/.*)' - else: - pattern = r'style="width:97%;text-align:left".*\n.*href="(.*)"' - if m_type == "download": - dl_pattern = r'href="(.*)">.*\n.*<h5>DOWNLOAD</h5>' - miror_page = urljoin("http://www.multiup.org", re.search(dl_pattern, self.html).group(1)) - self.html = self.load(miror_page) - - return re.findall(pattern, self.html) diff --git a/module/plugins/crypter/MultiloadCz.py b/module/plugins/crypter/MultiloadCz.py deleted file mode 100644 index 7d43ec729..000000000 --- a/module/plugins/crypter/MultiloadCz.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from module.plugins.Crypter import Crypter - - -class MultiloadCz(Crypter): - __name__ = "MultiloadCz" - __type__ = "crypter" - __version__ = "0.4" - - __pattern__ = r'http://(?:[^/]*\.)?multiload.cz/(stahnout|slozka)/.*' - __config__ = [("usedHoster", "str", "Prefered hoster list (bar-separated) ", ""), - ("ignoredHoster", "str", "Ignored hoster list (bar-separated) ", "")] - - __description__ = """Multiload.cz decrypter plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FOLDER_PATTERN = r'<form action="" method="get"><textarea[^>]*>([^>]*)</textarea></form>' - LINK_PATTERN = r'<p class="manager-server"><strong>([^<]+)</strong></p><p class="manager-linky"><a href="([^"]+)">' - - - def decrypt(self, pyfile): - self.html = self.load(pyfile.url, decode=True) - - if re.match(self.__pattern__, pyfile.url).group(1) == "slozka": - m = re.search(self.FOLDER_PATTERN, self.html) - if m: - self.urls.extend(m.group(1).split()) - else: - m = re.findall(self.LINK_PATTERN, self.html) - if m: - prefered_set = set(self.getConfig("usedHoster").split('|')) - self.urls.extend([x[1] for x in m if x[0] in prefered_set]) - - if not self.urls: - ignored_set = set(self.getConfig("ignoredHoster").split('|')) - self.urls.extend([x[1] for x in m if x[0] not in ignored_set]) - - if not self.urls: - self.fail('Could not extract any links') diff --git a/module/plugins/crypter/MultiuploadCom.py b/module/plugins/crypter/MultiuploadCom.py deleted file mode 100644 index 96cd734e4..000000000 --- a/module/plugins/crypter/MultiuploadCom.py +++ /dev/null @@ -1,64 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from time import time - -from module.plugins.Crypter import Crypter -from module.common.json_layer import json_loads - - -class MultiuploadCom(Crypter): - __name__ = "MultiuploadCom" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?multiupload.com/(\w+)' - __config__ = [("preferedHoster", "str", "Prefered hoster list (bar-separated) ", "multiupload"), - ("ignoredHoster", "str", "Ignored hoster list (bar-separated) ", "")] - - __description__ = """MultiUpload.com decrypter plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - ML_LINK_PATTERN = r'<div id="downloadbutton_" style=""><a href="([^"]+)"' - - - def decrypt(self, pyfile): - self.html = self.load(pyfile.url) - m = re.search(self.ML_LINK_PATTERN, self.html) - ml_url = m.group(1) if m else None - - json_list = json_loads(self.load("http://multiupload.com/progress/", get={ - "d": re.match(self.__pattern__, pyfile.url).group(1), - "r": str(int(time() * 1000)) - })) - - prefered_set = map(lambda s: s.lower().split('.')[0], set(self.getConfig("preferedHoster").split('|'))) - - if ml_url and 'multiupload' in prefered_set: - self.urls.append(ml_url) - - for link in json_list: - if link['service'].lower() in prefered_set and int(link['status']) and not int(link['deleted']): - url = self.getLocation(link['url']) - if url: - self.urls.append(url) - - if not self.urls: - ignored_set = map(lambda s: s.lower().split('.')[0], set(self.getConfig("ignoredHoster").split('|'))) - - if 'multiupload' not in ignored_set: - self.urls.append(ml_url) - - for link in json_list: - if link['service'].lower() not in ignored_set and int(link['status']) and not int(link['deleted']): - url = self.getLocation(link['url']) - if url: - self.urls.append(url) - - if not self.urls: - self.fail('Could not extract any links') - - def getLocation(self, url): - header = self.load(url, just_header=True) - return header['location'] if "location" in header else None diff --git a/module/plugins/crypter/NCryptIn.py b/module/plugins/crypter/NCryptIn.py deleted file mode 100644 index 1b7b8b3d4..000000000 --- a/module/plugins/crypter/NCryptIn.py +++ /dev/null @@ -1,303 +0,0 @@ -# -*- coding: utf-8 -*- - -import base64 -import binascii -import re - -from Crypto.Cipher import AES - -from module.plugins.Crypter import Crypter -from module.plugins.internal.CaptchaService import ReCaptcha - - -class NCryptIn(Crypter): - __name__ = "NCryptIn" - __type__ = "crypter" - __version__ = "1.32" - - __pattern__ = r'http://(?:www\.)?ncrypt.in/(?P<type>folder|link|frame)-([^/\?]+)' - - __description__ = """NCrypt.in decrypter plugin""" - __author_name__ = ("fragonib", "stickell") - __author_mail__ = ("fragonib[AT]yahoo[DOT]es", "l.stickell@yahoo.it") - - JK_KEY = "jk" - CRYPTED_KEY = "crypted" - - NAME_PATTERN = r'<meta name="description" content="(?P<N>[^"]+)"' - - - def setup(self): - self.package = None - self.html = None - self.cleanedHtml = None - self.links_source_order = ["cnl2", "rsdf", "ccf", "dlc", "web"] - self.protection_type = None - - def decrypt(self, pyfile): - # Init - self.package = pyfile.package() - package_links = [] - package_name = self.package.name - folder_name = self.package.folder - - # Deal with single links - if self.isSingleLink(): - package_links.extend(self.handleSingleLink()) - - # Deal with folders - else: - - # Request folder home - self.html = self.requestFolderHome() - self.cleanedHtml = self.removeHtmlCrap(self.html) - if not self.isOnline(): - self.offline() - - # Check for folder protection - if self.isProtected(): - self.html = self.unlockProtection() - self.cleanedHtml = self.removeHtmlCrap(self.html) - self.handleErrors() - - # Prepare package name and folder - (package_name, folder_name) = self.getPackageInfo() - - # Extract package links - for link_source_type in self.links_source_order: - package_links.extend(self.handleLinkSource(link_source_type)) - if package_links: # use only first source which provides links - break - package_links = set(package_links) - - # Pack and return links - if not package_links: - self.fail('Could not extract any links') - self.packages = [(package_name, package_links, folder_name)] - - def isSingleLink(self): - link_type = re.match(self.__pattern__, self.pyfile.url).group('type') - return link_type in ("link", "frame") - - def requestFolderHome(self): - return self.load(self.pyfile.url, decode=True) - - def removeHtmlCrap(self, content): - patterns = (r'(type="hidden".*?(name=".*?")?.*?value=".*?")', - r'display:none;">(.*?)</(div|span)>', - r'<div\s+class="jdownloader"(.*?)</div>', - r'<table class="global">(.*?)</table>', - r'<iframe\s+style="display:none(.*?)</iframe>') - for pattern in patterns: - rexpr = re.compile(pattern, re.DOTALL) - content = re.sub(rexpr, "", content) - return content - - def isOnline(self): - if "Your folder does not exist" in self.cleanedHtml: - self.logDebug("File not m") - return False - return True - - def isProtected(self): - form = re.search(r'<form.*?name.*?protected.*?>(.*?)</form>', self.cleanedHtml, re.DOTALL) - if form is not None: - content = form.group(1) - for keyword in ("password", "captcha"): - if keyword in content: - self.protection_type = keyword - self.logDebug("Links are %s protected" % self.protection_type) - return True - return False - - def getPackageInfo(self): - m = re.search(self.NAME_PATTERN, self.html) - if m: - name = folder = m.group('N').strip() - self.logDebug("Found name [%s] and folder [%s] in package info" % (name, folder)) - else: - name = self.package.name - folder = self.package.folder - self.logDebug("Package info not m, defaulting to pyfile name [%s] and folder [%s]" % (name, folder)) - return name, folder - - def unlockProtection(self): - - postData = {} - - form = re.search(r'<form name="protected"(.*?)</form>', self.cleanedHtml, re.DOTALL).group(1) - - # Submit package password - if "password" in form: - password = self.getPassword() - self.logDebug("Submitting password [%s] for protected links" % password) - postData['password'] = password - - # Resolve anicaptcha - if "anicaptcha" in form: - self.logDebug("Captcha protected") - captchaUri = re.search(r'src="(/temp/anicaptcha/[^"]+)', form).group(1) - captcha = self.decryptCaptcha("http://ncrypt.in" + captchaUri) - self.logDebug("Captcha resolved [%s]" % captcha) - postData['captcha'] = captcha - - # Resolve recaptcha - if "recaptcha" in form: - self.logDebug("ReCaptcha protected") - captcha_key = re.search(r'\?k=(.*?)"', form).group(1) - self.logDebug("Resolving ReCaptcha with key [%s]" % captcha_key) - recaptcha = ReCaptcha(self) - challenge, code = recaptcha.challenge(captcha_key) - postData['recaptcha_challenge_field'] = challenge - postData['recaptcha_response_field'] = code - - # Resolve circlecaptcha - if "circlecaptcha" in form: - self.logDebug("CircleCaptcha protected") - captcha_img_url = "http://ncrypt.in/classes/captcha/circlecaptcha.php" - coords = self.decryptCaptcha(captcha_img_url, forceUser=True, imgtype="png", result_type='positional') - self.logDebug("Captcha resolved, coords [%s]" % str(coords)) - postData['circle.x'] = coords[0] - postData['circle.y'] = coords[1] - - # Unlock protection - postData['submit_protected'] = 'Continue to folder' - return self.load(self.pyfile.url, post=postData, decode=True) - - def handleErrors(self): - if self.protection_type == "password": - if "This password is invalid!" in self.cleanedHtml: - self.logDebug("Incorrect password, please set right password on 'Edit package' form and retry") - self.fail("Incorrect password, please set right password on 'Edit package' form and retry") - - if self.protection_type == "captcha": - if "The securitycheck was wrong!" in self.cleanedHtml: - self.logDebug("Invalid captcha, retrying") - self.invalidCaptcha() - self.retry() - else: - self.correctCaptcha() - - def handleLinkSource(self, link_source_type): - # Check for JS engine - require_js_engine = link_source_type in ("cnl2", "rsdf", "ccf", "dlc") - if require_js_engine and not self.js: - self.logDebug("No JS engine available, skip %s links" % link_source_type) - return [] - - # Select suitable handler - if link_source_type == 'single': - return self.handleSingleLink() - if link_source_type == 'cnl2': - return self.handleCNL2() - elif link_source_type in ("rsdf", "ccf", "dlc"): - return self.handleContainer(link_source_type) - elif link_source_type == "web": - return self.handleWebLinks() - else: - self.fail('unknown source type "%s" (this is probably a bug)' % link_source_type) - - def handleSingleLink(self): - - self.logDebug("Handling Single link") - package_links = [] - - # Decrypt single link - decrypted_link = self.decryptLink(self.pyfile.url) - if decrypted_link: - package_links.append(decrypted_link) - - return package_links - - def handleCNL2(self): - - self.logDebug("Handling CNL2 links") - package_links = [] - - if 'cnl2_output' in self.cleanedHtml: - try: - (vcrypted, vjk) = self._getCipherParams() - for (crypted, jk) in zip(vcrypted, vjk): - package_links.extend(self._getLinks(crypted, jk)) - except: - self.fail("Unable to decrypt CNL2 links") - - return package_links - - def handleContainers(self): - - self.logDebug("Handling Container links") - package_links = [] - - pattern = r"/container/(rsdf|dlc|ccf)/([a-z0-9]+)" - containersLinks = re.findall(pattern, self.html) - self.logDebug("Decrypting %d Container links" % len(containersLinks)) - for containerLink in containersLinks: - link = "http://ncrypt.in/container/%s/%s.%s" % (containerLink[0], containerLink[1], containerLink[0]) - package_links.append(link) - - return package_links - - def handleWebLinks(self): - - self.logDebug("Handling Web links") - pattern = r"(http://ncrypt\.in/link-.*?=)" - links = re.findall(pattern, self.html) - - package_links = [] - self.logDebug("Decrypting %d Web links" % len(links)) - for i, link in enumerate(links): - self.logDebug("Decrypting Web link %d, %s" % (i + 1, link)) - decrypted_link = self.decrypt(link) - if decrypted_link: - package_links.append(decrypted_link) - - return package_links - - def decryptLink(self, link): - try: - url = link.replace("link-", "frame-") - link = self.load(url, just_header=True)['location'] - return link - except Exception, detail: - self.logDebug("Error decrypting link %s, %s" % (link, detail)) - - def _getCipherParams(self): - - pattern = r'<input.*?name="%s".*?value="(.*?)"' - - # Get jk - jk_re = pattern % NCryptIn.JK_KEY - vjk = re.findall(jk_re, self.html) - - # Get crypted - crypted_re = pattern % NCryptIn.CRYPTED_KEY - vcrypted = re.findall(crypted_re, self.html) - - # Log and return - self.logDebug("Detected %d crypted blocks" % len(vcrypted)) - return vcrypted, vjk - - def _getLinks(self, crypted, jk): - # Get key - jreturn = self.js.eval("%s f()" % jk) - self.logDebug("JsEngine returns value [%s]" % jreturn) - key = binascii.unhexlify(jreturn) - - # Decode crypted - crypted = base64.standard_b64decode(crypted) - - # Decrypt - Key = key - IV = key - obj = AES.new(Key, AES.MODE_CBC, IV) - text = obj.decrypt(crypted) - - # Extract links - text = text.replace("\x00", "").replace("\r", "") - links = text.split("\n") - links = filter(lambda x: x != "", links) - - # Log and return - self.logDebug("Block has %d links" % len(links)) - return links diff --git a/module/plugins/crypter/NetfolderIn.py b/module/plugins/crypter/NetfolderIn.py deleted file mode 100644 index 1c337391c..000000000 --- a/module/plugins/crypter/NetfolderIn.py +++ /dev/null @@ -1,73 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class NetfolderIn(SimpleCrypter): - __name__ = "NetfolderIn" - __type__ = "crypter" - __version__ = "0.6" - - __pattern__ = r'http://(?:www\.)?netfolder.in/((?P<id1>\w+)/\w+|folder.php\?folder_id=(?P<id2>\w+))' - - __description__ = """NetFolder.in decrypter plugin""" - __author_name__ = ("RaNaN", "fragonib") - __author_mail__ = ("RaNaN@pyload.org", "fragonib[AT]yahoo[DOT]es") - - TITLE_PATTERN = r'<div class="Text">Inhalt des Ordners <span(.*)>(?P<title>.+)</span></div>' - - - def decrypt(self, pyfile): - # Request package - self.html = self.load(pyfile.url) - - # Check for password protection - if self.isPasswordProtected(): - self.html = self.submitPassword() - if not self.html: - self.fail("Incorrect password, please set right password on Add package form and retry") - - # Get package name and folder - (package_name, folder_name) = self.getPackageNameAndFolder() - - # Get package links - package_links = self.getLinks() - - # Set package - self.packages = [(package_name, package_links, folder_name)] - - def isPasswordProtected(self): - if '<input type="password" name="password"' in self.html: - self.logDebug("Links are password protected") - return True - return False - - def submitPassword(self): - # Gather data - try: - m = re.match(self.__pattern__, self.pyfile.url) - id = max(m.group('id1'), m.group('id2')) - except AttributeError: - self.logDebug("Unable to get package id from url [%s]" % self.pyfile.url) - return - url = "http://netfolder.in/folder.php?folder_id=" + id - password = self.getPassword() - - # Submit package password - post = {'password': password, 'save': 'Absenden'} - self.logDebug("Submitting password [%s] for protected links with id [%s]" % (password, id)) - html = self.load(url, {}, post) - - # Check for invalid password - if '<div class="InPage_Error">' in html: - self.logDebug("Incorrect password, please set right password on Edit package form and retry") - return None - - return html - - def getLinks(self): - links = re.search(r'name="list" value="(.*?)"', self.html).group(1).split(",") - self.logDebug("Package has %d links" % len(links)) - return links diff --git a/module/plugins/crypter/NosvideoCom.py b/module/plugins/crypter/NosvideoCom.py deleted file mode 100644 index a3bb11b16..000000000 --- a/module/plugins/crypter/NosvideoCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class NosvideoCom(SimpleCrypter): - __name__ = "NosvideoCom" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?nosvideo\.com/\?v=\w+' - - __description__ = """Nosvideo.com decrypter plugin""" - __author_name__ = "igel" - __author_mail__ = "igelkun@myopera.com" - - LINK_PATTERN = r'href="(http://(?:w{3}\.)?nosupload.com/\?d=\w+)"' - TITLE_PATTERN = r'<[tT]itle>Watch (?P<title>.+)</[tT]itle>' diff --git a/module/plugins/crypter/OneKhDe.py b/module/plugins/crypter/OneKhDe.py deleted file mode 100644 index ba93278d5..000000000 --- a/module/plugins/crypter/OneKhDe.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.unescape import unescape -from module.plugins.Crypter import Crypter - - -class OneKhDe(Crypter): - __name__ = "OneKhDe" - __type__ = "crypter" - __version__ = "0.1" - - __pattern__ = r'http://(?:www\.)?1kh.de/f/' - - __description__ = """1kh.de decrypter plugin""" - __author_name__ = "spoob" - __author_mail__ = "spoob@pyload.org" - - - def __init__(self, parent): - Crypter.__init__(self, parent) - self.parent = parent - self.html = None - - def file_exists(self): - """ returns True or False - """ - return True - - def proceed(self, url, location): - url = self.parent.url - self.html = self.req.load(url) - link_ids = re.findall(r"<a id=\"DownloadLink_(\d*)\" href=\"http://1kh.de/", self.html) - for id in link_ids: - new_link = unescape( - re.search("width=\"100%\" src=\"(.*)\"></iframe>", self.req.load("http://1kh.de/l/" + id)).group(1)) - self.urls.append(new_link) diff --git a/module/plugins/crypter/OronComFolder.py b/module/plugins/crypter/OronComFolder.py deleted file mode 100755 index f0b2f943c..000000000 --- a/module/plugins/crypter/OronComFolder.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadCrypter import DeadCrypter - - -class OronComFolder(DeadCrypter): - __name__ = "OronComFolder" - __type__ = "crypter" - __version__ = "0.11" - - __pattern__ = r'http://(?:www\.)?oron.com/folder/\w+' - - __description__ = """Oron.com folder decrypter plugin""" - __author_name__ = "DHMH" - __author_mail__ = "webmaster@pcProfil.de" diff --git a/module/plugins/crypter/PastebinCom.py b/module/plugins/crypter/PastebinCom.py deleted file mode 100644 index 55aa2ee4a..000000000 --- a/module/plugins/crypter/PastebinCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class PastebinCom(SimpleCrypter): - __name__ = "PastebinCom" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?pastebin\.com/\w+' - - __description__ = """Pastebin.com decrypter plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - LINK_PATTERN = r'<div class="de\d+">(https?://[^ <]+)(?:[^<]*)</div>' - TITLE_PATTERN = r'<div class="paste_box_line1" title="(?P<title>[^"]+)">' diff --git a/module/plugins/crypter/QuickshareCzFolder.py b/module/plugins/crypter/QuickshareCzFolder.py deleted file mode 100644 index 9840b84df..000000000 --- a/module/plugins/crypter/QuickshareCzFolder.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from module.plugins.Crypter import Crypter - - -class QuickshareCzFolder(Crypter): - __name__ = "QuickshareCzFolder" - __type__ = "crypter" - __version__ = "0.1" - - __pattern__ = r'http://(?:www\.)?quickshare.cz/slozka-\d+.*' - - __description__ = """Quickshare.cz folder decrypter plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FOLDER_PATTERN = r'<textarea[^>]*>(.*?)</textarea>' - LINK_PATTERN = r'(http://www.quickshare.cz/\S+)' - - - def decrypt(self, pyfile): - html = self.load(pyfile.url) - - m = re.search(self.FOLDER_PATTERN, html, re.DOTALL) - if m is None: - self.fail("Parse error (FOLDER)") - self.urls.extend(re.findall(self.LINK_PATTERN, m.group(1))) - - if not self.urls: - self.fail('Could not extract any links') diff --git a/module/plugins/crypter/RSLayerCom.py b/module/plugins/crypter/RSLayerCom.py deleted file mode 100644 index 7dda0beab..000000000 --- a/module/plugins/crypter/RSLayerCom.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadCrypter import DeadCrypter - - -class RSLayerCom(DeadCrypter): - __name__ = "RSLayerCom" - __type__ = "crypter" - __version__ = "0.21" - - __pattern__ = r'http://(?:www\.)?rs-layer.com/directory-' - - __description__ = """RS-Layer.com decrypter plugin""" - __author_name__ = "hzpz" - __author_mail__ = None diff --git a/module/plugins/crypter/RelinkUs.py b/module/plugins/crypter/RelinkUs.py deleted file mode 100644 index 1b120fc77..000000000 --- a/module/plugins/crypter/RelinkUs.py +++ /dev/null @@ -1,263 +0,0 @@ -# -*- coding: utf-8 -*- - -import base64 -import binascii -import re -import os - -from Crypto.Cipher import AES -from module.plugins.Crypter import Crypter - - -class RelinkUs(Crypter): - __name__ = "RelinkUs" - __type__ = "crypter" - __version__ = "3.0" - - __pattern__ = r'http://(?:www\.)?relink.us/(f/|((view|go).php\?id=))(?P<id>.+)' - - __description__ = """Relink.us decrypter plugin""" - __author_name__ = "fragonib" - __author_mail__ = "fragonib[AT]yahoo[DOT]es" - - # Constants - PREFERRED_LINK_SOURCES = ["cnl2", "dlc", "web"] - - OFFLINE_TOKEN = r'<title>Tattooside' - PASSWORD_TOKEN = r'container_password\.php' - PASSWORD_ERROR_ROKEN = r'You have entered an incorrect password' - PASSWORD_SUBMIT_URL = r'http://www\.relink\.us/container_password\.php' - CAPTCHA_TOKEN = r'container_captcha\.php' - CAPTCHA_ERROR_ROKEN = r'You have solved the captcha wrong' - CAPTCHA_IMG_URL = r'http://www\.relink\.us/core/captcha/circlecaptcha\.php' - CAPTCHA_SUBMIT_URL = r'http://www\.relink\.us/container_captcha\.php' - FILE_TITLE_REGEX = r'<th>Title</th><td><i>(.*)</i></td></tr>' - FILE_NOTITLE = r'No title' - - CNL2_FORM_REGEX = r'<form id="cnl_form-(.*?)</form>' - CNL2_FORMINPUT_REGEX = r'<input.*?name="%s".*?value="(.*?)"' - CNL2_JK_KEY = "jk" - CNL2_CRYPTED_KEY = "crypted" - DLC_LINK_REGEX = r'<a href=".*?" class="dlc_button" target="_blank">' - DLC_DOWNLOAD_URL = r'http://www\.relink\.us/download\.php' - WEB_FORWARD_REGEX = r"getFile\('(?P<link>.+)'\)" - WEB_FORWARD_URL = r'http://www\.relink\.us/frame\.php' - WEB_LINK_REGEX = r'<iframe name="Container" height="100%" frameborder="no" width="100%" src="(?P<link>.+)"></iframe>' - - - def setup(self): - self.fileid = None - self.package = None - self.password = None - self.html = None - self.captcha = False - - def decrypt(self, pyfile): - # Init - self.initPackage(pyfile) - - # Request package - self.requestPackage() - - # Check for online - if not self.isOnline(): - self.offline() - - # Check for protection - if self.isPasswordProtected(): - self.unlockPasswordProtection() - self.handleErrors() - - if self.isCaptchaProtected(): - self.captcha = True - self.unlockCaptchaProtection() - self.handleErrors() - - # Get package name and folder - (package_name, folder_name) = self.getPackageInfo() - - # Extract package links - package_links = [] - for sources in self.PREFERRED_LINK_SOURCES: - package_links.extend(self.handleLinkSource(sources)) - if package_links: # use only first source which provides links - break - package_links = set(package_links) - - # Pack - if package_links: - self.packages = [(package_name, package_links, folder_name)] - else: - self.fail('Could not extract any links') - - def initPackage(self, pyfile): - self.fileid = re.match(self.__pattern__, pyfile.url).group('id') - self.package = pyfile.package() - self.password = self.getPassword() - - def requestPackage(self): - self.html = self.load(self.pyfile.url, decode=True) - - def isOnline(self): - if self.OFFLINE_TOKEN in self.html: - self.logDebug("File not found") - return False - return True - - def isPasswordProtected(self): - if self.PASSWORD_TOKEN in self.html: - self.logDebug("Links are password protected") - return True - - def isCaptchaProtected(self): - if self.CAPTCHA_TOKEN in self.html: - self.logDebug("Links are captcha protected") - return True - return False - - def unlockPasswordProtection(self): - self.logDebug("Submitting password [%s] for protected links" % self.password) - passwd_url = self.PASSWORD_SUBMIT_URL + "?id=%s" % self.fileid - passwd_data = {'id': self.fileid, 'password': self.password, 'pw': 'submit'} - self.html = self.load(passwd_url, post=passwd_data, decode=True) - - def unlockCaptchaProtection(self): - self.logDebug("Request user positional captcha resolving") - captcha_img_url = self.CAPTCHA_IMG_URL + "?id=%s" % self.fileid - coords = self.decryptCaptcha(captcha_img_url, forceUser=True, imgtype="png", result_type='positional') - self.logDebug("Captcha resolved, coords [%s]" % str(coords)) - captcha_post_url = self.CAPTCHA_SUBMIT_URL + "?id=%s" % self.fileid - captcha_post_data = {'button.x': coords[0], 'button.y': coords[1], 'captcha': 'submit'} - self.html = self.load(captcha_post_url, post=captcha_post_data, decode=True) - - def getPackageInfo(self): - name = folder = None - - # Try to get info from web - m = re.search(self.FILE_TITLE_REGEX, self.html) - if m is not None: - title = m.group(1).strip() - if not self.FILE_NOTITLE in title: - name = folder = title - self.logDebug("Found name [%s] and folder [%s] in package info" % (name, folder)) - - # Fallback to defaults - if not name or not folder: - name = self.package.name - folder = self.package.folder - self.logDebug("Package info not found, defaulting to pyfile name [%s] and folder [%s]" % (name, folder)) - - # Return package info - return name, folder - - def handleErrors(self): - if self.PASSWORD_ERROR_ROKEN in self.html: - msg = "Incorrect password, please set right password on 'Edit package' form and retry" - self.logDebug(msg) - self.fail(msg) - - if self.captcha: - if self.CAPTCHA_ERROR_ROKEN in self.html: - self.logDebug("Invalid captcha, retrying") - self.invalidCaptcha() - self.retry() - else: - self.correctCaptcha() - - def handleLinkSource(self, source): - if source == 'cnl2': - return self.handleCNL2Links() - elif source == 'dlc': - return self.handleDLCLinks() - elif source == 'web': - return self.handleWEBLinks() - else: - self.fail('Unknown source [%s] (this is probably a bug)' % source) - - def handleCNL2Links(self): - self.logDebug("Search for CNL2 links") - package_links = [] - m = re.search(self.CNL2_FORM_REGEX, self.html, re.DOTALL) - if m is not None: - cnl2_form = m.group(1) - try: - (vcrypted, vjk) = self._getCipherParams(cnl2_form) - for (crypted, jk) in zip(vcrypted, vjk): - package_links.extend(self._getLinks(crypted, jk)) - except: - self.logDebug("Unable to decrypt CNL2 links") - return package_links - - def handleDLCLinks(self): - self.logDebug('Search for DLC links') - package_links = [] - m = re.search(self.DLC_LINK_REGEX, self.html) - if m is not None: - container_url = self.DLC_DOWNLOAD_URL + "?id=%s&dlc=1" % self.fileid - self.logDebug("Downloading DLC container link [%s]" % container_url) - try: - dlc = self.load(container_url) - dlc_filename = self.fileid + ".dlc" - dlc_filepath = os.path.join(self.config['general']['download_folder'], dlc_filename) - f = open(dlc_filepath, "wb") - f.write(dlc) - f.close() - package_links.append(dlc_filepath) - except: - self.logDebug("Unable to download DLC container") - return package_links - - def handleWEBLinks(self): - self.logDebug("Search for WEB links") - package_links = [] - fw_params = re.findall(self.WEB_FORWARD_REGEX, self.html) - self.logDebug("Decrypting %d Web links" % len(fw_params)) - for index, fw_param in enumerate(fw_params): - try: - fw_url = self.WEB_FORWARD_URL + "?%s" % fw_param - self.logDebug("Decrypting Web link %d, %s" % (index + 1, fw_url)) - fw_response = self.load(fw_url, decode=True) - dl_link = re.search(self.WEB_LINK_REGEX, fw_response).group('link') - package_links.append(dl_link) - except Exception, detail: - self.logDebug("Error decrypting Web link %s, %s" % (index, detail)) - self.setWait(4) - self.wait() - return package_links - - def _getCipherParams(self, cnl2_form): - # Get jk - jk_re = self.CNL2_FORMINPUT_REGEX % self.CNL2_JK_KEY - vjk = re.findall(jk_re, cnl2_form, re.IGNORECASE) - - # Get crypted - crypted_re = self.CNL2_FORMINPUT_REGEX % RelinkUs.CNL2_CRYPTED_KEY - vcrypted = re.findall(crypted_re, cnl2_form, re.IGNORECASE) - - # Log and return - self.logDebug("Detected %d crypted blocks" % len(vcrypted)) - return vcrypted, vjk - - def _getLinks(self, crypted, jk): - # Get key - jreturn = self.js.eval("%s f()" % jk) - self.logDebug("JsEngine returns value [%s]" % jreturn) - key = binascii.unhexlify(jreturn) - - # Decode crypted - crypted = base64.standard_b64decode(crypted) - - # Decrypt - Key = key - IV = key - obj = AES.new(Key, AES.MODE_CBC, IV) - text = obj.decrypt(crypted) - - # Extract links - text = text.replace("\x00", "").replace("\r", "") - links = text.split("\n") - links = filter(lambda x: x != "", links) - - # Log and return - self.logDebug("Package has %d links" % len(links)) - return links diff --git a/module/plugins/crypter/SafelinkingNet.py b/module/plugins/crypter/SafelinkingNet.py deleted file mode 100644 index e0c165705..000000000 --- a/module/plugins/crypter/SafelinkingNet.py +++ /dev/null @@ -1,82 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pycurl import FOLLOWLOCATION - -from module.lib.BeautifulSoup import BeautifulSoup - -from module.common.json_layer import json_loads -from module.plugins.Crypter import Crypter -from module.plugins.internal.CaptchaService import SolveMedia - - -class SafelinkingNet(Crypter): - __name__ = "SafelinkingNet" - __type__ = "crypter" - __version__ = "0.1" - - __pattern__ = r'https?://(?:www\.)?safelinking.net/([pd])/\w+' - - __description__ = """Safelinking.net decrypter plugin""" - __author_name__ = "quareevo" - __author_mail__ = "quareevo@arcor.de" - - SOLVEMEDIA_PATTERN = "solvemediaApiKey = '([\w\.\-_]+)';" - - - def decrypt(self, pyfile): - url = pyfile.url - if re.match(self.__pattern__, url).group(1) == "d": - self.req.http.c.setopt(FOLLOWLOCATION, 0) - self.load(url) - m = re.search("^Location: (.+)$", self.req.http.header, re.MULTILINE) - if m: - self.urls = [m.group(1)] - else: - self.fail("Couldn't find forwarded Link") - - else: - password = "" - postData = {"post-protect": "1"} - - self.html = self.load(url) - - if "link-password" in self.html: - password = pyfile.package().password - postData['link-password'] = password - - if "altcaptcha" in self.html: - for _ in xrange(5): - m = re.search(self.SOLVEMEDIA_PATTERN, self.html) - if m: - captchaKey = m.group(1) - captcha = SolveMedia(self) - captchaProvider = "Solvemedia" - else: - self.fail("Error parsing captcha") - - challenge, response = captcha.challenge(captchaKey) - postData['adcopy_challenge'] = challenge - postData['adcopy_response'] = response - - self.html = self.load(url, post=postData) - if "The password you entered was incorrect" in self.html: - self.fail("Incorrect Password") - if not "The CAPTCHA code you entered was wrong" in self.html: - break - - pyfile.package().password = "" - soup = BeautifulSoup(self.html) - scripts = soup.findAll("script") - for s in scripts: - if "d_links" in s.text: - break - m = re.search('d_links":(\[.*?\])', s.text) - if m: - linkDict = json_loads(m.group(1)) - for link in linkDict: - if not "http://" in link['full']: - self.urls.append("https://safelinking.net/d/" + link['full']) - else: - self.urls.append(link['full']) diff --git a/module/plugins/crypter/SecuredIn.py b/module/plugins/crypter/SecuredIn.py deleted file mode 100644 index 0b558c688..000000000 --- a/module/plugins/crypter/SecuredIn.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadCrypter import DeadCrypter - - -class SecuredIn(DeadCrypter): - __name__ = "SecuredIn" - __type__ = "crypter" - __version__ = "0.21" - - __pattern__ = r'http://(?:www\.)?secured\.in/download-[\d]+-[\w]{8}\.html' - - __description__ = """Secured.in decrypter plugin""" - __author_name__ = "mkaay" - __author_mail__ = "mkaay@mkaay.de" diff --git a/module/plugins/crypter/SerienjunkiesOrg.py b/module/plugins/crypter/SerienjunkiesOrg.py deleted file mode 100644 index fe4ee4e36..000000000 --- a/module/plugins/crypter/SerienjunkiesOrg.py +++ /dev/null @@ -1,324 +0,0 @@ -# -*- coding: utf-8 -*- - -import random -import re - -from time import sleep - -from module.lib.BeautifulSoup import BeautifulSoup - -from module.plugins.Crypter import Crypter -from module.unescape import unescape - - -class SerienjunkiesOrg(Crypter): - __name__ = "SerienjunkiesOrg" - __type__ = "crypter" - __version__ = "0.39" - - __pattern__ = r'http://(?:www\.)?(serienjunkies.org|dokujunkies.org)/.*?' - __config__ = [("changeNameSJ", "Packagename;Show;Season;Format;Episode", "Take SJ.org name", "Show"), - ("changeNameDJ", "Packagename;Show;Format;Episode", "Take DJ.org name", "Show"), - ("randomPreferred", "bool", "Randomize Preferred-List", False), - ("hosterListMode", "OnlyOne;OnlyPreferred(One);OnlyPreferred(All);All", - "Use for hosters (if supported)", "All"), - ("hosterList", "str", "Preferred Hoster list (comma separated)", - "RapidshareCom,UploadedTo,NetloadIn,FilefactoryCom,FreakshareNet,FilebaseTo,HotfileCom,DepositfilesCom,EasyshareCom,KickloadCom"), - ("ignoreList", "str", "Ignored Hoster list (comma separated)", "MegauploadCom")] - - __description__ = """Serienjunkies.org decrypter plugin""" - __author_name__ = ("mkaay", "godofdream") - __author_mail__ = ("mkaay@mkaay.de", "soilfiction@gmail.com") - - - def setup(self): - self.multiDL = False - - def getSJSrc(self, url): - src = self.req.load(str(url)) - if "This website is not available in your country" in src: - self.fail("Not available in your country") - if not src.find("Enter Serienjunkies") == -1: - sleep(1) - src = self.req.load(str(url)) - return src - - def handleShow(self, url): - src = self.getSJSrc(url) - soup = BeautifulSoup(src) - packageName = self.pyfile.package().name - if self.getConfig("changeNameSJ") == "Show": - found = unescape(soup.find("h2").find("a").string.split(' –')[0]) - if found: - packageName = found - - nav = soup.find("div", attrs={"id": "scb"}) - - package_links = [] - for a in nav.findAll("a"): - if self.getConfig("changeNameSJ") == "Show": - package_links.append(a['href']) - else: - package_links.append(a['href'] + "#hasName") - if self.getConfig("changeNameSJ") == "Show": - self.packages.append((packageName, package_links, packageName)) - else: - self.core.files.addLinks(package_links, self.pyfile.package().id) - - def handleSeason(self, url): - src = self.getSJSrc(url) - soup = BeautifulSoup(src) - post = soup.find("div", attrs={"class": "post-content"}) - ps = post.findAll("p") - - seasonName = unescape(soup.find("a", attrs={"rel": "bookmark"}).string).replace("–", "-") - groups = {} - gid = -1 - for p in ps: - if re.search("<strong>Sprache|<strong>Format", str(p)): - var = p.findAll("strong") - opts = {"Sprache": "", "Format": ""} - for v in var: - n = unescape(v.string).strip() - n = re.sub(r"^([:]?)(.*?)([:]?)$", r'\2', n) - if n.strip() not in opts: - continue - val = v.nextSibling - if not val: - continue - val = val.replace("|", "").strip() - val = re.sub(r"^([:]?)(.*?)([:]?)$", r'\2', val) - opts[n.strip()] = val.strip() - gid += 1 - groups[gid] = {} - groups[gid]['ep'] = {} - groups[gid]['opts'] = opts - elif re.search("<strong>Download:", str(p)): - parts = str(p).split("<br />") - if re.search("<strong>", parts[0]): - ename = re.search('<strong>(.*?)</strong>', parts[0]).group(1).strip().decode("utf-8").replace( - "–", "-") - groups[gid]['ep'][ename] = {} - parts.remove(parts[0]) - for part in parts: - hostername = re.search(r" \| ([-a-zA-Z0-9]+\.\w+)", part) - if hostername: - hostername = hostername.group(1) - groups[gid]['ep'][ename][hostername] = [] - links = re.findall('href="(.*?)"', part) - for link in links: - groups[gid]['ep'][ename][hostername].append(link + "#hasName") - - links = [] - for g in groups.values(): - for ename in g['ep']: - links.extend(self.getpreferred(g['ep'][ename])) - if self.getConfig("changeNameSJ") == "Episode": - self.packages.append((ename, links, ename)) - links = [] - package = "%s (%s, %s)" % (seasonName, g['opts']['Format'], g['opts']['Sprache']) - if self.getConfig("changeNameSJ") == "Format": - self.packages.append((package, links, package)) - links = [] - if (self.getConfig("changeNameSJ") == "Packagename") or re.search("#hasName", url): - self.core.files.addLinks(links, self.pyfile.package().id) - elif (self.getConfig("changeNameSJ") == "Season") or not re.search("#hasName", url): - self.packages.append((seasonName, links, seasonName)) - - def handleEpisode(self, url): - src = self.getSJSrc(url) - if not src.find( - "Du hast das Download-Limit überschritten! Bitte versuche es später nocheinmal.") == -1: - self.fail(_("Downloadlimit reached")) - else: - soup = BeautifulSoup(src) - form = soup.find("form") - h1 = soup.find("h1") - - if h1.get("class") == "wrap": - captchaTag = soup.find(attrs={"src": re.compile("^/secure/")}) - if not captchaTag: - sleep(5) - self.retry() - - captchaUrl = "http://download.serienjunkies.org" + captchaTag['src'] - result = self.decryptCaptcha(str(captchaUrl), imgtype="png") - sinp = form.find(attrs={"name": "s"}) - - self.req.lastURL = str(url) - sj = self.load(str(url), post={'s': sinp['value'], 'c': result, 'action': "Download"}) - - soup = BeautifulSoup(sj) - rawLinks = soup.findAll(attrs={"action": re.compile("^http://download.serienjunkies.org/")}) - - if not len(rawLinks) > 0: - sleep(1) - self.retry() - return - - self.correctCaptcha() - - links = [] - for link in rawLinks: - frameUrl = link['action'].replace("/go-", "/frame/go-") - links.append(self.handleFrame(frameUrl)) - if re.search("#hasName", url) or ((self.getConfig("changeNameSJ") == "Packagename") and - (self.getConfig("changeNameDJ") == "Packagename")): - self.core.files.addLinks(links, self.pyfile.package().id) - else: - if h1.text[2] == "_": - eName = h1.text[3:] - else: - eName = h1.text - self.packages.append((eName, links, eName)) - - def handleOldStyleLink(self, url): - sj = self.req.load(str(url)) - soup = BeautifulSoup(sj) - form = soup.find("form", attrs={"action": re.compile("^http://serienjunkies.org")}) - captchaTag = form.find(attrs={"src": re.compile("^/safe/secure/")}) - captchaUrl = "http://serienjunkies.org" + captchaTag['src'] - result = self.decryptCaptcha(str(captchaUrl)) - url = form['action'] - sinp = form.find(attrs={"name": "s"}) - - self.req.load(str(url), post={'s': sinp['value'], 'c': result, 'dl.start': "Download"}, cookies=False, - just_header=True) - decrypted = self.req.lastEffectiveURL - if decrypted == str(url): - self.retry() - self.core.files.addLinks([decrypted], self.pyfile.package().id) - - def handleFrame(self, url): - self.req.load(str(url)) - return self.req.lastEffectiveURL - - def handleShowDJ(self, url): - src = self.getSJSrc(url) - soup = BeautifulSoup(src) - post = soup.find("div", attrs={"id": "page_post"}) - ps = post.findAll("p") - found = unescape(soup.find("h2").find("a").string.split(' –')[0]) - if found: - seasonName = found - - groups = {} - gid = -1 - for p in ps: - if re.search("<strong>Sprache|<strong>Format", str(p)): - var = p.findAll("strong") - opts = {"Sprache": "", "Format": ""} - for v in var: - n = unescape(v.string).strip() - n = re.sub(r"^([:]?)(.*?)([:]?)$", r'\2', n) - if n.strip() not in opts: - continue - val = v.nextSibling - if not val: - continue - val = val.replace("|", "").strip() - val = re.sub(r"^([:]?)(.*?)([:]?)$", r'\2', val) - opts[n.strip()] = val.strip() - gid += 1 - groups[gid] = {} - groups[gid]['ep'] = {} - groups[gid]['opts'] = opts - elif re.search("<strong>Download:", str(p)): - parts = str(p).split("<br />") - if re.search("<strong>", parts[0]): - ename = re.search('<strong>(.*?)</strong>', parts[0]).group(1).strip().decode("utf-8").replace( - "–", "-") - groups[gid]['ep'][ename] = {} - parts.remove(parts[0]) - for part in parts: - hostername = re.search(r" \| ([-a-zA-Z0-9]+\.\w+)", part) - if hostername: - hostername = hostername.group(1) - groups[gid]['ep'][ename][hostername] = [] - links = re.findall('href="(.*?)"', part) - for link in links: - groups[gid]['ep'][ename][hostername].append(link + "#hasName") - - links = [] - for g in groups.values(): - for ename in g['ep']: - links.extend(self.getpreferred(g['ep'][ename])) - if self.getConfig("changeNameDJ") == "Episode": - self.packages.append((ename, links, ename)) - links = [] - package = "%s (%s, %s)" % (seasonName, g['opts']['Format'], g['opts']['Sprache']) - if self.getConfig("changeNameDJ") == "Format": - self.packages.append((package, links, package)) - links = [] - if (self.getConfig("changeNameDJ") == "Packagename") or re.search("#hasName", url): - self.core.files.addLinks(links, self.pyfile.package().id) - elif (self.getConfig("changeNameDJ") == "Show") or not re.search("#hasName", url): - self.packages.append((seasonName, links, seasonName)) - - def handleCategoryDJ(self, url): - package_links = [] - src = self.getSJSrc(url) - soup = BeautifulSoup(src) - content = soup.find("div", attrs={"id": "content"}) - for a in content.findAll("a", attrs={"rel": "bookmark"}): - package_links.append(a['href']) - self.core.files.addLinks(package_links, self.pyfile.package().id) - - def decrypt(self, pyfile): - showPattern = re.compile("^http://serienjunkies.org/serie/(.*)/$") - seasonPattern = re.compile("^http://serienjunkies.org/.*?/(.*)/$") - episodePattern = re.compile("^http://download.serienjunkies.org/f-.*?.html(#hasName)?$") - oldStyleLink = re.compile("^http://serienjunkies.org/safe/(.*)$") - categoryPatternDJ = re.compile("^http://dokujunkies.org/.*?(.*)$") - showPatternDJ = re.compile(r"^http://dokujunkies.org/.*?/(.*)\.html(#hasName)?$") - framePattern = re.compile("^http://download.(serienjunkies.org|dokujunkies.org)/frame/go-.*?/$") - url = pyfile.url - if framePattern.match(url): - self.packages.append((pyfile.package().name, [self.handleFrame(url)], pyfile.package().name)) - elif episodePattern.match(url): - self.handleEpisode(url) - elif oldStyleLink.match(url): - self.handleOldStyleLink(url) - elif showPattern.match(url): - self.handleShow(url) - elif showPatternDJ.match(url): - self.handleShowDJ(url) - elif seasonPattern.match(url): - self.handleSeason(url) - elif categoryPatternDJ.match(url): - self.handleCategoryDJ(url) - - #selects the preferred hoster, after that selects any hoster (ignoring the one to ignore) - def getpreferred(self, hosterlist): - - result = [] - preferredList = self.getConfig("hosterList").strip().lower().replace( - '|', ',').replace('.', '').replace(';', ',').split(',') - if (self.getConfig("randomPreferred") is True) and ( - self.getConfig("hosterListMode") in ["OnlyOne", "OnlyPreferred(One)"]): - random.shuffle(preferredList) - # we don't want hosters be read two times - hosterlist2 = hosterlist.copy() - - for preferred in preferredList: - for Hoster in hosterlist: - if preferred == Hoster.lower().replace('.', ''): - for Part in hosterlist[Hoster]: - self.logDebug("selected " + Part) - result.append(str(Part)) - del (hosterlist2[Hoster]) - if self.getConfig("hosterListMode") in ["OnlyOne", "OnlyPreferred(One)"]: - return result - - ignorelist = self.getConfig("ignoreList").strip().lower().replace( - '|', ',').replace('.', '').replace(';', ',').split(',') - if self.getConfig('hosterListMode') in ["OnlyOne", "All"]: - for Hoster in hosterlist2: - if Hoster.strip().lower().replace('.', '') not in ignorelist: - for Part in hosterlist2[Hoster]: - self.logDebug("selected2 " + Part) - result.append(str(Part)) - - if self.getConfig('hosterListMode') == "OnlyOne": - return result - return result diff --git a/module/plugins/crypter/ShareLinksBiz.py b/module/plugins/crypter/ShareLinksBiz.py deleted file mode 100644 index 87bb16a50..000000000 --- a/module/plugins/crypter/ShareLinksBiz.py +++ /dev/null @@ -1,269 +0,0 @@ -# -*- coding: utf-8 -*- - -import base64 -import binascii -import re - -from Crypto.Cipher import AES -from module.plugins.Crypter import Crypter - - -class ShareLinksBiz(Crypter): - __name__ = "ShareLinksBiz" - __type__ = "crypter" - __version__ = "1.13" - - __pattern__ = r'http://(?:www\.)?(share-links|s2l)\.biz/(?P<ID>_?\w+)' - - __description__ = """Share-Links.biz decrypter plugin""" - __author_name__ = "fragonib" - __author_mail__ = "fragonib[AT]yahoo[DOT]es" - - - def setup(self): - self.baseUrl = None - self.fileId = None - self.package = None - self.html = None - self.captcha = False - - def decrypt(self, pyfile): - # Init - self.initFile(pyfile) - - # Request package - url = self.baseUrl + '/' + self.fileId - self.html = self.load(url, decode=True) - - # Unblock server (load all images) - self.unblockServer() - - # Check for protection - if self.isPasswordProtected(): - self.unlockPasswordProtection() - self.handleErrors() - - if self.isCaptchaProtected(): - self.captcha = True - self.unlockCaptchaProtection() - self.handleErrors() - - # Extract package links - package_links = [] - package_links.extend(self.handleWebLinks()) - package_links.extend(self.handleContainers()) - package_links.extend(self.handleCNL2()) - package_links = set(package_links) - - # Get package info - package_name, package_folder = self.getPackageInfo() - - # Pack - self.packages = [(package_name, package_links, package_folder)] - - def initFile(self, pyfile): - url = pyfile.url - if 's2l.biz' in url: - url = self.load(url, just_header=True)['location'] - self.baseUrl = "http://www.%s.biz" % re.match(self.__pattern__, url).group(1) - self.fileId = re.match(self.__pattern__, url).group('ID') - self.package = pyfile.package() - - def isOnline(self): - if "No usable content was found" in self.html: - self.logDebug("File not found") - return False - return True - - def isPasswordProtected(self): - if re.search(r'''<form.*?id="passwordForm".*?>''', self.html): - self.logDebug("Links are protected") - return True - return False - - def isCaptchaProtected(self): - if '<map id="captchamap"' in self.html: - self.logDebug("Links are captcha protected") - return True - return False - - def unblockServer(self): - imgs = re.findall(r"(/template/images/.*?\.gif)", self.html) - for img in imgs: - self.load(self.baseUrl + img) - - def unlockPasswordProtection(self): - password = self.getPassword() - self.logDebug("Submitting password [%s] for protected links" % password) - post = {"password": password, 'login': 'Submit form'} - url = self.baseUrl + '/' + self.fileId - self.html = self.load(url, post=post, decode=True) - - def unlockCaptchaProtection(self): - # Get captcha map - captchaMap = self._getCaptchaMap() - self.logDebug("Captcha map with [%d] positions" % len(captchaMap.keys())) - - # Request user for captcha coords - m = re.search(r'<img src="/captcha.gif\?d=(.*?)&PHPSESSID=(.*?)&legend=1"', self.html) - captchaUrl = self.baseUrl + '/captcha.gif?d=%s&PHPSESSID=%s' % (m.group(1), m.group(2)) - self.logDebug("Waiting user for correct position") - coords = self.decryptCaptcha(captchaUrl, forceUser=True, imgtype="gif", result_type='positional') - self.logDebug("Captcha resolved, coords [%s]" % str(coords)) - - # Resolve captcha - href = self._resolveCoords(coords, captchaMap) - if href is None: - self.logDebug("Invalid captcha resolving, retrying") - self.invalidCaptcha() - self.setWait(5, False) - self.wait() - self.retry() - url = self.baseUrl + href - self.html = self.load(url, decode=True) - - def _getCaptchaMap(self): - mapp = {} - for m in re.finditer(r'<area shape="rect" coords="(.*?)" href="(.*?)"', self.html): - rect = eval('(' + m.group(1) + ')') - href = m.group(2) - mapp[rect] = href - return mapp - - def _resolveCoords(self, coords, captchaMap): - x, y = coords - for rect, href in captchaMap.items(): - x1, y1, x2, y2 = rect - if (x >= x1 and x <= x2) and (y >= y1 and y <= y2): - return href - - def handleErrors(self): - if "The inserted password was wrong" in self.html: - self.logDebug("Incorrect password, please set right password on 'Edit package' form and retry") - self.fail("Incorrect password, please set right password on 'Edit package' form and retry") - - if self.captcha: - if "Your choice was wrong" in self.html: - self.logDebug("Invalid captcha, retrying") - self.invalidCaptcha() - self.setWait(5) - self.wait() - self.retry() - else: - self.correctCaptcha() - - def getPackageInfo(self): - name = folder = None - - # Extract from web package header - title_re = r'<h2><img.*?/>(.*)</h2>' - m = re.search(title_re, self.html, re.DOTALL) - if m is not None: - title = m.group(1).strip() - if 'unnamed' not in title: - name = folder = title - self.logDebug("Found name [%s] and folder [%s] in package info" % (name, folder)) - - # Fallback to defaults - if not name or not folder: - name = self.package.name - folder = self.package.folder - self.logDebug("Package info not found, defaulting to pyfile name [%s] and folder [%s]" % (name, folder)) - - # Return package info - return name, folder - - def handleWebLinks(self): - package_links = [] - self.logDebug("Handling Web links") - - #@TODO: Gather paginated web links - pattern = r"javascript:_get\('(.*?)', \d+, ''\)" - ids = re.findall(pattern, self.html) - self.logDebug("Decrypting %d Web links" % len(ids)) - for i, ID in enumerate(ids): - try: - self.logDebug("Decrypting Web link %d, [%s]" % (i + 1, ID)) - dwLink = self.baseUrl + "/get/lnk/" + ID - response = self.load(dwLink) - code = re.search(r'frm/(\d+)', response).group(1) - fwLink = self.baseUrl + "/get/frm/" + code - response = self.load(fwLink) - jscode = re.search(r'<script language="javascript">\s*eval\((.*)\)\s*</script>', response, - re.DOTALL).group(1) - jscode = self.js.eval("f = %s" % jscode) - jslauncher = "window=''; parent={frames:{Main:{location:{href:''}}},location:''}; %s; parent.frames.Main.location.href" - dlLink = self.js.eval(jslauncher % jscode) - self.logDebug("JsEngine returns value [%s] for redirection link" % dlLink) - package_links.append(dlLink) - except Exception, detail: - self.logDebug("Error decrypting Web link [%s], %s" % (ID, detail)) - return package_links - - def handleContainers(self): - package_links = [] - self.logDebug("Handling Container links") - - pattern = r"javascript:_get\('(.*?)', 0, '(rsdf|ccf|dlc)'\)" - containersLinks = re.findall(pattern, self.html) - self.logDebug("Decrypting %d Container links" % len(containersLinks)) - for containerLink in containersLinks: - link = "%s/get/%s/%s" % (self.baseUrl, containerLink[1], containerLink[0]) - package_links.append(link) - return package_links - - def handleCNL2(self): - package_links = [] - self.logDebug("Handling CNL2 links") - - if '/lib/cnl2/ClicknLoad.swf' in self.html: - try: - (crypted, jk) = self._getCipherParams() - package_links.extend(self._getLinks(crypted, jk)) - except: - self.fail("Unable to decrypt CNL2 links") - return package_links - - def _getCipherParams(self): - # Request CNL2 - code = re.search(r'ClicknLoad.swf\?code=(.*?)"', self.html).group(1) - url = "%s/get/cnl2/%s" % (self.baseUrl, code) - response = self.load(url) - params = response.split(";;") - - # Get jk - strlist = list(base64.standard_b64decode(params[1])) - strlist.reverse() - jk = ''.join(strlist) - - # Get crypted - strlist = list(base64.standard_b64decode(params[2])) - strlist.reverse() - crypted = ''.join(strlist) - - # Log and return - return crypted, jk - - def _getLinks(self, crypted, jk): - # Get key - jreturn = self.js.eval("%s f()" % jk) - self.logDebug("JsEngine returns value [%s]" % jreturn) - key = binascii.unhexlify(jreturn) - - # Decode crypted - crypted = base64.standard_b64decode(crypted) - - # Decrypt - Key = key - IV = key - obj = AES.new(Key, AES.MODE_CBC, IV) - text = obj.decrypt(crypted) - - # Extract links - text = text.replace("\x00", "").replace("\r", "") - links = text.split("\n") - links = filter(lambda x: x != "", links) - - # Log and return - self.logDebug("Block has %d links" % len(links)) - return links diff --git a/module/plugins/crypter/ShareRapidComFolder.py b/module/plugins/crypter/ShareRapidComFolder.py deleted file mode 100644 index fd12ff96f..000000000 --- a/module/plugins/crypter/ShareRapidComFolder.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class ShareRapidComFolder(SimpleCrypter): - __name__ = "ShareRapidComFolder" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?((share(-?rapid\.(biz|com|cz|info|eu|net|org|pl|sk)|-(central|credit|free|net)\.cz|-ms\.net)|(s-?rapid|rapids)\.(cz|sk))|(e-stahuj|mediatack|premium-rapidshare|rapidshare-premium|qiuck)\.cz|kadzet\.com|stahuj-zdarma\.eu|strelci\.net|universal-share\.com)/(slozka/.+)' - - __description__ = """Share-Rapid.com folder decrypter plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - LINK_PATTERN = r'<td class="soubor"[^>]*><a href="([^"]+)">' diff --git a/module/plugins/crypter/SpeedLoadOrgFolder.py b/module/plugins/crypter/SpeedLoadOrgFolder.py deleted file mode 100644 index 092d3efe4..000000000 --- a/module/plugins/crypter/SpeedLoadOrgFolder.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadCrypter import DeadCrypter - - -class SpeedLoadOrgFolder(DeadCrypter): - __name__ = "SpeedLoadOrgFolder" - __type__ = "crypter" - __version__ = "0.3" - - __pattern__ = r'http://(?:www\.)?speedload\.org/(\d+~f$|folder/\d+/)' - - __description__ = """Speedload decrypter plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" diff --git a/module/plugins/crypter/StealthTo.py b/module/plugins/crypter/StealthTo.py deleted file mode 100644 index 402724e89..000000000 --- a/module/plugins/crypter/StealthTo.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadCrypter import DeadCrypter - - -class StealthTo(DeadCrypter): - __name__ = "StealthTo" - __type__ = "crypter" - __version__ = "0.2" - - __pattern__ = r'http://(?:www\.)?stealth\.to/folder/.+' - - __description__ = """Stealth.to decrypter plugin""" - __author_name__ = "spoob" - __author_mail__ = "spoob@pyload.org" diff --git a/module/plugins/crypter/TnyCz.py b/module/plugins/crypter/TnyCz.py deleted file mode 100644 index 3ae2c5ed2..000000000 --- a/module/plugins/crypter/TnyCz.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - -import re - - -class TnyCz(SimpleCrypter): - __name__ = "TnyCz" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?tny\.cz/\w+' - - __description__ = """Tny.cz decrypter plugin""" - __author_name__ = "Walter Purcaro" - __author_mail__ = "vuolter@gmail.com" - - TITLE_PATTERN = r'<title>(?P<title>.+) - .+</title>' - - - def getLinks(self): - m = re.search(r'<a id=\'save_paste\' href="(.+save\.php\?hash=.+)">', self.html) - return re.findall(".+", self.load(m.group(1), decode=True)) if m else None diff --git a/module/plugins/crypter/TrailerzoneInfo.py b/module/plugins/crypter/TrailerzoneInfo.py deleted file mode 100644 index 42e45a819..000000000 --- a/module/plugins/crypter/TrailerzoneInfo.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadCrypter import DeadCrypter - - -class TrailerzoneInfo(DeadCrypter): - __name__ = "TrailerzoneInfo" - __type__ = "crypter" - __version__ = "0.03" - - __pattern__ = r'http://(?:www\.)?trailerzone.info/.*?' - - __description__ = """TrailerZone.info decrypter plugin""" - __author_name__ = "godofdream" - __author_mail__ = "soilfiction@gmail.com" diff --git a/module/plugins/crypter/TurbobitNetFolder.py b/module/plugins/crypter/TurbobitNetFolder.py deleted file mode 100644 index 0810e0ed1..000000000 --- a/module/plugins/crypter/TurbobitNetFolder.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleCrypter import SimpleCrypter -from module.common.json_layer import json_loads - - -class TurbobitNetFolder(SimpleCrypter): - __name__ = "TurbobitNetFolder" - __type__ = "crypter" - __version__ = "0.03" - - __pattern__ = r'http://(?:www\.)?turbobit\.net/download/folder/(?P<ID>\w+)' - - __description__ = """Turbobit.net folder decrypter plugin""" - __author_name__ = ("stickell", "Walter Purcaro") - __author_mail__ = ("l.stickell@yahoo.it", "vuolter@gmail.com") - - TITLE_PATTERN = r"src='/js/lib/grid/icon/folder.png'> <span>(?P<title>.+?)</span>" - - - def _getLinks(self, id, page=1): - gridFile = self.load("http://turbobit.net/downloadfolder/gridFile", - get={"rootId": id, "rows": 200, "page": page}, decode=True) - grid = json_loads(gridFile) - - if grid['rows']: - for i in grid['rows']: - yield i['id'] - for id in self._getLinks(id, page + 1): - yield id - else: - return - - def getLinks(self): - id = re.match(self.__pattern__, self.pyfile.url).group("ID") - fixurl = lambda id: "http://turbobit.net/%s.html" % id - return map(fixurl, self._getLinks(id)) diff --git a/module/plugins/crypter/TusfilesNetFolder.py b/module/plugins/crypter/TusfilesNetFolder.py deleted file mode 100644 index f51c2b715..000000000 --- a/module/plugins/crypter/TusfilesNetFolder.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- - -import math -import re -from urlparse import urljoin - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class TusfilesNetFolder(SimpleCrypter): - __name__ = "TusfilesNetFolder" - __type__ = "crypter" - __version__ = "0.02" - - __pattern__ = r'https?://(?:www\.)?tusfiles\.net/go/(?P<ID>\w+)/?' - - __description__ = """Tusfiles.net folder decrypter plugin""" - __author_name__ = ("Walter Purcaro", "stickell") - __author_mail__ = ("vuolter@gmail.com", "l.stickell@yahoo.it") - - LINK_PATTERN = r'<TD align=left><a href="(.*?)">' - TITLE_PATTERN = r'<Title>.*?\: (?P<title>.+) folder</Title>' - PAGES_PATTERN = r'>\((?P<pages>\d+) \w+\)<' - - URL_REPLACEMENTS = [(__pattern__, r'https://www.tusfiles.net/go/\g<ID>/')] - - - def loadPage(self, page_n): - return self.load(urljoin(self.pyfile.url, str(page_n)), decode=True) - - def handleMultiPages(self): - pages = re.search(self.PAGES_PATTERN, self.html) - if pages: - pages = int(math.ceil(int(pages.group('pages')) / 25.0)) - else: - return - - for p in xrange(2, pages + 1): - self.html = self.loadPage(p) - self.package_links += self.getLinks() diff --git a/module/plugins/crypter/UlozToFolder.py b/module/plugins/crypter/UlozToFolder.py deleted file mode 100644 index 06d30099c..000000000 --- a/module/plugins/crypter/UlozToFolder.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from module.plugins.Crypter import Crypter - - -class UlozToFolder(Crypter): - __name__ = "UlozToFolder" - __type__ = "crypter" - __version__ = "0.2" - - __pattern__ = r'http://(?:www\.)?(uloz\.to|ulozto\.(cz|sk|net)|bagruj.cz|zachowajto.pl)/(m|soubory)/.*' - - __description__ = """Uloz.to folder decrypter plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FOLDER_PATTERN = r'<ul class="profile_files">(.*?)</ul>' - LINK_PATTERN = r'<br /><a href="/([^"]+)">[^<]+</a>' - NEXT_PAGE_PATTERN = r'<a class="next " href="/([^"]+)"> </a>' - - - def decrypt(self, pyfile): - html = self.load(pyfile.url) - - new_links = [] - for i in xrange(1, 100): - self.logInfo("Fetching links from page %i" % i) - m = re.search(self.FOLDER_PATTERN, html, re.DOTALL) - if m is None: - self.fail("Parse error (FOLDER)") - - new_links.extend(re.findall(self.LINK_PATTERN, m.group(1))) - m = re.search(self.NEXT_PAGE_PATTERN, html) - if m: - html = self.load("http://ulozto.net/" + m.group(1)) - else: - break - else: - self.logInfo("Limit of 99 pages reached, aborting") - - if new_links: - self.urls = [map(lambda s: "http://ulozto.net/%s" % s, new_links)] - else: - self.fail('Could not extract any links') diff --git a/module/plugins/crypter/UploadableChFolder.py b/module/plugins/crypter/UploadableChFolder.py deleted file mode 100644 index b76076531..000000000 --- a/module/plugins/crypter/UploadableChFolder.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class UploadableChFolder(SimpleCrypter): - __name__ = "UploadableChFolder" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?uploadable\.ch/list/\w+' - - __description__ = """ Uploadable.ch folder decrypter plugin """ - __author_name__ = ("guidobelix", "Walter Purcaro") - __author_mail__ = ("guidobelix@hotmail.it", "vuolter@gmail.com") - - - LINK_PATTERN = r'"(.+?)" class="icon_zipfile">' - TITLE_PATTERN = r'<div class="folder"><span> </span>(?P<title>.+?)</div>' - OFFLINE_PATTERN = r'We are sorry... The URL you entered cannot be found on the server.' - TEMP_OFFLINE_PATTERN = r'<div class="icon_err">' diff --git a/module/plugins/crypter/UploadedToFolder.py b/module/plugins/crypter/UploadedToFolder.py deleted file mode 100644 index 068412062..000000000 --- a/module/plugins/crypter/UploadedToFolder.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleCrypter import SimpleCrypter - - -class UploadedToFolder(SimpleCrypter): - __name__ = "UploadedToFolder" - __type__ = "crypter" - __version__ = "0.3" - - __pattern__ = r'http://(?:www\.)?(uploaded|ul)\.(to|net)/(f|folder|list)/(?P<id>\w+)' - - __description__ = """UploadedTo decrypter plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - PLAIN_PATTERN = r'<small class="date"><a href="(?P<plain>[\w/]+)" onclick=' - TITLE_PATTERN = r'<title>(?P<title>[^<]+)</title>' - - - def decrypt(self, pyfile): - self.html = self.load(pyfile.url) - - package_name, folder_name = self.getPackageNameAndFolder() - - m = re.search(self.PLAIN_PATTERN, self.html) - if m: - plain_link = 'http://uploaded.net/' + m.group('plain') - else: - self.fail('Parse error - Unable to find plain url list') - - self.html = self.load(plain_link) - package_links = self.html.split('\n')[:-1] - self.logDebug('Package has %d links' % len(package_links)) - - self.packages = [(package_name, package_links, folder_name)] diff --git a/module/plugins/crypter/WiiReloadedOrg.py b/module/plugins/crypter/WiiReloadedOrg.py deleted file mode 100644 index cb02fbd2d..000000000 --- a/module/plugins/crypter/WiiReloadedOrg.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadCrypter import DeadCrypter - - -class WiiReloadedOrg(DeadCrypter): - __name__ = "WiiReloadedOrg" - __type__ = "crypter" - __version__ = "0.11" - - __pattern__ = r'http://(?:www\.)?wii-reloaded\.org/protect/get\.php\?i=.+' - - __description__ = """Wii-Reloaded.org decrypter plugin""" - __author_name__ = "hzpz" - __author_mail__ = None diff --git a/module/plugins/crypter/XupPl.py b/module/plugins/crypter/XupPl.py deleted file mode 100644 index 5e5f511a8..000000000 --- a/module/plugins/crypter/XupPl.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Crypter import Crypter - - -class XupPl(Crypter): - __name__ = "XupPl" - __type__ = "crypter" - __version__ = "0.1" - - __pattern__ = r'https?://(?:[^/]*\.)?xup\.pl/.*' - - __description__ = """Xup.pl decrypter plugin""" - __author_name__ = "z00nx" - __author_mail__ = "z00nx0@gmail.com" - - - def decrypt(self, pyfile): - header = self.load(pyfile.url, just_header=True) - if 'location' in header: - self.urls = [header['location']] - else: - self.fail('Unable to find link') diff --git a/module/plugins/crypter/YoutubeBatch.py b/module/plugins/crypter/YoutubeBatch.py deleted file mode 100644 index 158dfeee9..000000000 --- a/module/plugins/crypter/YoutubeBatch.py +++ /dev/null @@ -1,138 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urlparse import urljoin - -from module.common.json_layer import json_loads -from module.plugins.Crypter import Crypter -from module.utils import safe_join - -API_URL = "AIzaSyCKnWLNlkX-L4oD1aEzqqhRw1zczeD6_k0" - - -class YoutubeBatch(Crypter): - __name__ = "YoutubeBatch" - __type__ = "crypter" - __version__ = "1.00" - - __pattern__ = r'https?://(?:www\.|m\.)?youtube\.com/(?P<TYPE>user|playlist|view_play_list)(/|.*?[?&](?:list|p)=)(?P<ID>[\w-]+)' - __config__ = [("likes", "bool", "Grab user (channel) liked videos", False), - ("favorites", "bool", "Grab user (channel) favorite videos", False), - ("uploads", "bool", "Grab channel unplaylisted videos", True)] - - __description__ = """Youtube.com channel & playlist decrypter plugin""" - __author_name__ = "Walter Purcaro" - __author_mail__ = "vuolter@gmail.com" - - - def api_response(self, ref, req): - req.update({"key": API_KEY}) - url = urljoin("https://www.googleapis.com/youtube/v3/", ref) - page = self.load(url, get=req) - return json_loads(page) - - def getChannel(self, user): - channels = self.api_response("channels", {"part": "id,snippet,contentDetails", "forUsername": user, "maxResults": "50"}) - if channels['items']: - channel = channels['items'][0] - return {"id": channel['id'], - "title": channel['snippet']['title'], - "relatedPlaylists": channel['contentDetails']['relatedPlaylists'], - "user": user} # One lone channel for user? - - def getPlaylist(self, p_id): - playlists = self.api_response("playlists", {"part": "snippet", "id": p_id}) - if playlists['items']: - playlist = playlists['items'][0] - return {"id": p_id, - "title": playlist['snippet']['title'], - "channelId": playlist['snippet']['channelId'], - "channelTitle": playlist['snippet']['channelTitle']} - - def _getPlaylists(self, id, token=None): - req = {"part": "id", "maxResults": "50", "channelId": id} - if token: - req.update({"pageToken": token}) - - playlists = self.api_response("playlists", req) - - for playlist in playlists['items']: - yield playlist['id'] - - if "nextPageToken" in playlists: - for item in self._getPlaylists(id, playlists['nextPageToken']): - yield item - - def getPlaylists(self, ch_id): - return map(self.getPlaylist, self._getPlaylists(ch_id)) - - def _getVideosId(self, id, token=None): - req = {"part": "contentDetails", "maxResults": "50", "playlistId": id} - if token: - req.update({"pageToken": token}) - - playlist = self.api_response("playlistItems", req) - - for item in playlist['items']: - yield item['contentDetails']['videoId'] - - if "nextPageToken" in playlist: - for item in self._getVideosId(id, playlist['nextPageToken']): - yield item - - def getVideosId(self, p_id): - return list(self._getVideosId(p_id)) - - def decrypt(self, pyfile): - m = re.match(self.__pattern__, pyfile.url) - m_id = m.group("ID") - m_type = m.group("TYPE") - - if m_type == "user": - self.logDebug("Url recognized as Channel") - user = m_id - channel = self.getChannel(user) - - if channel: - playlists = self.getPlaylists(channel['id']) - self.logDebug("%s playlist\s found on channel \"%s\"" % (len(playlists), channel['title'])) - - relatedplaylist = {p_name: self.getPlaylist(p_id) for p_name, p_id in channel['relatedPlaylists'].iteritems()} - self.logDebug("Channel's related playlists found = %s" % relatedplaylist.keys()) - - relatedplaylist['uploads']['title'] = "Unplaylisted videos" - relatedplaylist['uploads']['checkDups'] = True #: checkDups flag - - for p_name, p_data in relatedplaylist.iteritems(): - if self.getConfig(p_name): - p_data['title'] += " of " + user - playlists.append(p_data) - else: - playlists = [] - else: - self.logDebug("Url recognized as Playlist") - playlists = [self.getPlaylist(m_id)] - - if not playlists: - self.fail("No playlist available") - - addedvideos = [] - urlize = lambda x: "https://www.youtube.com/watch?v=" + x - for p in playlists: - p_name = p['title'] - p_videos = self.getVideosId(p['id']) - p_folder = safe_join(self.config['general']['download_folder'], p['channelTitle'], p_name) - self.logDebug("%s video\s found on playlist \"%s\"" % (len(p_videos), p_name)) - - if not p_videos: - continue - elif "checkDups" in p: - p_urls = [urlize(v_id) for v_id in p_videos if v_id not in addedvideos] - self.logDebug("%s video\s available on playlist \"%s\" after duplicates cleanup" % (len(p_urls), p_name)) - else: - p_urls = map(urlize, p_videos) - - self.packages.append((p_name, p_urls, p_folder)) #: folder is NOT recognized by pyload 0.4.9! - - addedvideos.extend(p_videos) diff --git a/module/plugins/hooks/AlldebridCom.py b/module/plugins/hooks/AlldebridCom.py deleted file mode 100644 index 906875a69..000000000 --- a/module/plugins/hooks/AlldebridCom.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.network.RequestFactory import getURL -from module.plugins.internal.MultiHoster import MultiHoster - - -class AlldebridCom(MultiHoster): - __name__ = "AlldebridCom" - __type__ = "hook" - __version__ = "0.13" - - __config__ = [("activated", "bool", "Activated", False), - ("https", "bool", "Enable HTTPS", False), - ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), - ("hosterList", "str", "Hoster list (comma separated)", ""), - ("unloadFailing", "bool", "Revert to stanard download if download fails", False), - ("interval", "int", "Reload interval in hours (0 to disable)", 24)] - - __description__ = """Alldebrid.com hook plugin""" - __author_name__ = "Andy Voigt" - __author_mail__ = "spamsales@online.de" - - - def getHoster(self): - https = "https" if self.getConfig("https") else "http" - page = getURL(https + "://www.alldebrid.com/api.php?action=get_host").replace("\"", "").strip() - - return [x.strip() for x in page.split(",") if x.strip()] diff --git a/module/plugins/hooks/BypassCaptcha.py b/module/plugins/hooks/BypassCaptcha.py deleted file mode 100644 index d62de24a7..000000000 --- a/module/plugins/hooks/BypassCaptcha.py +++ /dev/null @@ -1,127 +0,0 @@ -# -*- coding: utf-8 -*- - -from pycurl import FORM_FILE, LOW_SPEED_TIME -from thread import start_new_thread - -from module.network.HTTPRequest import BadHeader -from module.network.RequestFactory import getURL, getRequest -from module.plugins.Hook import Hook - - -class BypassCaptchaException(Exception): - - def __init__(self, err): - self.err = err - - def getCode(self): - return self.err - - def __str__(self): - return "<BypassCaptchaException %s>" % self.err - - def __repr__(self): - return "<BypassCaptchaException %s>" % self.err - - -class BypassCaptcha(Hook): - __name__ = "BypassCaptcha" - __type__ = "hook" - __version__ = "0.04" - - __config__ = [("activated", "bool", "Activated", False), - ("force", "bool", "Force BC even if client is connected", False), - ("passkey", "password", "Passkey", "")] - - __description__ = """Send captchas to BypassCaptcha.com""" - __author_name__ = ("RaNaN", "Godofdream", "zoidberg") - __author_mail__ = ("RaNaN@pyload.org", "soilfcition@gmail.com", "zoidberg@mujmail.cz") - - PYLOAD_KEY = "4f771155b640970d5607f919a615bdefc67e7d32" - - SUBMIT_URL = "http://bypasscaptcha.com/upload.php" - RESPOND_URL = "http://bypasscaptcha.com/check_value.php" - GETCREDITS_URL = "http://bypasscaptcha.com/ex_left.php" - - - def setup(self): - self.info = {} - - def getCredits(self): - response = getURL(self.GETCREDITS_URL, post={"key": self.getConfig("passkey")}) - - data = dict([x.split(' ', 1) for x in response.splitlines()]) - return int(data['Left']) - - def submit(self, captcha, captchaType="file", match=None): - req = getRequest() - - #raise timeout threshold - req.c.setopt(LOW_SPEED_TIME, 80) - - try: - response = req.load(self.SUBMIT_URL, - post={"vendor_key": self.PYLOAD_KEY, - "key": self.getConfig("passkey"), - "gen_task_id": "1", - "file": (FORM_FILE, captcha)}, - multipart=True) - finally: - req.close() - - data = dict([x.split(' ', 1) for x in response.splitlines()]) - if not data or "Value" not in data: - raise BypassCaptchaException(response) - - result = data['Value'] - ticket = data['TaskId'] - self.logDebug("result %s : %s" % (ticket, result)) - - return ticket, result - - def respond(self, ticket, success): - try: - response = getURL(self.RESPOND_URL, post={"task_id": ticket, "key": self.getConfig("passkey"), - "cv": 1 if success else 0}) - except BadHeader, e: - self.logError("Could not send response.", str(e)) - - def newCaptchaTask(self, task): - if "service" in task.data: - return False - - if not task.isTextual(): - return False - - if not self.getConfig("passkey"): - return False - - if self.core.isClientConnected() and not self.getConfig("force"): - return False - - if self.getCredits() > 0: - task.handler.append(self) - task.data['service'] = self.__name__ - task.setWaiting(100) - start_new_thread(self.processCaptcha, (task,)) - - else: - self.logInfo("Your %s account has not enough credits" % self.__name__) - - def captchaCorrect(self, task): - if task.data['service'] == self.__name__ and "ticket" in task.data: - self.respond(task.data['ticket'], True) - - def captchaInvalid(self, task): - if task.data['service'] == self.__name__ and "ticket" in task.data: - self.respond(task.data['ticket'], False) - - def processCaptcha(self, task): - c = task.captchaFile - try: - ticket, result = self.submit(c) - except BypassCaptchaException, e: - task.error = e.getCode() - return - - task.data['ticket'] = ticket - task.setResult(result) diff --git a/module/plugins/hooks/Captcha9kw.py b/module/plugins/hooks/Captcha9kw.py deleted file mode 100755 index 1b7406edd..000000000 --- a/module/plugins/hooks/Captcha9kw.py +++ /dev/null @@ -1,156 +0,0 @@ -# -*- coding: utf-8 -*- - -from __future__ import with_statement - -import time - -from base64 import b64encode -from thread import start_new_thread - -from module.network.HTTPRequest import BadHeader -from module.network.RequestFactory import getURL -from module.plugins.Hook import Hook - - -class Captcha9kw(Hook): - __name__ = "Captcha9kw" - __type__ = "hook" - __version__ = "0.09" - - __config__ = [("activated", "bool", "Activated", False), - ("force", "bool", "Force CT even if client is connected", True), - ("https", "bool", "Enable HTTPS", False), - ("confirm", "bool", "Confirm Captcha (Cost +6)", False), - ("captchaperhour", "int", "Captcha per hour (max. 9999)", 9999), - ("prio", "int", "Prio 1-10 (Cost +1-10)", 0), - ("selfsolve", "bool", - "If enabled and you have a 9kw client active only you will get your captcha to solve it (Selfsolve)", - False), - ("timeout", "int", "Timeout (max. 300)", 300), - ("passkey", "password", "API key", "")] - - __description__ = """Send captchas to 9kw.eu""" - __author_name__ = "RaNaN" - __author_mail__ = "RaNaN@pyload.org" - - API_URL = "://www.9kw.eu/index.cgi" - - - def setup(self): - self.API_URL = "https" + self.API_URL if self.getConfig("https") else "http" + self.API_URL - self.info = {} - - def getCredits(self): - response = getURL(self.API_URL, get={"apikey": self.getConfig("passkey"), "pyload": "1", "source": "pyload", - "action": "usercaptchaguthaben"}) - - if response.isdigit(): - self.logInfo(_("%s credits left") % response) - self.info['credits'] = credits = int(response) - return credits - else: - self.logError(response) - return 0 - - def processCaptcha(self, task): - result = None - - with open(task.captchaFile, 'rb') as f: - data = f.read() - data = b64encode(data) - self.logDebug("%s : %s" % (task.captchaFile, data)) - if task.isPositional(): - mouse = 1 - else: - mouse = 0 - - response = getURL(self.API_URL, post={ - "apikey": self.getConfig("passkey"), - "prio": self.getConfig("prio"), - "confirm": self.getConfig("confirm"), - "captchaperhour": self.getConfig("captchaperhour"), - "maxtimeout": self.getConfig("timeout"), - "selfsolve": self.getConfig("selfsolve"), - "pyload": "1", - "source": "pyload", - "base64": "1", - "mouse": mouse, - "file-upload-01": data, - "action": "usercaptchaupload"}) - - if response.isdigit(): - self.logInfo(_("New CaptchaID from upload: %s : %s") % (response, task.captchaFile)) - - for _ in xrange(1, 100, 1): - response2 = getURL(self.API_URL, get={"apikey": self.getConfig("passkey"), "id": response, - "pyload": "1", "source": "pyload", - "action": "usercaptchacorrectdata"}) - - if response2 != "": - break - - time.sleep(3) - - result = response2 - task.data['ticket'] = response - self.logInfo("result %s : %s" % (response, result)) - task.setResult(result) - else: - self.logError("Bad upload: %s" % response) - return False - - def newCaptchaTask(self, task): - if not task.isTextual() and not task.isPositional(): - return False - - if not self.getConfig("passkey"): - return False - - if self.core.isClientConnected() and not self.getConfig("force"): - return False - - if self.getCredits() > 0: - task.handler.append(self) - task.setWaiting(self.getConfig("timeout")) - start_new_thread(self.processCaptcha, (task,)) - - else: - self.logError(_("Your Captcha 9kw.eu Account has not enough credits")) - - def captchaCorrect(self, task): - if "ticket" in task.data: - - try: - response = getURL(self.API_URL, - post={"action": "usercaptchacorrectback", - "apikey": self.getConfig("passkey"), - "api_key": self.getConfig("passkey"), - "correct": "1", - "pyload": "1", - "source": "pyload", - "id": task.data['ticket']}) - self.logInfo("Request correct: %s" % response) - - except BadHeader, e: - self.logError("Could not send correct request.", str(e)) - else: - self.logError("No CaptchaID for correct request (task %s) found." % task) - - def captchaInvalid(self, task): - if "ticket" in task.data: - - try: - response = getURL(self.API_URL, - post={"action": "usercaptchacorrectback", - "apikey": self.getConfig("passkey"), - "api_key": self.getConfig("passkey"), - "correct": "2", - "pyload": "1", - "source": "pyload", - "id": task.data['ticket']}) - self.logInfo("Request refund: %s" % response) - - except BadHeader, e: - self.logError("Could not send refund request.", str(e)) - else: - self.logError("No CaptchaID for not correct request (task %s) found." % task) diff --git a/module/plugins/hooks/CaptchaBrotherhood.py b/module/plugins/hooks/CaptchaBrotherhood.py deleted file mode 100644 index e240cbbc0..000000000 --- a/module/plugins/hooks/CaptchaBrotherhood.py +++ /dev/null @@ -1,157 +0,0 @@ -# -*- coding: utf-8 -*- - -from __future__ import with_statement - -import StringIO -import pycurl - -from PIL import Image -from thread import start_new_thread -from time import sleep -from urllib import urlencode - -from module.network.RequestFactory import getURL, getRequest -from module.plugins.Hook import Hook - - -class CaptchaBrotherhoodException(Exception): - - def __init__(self, err): - self.err = err - - def getCode(self): - return self.err - - def __str__(self): - return "<CaptchaBrotherhoodException %s>" % self.err - - def __repr__(self): - return "<CaptchaBrotherhoodException %s>" % self.err - - -class CaptchaBrotherhood(Hook): - __name__ = "CaptchaBrotherhood" - __type__ = "hook" - __version__ = "0.05" - - __config__ = [("activated", "bool", "Activated", False), - ("username", "str", "Username", ""), - ("force", "bool", "Force CT even if client is connected", False), - ("passkey", "password", "Password", "")] - - __description__ = """Send captchas to CaptchaBrotherhood.com""" - __author_name__ = ("RaNaN", "zoidberg") - __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz") - - API_URL = "http://www.captchabrotherhood.com/" - - - def setup(self): - self.info = {} - - def getCredits(self): - response = getURL(self.API_URL + "askCredits.aspx", - get={"username": self.getConfig("username"), "password": self.getConfig("passkey")}) - if not response.startswith("OK"): - raise CaptchaBrotherhoodException(response) - else: - credits = int(response[3:]) - self.logInfo(_("%d credits left") % credits) - self.info['credits'] = credits - return credits - - def submit(self, captcha, captchaType="file", match=None): - try: - img = Image.open(captcha) - output = StringIO.StringIO() - self.logDebug("CAPTCHA IMAGE", img, img.format, img.mode) - if img.format in ("GIF", "JPEG"): - img.save(output, img.format) - else: - if img.mode != "RGB": - img = img.convert("RGB") - img.save(output, "JPEG") - data = output.getvalue() - output.close() - except Exception, e: - raise CaptchaBrotherhoodException("Reading or converting captcha image failed: %s" % e) - - req = getRequest() - - url = "%ssendNewCaptcha.aspx?%s" % (self.API_URL, - urlencode({"username": self.getConfig("username"), - "password": self.getConfig("passkey"), - "captchaSource": "pyLoad", - "timeout": "80"})) - - req.c.setopt(pycurl.URL, url) - req.c.setopt(pycurl.POST, 1) - req.c.setopt(pycurl.POSTFIELDS, data) - req.c.setopt(pycurl.HTTPHEADER, ["Content-Type: text/html"]) - - try: - req.c.perform() - response = req.getResponse() - except Exception, e: - raise CaptchaBrotherhoodException("Submit captcha image failed") - - req.close() - - if not response.startswith("OK"): - raise CaptchaBrotherhoodException(response[1]) - - ticket = response[3:] - - for _ in xrange(15): - sleep(5) - response = self.get_api("askCaptchaResult", ticket) - if response.startswith("OK-answered"): - return ticket, response[12:] - - raise CaptchaBrotherhoodException("No solution received in time") - - def get_api(self, api, ticket): - response = getURL("%s%s.aspx" % (self.API_URL, api), - get={"username": self.getConfig("username"), - "password": self.getConfig("passkey"), - "captchaID": ticket}) - if not response.startswith("OK"): - raise CaptchaBrotherhoodException("Unknown response: %s" % response) - - return response - - def newCaptchaTask(self, task): - if "service" in task.data: - return False - - if not task.isTextual(): - return False - - if not self.getConfig("username") or not self.getConfig("passkey"): - return False - - if self.core.isClientConnected() and not self.getConfig("force"): - return False - - if self.getCredits() > 10: - task.handler.append(self) - task.data['service'] = self.__name__ - task.setWaiting(100) - start_new_thread(self.processCaptcha, (task,)) - else: - self.logInfo("Your CaptchaBrotherhood Account has not enough credits") - - def captchaInvalid(self, task): - if task.data['service'] == self.__name__ and "ticket" in task.data: - response = self.get_api("complainCaptcha", task.data['ticket']) - - def processCaptcha(self, task): - c = task.captchaFile - try: - ticket, result = self.submit(c) - except CaptchaBrotherhoodException, e: - task.error = e.getCode() - return - - task.data['ticket'] = ticket - task.setResult(result) diff --git a/module/plugins/hooks/Checksum.py b/module/plugins/hooks/Checksum.py deleted file mode 100644 index c2c088066..000000000 --- a/module/plugins/hooks/Checksum.py +++ /dev/null @@ -1,175 +0,0 @@ -# -*- coding: utf-8 -*- - -from __future__ import with_statement - -import hashlib -import re -import zlib - -from os import remove -from os.path import getsize, isfile, splitext - -from module.plugins.Hook import Hook -from module.utils import safe_join, fs_encode - - -def computeChecksum(local_file, algorithm): - if algorithm in getattr(hashlib, "algorithms", ("md5", "sha1", "sha224", "sha256", "sha384", "sha512")): - h = getattr(hashlib, algorithm)() - - with open(local_file, 'rb') as f: - for chunk in iter(lambda: f.read(128 * h.block_size), b''): - h.update(chunk) - - return h.hexdigest() - - elif algorithm in ("adler32", "crc32"): - hf = getattr(zlib, algorithm) - last = 0 - - with open(local_file, 'rb') as f: - for chunk in iter(lambda: f.read(8192), b''): - last = hf(chunk, last) - - return "%x" % last - - else: - return None - - -class Checksum(Hook): - __name__ = "Checksum" - __type__ = "hook" - __version__ = "0.13" - - __config__ = [("activated", "bool", "Activated", False), - ("check_checksum", "bool", "Check checksum? (If False only size will be verified)", True), - ("check_action", "fail;retry;nothing", "What to do if check fails?", "retry"), - ("max_tries", "int", "Number of retries", 2), - ("retry_action", "fail;nothing", "What to do if all retries fail?", "fail"), - ("wait_time", "int", "Time to wait before each retry (seconds)", 1)] - - __description__ = """Verify downloaded file size and checksum""" - __author_name__ = ("zoidberg", "Walter Purcaro", "stickell") - __author_mail__ = ("zoidberg@mujmail.cz", "vuolter@gmail.com", "l.stickell@yahoo.it") - - methods = {'sfv': 'crc32', 'crc': 'crc32', 'hash': 'md5'} - regexps = {'sfv': r'^(?P<name>[^;].+)\s+(?P<hash>[0-9A-Fa-f]{8})$', - 'md5': r'^(?P<name>[0-9A-Fa-f]{32}) (?P<file>.+)$', - 'crc': r'filename=(?P<name>.+)\nsize=(?P<size>\d+)\ncrc32=(?P<hash>[0-9A-Fa-f]{8})$', - 'default': r'^(?P<hash>[0-9A-Fa-f]+)\s+\*?(?P<name>.+)$'} - - - def coreReady(self): - if not self.getConfig("check_checksum"): - self.logInfo("Checksum validation is disabled in plugin configuration") - - def setup(self): - self.algorithms = sorted( - getattr(hashlib, "algorithms", ("md5", "sha1", "sha224", "sha256", "sha384", "sha512")), reverse=True) - self.algorithms.extend(["crc32", "adler32"]) - self.formats = self.algorithms + ["sfv", "crc", "hash"] - - def downloadFinished(self, pyfile): - """ - Compute checksum for the downloaded file and compare it with the hash provided by the hoster. - pyfile.plugin.check_data should be a dictionary which can contain: - a) if known, the exact filesize in bytes (e.g. "size": 123456789) - b) hexadecimal hash string with algorithm name as key (e.g. "md5": "d76505d0869f9f928a17d42d66326307") - """ - if hasattr(pyfile.plugin, "check_data") and (isinstance(pyfile.plugin.check_data, dict)): - data = pyfile.plugin.check_data.copy() - elif hasattr(pyfile.plugin, "api_data") and (isinstance(pyfile.plugin.api_data, dict)): - data = pyfile.plugin.api_data.copy() - else: - return - - self.logDebug(data) - - if not pyfile.plugin.lastDownload: - self.checkFailed(pyfile, None, "No file downloaded") - - local_file = fs_encode(pyfile.plugin.lastDownload) - #download_folder = self.config['general']['download_folder'] - #local_file = fs_encode(safe_join(download_folder, pyfile.package().folder, pyfile.name)) - - if not isfile(local_file): - self.checkFailed(pyfile, None, "File does not exist") - - # validate file size - if "size" in data: - api_size = int(data['size']) - file_size = getsize(local_file) - if api_size != file_size: - self.logWarning("File %s has incorrect size: %d B (%d expected)" % (pyfile.name, file_size, api_size)) - self.checkFailed(pyfile, local_file, "Incorrect file size") - del data['size'] - - # validate checksum - if data and self.getConfig("check_checksum"): - if "checksum" in data: - data['md5'] = data['checksum'] - - for key in self.algorithms: - if key in data: - checksum = computeChecksum(local_file, key.replace("-", "").lower()) - if checksum: - if checksum == data[key].lower(): - self.logInfo('File integrity of "%s" verified by %s checksum (%s).' % - (pyfile.name, key.upper(), checksum)) - break - else: - self.logWarning("%s checksum for file %s does not match (%s != %s)" % - (key.upper(), pyfile.name, checksum, data[key])) - self.checkFailed(pyfile, local_file, "Checksums do not match") - else: - self.logWarning("Unsupported hashing algorithm: %s" % key.upper()) - else: - self.logWarning("Unable to validate checksum for file %s" % pyfile.name) - - def checkFailed(self, pyfile, local_file, msg): - check_action = self.getConfig("check_action") - if check_action == "retry": - max_tries = self.getConfig("max_tries") - retry_action = self.getConfig("retry_action") - if pyfile.plugin.retries < max_tries: - if local_file: - remove(local_file) - pyfile.plugin.retry(max_tries=max_tries, wait_time=self.getConfig("wait_time"), reason=msg) - elif retry_action == "nothing": - return - elif check_action == "nothing": - return - pyfile.plugin.fail(reason=msg) - - def packageFinished(self, pypack): - download_folder = safe_join(self.config['general']['download_folder'], pypack.folder, "") - - for link in pypack.getChildren().itervalues(): - file_type = splitext(link['name'])[1][1:].lower() - #self.logDebug(link, file_type) - - if file_type not in self.formats: - continue - - hash_file = fs_encode(safe_join(download_folder, link['name'])) - if not isfile(hash_file): - self.logWarning("File not found: %s" % link['name']) - continue - - with open(hash_file) as f: - text = f.read() - - for m in re.finditer(self.regexps.get(file_type, self.regexps['default']), text): - data = m.groupdict() - self.logDebug(link['name'], data) - - local_file = fs_encode(safe_join(download_folder, data['name'])) - algorithm = self.methods.get(file_type, file_type) - checksum = computeChecksum(local_file, algorithm) - if checksum == data['hash']: - self.logInfo('File integrity of "%s" verified by %s checksum (%s).' % - (data['name'], algorithm, checksum)) - else: - self.logWarning("%s checksum for file %s does not match (%s != %s)" % - (algorithm, data['name'], checksum, data['hash'])) diff --git a/module/plugins/hooks/ClickAndLoad.py b/module/plugins/hooks/ClickAndLoad.py deleted file mode 100644 index 5c523caf7..000000000 --- a/module/plugins/hooks/ClickAndLoad.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- coding: utf-8 -*- - -import socket -import thread - -from module.plugins.Hook import Hook - - -class ClickAndLoad(Hook): - __name__ = "ClickAndLoad" - __type__ = "hook" - __version__ = "0.22" - - __config__ = [("activated", "bool", "Activated", True), - ("extern", "bool", "Allow external link adding", False)] - - __description__ = """Gives abillity to use jd's click and load. depends on webinterface""" - __author_name__ = ("RaNaN", "mkaay") - __author_mail__ = ("RaNaN@pyload.de", "mkaay@mkaay.de") - - - def coreReady(self): - self.port = int(self.config['webinterface']['port']) - if self.config['webinterface']['activated']: - try: - if self.getConfig("extern"): - ip = "0.0.0.0" - else: - ip = "127.0.0.1" - - thread.start_new_thread(proxy, (self, ip, self.port, 9666)) - except: - self.logError("ClickAndLoad port already in use.") - - -def proxy(self, *settings): - thread.start_new_thread(server, (self,) + settings) - lock = thread.allocate_lock() - lock.acquire() - lock.acquire() - - -def server(self, *settings): - try: - dock_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - dock_socket.bind((settings[0], settings[2])) - dock_socket.listen(5) - while True: - client_socket = dock_socket.accept()[0] - server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - server_socket.connect(("127.0.0.1", settings[1])) - thread.start_new_thread(forward, (client_socket, server_socket)) - thread.start_new_thread(forward, (server_socket, client_socket)) - except socket.error, e: - if hasattr(e, "errno"): - errno = e.errno - else: - errno = e.args[0] - - if errno == 98: - self.logWarning(_("Click'N'Load: Port 9666 already in use")) - return - thread.start_new_thread(server, (self,) + settings) - except: - thread.start_new_thread(server, (self,) + settings) - - -def forward(source, destination): - string = ' ' - while string: - string = source.recv(1024) - if string: - destination.sendall(string) - else: - #source.shutdown(socket.SHUT_RD) - destination.shutdown(socket.SHUT_WR) diff --git a/module/plugins/hooks/DeathByCaptcha.py b/module/plugins/hooks/DeathByCaptcha.py deleted file mode 100644 index 530395d32..000000000 --- a/module/plugins/hooks/DeathByCaptcha.py +++ /dev/null @@ -1,202 +0,0 @@ -# -*- coding: utf-8 -*- - -from __future__ import with_statement - -import re - -from base64 import b64encode -from pycurl import FORM_FILE, HTTPHEADER -from thread import start_new_thread -from time import sleep - -from module.common.json_layer import json_loads -from module.network.HTTPRequest import BadHeader -from module.network.RequestFactory import getRequest -from module.plugins.Hook import Hook - - -class DeathByCaptchaException(Exception): - DBC_ERRORS = {'not-logged-in': 'Access denied, check your credentials', - 'invalid-credentials': 'Access denied, check your credentials', - 'banned': 'Access denied, account is suspended', - 'insufficient-funds': 'Insufficient account balance to decrypt CAPTCHA', - 'invalid-captcha': 'CAPTCHA is not a valid image', - 'service-overload': 'CAPTCHA was rejected due to service overload, try again later', - 'invalid-request': 'Invalid request', - 'timed-out': 'No CAPTCHA solution received in time'} - - def __init__(self, err): - self.err = err - - def getCode(self): - return self.err - - def getDesc(self): - if self.err in self.DBC_ERRORS.keys(): - return self.DBC_ERRORS[self.err] - else: - return self.err - - def __str__(self): - return "<DeathByCaptchaException %s>" % self.err - - def __repr__(self): - return "<DeathByCaptchaException %s>" % self.err - - -class DeathByCaptcha(Hook): - __name__ = "DeathByCaptcha" - __type__ = "hook" - __version__ = "0.03" - - __config__ = [("activated", "bool", "Activated", False), - ("username", "str", "Username", ""), - ("passkey", "password", "Password", ""), - ("force", "bool", "Force DBC even if client is connected", False)] - - __description__ = """Send captchas to DeathByCaptcha.com""" - __author_name__ = ("RaNaN", "zoidberg") - __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz") - - API_URL = "http://api.dbcapi.me/api/" - - - def setup(self): - self.info = {} - - def call_api(self, api="captcha", post=False, multipart=False): - req = getRequest() - req.c.setopt(HTTPHEADER, ["Accept: application/json", "User-Agent: pyLoad %s" % self.core.version]) - - if post: - if not isinstance(post, dict): - post = {} - post.update({"username": self.getConfig("username"), - "password": self.getConfig("passkey")}) - - response = None - try: - json = req.load("%s%s" % (self.API_URL, api), - post=post, - multipart=multipart) - self.logDebug(json) - response = json_loads(json) - - if "error" in response: - raise DeathByCaptchaException(response['error']) - elif "status" not in response: - raise DeathByCaptchaException(str(response)) - - except BadHeader, e: - if 403 == e.code: - raise DeathByCaptchaException('not-logged-in') - elif 413 == e.code: - raise DeathByCaptchaException('invalid-captcha') - elif 503 == e.code: - raise DeathByCaptchaException('service-overload') - elif e.code in (400, 405): - raise DeathByCaptchaException('invalid-request') - else: - raise - - finally: - req.close() - - return response - - def getCredits(self): - response = self.call_api("user", True) - - if 'is_banned' in response and response['is_banned']: - raise DeathByCaptchaException('banned') - elif 'balance' in response and 'rate' in response: - self.info.update(response) - else: - raise DeathByCaptchaException(response) - - def getStatus(self): - response = self.call_api("status", False) - - if 'is_service_overloaded' in response and response['is_service_overloaded']: - raise DeathByCaptchaException('service-overload') - - def submit(self, captcha, captchaType="file", match=None): - #workaround multipart-post bug in HTTPRequest.py - if re.match("^[A-Za-z0-9]*$", self.getConfig("passkey")): - multipart = True - data = (FORM_FILE, captcha) - else: - multipart = False - with open(captcha, 'rb') as f: - data = f.read() - data = "base64:" + b64encode(data) - - response = self.call_api("captcha", {"captchafile": data}, multipart) - - if "captcha" not in response: - raise DeathByCaptchaException(response) - ticket = response['captcha'] - - for _ in xrange(24): - sleep(5) - response = self.call_api("captcha/%d" % ticket, False) - if response['text'] and response['is_correct']: - break - else: - raise DeathByCaptchaException('timed-out') - - result = response['text'] - self.logDebug("result %s : %s" % (ticket, result)) - - return ticket, result - - def newCaptchaTask(self, task): - if "service" in task.data: - return False - - if not task.isTextual(): - return False - - if not self.getConfig("username") or not self.getConfig("passkey"): - return False - - if self.core.isClientConnected() and not self.getConfig("force"): - return False - - try: - self.getStatus() - self.getCredits() - except DeathByCaptchaException, e: - self.logError(e.getDesc()) - return False - - balance, rate = self.info['balance'], self.info['rate'] - self.logInfo("Account balance: US$%.3f (%d captchas left at %.2f cents each)" % (balance / 100, - balance // rate, rate)) - - if balance > rate: - task.handler.append(self) - task.data['service'] = self.__name__ - task.setWaiting(180) - start_new_thread(self.processCaptcha, (task,)) - - def captchaInvalid(self, task): - if task.data['service'] == self.__name__ and "ticket" in task.data: - try: - response = self.call_api("captcha/%d/report" % task.data['ticket'], True) - except DeathByCaptchaException, e: - self.logError(e.getDesc()) - except Exception, e: - self.logError(e) - - def processCaptcha(self, task): - c = task.captchaFile - try: - ticket, result = self.submit(c) - except DeathByCaptchaException, e: - task.error = e.getCode() - self.logError(e.getDesc()) - return - - task.data['ticket'] = ticket - task.setResult(result) diff --git a/module/plugins/hooks/DebridItaliaCom.py b/module/plugins/hooks/DebridItaliaCom.py deleted file mode 100644 index 88efb6b2a..000000000 --- a/module/plugins/hooks/DebridItaliaCom.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.MultiHoster import MultiHoster - - -class DebridItaliaCom(MultiHoster): - __name__ = "DebridItaliaCom" - __type__ = "hook" - __version__ = "0.07" - - __config__ = [("activated", "bool", "Activated", False), - ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), - ("hosterList", "str", "Hoster list (comma separated)", ""), - ("unloadFailing", "bool", "Revert to standard download if download fails", False), - ("interval", "int", "Reload interval in hours (0 to disable)", 24)] - - __description__ = """Debriditalia.com hook plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - - def getHoster(self): - return ["netload.in", "hotfile.com", "rapidshare.com", "multiupload.com", - "uploading.com", "megashares.com", "crocko.com", "filepost.com", - "bitshare.com", "share-links.biz", "putlocker.com", "uploaded.to", - "speedload.org", "rapidgator.net", "likeupload.net", "cyberlocker.ch", - "depositfiles.com", "extabit.com", "filefactory.com", "sharefiles.co", - "ryushare.com", "tusfiles.net", "nowvideo.co", "cloudzer.net", "letitbit.net", - "easybytez.com", "uptobox.com", "ddlstorage.com"] diff --git a/module/plugins/hooks/DeleteFinished.py b/module/plugins/hooks/DeleteFinished.py deleted file mode 100644 index bc926906f..000000000 --- a/module/plugins/hooks/DeleteFinished.py +++ /dev/null @@ -1,69 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.database import style -from module.plugins.Hook import Hook - - -class DeleteFinished(Hook): - __name__ = "DeleteFinished" - __type__ = "hook" - __version__ = "1.09" - - __config__ = [('activated', 'bool', 'Activated', 'False'), - ('interval', 'int', 'Delete every (hours)', '72'), - ('deloffline', 'bool', 'Delete packages with offline links', 'False')] - - __description__ = """Automatically delete all finished packages from queue""" - __author_name__ = "Walter Purcaro" - __author_mail__ = "vuolter@gmail.com" - - - ## overwritten methods ## - def periodical(self): - if not self.info['sleep']: - deloffline = self.getConfig('deloffline') - mode = '0,1,4' if deloffline else '0,4' - msg = 'delete all finished packages in queue list (%s packages with offline links)' - self.logInfo(msg % ('including' if deloffline else 'excluding')) - self.deleteFinished(mode) - self.info['sleep'] = True - self.addEvent('packageFinished', self.wakeup) - - def pluginConfigChanged(self, plugin, name, value): - if name == 'interval' and value != self.interval: - self.interval = value * 3600 - self.initPeriodical() - - def unload(self): - self.removeEvent('packageFinished', self.wakeup) - - def coreReady(self): - self.info = {'sleep': True} - interval = self.getConfig('interval') - self.pluginConfigChanged('DeleteFinished', 'interval', interval) - self.addEvent('packageFinished', self.wakeup) - - ## own methods ## - @style.queue - def deleteFinished(self, mode): - self.c.execute('DELETE FROM packages WHERE NOT EXISTS(SELECT 1 FROM links WHERE package=packages.id AND status NOT IN (%s))' % mode) - self.c.execute('DELETE FROM links WHERE NOT EXISTS(SELECT 1 FROM packages WHERE id=links.package)') - - def wakeup(self, pypack): - self.removeEvent('packageFinished', self.wakeup) - self.info['sleep'] = False - - ## event managing ## - def addEvent(self, event, func): - """Adds an event listener for event name""" - if event in self.m.events: - if func in self.m.events[event]: - self.logDebug('Function already registered %s' % func) - else: - self.m.events[event].append(func) - else: - self.m.events[event] = [func] - - def setup(self): - self.m = self.manager - self.removeEvent = self.m.removeEvent diff --git a/module/plugins/hooks/DownloadScheduler.py b/module/plugins/hooks/DownloadScheduler.py deleted file mode 100644 index a3d70b3ab..000000000 --- a/module/plugins/hooks/DownloadScheduler.py +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from time import localtime - -from module.plugins.Hook import Hook - - -class DownloadScheduler(Hook): - __name__ = "DownloadScheduler" - __type__ = "hook" - __version__ = "0.21" - - __config__ = [("activated", "bool", "Activated", False), - ("timetable", "str", "List time periods as hh:mm full or number(kB/s)", - "0:00 full, 7:00 250, 10:00 0, 17:00 150"), - ("abort", "bool", "Abort active downloads when start period with speed 0", False)] - - __description__ = """Download Scheduler""" - __author_name__ = ("zoidberg", "stickell") - __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") - - - def setup(self): - self.cb = None # callback to scheduler job; will be by removed hookmanager when hook unloaded - - def coreReady(self): - self.updateSchedule() - - def updateSchedule(self, schedule=None): - if schedule is None: - schedule = self.getConfig("timetable") - - schedule = re.findall("(\d{1,2}):(\d{2})[\s]*(-?\d+)", - schedule.lower().replace("full", "-1").replace("none", "0")) - if not schedule: - self.logError("Invalid schedule") - return - - t0 = localtime() - now = (t0.tm_hour, t0.tm_min, t0.tm_sec, "X") - schedule = sorted([(int(x[0]), int(x[1]), 0, int(x[2])) for x in schedule] + [now]) - - self.logDebug("Schedule", schedule) - - for i, v in enumerate(schedule): - if v[3] == "X": - last, next = schedule[i - 1], schedule[(i + 1) % len(schedule)] - self.logDebug("Now/Last/Next", now, last, next) - - self.setDownloadSpeed(last[3]) - - next_time = (((24 + next[0] - now[0]) * 60 + next[1] - now[1]) * 60 + next[2] - now[2]) % 86400 - self.core.scheduler.removeJob(self.cb) - self.cb = self.core.scheduler.addJob(next_time, self.updateSchedule, threaded=False) - - def setDownloadSpeed(self, speed): - if speed == 0: - abort = self.getConfig("abort") - self.logInfo("Stopping download server. (Running downloads will %sbe aborted.)" % ('' if abort else 'not ')) - self.core.api.pauseServer() - if abort: - self.core.api.stopAllDownloads() - else: - self.core.api.unpauseServer() - - if speed > 0: - self.logInfo("Setting download speed to %d kB/s" % speed) - self.core.api.setConfigValue("download", "limit_speed", 1) - self.core.api.setConfigValue("download", "max_speed", speed) - else: - self.logInfo("Setting download speed to FULL") - self.core.api.setConfigValue("download", "limit_speed", 0) - self.core.api.setConfigValue("download", "max_speed", -1) diff --git a/module/plugins/hooks/EasybytezCom.py b/module/plugins/hooks/EasybytezCom.py deleted file mode 100644 index da37297d9..000000000 --- a/module/plugins/hooks/EasybytezCom.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.MultiHoster import MultiHoster - - -class EasybytezCom(MultiHoster): - __name__ = "EasybytezCom" - __type__ = "hook" - __version__ = "0.03" - - __config__ = [("activated", "bool", "Activated", False), - ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), - ("hosterList", "str", "Hoster list (comma separated)", "")] - - __description__ = """EasyBytez.com hook plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - - def getHoster(self): - self.account = self.core.accountManager.getAccountPlugin(self.__name__) - user = self.account.selectAccount()[0] - - try: - req = self.account.getAccountRequest(user) - page = req.load("http://www.easybytez.com") - - m = re.search(r'</textarea>\s*Supported sites:(.*)', page) - return m.group(1).split(',') - except Exception, e: - self.logDebug(e) - self.logWarning("Unable to load supported hoster list, using last known") - return ["bitshare.com", "crocko.com", "ddlstorage.com", "depositfiles.com", "extabit.com", "hotfile.com", - "mediafire.com", "netload.in", "rapidgator.net", "rapidshare.com", "uploading.com", "uload.to", - "uploaded.to"] diff --git a/module/plugins/hooks/Ev0InFetcher.py b/module/plugins/hooks/Ev0InFetcher.py deleted file mode 100644 index c54c38bc6..000000000 --- a/module/plugins/hooks/Ev0InFetcher.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8 -*- - -from time import mktime, time - -from module.lib import feedparser - -from module.plugins.Hook import Hook - - -class Ev0InFetcher(Hook): - __name__ = "Ev0InFetcher" - __type__ = "hook" - __version__ = "0.21" - - __config__ = [("activated", "bool", "Activated", False), - ("interval", "int", "Check interval in minutes", 10), - ("queue", "bool", "Move new shows directly to Queue", False), - ("shows", "str", "Shows to check for (comma seperated)", ""), - ("quality", "xvid;x264;rmvb", "Video Format", "xvid"), - ("hoster", "str", "Hoster to use (comma seperated)", - "NetloadIn,RapidshareCom,MegauploadCom,HotfileCom")] - - __description__ = """Checks rss feeds for Ev0.in""" - __author_name__ = "mkaay" - __author_mail__ = "mkaay@mkaay.de" - - - def setup(self): - self.interval = self.getConfig("interval") * 60 - - def filterLinks(self, links): - results = self.core.pluginManager.parseUrls(links) - sortedLinks = {} - - for url, hoster in results: - if hoster not in sortedLinks: - sortedLinks[hoster] = [] - sortedLinks[hoster].append(url) - - for h in self.getConfig("hoster").split(","): - try: - return sortedLinks[h.strip()] - except: - continue - return [] - - - def periodical(self): - - def normalizefiletitle(filename): - filename = filename.replace('.', ' ') - filename = filename.replace('_', ' ') - filename = filename.lower() - return filename - - shows = [s.strip() for s in self.getConfig("shows").split(",")] - - feed = feedparser.parse("http://feeds.feedburner.com/ev0in/%s?format=xml" % self.getConfig("quality")) - - showStorage = {} - for show in shows: - showStorage[show] = int(self.getStorage("show_%s_lastfound" % show, 0)) - - found = False - for item in feed['items']: - for show, lastfound in showStorage.iteritems(): - if show.lower() in normalizefiletitle(item['title']) and lastfound < int(mktime(item.date_parsed)): - links = self.filterLinks(item['description'].split("<br />")) - packagename = item['title'].encode("utf-8") - self.logInfo("Ev0InFetcher: new episode '%s' (matched '%s')" % (packagename, show)) - self.core.api.addPackage(packagename, links, 1 if self.getConfig("queue") else 0) - self.setStorage("show_%s_lastfound" % show, int(mktime(item.date_parsed))) - found = True - if not found: - #self.logDebug("Ev0InFetcher: no new episodes found") - pass - - for show, lastfound in self.getStorage().iteritems(): - if int(lastfound) > 0 and int(lastfound) + (3600 * 24 * 30) < int(time()): - self.delStorage("show_%s_lastfound" % show) - self.logDebug("Ev0InFetcher: cleaned '%s' record" % show) diff --git a/module/plugins/hooks/ExpertDecoders.py b/module/plugins/hooks/ExpertDecoders.py deleted file mode 100644 index c7ab80da0..000000000 --- a/module/plugins/hooks/ExpertDecoders.py +++ /dev/null @@ -1,94 +0,0 @@ -# -*- coding: utf-8 -*- - -from __future__ import with_statement - -from base64 import b64encode -from pycurl import LOW_SPEED_TIME -from thread import start_new_thread -from uuid import uuid4 - -from module.network.HTTPRequest import BadHeader -from module.network.RequestFactory import getURL, getRequest -from module.plugins.Hook import Hook - - -class ExpertDecoders(Hook): - __name__ = "ExpertDecoders" - __type__ = "hook" - __version__ = "0.01" - - __config__ = [("activated", "bool", "Activated", False), - ("force", "bool", "Force CT even if client is connected", False), - ("passkey", "password", "Access key", "")] - - __description__ = """Send captchas to expertdecoders.com""" - __author_name__ = ("RaNaN", "zoidberg") - __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz") - - API_URL = "http://www.fasttypers.org/imagepost.ashx" - - - def setup(self): - self.info = {} - - def getCredits(self): - response = getURL(self.API_URL, post={"key": self.getConfig("passkey"), "action": "balance"}) - - if response.isdigit(): - self.logInfo(_("%s credits left") % response) - self.info['credits'] = credits = int(response) - return credits - else: - self.logError(response) - return 0 - - def processCaptcha(self, task): - task.data['ticket'] = ticket = uuid4() - result = None - - with open(task.captchaFile, 'rb') as f: - data = f.read() - data = b64encode(data) - #self.logDebug("%s: %s : %s" % (ticket, task.captchaFile, data)) - - req = getRequest() - #raise timeout threshold - req.c.setopt(LOW_SPEED_TIME, 80) - - try: - result = req.load(self.API_URL, post={"action": "upload", "key": self.getConfig("passkey"), - "file": data, "gen_task_id": ticket}) - finally: - req.close() - - self.logDebug("result %s : %s" % (ticket, result)) - task.setResult(result) - - def newCaptchaTask(self, task): - if not task.isTextual(): - return False - - if not self.getConfig("passkey"): - return False - - if self.core.isClientConnected() and not self.getConfig("force"): - return False - - if self.getCredits() > 0: - task.handler.append(self) - task.setWaiting(100) - start_new_thread(self.processCaptcha, (task,)) - - else: - self.logInfo(_("Your ExpertDecoders Account has not enough credits")) - - def captchaInvalid(self, task): - if "ticket" in task.data: - - try: - response = getURL(self.API_URL, post={"action": "refund", "key": self.getConfig("passkey"), - "gen_task_id": task.data['ticket']}) - self.logInfo("Request refund: %s" % response) - - except BadHeader, e: - self.logError("Could not send refund request.", str(e)) diff --git a/module/plugins/hooks/ExternalScripts.py b/module/plugins/hooks/ExternalScripts.py deleted file mode 100644 index 90ae3bee0..000000000 --- a/module/plugins/hooks/ExternalScripts.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- coding: utf-8 -*- - -import subprocess - -from os import listdir, access, X_OK, makedirs -from os.path import join, exists, basename, abspath - -from module.plugins.Hook import Hook -from module.utils import safe_join - - -class ExternalScripts(Hook): - __name__ = "ExternalScripts" - __type__ = "hook" - __version__ = "0.23" - - __config__ = [("activated", "bool", "Activated", True)] - - __description__ = """Run external scripts""" - __author_name__ = ("mkaay", "RaNaN", "spoob") - __author_mail__ = ("mkaay@mkaay.de", "ranan@pyload.org", "spoob@pyload.org") - - event_list = ["unrarFinished", "allDownloadsFinished", "allDownloadsProcessed"] - - - def setup(self): - self.scripts = {} - - folders = ["download_preparing", "download_finished", "package_finished", - "before_reconnect", "after_reconnect", "unrar_finished", - "all_dls_finished", "all_dls_processed"] - - for folder in folders: - self.scripts[folder] = [] - - self.initPluginType(folder, join(pypath, 'scripts', folder)) - self.initPluginType(folder, join('scripts', folder)) - - for script_type, names in self.scripts.iteritems(): - if names: - self.logInfo((_("Installed scripts for %s: ") % script_type) + ", ".join([basename(x) for x in names])) - - def initPluginType(self, folder, path): - if not exists(path): - try: - makedirs(path) - except: - self.logDebug("Script folder %s not created" % folder) - return - - for f in listdir(path): - if f.startswith("#") or f.startswith(".") or f.startswith("_") or f.endswith("~") or f.endswith(".swp"): - continue - - if not access(join(path, f), X_OK): - self.logWarning(_("Script not executable:") + " %s/%s" % (folder, f)) - - self.scripts[folder].append(join(path, f)) - - def callScript(self, script, *args): - try: - cmd = [script] + [str(x) if not isinstance(x, basestring) else x for x in args] - self.logDebug("Executing %(script)s: %(cmd)s" % {"script": abspath(script), "cmd": " ".join(cmd)}) - #output goes to pyload - subprocess.Popen(cmd, bufsize=-1) - except Exception, e: - self.logError(_("Error in %(script)s: %(error)s") % {"script": basename(script), "error": str(e)}) - - def downloadPreparing(self, pyfile): - for script in self.scripts['download_preparing']: - self.callScript(script, pyfile.pluginname, pyfile.url, pyfile.id) - - def downloadFinished(self, pyfile): - for script in self.scripts['download_finished']: - self.callScript(script, pyfile.pluginname, pyfile.url, pyfile.name, - safe_join(self.config['general']['download_folder'], - pyfile.package().folder, pyfile.name), pyfile.id) - - def packageFinished(self, pypack): - for script in self.scripts['package_finished']: - folder = self.config['general']['download_folder'] - folder = safe_join(folder, pypack.folder) - - self.callScript(script, pypack.name, folder, pypack.password, pypack.id) - - def beforeReconnecting(self, ip): - for script in self.scripts['before_reconnect']: - self.callScript(script, ip) - - def afterReconnecting(self, ip): - for script in self.scripts['after_reconnect']: - self.callScript(script, ip) - - def unrarFinished(self, folder, fname): - for script in self.scripts['unrar_finished']: - self.callScript(script, folder, fname) - - def allDownloadsFinished(self): - for script in self.scripts['all_dls_finished']: - self.callScript(script) - - def allDownloadsProcessed(self): - for script in self.scripts['all_dls_processed']: - self.callScript(script) diff --git a/module/plugins/hooks/ExtractArchive.py b/module/plugins/hooks/ExtractArchive.py deleted file mode 100644 index 183f189a6..000000000 --- a/module/plugins/hooks/ExtractArchive.py +++ /dev/null @@ -1,320 +0,0 @@ -# -*- coding: utf-8 -*- - -import os -import sys - -from copy import copy -from os import remove, chmod, makedirs -from os.path import exists, basename, isfile, isdir -from traceback import print_exc - -# monkey patch bug in python 2.6 and lower -# http://bugs.python.org/issue6122 , http://bugs.python.org/issue1236 , http://bugs.python.org/issue1731717 -if sys.version_info < (2, 7) and os.name != "nt": - import errno - from subprocess import Popen - - def _eintr_retry_call(func, *args): - while True: - try: - return func(*args) - except OSError, e: - if e.errno == errno.EINTR: - continue - raise - - # unsued timeout option for older python version - def wait(self, timeout=0): - """Wait for child process to terminate. Returns returncode - attribute.""" - if self.returncode is None: - try: - pid, sts = _eintr_retry_call(os.waitpid, self.pid, 0) - except OSError, e: - if e.errno != errno.ECHILD: - raise - # This happens if SIGCLD is set to be ignored or waiting - # for child processes has otherwise been disabled for our - # process. This child is dead, we can't get the status. - sts = 0 - self._handle_exitstatus(sts) - return self.returncode - - Popen.wait = wait - -if os.name != "nt": - from grp import getgrnam - from os import chown - from pwd import getpwnam - -from module.plugins.Hook import Hook, threaded, Expose -from module.plugins.internal.AbstractExtractor import ArchiveError, CRCError, WrongPassword -from module.utils import safe_join, fs_encode - - -class ExtractArchive(Hook): - """ - Provides: unrarFinished (folder, filename) - """ - __name__ = "ExtractArchive" - __type__ = "hook" - __version__ = "0.16" - - __config__ = [("activated", "bool", "Activated", True), - ("fullpath", "bool", "Extract full path", True), - ("overwrite", "bool", "Overwrite files", True), - ("passwordfile", "file", "password file", "unrar_passwords.txt"), - ("deletearchive", "bool", "Delete archives when done", False), - ("subfolder", "bool", "Create subfolder for each package", False), - ("destination", "folder", "Extract files to", ""), - ("excludefiles", "str", "Exclude files from unpacking (seperated by ;)", ""), - ("recursive", "bool", "Extract archives in archvies", True), - ("queue", "bool", "Wait for all downloads to be finished", True), - ("renice", "int", "CPU Priority", 0)] - - __description__ = """Extract different kind of archives""" - __author_name__ = ("pyLoad Team", "AndroKev") - __author_mail__ = ("admin@pyload.org", "@pyloadforum") - - event_list = ["allDownloadsProcessed"] - - - def setup(self): - self.plugins = [] - self.passwords = [] - names = [] - - for p in ("UnRar", "UnZip"): - try: - module = self.core.pluginManager.loadModule("internal", p) - klass = getattr(module, p) - if klass.checkDeps(): - names.append(p) - self.plugins.append(klass) - - except OSError, e: - if e.errno == 2: - self.logInfo(_("No %s installed") % p) - else: - self.logWarning(_("Could not activate %s") % p, str(e)) - if self.core.debug: - print_exc() - - except Exception, e: - self.logWarning(_("Could not activate %s") % p, str(e)) - if self.core.debug: - print_exc() - - if names: - self.logInfo(_("Activated") + " " + " ".join(names)) - else: - self.logInfo(_("No Extract plugins activated")) - - # queue with package ids - self.queue = [] - - @Expose - def extractPackage(self, id): - """ Extract package with given id""" - self.manager.startThread(self.extract, [id]) - - def packageFinished(self, pypack): - if self.getConfig("queue"): - self.logInfo(_("Package %s queued for later extracting") % pypack.name) - self.queue.append(pypack.id) - else: - self.manager.startThread(self.extract, [pypack.id]) - - @threaded - def allDownloadsProcessed(self, thread): - local = copy(self.queue) - del self.queue[:] - self.extract(local, thread) - - def extract(self, ids, thread=None): - # reload from txt file - self.reloadPasswords() - - # dl folder - dl = self.config['general']['download_folder'] - - extracted = [] - - #iterate packages -> plugins -> targets - for pid in ids: - p = self.core.files.getPackage(pid) - self.logInfo(_("Check package %s") % p.name) - if not p: - continue - - # determine output folder - out = safe_join(dl, p.folder, "") - # force trailing slash - - if self.getConfig("destination") and self.getConfig("destination").lower() != "none": - - out = safe_join(dl, p.folder, self.getConfig("destination"), "") - #relative to package folder if destination is relative, otherwise absolute path overwrites them - - if self.getConfig("subfolder"): - out = safe_join(out, fs_encode(p.folder)) - - if not exists(out): - makedirs(out) - - files_ids = [(safe_join(dl, p.folder, x['name']), x['id']) for x in p.getChildren().itervalues()] - matched = False - - # check as long there are unseen files - while files_ids: - new_files_ids = [] - - for plugin in self.plugins: - targets = plugin.getTargets(files_ids) - if targets: - self.logDebug("Targets for %s: %s" % (plugin.__name__, targets)) - matched = True - for target, fid in targets: - if target in extracted: - self.logDebug(basename(target), "skipped") - continue - extracted.append(target) # prevent extracting same file twice - - klass = plugin(self, target, out, self.getConfig("fullpath"), self.getConfig("overwrite"), self.getConfig("excludefiles"), - self.getConfig("renice")) - klass.init() - - self.logInfo(basename(target), _("Extract to %s") % out) - new_files = self.startExtracting(klass, fid, p.password.strip().splitlines(), thread) - self.logDebug("Extracted: %s" % new_files) - self.setPermissions(new_files) - - for file in new_files: - if not exists(file): - self.logDebug("new file %s does not exists" % file) - continue - if self.getConfig("recursive") and isfile(file): - new_files_ids.append((file, fid)) # append as new target - - files_ids = new_files_ids # also check extracted files - - if not matched: - self.logInfo(_("No files found to extract")) - - def startExtracting(self, plugin, fid, passwords, thread): - pyfile = self.core.files.getFile(fid) - if not pyfile: - return [] - - pyfile.setCustomStatus(_("extracting")) - thread.addActive(pyfile) # keep this file until everything is done - - try: - progress = lambda x: pyfile.setProgress(x) - success = False - - if not plugin.checkArchive(): - plugin.extract(progress) - success = True - else: - self.logInfo(basename(plugin.file), _("Password protected")) - self.logDebug("Passwords: %s" % str(passwords)) - - pwlist = copy(self.getPasswords()) - #remove already supplied pws from list (only local) - for pw in passwords: - if pw in pwlist: - pwlist.remove(pw) - - for pw in passwords + pwlist: - try: - self.logDebug("Try password: %s" % pw) - if plugin.checkPassword(pw): - plugin.extract(progress, pw) - self.addPassword(pw) - success = True - break - except WrongPassword: - self.logDebug("Password was wrong") - - if not success: - self.logError(basename(plugin.file), _("Wrong password")) - return [] - - if self.core.debug: - self.logDebug("Would delete: %s" % ", ".join(plugin.getDeleteFiles())) - - if self.getConfig("deletearchive"): - files = plugin.getDeleteFiles() - self.logInfo(_("Deleting %s files") % len(files)) - for f in files: - if exists(f): - remove(f) - else: - self.logDebug("%s does not exists" % f) - - self.logInfo(basename(plugin.file), _("Extracting finished")) - self.manager.dispatchEvent("unrarFinished", plugin.out, plugin.file) - - return plugin.getExtractedFiles() - - except ArchiveError, e: - self.logError(basename(plugin.file), _("Archive Error"), str(e)) - except CRCError: - self.logError(basename(plugin.file), _("CRC Mismatch")) - except Exception, e: - if self.core.debug: - print_exc() - self.logError(basename(plugin.file), _("Unknown Error"), str(e)) - - return [] - - @Expose - def getPasswords(self): - """ List of saved passwords """ - return self.passwords - - def reloadPasswords(self): - pwfile = self.getConfig("passwordfile") - if not exists(pwfile): - open(pwfile, "wb").close() - - passwords = [] - f = open(pwfile, "rb") - for pw in f.read().splitlines(): - passwords.append(pw) - f.close() - - self.passwords = passwords - - @Expose - def addPassword(self, pw): - """ Adds a password to saved list""" - pwfile = self.getConfig("passwordfile") - - if pw in self.passwords: - self.passwords.remove(pw) - self.passwords.insert(0, pw) - - f = open(pwfile, "wb") - for pw in self.passwords: - f.write(pw + "\n") - f.close() - - def setPermissions(self, files): - for f in files: - if not exists(f): - continue - try: - if self.config['permission']['change_file']: - if isfile(f): - chmod(f, int(self.config['permission']['file'], 8)) - elif isdir(f): - chmod(f, int(self.config['permission']['folder'], 8)) - - if self.config['permission']['change_dl'] and os.name != "nt": - uid = getpwnam(self.config['permission']['user'])[2] - gid = getgrnam(self.config['permission']['group'])[2] - chown(f, uid, gid) - except Exception, e: - self.logWarning(_("Setting User and Group failed"), e) diff --git a/module/plugins/hooks/FastixRu.py b/module/plugins/hooks/FastixRu.py deleted file mode 100644 index 879dba277..000000000 --- a/module/plugins/hooks/FastixRu.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.common.json_layer import json_loads -from module.network.RequestFactory import getURL -from module.plugins.internal.MultiHoster import MultiHoster - - -class FastixRu(MultiHoster): - __name__ = "FastixRu" - __type__ = "hook" - __version__ = "0.02" - - __config__ = [("activated", "bool", "Activated", False), - ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), - ("unloadFailing", "bool", "Revert to standard download if download fails", False), - ("interval", "int", "Reload interval in hours (0 to disable)", 24)] - - __description__ = """Fastix.ru hook plugin""" - __author_name__ = "Massimo Rosamilia" - __author_mail__ = "max@spiritix.eu" - - - def getHoster(self): - page = getURL( - "http://fastix.ru/api_v2/?apikey=5182964c3f8f9a7f0b00000a_kelmFB4n1IrnCDYuIFn2y&sub=allowed_sources") - host_list = json_loads(page) - host_list = host_list['allow'] - return host_list diff --git a/module/plugins/hooks/FreeWayMe.py b/module/plugins/hooks/FreeWayMe.py deleted file mode 100644 index 12d58ac8a..000000000 --- a/module/plugins/hooks/FreeWayMe.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.network.RequestFactory import getURL -from module.plugins.internal.MultiHoster import MultiHoster - - -class FreeWayMe(MultiHoster): - __name__ = "FreeWayMe" - __type__ = "hook" - __version__ = "0.11" - - __config__ = [("activated", "bool", "Activated", False), - ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"), - ("hosterList", "str", "Hoster list (comma separated)", ""), - ("unloadFailing", "bool", "Revert to stanard download if download fails", False), - ("interval", "int", "Reload interval in hours (0 to disable)", 24)] - - __description__ = """FreeWay.me hook plugin""" - __author_name__ = "Nicolas Giese" - __author_mail__ = "james@free-way.me" - - - def getHoster(self): - hostis = getURL("https://www.free-way.me/ajax/jd.php", get={"id": 3}).replace("\"", "").strip() - self.logDebug("hosters: %s" % hostis) - return [x.strip() for x in hostis.split(",") if x.strip()] diff --git a/module/plugins/hooks/HotFolder.py b/module/plugins/hooks/HotFolder.py deleted file mode 100644 index 4c81292e3..000000000 --- a/module/plugins/hooks/HotFolder.py +++ /dev/null @@ -1,65 +0,0 @@ -# -*- coding: utf-8 -*- - -import time - -from os import listdir, makedirs -from os.path import exists, isfile, join -from shutil import move - -from module.plugins.Hook import Hook - - -class HotFolder(Hook): - __name__ = "HotFolder" - __type__ = "hook" - __version__ = "0.11" - - __config__ = [("activated", "bool", "Activated", False), - ("folder", "str", "Folder to observe", "container"), - ("watch_file", "bool", "Observe link file", False), - ("keep", "bool", "Keep added containers", True), - ("file", "str", "Link file", "links.txt")] - - __description__ = """Observe folder and file for changes and add container and links""" - __author_name__ = "RaNaN" - __author_mail__ = "RaNaN@pyload.de" - - - def setup(self): - self.interval = 10 - - def periodical(self): - if not exists(join(self.getConfig("folder"), "finished")): - makedirs(join(self.getConfig("folder"), "finished")) - - if self.getConfig("watch_file"): - - if not exists(self.getConfig("file")): - f = open(self.getConfig("file"), "wb") - f.close() - - f = open(self.getConfig("file"), "rb") - content = f.read().strip() - f.close() - f = open(self.getConfig("file"), "wb") - f.close() - if content: - name = "%s_%s.txt" % (self.getConfig("file"), time.strftime("%H-%M-%S_%d%b%Y")) - - f = open(join(self.getConfig("folder"), "finished", name), "wb") - f.write(content) - f.close() - - self.core.api.addPackage(f.name, [f.name], 1) - - for f in listdir(self.getConfig("folder")): - path = join(self.getConfig("folder"), f) - - if not isfile(path) or f.endswith("~") or f.startswith("#") or f.startswith("."): - continue - - newpath = join(self.getConfig("folder"), "finished", f if self.getConfig("keep") else "tmp_" + f) - move(path, newpath) - - self.logInfo(_("Added %s from HotFolder") % f) - self.core.api.addPackage(f, [newpath], 1) diff --git a/module/plugins/hooks/IRCInterface.py b/module/plugins/hooks/IRCInterface.py deleted file mode 100644 index 7ebc0275f..000000000 --- a/module/plugins/hooks/IRCInterface.py +++ /dev/null @@ -1,404 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -import socket -import time - -from pycurl import FORM_FILE -from select import select -from threading import Thread -from time import sleep -from traceback import print_exc - -from module.Api import PackageDoesNotExists, FileDoesNotExists -from module.network.RequestFactory import getURL -from module.plugins.Hook import Hook -from module.utils import formatSize - - -class IRCInterface(Thread, Hook): - __name__ = "IRCInterface" - __type__ = "hook" - __version__ = "0.11" - - __config__ = [("activated", "bool", "Activated", False), - ("host", "str", "IRC-Server Address", "Enter your server here!"), - ("port", "int", "IRC-Server Port", 6667), - ("ident", "str", "Clients ident", "pyload-irc"), - ("realname", "str", "Realname", "pyload-irc"), - ("nick", "str", "Nickname the Client will take", "pyLoad-IRC"), - ("owner", "str", "Nickname the Client will accept commands from", "Enter your nick here!"), - ("info_file", "bool", "Inform about every file finished", False), - ("info_pack", "bool", "Inform about every package finished", True), - ("captcha", "bool", "Send captcha requests", True)] - - __description__ = """Connect to irc and let owner perform different tasks""" - __author_name__ = "Jeix" - __author_mail__ = "Jeix@hasnomail.com" - - - def __init__(self, core, manager): - Thread.__init__(self) - Hook.__init__(self, core, manager) - self.setDaemon(True) - # self.sm = core.server_methods - self.api = core.api # todo, only use api - - def coreReady(self): - self.abort = False - self.more = [] - self.new_package = {} - - self.start() - - def packageFinished(self, pypack): - try: - if self.getConfig("info_pack"): - self.response(_("Package finished: %s") % pypack.name) - except: - pass - - def downloadFinished(self, pyfile): - try: - if self.getConfig("info_file"): - self.response( - _("Download finished: %(name)s @ %(plugin)s ") % {"name": pyfile.name, "plugin": pyfile.pluginname}) - except: - pass - - def newCaptchaTask(self, task): - if self.getConfig("captcha") and task.isTextual(): - task.handler.append(self) - task.setWaiting(60) - - page = getURL("http://www.freeimagehosting.net/upload.php", - post={"attached": (FORM_FILE, task.captchaFile)}, multipart=True) - - url = re.search(r"\[img\]([^\[]+)\[/img\]\[/url\]", page).group(1) - self.response(_("New Captcha Request: %s") % url) - self.response(_("Answer with 'c %s text on the captcha'") % task.id) - - def run(self): - # connect to IRC etc. - self.sock = socket.socket() - host = self.getConfig("host") - self.sock.connect((host, self.getConfig("port"))) - nick = self.getConfig("nick") - self.sock.send("NICK %s\r\n" % nick) - self.sock.send("USER %s %s bla :%s\r\n" % (nick, host, nick)) - for t in self.getConfig("owner").split(): - if t.strip().startswith("#"): - self.sock.send("JOIN %s\r\n" % t.strip()) - self.logInfo("pyLoad IRC: Connected to %s!" % host) - self.logInfo("pyLoad IRC: Switching to listening mode!") - try: - self.main_loop() - - except IRCError, ex: - self.sock.send("QUIT :byebye\r\n") - print_exc() - self.sock.close() - - def main_loop(self): - readbuffer = "" - while True: - sleep(1) - fdset = select([self.sock], [], [], 0) - if self.sock not in fdset[0]: - continue - - if self.abort: - raise IRCError("quit") - - readbuffer += self.sock.recv(1024) - temp = readbuffer.split("\n") - readbuffer = temp.pop() - - for line in temp: - line = line.rstrip() - first = line.split() - - if first[0] == "PING": - self.sock.send("PONG %s\r\n" % first[1]) - - if first[0] == "ERROR": - raise IRCError(line) - - msg = line.split(None, 3) - if len(msg) < 4: - continue - - msg = { - "origin": msg[0][1:], - "action": msg[1], - "target": msg[2], - "text": msg[3][1:] - } - - self.handle_events(msg) - - def handle_events(self, msg): - if not msg['origin'].split("!", 1)[0] in self.getConfig("owner").split(): - return - - if msg['target'].split("!", 1)[0] != self.getConfig("nick"): - return - - if msg['action'] != "PRIVMSG": - return - - # HANDLE CTCP ANTI FLOOD/BOT PROTECTION - if msg['text'] == "\x01VERSION\x01": - self.logDebug("Sending CTCP VERSION.") - self.sock.send("NOTICE %s :%s\r\n" % (msg['origin'], "pyLoad! IRC Interface")) - return - elif msg['text'] == "\x01TIME\x01": - self.logDebug("Sending CTCP TIME.") - self.sock.send("NOTICE %s :%d\r\n" % (msg['origin'], time.time())) - return - elif msg['text'] == "\x01LAG\x01": - self.logDebug("Received CTCP LAG.") # don't know how to answer - return - - trigger = "pass" - args = None - - try: - temp = msg['text'].split() - trigger = temp[0] - if len(temp) > 1: - args = temp[1:] - except: - pass - - handler = getattr(self, "event_%s" % trigger, self.event_pass) - try: - res = handler(args) - for line in res: - self.response(line, msg['origin']) - except Exception, e: - self.logError("pyLoad IRC: " + repr(e)) - - def response(self, msg, origin=""): - if origin == "": - for t in self.getConfig("owner").split(): - self.sock.send("PRIVMSG %s :%s\r\n" % (t.strip(), msg)) - else: - self.sock.send("PRIVMSG %s :%s\r\n" % (origin.split("!", 1)[0], msg)) - - #### Events - - def event_pass(self, args): - return [] - - def event_status(self, args): - downloads = self.api.statusDownloads() - if not downloads: - return ["INFO: There are no active downloads currently."] - - temp_progress = "" - lines = ["ID - Name - Status - Speed - ETA - Progress"] - for data in downloads: - - if data.status == 5: - temp_progress = data.format_wait - else: - temp_progress = "%d%% (%s)" % (data.percent, data.format_size) - - lines.append("#%d - %s - %s - %s - %s - %s" % - ( - data.fid, - data.name, - data.statusmsg, - "%s/s" % formatSize(data.speed), - "%s" % data.format_eta, - temp_progress - )) - return lines - - def event_queue(self, args): - ps = self.api.getQueueData() - - if not ps: - return ["INFO: There are no packages in queue."] - - lines = [] - for pack in ps: - lines.append('PACKAGE #%s: "%s" with %d links.' % (pack.pid, pack.name, len(pack.links))) - - return lines - - def event_collector(self, args): - ps = self.api.getCollectorData() - if not ps: - return ["INFO: No packages in collector!"] - - lines = [] - for pack in ps: - lines.append('PACKAGE #%s: "%s" with %d links.' % (pack.pid, pack.name, len(pack.links))) - - return lines - - def event_info(self, args): - if not args: - return ["ERROR: Use info like this: info <id>"] - - info = None - try: - info = self.api.getFileData(int(args[0])) - - except FileDoesNotExists: - return ["ERROR: Link doesn't exists."] - - return ['LINK #%s: %s (%s) [%s][%s]' % (info.fid, info.name, info.format_size, info.statusmsg, info.plugin)] - - def event_packinfo(self, args): - if not args: - return ["ERROR: Use packinfo like this: packinfo <id>"] - - lines = [] - pack = None - try: - pack = self.api.getPackageData(int(args[0])) - - except PackageDoesNotExists: - return ["ERROR: Package doesn't exists."] - - id = args[0] - - self.more = [] - - lines.append('PACKAGE #%s: "%s" with %d links' % (id, pack.name, len(pack.links))) - for pyfile in pack.links: - self.more.append('LINK #%s: %s (%s) [%s][%s]' % (pyfile.fid, pyfile.name, pyfile.format_size, - pyfile.statusmsg, pyfile.plugin)) - - if len(self.more) < 6: - lines.extend(self.more) - self.more = [] - else: - lines.extend(self.more[:6]) - self.more = self.more[6:] - lines.append("%d more links do display." % len(self.more)) - - return lines - - def event_more(self, args): - if not self.more: - return ["No more information to display."] - - lines = self.more[:6] - self.more = self.more[6:] - lines.append("%d more links do display." % len(self.more)) - - return lines - - def event_start(self, args): - self.api.unpauseServer() - return ["INFO: Starting downloads."] - - def event_stop(self, args): - self.api.pauseServer() - return ["INFO: No new downloads will be started."] - - def event_add(self, args): - if len(args) < 2: - return ['ERROR: Add links like this: "add <packagename|id> links". ', - "This will add the link <link> to to the package <package> / the package with id <id>!"] - - pack = args[0].strip() - links = [x.strip() for x in args[1:]] - - count_added = 0 - count_failed = 0 - try: - id = int(pack) - pack = self.api.getPackageData(id) - if not pack: - return ["ERROR: Package doesn't exists."] - - #TODO add links - - return ["INFO: Added %d links to Package %s [#%d]" % (len(links), pack['name'], id)] - - except: - # create new package - id = self.api.addPackage(pack, links, 1) - return ["INFO: Created new Package %s [#%d] with %d links." % (pack, id, len(links))] - - def event_del(self, args): - if len(args) < 2: - return ["ERROR: Use del command like this: del -p|-l <id> [...] (-p indicates that the ids are from packages, -l indicates that the ids are from links)"] - - if args[0] == "-p": - ret = self.api.deletePackages(map(int, args[1:])) - return ["INFO: Deleted %d packages!" % len(args[1:])] - - elif args[0] == "-l": - ret = self.api.delLinks(map(int, args[1:])) - return ["INFO: Deleted %d links!" % len(args[1:])] - - else: - return ["ERROR: Use del command like this: del <-p|-l> <id> [...] (-p indicates that the ids are from packages, -l indicates that the ids are from links)"] - - def event_push(self, args): - if not args: - return ["ERROR: Push package to queue like this: push <package id>"] - - id = int(args[0]) - try: - info = self.api.getPackageInfo(id) - except PackageDoesNotExists: - return ["ERROR: Package #%d does not exist." % id] - - self.api.pushToQueue(id) - return ["INFO: Pushed package #%d to queue." % id] - - def event_pull(self, args): - if not args: - return ["ERROR: Pull package from queue like this: pull <package id>."] - - id = int(args[0]) - if not self.api.getPackageData(id): - return ["ERROR: Package #%d does not exist." % id] - - self.api.pullFromQueue(id) - return ["INFO: Pulled package #%d from queue to collector." % id] - - def event_c(self, args): - """ captcha answer """ - if not args: - return ["ERROR: Captcha ID missing."] - - task = self.core.captchaManager.getTaskByID(args[0]) - if not task: - return ["ERROR: Captcha Task with ID %s does not exists." % args[0]] - - task.setResult(" ".join(args[1:])) - return ["INFO: Result %s saved." % " ".join(args[1:])] - - def event_help(self, args): - lines = ["The following commands are available:", - "add <package|packid> <links> [...] Adds link to package. (creates new package if it does not exist)", - "queue Shows all packages in the queue", - "collector Shows all packages in collector", - "del -p|-l <id> [...] Deletes all packages|links with the ids specified", - "info <id> Shows info of the link with id <id>", - "packinfo <id> Shows info of the package with id <id>", - "more Shows more info when the result was truncated", - "start Starts all downloads", - "stop Stops the download (but not abort active downloads)", - "push <id> Push package to queue", - "pull <id> Pull package from queue", - "status Show general download status", - "help Shows this help message"] - return lines - - -class IRCError(Exception): - - def __init__(self, value): - self.value = value - - def __str__(self): - return repr(self.value) diff --git a/module/plugins/hooks/ImageTyperz.py b/module/plugins/hooks/ImageTyperz.py deleted file mode 100644 index d9d4e547e..000000000 --- a/module/plugins/hooks/ImageTyperz.py +++ /dev/null @@ -1,143 +0,0 @@ -# -*- coding: utf-8 -*- - -from __future__ import with_statement - -import re - -from base64 import b64encode -from pycurl import FORM_FILE, LOW_SPEED_TIME -from thread import start_new_thread - -from module.network.RequestFactory import getURL, getRequest -from module.plugins.Hook import Hook - - -class ImageTyperzException(Exception): - - def __init__(self, err): - self.err = err - - def getCode(self): - return self.err - - def __str__(self): - return "<ImageTyperzException %s>" % self.err - - def __repr__(self): - return "<ImageTyperzException %s>" % self.err - - -class ImageTyperz(Hook): - __name__ = "ImageTyperz" - __type__ = "hook" - __version__ = "0.04" - - __config__ = [("activated", "bool", "Activated", False), - ("username", "str", "Username", ""), - ("passkey", "password", "Password", ""), - ("force", "bool", "Force IT even if client is connected", False)] - - __description__ = """Send captchas to ImageTyperz.com""" - __author_name__ = ("RaNaN", "zoidberg") - __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz") - - SUBMIT_URL = "http://captchatypers.com/Forms/UploadFileAndGetTextNEW.ashx" - RESPOND_URL = "http://captchatypers.com/Forms/SetBadImage.ashx" - GETCREDITS_URL = "http://captchatypers.com/Forms/RequestBalance.ashx" - - - def setup(self): - self.info = {} - - def getCredits(self): - response = getURL(self.GETCREDITS_URL, post={"action": "REQUESTBALANCE", "username": self.getConfig("username"), - "password": self.getConfig("passkey")}) - - if response.startswith('ERROR'): - raise ImageTyperzException(response) - - try: - balance = float(response) - except: - raise ImageTyperzException("invalid response") - - self.logInfo("Account balance: $%s left" % response) - return balance - - def submit(self, captcha, captchaType="file", match=None): - req = getRequest() - #raise timeout threshold - req.c.setopt(LOW_SPEED_TIME, 80) - - try: - #workaround multipart-post bug in HTTPRequest.py - if re.match("^[A-Za-z0-9]*$", self.getConfig("passkey")): - multipart = True - data = (FORM_FILE, captcha) - else: - multipart = False - with open(captcha, 'rb') as f: - data = f.read() - data = b64encode(data) - - response = req.load(self.SUBMIT_URL, post={"action": "UPLOADCAPTCHA", - "username": self.getConfig("username"), - "password": self.getConfig("passkey"), "file": data}, - multipart=multipart) - finally: - req.close() - - if response.startswith("ERROR"): - raise ImageTyperzException(response) - else: - data = response.split('|') - if len(data) == 2: - ticket, result = data - else: - raise ImageTyperzException("Unknown response %s" % response) - - return ticket, result - - def newCaptchaTask(self, task): - if "service" in task.data: - return False - - if not task.isTextual(): - return False - - if not self.getConfig("username") or not self.getConfig("passkey"): - return False - - if self.core.isClientConnected() and not self.getConfig("force"): - return False - - if self.getCredits() > 0: - task.handler.append(self) - task.data['service'] = self.__name__ - task.setWaiting(100) - start_new_thread(self.processCaptcha, (task,)) - - else: - self.logInfo("Your %s account has not enough credits" % self.__name__) - - def captchaInvalid(self, task): - if task.data['service'] == self.__name__ and "ticket" in task.data: - response = getURL(self.RESPOND_URL, post={"action": "SETBADIMAGE", "username": self.getConfig("username"), - "password": self.getConfig("passkey"), - "imageid": task.data['ticket']}) - - if response == "SUCCESS": - self.logInfo("Bad captcha solution received, requested refund") - else: - self.logError("Bad captcha solution received, refund request failed", response) - - def processCaptcha(self, task): - c = task.captchaFile - try: - ticket, result = self.submit(c) - except ImageTyperzException, e: - task.error = e.getCode() - return - - task.data['ticket'] = ticket - task.setResult(result) diff --git a/module/plugins/hooks/LinkdecrypterCom.py b/module/plugins/hooks/LinkdecrypterCom.py deleted file mode 100644 index 1aa8f7ca1..000000000 --- a/module/plugins/hooks/LinkdecrypterCom.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.network.RequestFactory import getURL -from module.plugins.Hook import Hook -from module.utils import remove_chars - - -class LinkdecrypterCom(Hook): - __name__ = "LinkdecrypterCom" - __type__ = "hook" - __version__ = "0.19" - - __config__ = [("activated", "bool", "Activated", False)] - - __description__ = """Linkdecrypter.com hook plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - - def coreReady(self): - try: - self.loadPatterns() - except Exception, e: - self.logError(e) - - def loadPatterns(self): - page = getURL("http://linkdecrypter.com/") - m = re.search(r'<b>Supported\(\d+\)</b>: <i>([^+<]*)', page) - if m is None: - self.logError(_("Crypter list not found")) - return - - builtin = [name.lower() for name in self.core.pluginManager.crypterPlugins.keys()] - builtin.append("downloadserienjunkiesorg") - - crypter_pattern = re.compile("(\w[\w.-]+)") - online = [] - for crypter in m.group(1).split(', '): - m = re.match(crypter_pattern, crypter) - if m and remove_chars(m.group(1), "-.") not in builtin: - online.append(m.group(1).replace(".", "\\.")) - - if not online: - self.logError(_("Crypter list is empty")) - return - - regexp = r"https?://([^.]+\.)*?(%s)/.*" % "|".join(online) - - dict = self.core.pluginManager.crypterPlugins[self.__name__] - dict['pattern'] = regexp - dict['re'] = re.compile(regexp) - - self.logDebug("REGEXP: " + regexp) diff --git a/module/plugins/hooks/LinksnappyCom.py b/module/plugins/hooks/LinksnappyCom.py deleted file mode 100644 index 20da68632..000000000 --- a/module/plugins/hooks/LinksnappyCom.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.common.json_layer import json_loads -from module.network.RequestFactory import getURL -from module.plugins.internal.MultiHoster import MultiHoster - - -class LinksnappyCom(MultiHoster): - __name__ = "LinksnappyCom" - __type__ = "hook" - __version__ = "0.01" - - __config__ = [("activated", "bool", "Activated", False), - ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), - ("hosterList", "str", "Hoster list (comma separated)", ""), - ("unloadFailing", "bool", "Revert to standard download if download fails", False), - ("interval", "int", "Reload interval in hours (0 to disable)", 24)] - - __description__ = """Linksnappy.com hook plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - - def getHoster(self): - json_data = getURL('http://gen.linksnappy.com/lseAPI.php?act=FILEHOSTS') - json_data = json_loads(json_data) - - return json_data['return'].keys() diff --git a/module/plugins/hooks/MegaDebridEu.py b/module/plugins/hooks/MegaDebridEu.py deleted file mode 100644 index 605b04f21..000000000 --- a/module/plugins/hooks/MegaDebridEu.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.common.json_layer import json_loads -from module.network.RequestFactory import getURL -from module.plugins.internal.MultiHoster import MultiHoster - - -class MegaDebridEu(MultiHoster): - __name__ = "MegaDebridEu" - __type__ = "hook" - __version__ = "0.02" - - __config__ = [("activated", "bool", "Activated", False), - ("unloadFailing", "bool", "Revert to standard download if download fails", False)] - - __description__ = """mega-debrid.eu hook plugin""" - __author_name__ = "D.Ducatel" - __author_mail__ = "dducatel@je-geek.fr" - - - def getHoster(self): - reponse = getURL('http://www.mega-debrid.eu/api.php?action=getHosters') - json_data = json_loads(reponse) - - if json_data['response_code'] == "ok": - host_list = [element[0] for element in json_data['hosters']] - else: - self.logError("Unable to retrieve hoster list") - host_list = list() - - return host_list diff --git a/module/plugins/hooks/MergeFiles.py b/module/plugins/hooks/MergeFiles.py deleted file mode 100644 index ad1de7e6a..000000000 --- a/module/plugins/hooks/MergeFiles.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- coding: utf-8 -*- - -import os -import re -import traceback - -from module.plugins.Hook import Hook, threaded -from module.utils import safe_join, fs_encode - - -class MergeFiles(Hook): - __name__ = "MergeFiles" - __type__ = "hook" - __version__ = "0.12" - - __config__ = [("activated", "bool", "Activated", False)] - - __description__ = """Merges parts splitted with hjsplit""" - __author_name__ = "and9000" - __author_mail__ = "me@has-no-mail.com" - - BUFFER_SIZE = 4096 - - - def setup(self): - # nothing to do - pass - - @threaded - def packageFinished(self, pack): - files = {} - fid_dict = {} - for fid, data in pack.getChildren().iteritems(): - if re.search("\.[0-9]{3}$", data['name']): - if data['name'][:-4] not in files: - files[data['name'][:-4]] = [] - files[data['name'][:-4]].append(data['name']) - files[data['name'][:-4]].sort() - fid_dict[data['name']] = fid - - download_folder = self.config['general']['download_folder'] - - if self.config['general']['folder_per_package']: - download_folder = safe_join(download_folder, pack.folder) - - for name, file_list in files.iteritems(): - self.logInfo("Starting merging of %s" % name) - final_file = open(safe_join(download_folder, name), "wb") - - for splitted_file in file_list: - self.logDebug("Merging part %s" % splitted_file) - pyfile = self.core.files.getFile(fid_dict[splitted_file]) - pyfile.setStatus("processing") - try: - s_file = open(os.path.join(download_folder, splitted_file), "rb") - size_written = 0 - s_file_size = int(os.path.getsize(os.path.join(download_folder, splitted_file))) - while True: - f_buffer = s_file.read(self.BUFFER_SIZE) - if f_buffer: - final_file.write(f_buffer) - size_written += self.BUFFER_SIZE - pyfile.setProgress((size_written * 100) / s_file_size) - else: - break - s_file.close() - self.logDebug("Finished merging part %s" % splitted_file) - except Exception, e: - print traceback.print_exc() - finally: - pyfile.setProgress(100) - pyfile.setStatus("finished") - pyfile.release() - - final_file.close() - self.logInfo("Finished merging of %s" % name) diff --git a/module/plugins/hooks/MultiDebridCom.py b/module/plugins/hooks/MultiDebridCom.py deleted file mode 100644 index c5d1464f8..000000000 --- a/module/plugins/hooks/MultiDebridCom.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.common.json_layer import json_loads -from module.network.RequestFactory import getURL -from module.plugins.internal.MultiHoster import MultiHoster - - -class MultiDebridCom(MultiHoster): - __name__ = "MultiDebridCom" - __type__ = "hook" - __version__ = "0.01" - - __config__ = [("activated", "bool", "Activated", False), - ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), - ("hosterList", "str", "Hoster list (comma separated)", ""), - ("unloadFailing", "bool", "Revert to standard download if download fails", False), - ("interval", "int", "Reload interval in hours (0 to disable)", 24)] - - __description__ = """Multi-debrid.com hook plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - - def getHoster(self): - json_data = getURL('http://multi-debrid.com/api.php?hosts', decode=True) - self.logDebug('JSON data: ' + json_data) - json_data = json_loads(json_data) - - return json_data['hosts'] diff --git a/module/plugins/hooks/MultiHome.py b/module/plugins/hooks/MultiHome.py deleted file mode 100644 index e2167b65e..000000000 --- a/module/plugins/hooks/MultiHome.py +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- - -from time import time - -from module.plugins.Hook import Hook - - -class MultiHome(Hook): - __name__ = "MultiHome" - __type__ = "hook" - __version__ = "0.11" - - __config__ = [("activated", "bool", "Activated", False), - ("interfaces", "str", "Interfaces", "None")] - - __description__ = """Ip address changer""" - __author_name__ = "mkaay" - __author_mail__ = "mkaay@mkaay.de" - - - def setup(self): - self.register = {} - self.interfaces = [] - self.parseInterfaces(self.getConfig("interfaces").split(";")) - if not self.interfaces: - self.parseInterfaces([self.config['download']['interface']]) - self.setConfig("interfaces", self.toConfig()) - - def toConfig(self): - return ";".join([i.adress for i in self.interfaces]) - - def parseInterfaces(self, interfaces): - for interface in interfaces: - if not interface or str(interface).lower() == "none": - continue - self.interfaces.append(Interface(interface)) - - def coreReady(self): - requestFactory = self.core.requestFactory - oldGetRequest = requestFactory.getRequest - - def getRequest(pluginName, account=None): - iface = self.bestInterface(pluginName, account) - if iface: - iface.useFor(pluginName, account) - requestFactory.iface = lambda: iface.adress - self.logDebug("Multihome: using address: " + iface.adress) - return oldGetRequest(pluginName, account) - - requestFactory.getRequest = getRequest - - def bestInterface(self, pluginName, account): - best = None - for interface in self.interfaces: - if not best or interface.lastPluginAccess(pluginName, account) < best.lastPluginAccess(pluginName, account): - best = interface - return best - - -class Interface(object): - - def __init__(self, adress): - self.adress = adress - self.history = {} - - def lastPluginAccess(self, pluginName, account): - if (pluginName, account) in self.history: - return self.history[(pluginName, account)] - return 0 - - def useFor(self, pluginName, account): - self.history[(pluginName, account)] = time() - - def __repr__(self): - return "<Interface - %s>" % self.adress diff --git a/module/plugins/hooks/MultishareCz.py b/module/plugins/hooks/MultishareCz.py deleted file mode 100644 index 9249106d6..000000000 --- a/module/plugins/hooks/MultishareCz.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.network.RequestFactory import getURL -from module.plugins.internal.MultiHoster import MultiHoster - - -class MultishareCz(MultiHoster): - __name__ = "MultishareCz" - __type__ = "hook" - __version__ = "0.04" - - __config__ = [("activated", "bool", "Activated", False), - ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), - ("hosterList", "str", "Hoster list (comma separated)", "uloz.to")] - - __description__ = """MultiShare.cz hook plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - HOSTER_PATTERN = r'<img class="logo-shareserveru"[^>]*?alt="([^"]+)"></td>\s*<td class="stav">[^>]*?alt="OK"' - - - def getHoster(self): - page = getURL("http://www.multishare.cz/monitoring/") - return re.findall(self.HOSTER_PATTERN, page) diff --git a/module/plugins/hooks/OverLoadMe.py b/module/plugins/hooks/OverLoadMe.py deleted file mode 100644 index 5be0b8482..000000000 --- a/module/plugins/hooks/OverLoadMe.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.network.RequestFactory import getURL -from module.plugins.internal.MultiHoster import MultiHoster - - -class OverLoadMe(MultiHoster): - __name__ = "OverLoadMe" - __type__ = "hook" - __version__ = "0.01" - - __config__ = [("activated", "bool", "Activated", False), - ("https", "bool", "Enable HTTPS", True), - ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"), - ("hosterList", "str", "Hoster list (comma separated)", ""), - ("unloadFailing", "bool", "Revert to standard download if download fails", False), - ("interval", "int", "Reload interval in hours (0 to disable)", 12)] - - __description__ = """Over-Load.me hook plugin""" - __author_name__ = "marley" - __author_mail__ = "marley@over-load.me" - - - def getHoster(self): - https = "https" if self.getConfig("https") else "http" - page = getURL(https + "://api.over-load.me/hoster.php", - get={"auth": "0001-cb1f24dadb3aa487bda5afd3b76298935329be7700cd7-5329be77-00cf-1ca0135f"} - ).replace("\"", "").strip() - self.logDebug("Hosterlist: %s" % page) - - return [x.strip() for x in page.split(",") if x.strip()] diff --git a/module/plugins/hooks/Premium4Me.py b/module/plugins/hooks/Premium4Me.py deleted file mode 100644 index 9c6701b06..000000000 --- a/module/plugins/hooks/Premium4Me.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.network.RequestFactory import getURL -from module.plugins.internal.MultiHoster import MultiHoster - - -class Premium4Me(MultiHoster): - __name__ = "Premium4Me" - __type__ = "hook" - __version__ = "0.03" - - __config__ = [("activated", "bool", "Activated", False), - ("hosterListMode", "all;listed;unlisted", "Use for downloads from supported hosters:", "all"), - ("hosterList", "str", "Hoster list (comma separated)", "")] - - __description__ = """Premium.to hook plugin""" - __author_name__ = ("RaNaN", "zoidberg", "stickell") - __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz", "l.stickell@yahoo.it") - - - def getHoster(self): - page = getURL("http://premium.to/api/hosters.php?authcode=%s" % self.account.authcode) - return [x.strip() for x in page.replace("\"", "").split(";")] - - def coreReady(self): - self.account = self.core.accountManager.getAccountPlugin("Premium4Me") - - user = self.account.selectAccount()[0] - - if not user: - self.logError(_("Please add your premium.to account first and restart pyLoad")) - return - - return MultiHoster.coreReady(self) diff --git a/module/plugins/hooks/PremiumizeMe.py b/module/plugins/hooks/PremiumizeMe.py deleted file mode 100644 index e7291ece9..000000000 --- a/module/plugins/hooks/PremiumizeMe.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.common.json_layer import json_loads -from module.network.RequestFactory import getURL -from module.plugins.internal.MultiHoster import MultiHoster - - -class PremiumizeMe(MultiHoster): - __name__ = "PremiumizeMe" - __type__ = "hook" - __version__ = "0.12" - - __config__ = [("activated", "bool", "Activated", False), - ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"), - ("hosterList", "str", "Hoster list (comma separated)", ""), - ("unloadFailing", "bool", "Revert to stanard download if download fails", False), - ("interval", "int", "Reload interval in hours (0 to disable)", 24)] - - __description__ = """Premiumize.me hook plugin""" - __author_name__ = "Florian Franzen" - __author_mail__ = "FlorianFranzen@gmail.com" - - - def getHoster(self): - # If no accounts are available there will be no hosters available - if not self.account or not self.account.canUse(): - return [] - - # Get account data - (user, data) = self.account.selectAccount() - - # Get supported hosters list from premiumize.me using the - # json API v1 (see https://secure.premiumize.me/?show=api) - answer = getURL("https://api.premiumize.me/pm-api/v1.php?method=hosterlist¶ms[login]=%s¶ms[pass]=%s" % ( - user, data['password'])) - data = json_loads(answer) - - # If account is not valid thera are no hosters available - if data['status'] != 200: - return [] - - # Extract hosters from json file - return data['result']['hosterlist'] - - def coreReady(self): - # Get account plugin and check if there is a valid account available - self.account = self.core.accountManager.getAccountPlugin("PremiumizeMe") - if not self.account.canUse(): - self.account = None - self.logError(_("Please add a valid premiumize.me account first and restart pyLoad.")) - return - - # Run the overwriten core ready which actually enables the multihoster hook - return MultiHoster.coreReady(self) diff --git a/module/plugins/hooks/RPNetBiz.py b/module/plugins/hooks/RPNetBiz.py deleted file mode 100644 index 9b9b7cda9..000000000 --- a/module/plugins/hooks/RPNetBiz.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.common.json_layer import json_loads -from module.network.RequestFactory import getURL -from module.plugins.internal.MultiHoster import MultiHoster - - -class RPNetBiz(MultiHoster): - __name__ = "RPNetBiz" - __type__ = "hook" - __version__ = "0.1" - - __config__ = [("activated", "bool", "Activated", False), - ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"), - ("hosterList", "str", "Hoster list (comma separated)", ""), - ("unloadFailing", "bool", "Revert to stanard download if download fails", False), - ("interval", "int", "Reload interval in hours (0 to disable)", 24)] - - __description__ = """RPNet.biz hook plugin""" - __author_name__ = "Dman" - __author_mail__ = "dmanugm@gmail.com" - - - def getHoster(self): - # No hosts supported if no account - if not self.account or not self.account.canUse(): - return [] - - # Get account data - (user, data) = self.account.selectAccount() - - response = getURL("https://premium.rpnet.biz/client_api.php", - get={"username": user, "password": data['password'], "action": "showHosterList"}) - hoster_list = json_loads(response) - - # If account is not valid thera are no hosters available - if 'error' in hoster_list: - return [] - - # Extract hosters from json file - return hoster_list['hosters'] - - def coreReady(self): - # Get account plugin and check if there is a valid account available - self.account = self.core.accountManager.getAccountPlugin("RPNetBiz") - if not self.account.canUse(): - self.account = None - self.logError(_("Please enter your %s account or deactivate this plugin") % "rpnet") - return - - # Run the overwriten core ready which actually enables the multihoster hook - return MultiHoster.coreReady(self) diff --git a/module/plugins/hooks/RealdebridCom.py b/module/plugins/hooks/RealdebridCom.py deleted file mode 100644 index 87902ac7f..000000000 --- a/module/plugins/hooks/RealdebridCom.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.network.RequestFactory import getURL -from module.plugins.internal.MultiHoster import MultiHoster - - -class RealdebridCom(MultiHoster): - __name__ = "RealdebridCom" - __type__ = "hook" - __version__ = "0.43" - - __config__ = [("activated", "bool", "Activated", False), - ("https", "bool", "Enable HTTPS", False), - ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"), - ("hosterList", "str", "Hoster list (comma separated)", ""), - ("unloadFailing", "bool", "Revert to stanard download if download fails", False), - ("interval", "int", "Reload interval in hours (0 to disable)", 24)] - - __description__ = """Real-Debrid.com hook plugin""" - __author_name__ = "Devirex Hazzard" - __author_mail__ = "naibaf_11@yahoo.de" - - - def getHoster(self): - https = "https" if self.getConfig("https") else "http" - page = getURL(https + "://real-debrid.com/api/hosters.php").replace("\"", "").strip() - - return [x.strip() for x in page.split(",") if x.strip()] diff --git a/module/plugins/hooks/RehostTo.py b/module/plugins/hooks/RehostTo.py deleted file mode 100644 index d504bb83b..000000000 --- a/module/plugins/hooks/RehostTo.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.network.RequestFactory import getURL -from module.plugins.internal.MultiHoster import MultiHoster - - -class RehostTo(MultiHoster): - __name__ = "RehostTo" - __type__ = "hook" - __version__ = "0.43" - - __config__ = [("activated", "bool", "Activated", False), - ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), - ("hosterList", "str", "Hoster list (comma separated)", ""), - ("unloadFailing", "bool", "Revert to stanard download if download fails", False), - ("interval", "int", "Reload interval in hours (0 to disable)", 24)] - - __description__ = """Rehost.to hook plugin""" - __author_name__ = "RaNaN" - __author_mail__ = "RaNaN@pyload.org" - - - def getHoster(self): - page = getURL("http://rehost.to/api.php?cmd=get_supported_och_dl&long_ses=%s" % self.long_ses) - return [x.strip() for x in page.replace("\"", "").split(",")] - - def coreReady(self): - self.account = self.core.accountManager.getAccountPlugin("RehostTo") - - user = self.account.selectAccount()[0] - - if not user: - self.logError("Rehost.to: " + _("Please add your rehost.to account first and restart pyLoad")) - return - - data = self.account.getAccountInfo(user) - self.ses = data['ses'] - self.long_ses = data['long_ses'] - - return MultiHoster.coreReady(self) diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py deleted file mode 100644 index 3aef6f8cd..000000000 --- a/module/plugins/hooks/RestartFailed.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Hook import Hook - - -class RestartFailed(Hook): - __name__ = "RestartFailed" - __type__ = "hook" - __version__ = "1.55" - - __config__ = [("activated", "bool", "Activated", False), - ("interval", "int", "Check interval in minutes", 90)] - - __description__ = """Periodically restart all failed downloads in queue""" - __author_name__ = "Walter Purcaro" - __author_mail__ = "vuolter@gmail.com" - - MIN_INTERVAL = 15 * 60 #: 15m minimum check interval (value is in seconds) - - event_list = ["pluginConfigChanged"] - - - def pluginConfigChanged(self, plugin, name, value): - if name == "interval": - interval = value * 60 - if self.MIN_INTERVAL <= interval != self.interval: - self.core.scheduler.removeJob(self.cb) - self.interval = interval - self.initPeriodical() - else: - self.logDebug("Invalid interval value, kept current") - - def periodical(self): - self.logInfo("Restart failed downloads") - self.api.restartFailed() - - def setup(self): - self.api = self.core.api - self.interval = self.MIN_INTERVAL - - def coreReady(self): - self.pluginConfigChanged(self.__name__, "interval", self.getConfig("interval")) diff --git a/module/plugins/hooks/SimplyPremiumCom.py b/module/plugins/hooks/SimplyPremiumCom.py deleted file mode 100644 index a946d391e..000000000 --- a/module/plugins/hooks/SimplyPremiumCom.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.common.json_layer import json_loads -from module.network.RequestFactory import getURL -from module.plugins.internal.MultiHoster import MultiHoster - - -class SimplyPremiumCom(MultiHoster): - __name__ = "SimplyPremiumCom" - __type__ = "hook" - __version__ = "0.02" - - __config__ = [("activated", "bool", "Activated", "False"), - ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), - ("hosterList", "str", "Hoster list (comma separated)", ""), - ("unloadFailing", "bool", "Revert to standard download if download fails", "False"), - ("interval", "int", "Reload interval in hours (0 to disable)", "24")] - - __description__ = """Simply-Premium.com hook plugin""" - __author_name__ = "EvolutionClip" - __author_mail__ = "evolutionclip@live.de" - - - def getHoster(self): - json_data = getURL('http://www.simply-premium.com/api/hosts.php?format=json&online=1') - json_data = json_loads(json_data) - - host_list = [element['regex'] for element in json_data['result']] - - return host_list diff --git a/module/plugins/hooks/SimplydebridCom.py b/module/plugins/hooks/SimplydebridCom.py deleted file mode 100644 index ab13f312e..000000000 --- a/module/plugins/hooks/SimplydebridCom.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.network.RequestFactory import getURL -from module.plugins.internal.MultiHoster import MultiHoster - - -class SimplydebridCom(MultiHoster): - __name__ = "SimplydebridCom" - __type__ = "hook" - __version__ = "0.01" - - __config__ = [("activated", "bool", "Activated", False), - ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), - ("hosterList", "str", "Hoster list (comma separated)", "")] - - __description__ = """Simply-Debrid.com hook plugin""" - __author_name__ = "Kagenoshin" - __author_mail__ = "kagenoshin@gmx.ch" - - - def getHoster(self): - page = getURL("http://simply-debrid.com/api.php?list=1") - return [x.strip() for x in page.rstrip(';').replace("\"", "").split(";")] diff --git a/module/plugins/hooks/UnSkipOnFail.py b/module/plugins/hooks/UnSkipOnFail.py deleted file mode 100644 index f25c5e2b4..000000000 --- a/module/plugins/hooks/UnSkipOnFail.py +++ /dev/null @@ -1,85 +0,0 @@ -# -*- coding: utf-8 -*- - -from os.path import basename - -from module.PyFile import PyFile -from module.plugins.Hook import Hook -from module.utils import fs_encode - - -class UnSkipOnFail(Hook): - __name__ = "UnSkipOnFail" - __type__ = "hook" - __version__ = "0.01" - - __config__ = [("activated", "bool", "Activated", True)] - - __description__ = """When a download fails, restart skipped duplicates""" - __author_name__ = "hagg" - __author_mail__ = None - - - def downloadFailed(self, pyfile): - pyfile_name = basename(pyfile.name) - pid = pyfile.package().id - msg = 'look for skipped duplicates for %s (pid:%s)...' - self.logInfo(msg % (pyfile_name, pid)) - dups = self.findDuplicates(pyfile) - for link in dups: - # check if link is "skipped"(=4) - if link.status == 4: - lpid = link.packageID - self.logInfo('restart "%s" (pid:%s)...' % (pyfile_name, lpid)) - self.setLinkStatus(link, "queued") - - def findDuplicates(self, pyfile): - """ Search all packages for duplicate links to "pyfile". - Duplicates are links that would overwrite "pyfile". - To test on duplicity the package-folder and link-name - of twolinks are compared (basename(link.name)). - So this method returns a list of all links with equal - package-folders and filenames as "pyfile", but except - the data for "pyfile" iotselöf. - It does MOT check the link's status. - """ - dups = [] - pyfile_name = fs_encode(basename(pyfile.name)) - # get packages (w/o files, as most file data is useless here) - queue = self.core.api.getQueue() - for package in queue: - # check if package-folder equals pyfile's package folder - if fs_encode(package.folder) == fs_encode(pyfile.package().folder): - # now get packaged data w/ files/links - pdata = self.core.api.getPackageData(package.pid) - if pdata.links: - for link in pdata.links: - link_name = fs_encode(basename(link.name)) - # check if link name collides with pdata's name - if link_name == pyfile_name: - # at last check if it is not pyfile itself - if link.fid != pyfile.id: - dups.append(link) - return dups - - def setLinkStatus(self, link, new_status): - """ Change status of "link" to "new_status". - "link" has to be a valid FileData object, - "new_status" has to be a valid status name - (i.e. "queued" for this Plugin) - It creates a temporary PyFile object using - "link" data, changes its status, and tells - the core.files-manager to save its data. - """ - pyfile = PyFile(self.core.files, - link.fid, - link.url, - link.name, - link.size, - link.status, - link.error, - link.plugin, - link.packageID, - link.order) - pyfile.setStatus(new_status) - self.core.files.save() - pyfile.release() diff --git a/module/plugins/hooks/UnrestrictLi.py b/module/plugins/hooks/UnrestrictLi.py deleted file mode 100644 index ee5d79269..000000000 --- a/module/plugins/hooks/UnrestrictLi.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.common.json_layer import json_loads -from module.network.RequestFactory import getURL -from module.plugins.internal.MultiHoster import MultiHoster - - -class UnrestrictLi(MultiHoster): - __name__ = "UnrestrictLi" - __type__ = "hook" - __version__ = "0.02" - - __config__ = [("activated", "bool", "Activated", False), - ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), - ("hosterList", "str", "Hoster list (comma separated)", ""), - ("unloadFailing", "bool", "Revert to standard download if download fails", False), - ("interval", "int", "Reload interval in hours (0 to disable)", 24), - ("history", "bool", "Delete History", False)] - - __description__ = """Unrestrict.li hook plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - - def getHoster(self): - json_data = getURL('http://unrestrict.li/api/jdownloader/hosts.php?format=json') - json_data = json_loads(json_data) - - host_list = [element['host'] for element in json_data['result']] - - return host_list diff --git a/module/plugins/hooks/UpdateManager.py b/module/plugins/hooks/UpdateManager.py deleted file mode 100644 index 320bc24e3..000000000 --- a/module/plugins/hooks/UpdateManager.py +++ /dev/null @@ -1,281 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -import sys - -from operator import itemgetter -from os import path, remove, stat - -from module.network.RequestFactory import getURL -from module.plugins.Hook import Expose, Hook, threaded -from module.utils import safe_join - - -class UpdateManager(Hook): - __name__ = "UpdateManager" - __type__ = "hook" - __version__ = "0.35" - - __config__ = [("activated", "bool", "Activated", True), - ("mode", "pyLoad + plugins;plugins only", "Check updates for", "pyLoad + plugins"), - ("interval", "int", "Check interval in hours", 8), - ("reloadplugins", "bool", "Monitor plugins for code changes (debug mode only)", True), - ("nodebugupdate", "bool", "Don't check for updates in debug mode", True)] - - __description__ = """ Check for updates """ - __author_name__ = "Walter Purcaro" - __author_mail__ = "vuolter@gmail.com" - - - event_list = ["pluginConfigChanged"] - - SERVER_URL = "http://updatemanager.pyload.org" - MIN_INTERVAL = 3 * 60 * 60 #: 3h minimum check interval (value is in seconds) - - - def pluginConfigChanged(self, plugin, name, value): - if name == "interval": - interval = value * 60 * 60 - if self.MIN_INTERVAL <= interval != self.interval: - self.core.scheduler.removeJob(self.cb) - self.interval = interval - self.initPeriodical() - else: - self.logDebug("Invalid interval value, kept current") - elif name == "reloadplugins": - if self.cb2: - self.core.scheduler.removeJob(self.cb2) - if value is True and self.core.debug: - self.periodical2() - - def coreReady(self): - self.pluginConfigChanged(self.__name__, "interval", self.getConfig("interval")) - x = lambda: self.pluginConfigChanged(self.__name__, "reloadplugins", self.getConfig("reloadplugins")) - self.core.scheduler.addJob(10, x, threaded=False) - - def unload(self): - self.pluginConfigChanged(self.__name__, "reloadplugins", False) - - def setup(self): - self.cb2 = None - self.interval = self.MIN_INTERVAL - self.updating = False - self.info = {'pyload': False, 'version': None, 'plugins': False} - self.mtimes = {} #: store modification time for each plugin - - def periodical2(self): - if not self.updating: - self.autoreloadPlugins() - self.cb2 = self.core.scheduler.addJob(4, self.periodical2, threaded=False) - - @Expose - def autoreloadPlugins(self): - """ reload and reindex all modified plugins """ - modules = filter( - lambda m: m and (m.__name__.startswith("module.plugins.") or - m.__name__.startswith("userplugins.")) and - m.__name__.count(".") >= 2, sys.modules.itervalues() - ) - - reloads = [] - - for m in modules: - root, type, name = m.__name__.rsplit(".", 2) - id = (type, name) - if type in self.core.pluginManager.plugins: - f = m.__file__.replace(".pyc", ".py") - if not path.isfile(f): - continue - - mtime = stat(f).st_mtime - - if id not in self.mtimes: - self.mtimes[id] = mtime - elif self.mtimes[id] < mtime: - reloads.append(id) - self.mtimes[id] = mtime - - return True if self.core.pluginManager.reloadPlugins(reloads) else False - - def periodical(self): - if not self.info['pyload'] and not (self.getConfig("nodebugupdate") and self.core.debug): - self.updateThread() - - def server_request(self): - try: - return getURL(self.SERVER_URL, get={'v': self.core.api.getServerVersion()}).splitlines() - except: - self.logWarning(_("Unable to contact server to get updates")) - - @threaded - def updateThread(self): - self.updating = True - status = self.update(onlyplugin=self.getConfig("mode") == "plugins only") - if status == 2: - self.core.api.restart() - else: - self.updating = False - - @Expose - def updatePlugins(self): - """ simple wrapper for calling plugin update quickly """ - return self.update(onlyplugin=True) - - @Expose - def update(self, onlyplugin=False): - """ check for updates """ - data = self.server_request() - if not data: - exitcode = 0 - elif data[0] == "None": - self.logInfo(_("No new pyLoad version available")) - updates = data[1:] - exitcode = self._updatePlugins(updates) - elif onlyplugin: - exitcode = 0 - else: - newversion = data[0] - self.logInfo(_("*** New pyLoad Version %s available ***") % newversion) - self.logInfo(_("*** Get it here: https://github.com/pyload/pyload/releases ***")) - exitcode = 3 - self.info['pyload'] = True - self.info['version'] = newversion - return exitcode #: 0 = No plugins updated; 1 = Plugins updated; 2 = Plugins updated, but restart required; 3 = No plugins updated, new pyLoad version available - - def _updatePlugins(self, updates): - """ check for plugin updates """ - - if self.info['plugins']: - return False #: plugins were already updated - - updated = [] - - vre = re.compile(r'__version__.*=.*("|\')([0-9.]+)') - url = updates[0] - schema = updates[1].split('|') - if "BLACKLIST" in updates: - blacklist = updates[updates.index('BLACKLIST') + 1:] - updates = updates[2:updates.index('BLACKLIST')] - else: - blacklist = None - updates = updates[2:] - - upgradable = sorted(map(lambda x: dict(zip(schema, x.split('|'))), updates), key=itemgetter("type", "name")) - for plugin in upgradable: - filename = plugin['name'] - prefix = plugin['type'] - version = plugin['version'] - - if filename.endswith(".pyc"): - name = filename[:filename.find("_")] - else: - name = filename.replace(".py", "") - - #@TODO: obsolete after 0.4.10 - if prefix.endswith("s"): - type = prefix[:-1] - else: - type = prefix - - plugins = getattr(self.core.pluginManager, "%sPlugins" % type) - - oldver = float(plugins[name]['v']) if name in plugins else None - newver = float(version) - - if not oldver: - msg = "New [%(type)s] %(name)s (v%(newver)s)" - elif newver > oldver: - msg = "New version of [%(type)s] %(name)s (v%(oldver)s -> v%(newver)s)" - else: - continue - - self.logInfo(_(msg) % { - 'type': type, - 'name': name, - 'oldver': oldver, - 'newver': newver, - }) - - try: - content = getURL(url % plugin) - m = vre.search(content) - if m and m.group(2) == version: - f = open(safe_join("userplugins", prefix, filename), "wb") - f.write(content) - f.close() - updated.append((prefix, name)) - else: - raise Exception, _("Version mismatch") - except Exception, e: - self.logError(_("Error updating plugin %s") % filename, str(e)) - - if blacklist: - blacklisted = sorted(map(lambda x: (x.split('|')[0], x.split('|')[1].rsplit('.', 1)[0]), blacklist)) - - # Always protect UpdateManager from self-removing - try: - blacklisted.remove(("hook", "UpdateManager")) - except: - pass - - removed = self.removePlugins(blacklisted) - for t, n in removed: - self.logInfo(_("Removed blacklisted plugin [%(type)s] %(name)s") % { - 'type': t, - 'name': n, - }) - - if updated: - reloaded = self.core.pluginManager.reloadPlugins(updated) - if reloaded: - self.logInfo(_("Plugins updated and reloaded")) - exitcode = 1 - else: - self.logInfo(_("*** Plugins have been updated, but need a pyLoad restart to be reloaded ***")) - self.info['plugins'] = True - exitcode = 2 - else: - self.logInfo(_("No plugin updates available")) - exitcode = 0 - - return exitcode #: 0 = No plugins updated; 1 = Plugins updated; 2 = Plugins updated, but restart required - - @Expose - def removePlugins(self, type_plugins): - """ delete plugins from disk """ - - if not type_plugins: - return - - self.logDebug("Request deletion of plugins: %s" % type_plugins) - - removed = [] - - for type, name in type_plugins: - err = False - file = name + ".py" - - for root in ("userplugins", path.join(pypath, "module", "plugins")): - - filename = safe_join(root, type, file) - try: - remove(filename) - except Exception, e: - self.logDebug("Error deleting \"%s\"" % path.basename(filename), str(e)) - err = True - - filename += "c" - if path.isfile(filename): - try: - if type == "hook": - self.manager.deactivateHook(name) - remove(filename) - except Exception, e: - self.logDebug("Error deleting \"%s\"" % path.basename(filename), str(e)) - err = True - - if not err: - id = (type, name) - removed.append(id) - - return removed #: return a list of the plugins successfully removed diff --git a/module/plugins/hooks/WindowsPhoneToastNotify.py b/module/plugins/hooks/WindowsPhoneToastNotify.py deleted file mode 100644 index 01570b966..000000000 --- a/module/plugins/hooks/WindowsPhoneToastNotify.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- - -import httplib -import time - -from module.plugins.Hook import Hook - - -class WindowsPhoneToastNotify(Hook): - __name__ = "WindowsPhoneToastNotify" - __type__ = "hook" - __version__ = "0.02" - - __config__ = [("activated", "bool", "Activated", False), - ("force", "bool", "Force even if client is connected", False), - ("pushId", "str", "pushId", ""), - ("pushUrl", "str", "pushUrl", ""), - ("pushTimeout", "int", "Timeout between notifications in seconds", 0)] - - __description__ = """Send push notifications to Windows Phone""" - __author_name__ = "Andy Voigt" - __author_mail__ = "phone-support@hotmail.de" - - - def setup(self): - self.info = {} - - def getXmlData(self): - myxml = ("<?xml version='1.0' encoding='utf-8'?> <wp:Notification xmlns:wp='WPNotification'> " - "<wp:Toast> <wp:Text1>Pyload Mobile</wp:Text1> <wp:Text2>Captcha waiting!</wp:Text2> " - "</wp:Toast> </wp:Notification>") - return myxml - - def doRequest(self): - URL = self.getConfig("pushUrl") - request = self.getXmlData() - webservice = httplib.HTTP(URL) - webservice.putrequest("POST", self.getConfig("pushId")) - webservice.putheader("Host", URL) - webservice.putheader("Content-type", "text/xml") - webservice.putheader("X-NotificationClass", "2") - webservice.putheader("X-WindowsPhone-Target", "toast") - webservice.putheader("Content-length", "%d" % len(request)) - webservice.endheaders() - webservice.send(request) - webservice.close() - self.setStorage("LAST_NOTIFY", time.time()) - - def newCaptchaTask(self, task): - if not self.getConfig("pushId") or not self.getConfig("pushUrl"): - return False - - if self.core.isClientConnected() and not self.getConfig("force"): - return False - - if (time.time() - float(self.getStorage("LAST_NOTIFY", 0))) < self.getConf("pushTimeout"): - return False - - self.doRequest() diff --git a/module/plugins/hooks/XFileSharingPro.py b/module/plugins/hooks/XFileSharingPro.py deleted file mode 100644 index eb0376921..000000000 --- a/module/plugins/hooks/XFileSharingPro.py +++ /dev/null @@ -1,78 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.Hook import Hook - - -class XFileSharingPro(Hook): - __name__ = "XFileSharingPro" - __type__ = "hook" - __version__ = "0.11" - - __config__ = [("activated", "bool", "Activated", True), - ("loadDefault", "bool", "Include default (built-in) hoster list", True), - ("includeList", "str", "Include hosters (comma separated)", ""), - ("excludeList", "str", "Exclude hosters (comma separated)", "")] - - __description__ = """XFileSharingPro hook plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - - def coreReady(self): - self.loadPattern() - - def loadPattern(self): - hosterList = self.getConfigSet('includeList') - excludeList = self.getConfigSet('excludeList') - - if self.getConfig('loadDefault'): - hosterList |= set(( - #WORKING HOSTERS: - "aieshare.com", "asixfiles.com", "banashare.com", "cyberlocker.ch", "eyesfile.co", "eyesfile.com", - "fileband.com", "filedwon.com", "filedownloads.org", "hipfile.com", "kingsupload.com", "mlfat4arab.com", - "netuploaded.com", "odsiebie.pl", "q4share.com", "ravishare.com", "uptobox.com", "verzend.be", - "xvidstage.com", "thefile.me", "sharesix.com", "hostingbulk.com", - #NOT TESTED: - "bebasupload.com", "boosterking.com", "divxme.com", "filevelocity.com", "glumbouploads.com", - "grupload.com", "heftyfile.com", "host4desi.com", "laoupload.com", "linkzhost.com", "movreel.com", - "rockdizfile.com", "limfile.com", "share76.com", "sharebeast.com", "sharehut.com", "sharerun.com", - "shareswift.com", "sharingonline.com", "6ybh-upload.com", "skipfile.com", "spaadyshare.com", - "space4file.com", "uploadbaz.com", "uploadc.com", "uploaddot.com", "uploadfloor.com", "uploadic.com", - "uploadville.com", "vidbull.com", "zalaa.com", "zomgupload.com", "kupload.org", "movbay.org", - "multishare.org", "omegave.org", "toucansharing.org", "uflinq.org", "banicrazy.info", "flowhot.info", - "upbrasil.info", "shareyourfilez.biz", "bzlink.us", "cloudcache.cc", "fileserver.cc", "farshare.to", - "filemaze.ws", "filehost.ws", "filestock.ru", "moidisk.ru", "4up.im", "100shared.com", "sharesix.com", - "thefile.me", "filenuke.com", "sharerepo.com", "mightyupload.com", - #WRONG FILE NAME: - "sendmyway.com", "upchi.co.il", - #NOT WORKING: - "amonshare.com", "imageporter.com", "file4safe.com", - #DOWN OR BROKEN: - "ddlanime.com", "fileforth.com", "loombo.com", "goldfile.eu", "putshare.com" - )) - - hosterList -= (excludeList) - hosterList -= set(('', u'')) - - if not hosterList: - self.unload() - return - - regexp = r"http://(?:[^/]*\.)?(%s)/\w{12}" % ("|".join(sorted(hosterList)).replace('.', '\.')) - #self.logDebug(regexp) - - dict = self.core.pluginManager.hosterPlugins['XFileSharingPro'] - dict['pattern'] = regexp - dict['re'] = re.compile(regexp) - self.logDebug("Pattern loaded - handling %d hosters" % len(hosterList)) - - def getConfigSet(self, option): - s = self.getConfig(option).lower().replace('|', ',').replace(';', ',') - return set([x.strip() for x in s.split(',')]) - - def unload(self): - dict = self.core.pluginManager.hosterPlugins['XFileSharingPro'] - dict['pattern'] = r'^unmatchable$' - dict['re'] = re.compile(r'^unmatchable$') diff --git a/module/plugins/hooks/XMPPInterface.py b/module/plugins/hooks/XMPPInterface.py deleted file mode 100644 index c4a94a8bc..000000000 --- a/module/plugins/hooks/XMPPInterface.py +++ /dev/null @@ -1,233 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyxmpp import streamtls -from pyxmpp.all import JID, Message -from pyxmpp.interface import implements -from pyxmpp.interfaces import * -from pyxmpp.jabber.client import JabberClient - -from module.plugins.hooks.IRCInterface import IRCInterface - - -class XMPPInterface(IRCInterface, JabberClient): - __name__ = "XMPPInterface" - __type__ = "hook" - __version__ = "0.11" - - __config__ = [("activated", "bool", "Activated", False), - ("jid", "str", "Jabber ID", "user@exmaple-jabber-server.org"), - ("pw", "str", "Password", ""), - ("tls", "bool", "Use TLS", False), - ("owners", "str", "List of JIDs accepting commands from", "me@icq-gateway.org;some@msn-gateway.org"), - ("info_file", "bool", "Inform about every file finished", False), - ("info_pack", "bool", "Inform about every package finished", True), - ("captcha", "bool", "Send captcha requests", True)] - - __description__ = """Connect to jabber and let owner perform different tasks""" - __author_name__ = "RaNaN" - __author_mail__ = "RaNaN@pyload.org" - - - implements(IMessageHandlersProvider) - - def __init__(self, core, manager): - IRCInterface.__init__(self, core, manager) - - self.jid = JID(self.getConfig("jid")) - password = self.getConfig("pw") - - # if bare JID is provided add a resource -- it is required - if not self.jid.resource: - self.jid = JID(self.jid.node, self.jid.domain, "pyLoad") - - if self.getConfig("tls"): - tls_settings = streamtls.TLSSettings(require=True, verify_peer=False) - auth = ("sasl:PLAIN", "sasl:DIGEST-MD5") - else: - tls_settings = None - auth = ("sasl:DIGEST-MD5", "digest") - - # setup client with provided connection information - # and identity data - JabberClient.__init__(self, self.jid, password, - disco_name="pyLoad XMPP Client", disco_type="bot", - tls_settings=tls_settings, auth_methods=auth) - - self.interface_providers = [ - VersionHandler(self), - self, - ] - - def coreReady(self): - self.new_package = {} - - self.start() - - def packageFinished(self, pypack): - try: - if self.getConfig("info_pack"): - self.announce(_("Package finished: %s") % pypack.name) - except: - pass - - def downloadFinished(self, pyfile): - try: - if self.getConfig("info_file"): - self.announce( - _("Download finished: %(name)s @ %(plugin)s") % {"name": pyfile.name, "plugin": pyfile.pluginname}) - except: - pass - - def run(self): - # connect to IRC etc. - self.connect() - try: - self.loop() - except Exception, ex: - self.logError("pyLoad XMPP: %s" % str(ex)) - - def stream_state_changed(self, state, arg): - """This one is called when the state of stream connecting the component - to a server changes. This will usually be used to let the user - know what is going on.""" - self.logDebug("pyLoad XMPP: *** State changed: %s %r ***" % (state, arg)) - - def disconnected(self): - self.logDebug("pyLoad XMPP: Client was disconnected") - - def stream_closed(self, stream): - self.logDebug("pyLoad XMPP: Stream was closed | %s" % stream) - - def stream_error(self, err): - self.logDebug("pyLoad XMPP: Stream Error: %s" % err) - - def get_message_handlers(self): - """Return list of (message_type, message_handler) tuples. - - The handlers returned will be called when matching message is received - in a client session.""" - return [("normal", self.message)] - - def message(self, stanza): - """Message handler for the component.""" - subject = stanza.get_subject() - body = stanza.get_body() - t = stanza.get_type() - self.logDebug(u'pyLoad XMPP: Message from %s received.' % (unicode(stanza.get_from(),))) - self.logDebug(u'pyLoad XMPP: Body: %s Subject: %s Type: %s' % (body, subject, t)) - - if t == "headline": - # 'headline' messages should never be replied to - return True - if subject: - subject = u"Re: " + subject - - to_jid = stanza.get_from() - from_jid = stanza.get_to() - - #j = JID() - to_name = to_jid.as_utf8() - from_name = from_jid.as_utf8() - - names = self.getConfig("owners").split(";") - - if to_name in names or to_jid.node + "@" + to_jid.domain in names: - messages = [] - - trigger = "pass" - args = None - - try: - temp = body.split() - trigger = temp[0] - if len(temp) > 1: - args = temp[1:] - except: - pass - - handler = getattr(self, "event_%s" % trigger, self.event_pass) - try: - res = handler(args) - for line in res: - m = Message( - to_jid=to_jid, - from_jid=from_jid, - stanza_type=stanza.get_type(), - subject=subject, - body=line) - - messages.append(m) - except Exception, e: - self.logError("pyLoad XMPP: " + repr(e)) - - return messages - - else: - return True - - def response(self, msg, origin=""): - return self.announce(msg) - - def announce(self, message): - """ send message to all owners""" - for user in self.getConfig("owners").split(";"): - self.logDebug("pyLoad XMPP: Send message to %s" % user) - - to_jid = JID(user) - - m = Message(from_jid=self.jid, - to_jid=to_jid, - stanza_type="chat", - body=message) - - stream = self.get_stream() - if not stream: - self.connect() - stream = self.get_stream() - - stream.send(m) - - def beforeReconnecting(self, ip): - self.disconnect() - - def afterReconnecting(self, ip): - self.connect() - - -class VersionHandler(object): - """Provides handler for a version query. - - This class will answer version query and announce 'jabber:iq:version' namespace - in the client's disco#info results.""" - - implements(IIqHandlersProvider, IFeaturesProvider) - - def __init__(self, client): - """Just remember who created this.""" - self.client = client - - def get_features(self): - """Return namespace which should the client include in its reply to a - disco#info query.""" - return ["jabber:iq:version"] - - def get_iq_get_handlers(self): - """Return list of tuples (element_name, namespace, handler) describing - handlers of <iq type='get'/> stanzas""" - return [("query", "jabber:iq:version", self.get_version)] - - def get_iq_set_handlers(self): - """Return empty list, as this class provides no <iq type='set'/> stanza handler.""" - return [] - - def get_version(self, iq): - """Handler for jabber:iq:version queries. - - jabber:iq:version queries are not supported directly by PyXMPP, so the - XML node is accessed directly through the libxml2 API. This should be - used very carefully!""" - iq = iq.make_result_response() - q = iq.new_query("jabber:iq:version") - q.newTextChild(q.ns(), "name", "Echo component") - q.newTextChild(q.ns(), "version", "1.0") - return iq diff --git a/module/plugins/hooks/ZeveraCom.py b/module/plugins/hooks/ZeveraCom.py deleted file mode 100644 index 0d5e23118..000000000 --- a/module/plugins/hooks/ZeveraCom.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.network.RequestFactory import getURL -from module.plugins.internal.MultiHoster import MultiHoster - - -class ZeveraCom(MultiHoster): - __name__ = "ZeveraCom" - __type__ = "hook" - __version__ = "0.02" - - __config__ = [("activated", "bool", "Activated", False), - ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), - ("hosterList", "str", "Hoster list (comma separated)", "")] - - __description__ = """Real-Debrid.com hook plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - - def getHoster(self): - page = getURL("http://www.zevera.com/jDownloader.ashx?cmd=gethosters") - return [x.strip() for x in page.replace("\"", "").split(",")] diff --git a/module/plugins/hoster/AlldebridCom.py b/module/plugins/hoster/AlldebridCom.py deleted file mode 100644 index 7201f1929..000000000 --- a/module/plugins/hoster/AlldebridCom.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from random import randrange -from urllib import unquote - -from module.common.json_layer import json_loads -from module.plugins.Hoster import Hoster -from module.utils import parseFileSize - - -class AlldebridCom(Hoster): - __name__ = "AlldebridCom" - __type__ = "hoster" - __version__ = "0.34" - - __pattern__ = r'https?://(?:[^/]*\.)?alldebrid\..*' - - __description__ = """Alldebrid.com hoster plugin""" - __author_name__ = "Andy Voigt" - __author_mail__ = "spamsales@online.de" - - - def getFilename(self, url): - try: - name = unquote(url.rsplit("/", 1)[1]) - except IndexError: - name = "Unknown_Filename..." - if name.endswith("..."): # incomplete filename, append random stuff - name += "%s.tmp" % randrange(100, 999) - return name - - def setup(self): - self.chunkLimit = 16 - self.resumeDownload = True - - def process(self, pyfile): - if re.match(self.__pattern__, pyfile.url): - new_url = pyfile.url - elif not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "AllDebrid") - self.fail("No AllDebrid account provided") - else: - self.logDebug("Old URL: %s" % pyfile.url) - password = self.getPassword().splitlines() - password = "" if not password else password[0] - - url = "http://www.alldebrid.com/service.php?link=%s&json=true&pw=%s" % (pyfile.url, password) - page = self.load(url) - data = json_loads(page) - - self.logDebug("Json data: %s" % str(data)) - - if data['error']: - if data['error'] == "This link isn't available on the hoster website.": - self.offline() - else: - self.logWarning(data['error']) - self.tempOffline() - else: - if pyfile.name and not pyfile.name.endswith('.tmp'): - pyfile.name = data['filename'] - pyfile.size = parseFileSize(data['filesize']) - new_url = data['link'] - - if self.getConfig("https"): - new_url = new_url.replace("http://", "https://") - else: - new_url = new_url.replace("https://", "http://") - - if new_url != pyfile.url: - self.logDebug("New URL: %s" % new_url) - - if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown"): - #only use when name wasnt already set - pyfile.name = self.getFilename(new_url) - - self.download(new_url, disposition=True) - - check = self.checkDownload({"error": "<title>An error occured while processing your request</title>", - "empty": re.compile(r"^$")}) - - if check == "error": - self.retry(wait_time=60, reason="An error occured while generating link.") - elif check == "empty": - self.retry(wait_time=60, reason="Downloaded File was empty.") diff --git a/module/plugins/hoster/BasePlugin.py b/module/plugins/hoster/BasePlugin.py deleted file mode 100644 index 54d789054..000000000 --- a/module/plugins/hoster/BasePlugin.py +++ /dev/null @@ -1,116 +0,0 @@ -# -*- coding: utf-8 -*- - -from re import match, search -from urllib import unquote -from urlparse import urlparse - -from module.network.HTTPRequest import BadHeader -from module.plugins.Hoster import Hoster -from module.utils import html_unescape, remove_chars - - -class BasePlugin(Hoster): - __name__ = "BasePlugin" - __type__ = "hoster" - __version__ = "0.20" - - __pattern__ = r'^unmatchable$' - - __description__ = """Base Plugin when any other didnt fit""" - __author_name__ = "RaNaN" - __author_mail__ = "RaNaN@pyload.org" - - - def setup(self): - self.chunkLimit = -1 - self.resumeDownload = True - - def process(self, pyfile): - """main function""" - - #debug part, for api exerciser - if pyfile.url.startswith("DEBUG_API"): - self.multiDL = False - return - - # self.__name__ = "NetloadIn" - # pyfile.name = "test" - # self.html = self.load("http://localhost:9000/short") - # self.download("http://localhost:9000/short") - # self.api = self.load("http://localhost:9000/short") - # self.decryptCaptcha("http://localhost:9000/captcha") - # - # if pyfile.url == "79": - # self.core.api.addPackage("test", [str(i) for i in xrange(80)], 1) - # - # return - if pyfile.url.startswith("http"): - - try: - self.downloadFile(pyfile) - except BadHeader, e: - if e.code in (401, 403): - self.logDebug("Auth required") - - account = self.core.accountManager.getAccountPlugin('Http') - servers = [x['login'] for x in account.getAllAccounts()] - server = urlparse(pyfile.url).netloc - - if server in servers: - self.logDebug("Logging on to %s" % server) - self.req.addAuth(account.accounts[server]['password']) - else: - for pwd in pyfile.package().password.splitlines(): - if ":" in pwd: - self.req.addAuth(pwd.strip()) - break - else: - self.fail(_("Authorization required (username:password)")) - - self.downloadFile(pyfile) - else: - raise - - else: - self.fail("No Plugin matched and not a downloadable url.") - - def downloadFile(self, pyfile): - url = pyfile.url - - for _ in xrange(5): - header = self.load(url, just_header=True) - - # self.load does not raise a BadHeader on 404 responses, do it here - if 'code' in header and header['code'] == 404: - raise BadHeader(404) - - if 'location' in header: - self.logDebug("Location: " + header['location']) - base = match(r'https?://[^/]+', url).group(0) - if header['location'].startswith("http"): - url = header['location'] - elif header['location'].startswith("/"): - url = base + unquote(header['location']) - else: - url = '%s/%s' % (base, unquote(header['location'])) - else: - break - - name = html_unescape(unquote(urlparse(url).path.split("/")[-1])) - - if 'content-disposition' in header: - self.logDebug("Content-Disposition: " + header['content-disposition']) - m = search("filename(?P<type>=|\*=(?P<enc>.+)'')(?P<name>.*)", header['content-disposition']) - if m: - disp = m.groupdict() - self.logDebug(disp) - if not disp['enc']: - disp['enc'] = 'utf-8' - name = remove_chars(disp['name'], "\"';").strip() - name = unicode(unquote(name), disp['enc']) - - if not name: - name = url - pyfile.name = name - self.logDebug("Filename: %s" % pyfile.name) - self.download(url, disposition=True) diff --git a/module/plugins/hoster/BayfilesCom.py b/module/plugins/hoster/BayfilesCom.py deleted file mode 100644 index dc7e8cbf0..000000000 --- a/module/plugins/hoster/BayfilesCom.py +++ /dev/null @@ -1,84 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from time import time - -from module.common.json_layer import json_loads -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class BayfilesCom(SimpleHoster): - __name__ = "BayfilesCom" - __type__ = "hoster" - __version__ = "0.07" - - __pattern__ = r'https?://(?:www\.)?bayfiles\.(com|net)/file/(?P<ID>[a-zA-Z0-9]+/[a-zA-Z0-9]+/[^/]+)' - - __description__ = """Bayfiles.com hoster plugin""" - __author_name__ = ("zoidberg", "Walter Purcaro") - __author_mail__ = ("zoidberg@mujmail.cz", "vuolter@gmail.com") - - FILE_INFO_PATTERN = r'<p title="(?P<N>[^"]+)">[^<]*<strong>(?P<S>[0-9., ]+)(?P<U>[kKMG])i?B</strong></p>' - OFFLINE_PATTERN = r'(<p>The requested file could not be found.</p>|<title>404 Not Found</title>)' - - WAIT_PATTERN = r'>Your IP [0-9.]* has recently downloaded a file\. Upgrade to premium or wait (\d+) minutes\.<' - VARS_PATTERN = r'var vfid = (\d+);\s*var delay = (\d+);' - FREE_LINK_PATTERN = r"javascript:window.location.href = '([^']+)';" - PREMIUM_LINK_PATTERN = r'(?:<a class="highlighted-btn" href="|(?=http://s\d+\.baycdn\.com/dl/))(.*?)"' - - - def handleFree(self): - m = re.search(self.WAIT_PATTERN, self.html) - if m: - self.wait(int(m.group(1)) * 60) - self.retry() - - # Get download token - m = re.search(self.VARS_PATTERN, self.html) - if m is None: - self.parseError('VARS') - vfid, delay = m.groups() - - response = json_loads(self.load('http://bayfiles.com/ajax_download', get={ - "_": time() * 1000, - "action": "startTimer", - "vfid": vfid}, decode=True)) - - if not "token" in response or not response['token']: - self.fail('No token') - - self.wait(int(delay)) - - self.html = self.load('http://bayfiles.com/ajax_download', get={ - "token": response['token'], - "action": "getLink", - "vfid": vfid}) - - # Get final link and download - m = re.search(self.FREE_LINK_PATTERN, self.html) - if m is None: - self.parseError("Free link") - self.startDownload(m.group(1)) - - def handlePremium(self): - m = re.search(self.PREMIUM_LINK_PATTERN, self.html) - if m is None: - self.parseError("Premium link") - self.startDownload(m.group(1)) - - def startDownload(self, url): - self.logDebug("%s URL: %s" % ("Premium" if self.premium else "Free", url)) - self.download(url) - # check download - check = self.checkDownload({ - "waitforfreeslots": re.compile(r"<title>BayFiles</title>"), - "notfound": re.compile(r"<title>404 Not Found</title>") - }) - if check == "waitforfreeslots": - self.retry(30, 5 * 60, "Wait for free slot") - elif check == "notfound": - self.retry(30, 5 * 60, "404 Not found") - - -getInfo = create_getInfo(BayfilesCom) diff --git a/module/plugins/hoster/BezvadataCz.py b/module/plugins/hoster/BezvadataCz.py deleted file mode 100644 index 7156db473..000000000 --- a/module/plugins/hoster/BezvadataCz.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class BezvadataCz(SimpleHoster): - __name__ = "BezvadataCz" - __type__ = "hoster" - __version__ = "0.24" - - __pattern__ = r'http://(?:www\.)?bezvadata.cz/stahnout/.*' - - __description__ = """BezvaData.cz hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_NAME_PATTERN = r'<p><b>Soubor: (?P<N>[^<]+)</b></p>' - FILE_SIZE_PATTERN = r'<li><strong>Velikost:</strong> (?P<S>[^<]+)</li>' - OFFLINE_PATTERN = r'<title>BezvaData \| Soubor nenalezen</title>' - - - def setup(self): - self.multiDL = self.resumeDownload = True - - def handleFree(self): - #download button - m = re.search(r'<a class="stahnoutSoubor".*?href="(.*?)"', self.html) - if m is None: - self.parseError("page1 URL") - url = "http://bezvadata.cz%s" % m.group(1) - - #captcha form - self.html = self.load(url) - self.checkErrors() - for _ in xrange(5): - action, inputs = self.parseHtmlForm('frm-stahnoutFreeForm') - if not inputs: - self.parseError("FreeForm") - - m = re.search(r'<img src="data:image/png;base64,(.*?)"', self.html) - if m is None: - self.parseError("captcha img") - - #captcha image is contained in html page as base64encoded data but decryptCaptcha() expects image url - self.load, proper_load = self.loadcaptcha, self.load - try: - inputs['captcha'] = self.decryptCaptcha(m.group(1), imgtype='png') - finally: - self.load = proper_load - - if '<img src="data:image/png;base64' in self.html: - self.invalidCaptcha() - else: - self.correctCaptcha() - break - else: - self.fail("No valid captcha code entered") - - #download url - self.html = self.load("http://bezvadata.cz%s" % action, post=inputs) - self.checkErrors() - m = re.search(r'<a class="stahnoutSoubor2" href="(.*?)">', self.html) - if m is None: - self.parseError("page2 URL") - url = "http://bezvadata.cz%s" % m.group(1) - self.logDebug("DL URL %s" % url) - - #countdown - m = re.search(r'id="countdown">(\d\d):(\d\d)<', self.html) - wait_time = (int(m.group(1)) * 60 + int(m.group(2)) + 1) if m else 120 - self.wait(wait_time, False) - - self.download(url) - - def checkErrors(self): - if 'images/button-download-disable.png' in self.html: - self.longWait(5 * 60, 24) # parallel dl limit - elif '<div class="infobox' in self.html: - self.tempOffline() - - def loadcaptcha(self, data, *args, **kwargs): - return data.decode("base64") - - -getInfo = create_getInfo(BezvadataCz) diff --git a/module/plugins/hoster/BillionuploadsCom.py b/module/plugins/hoster/BillionuploadsCom.py deleted file mode 100644 index c55b9073c..000000000 --- a/module/plugins/hoster/BillionuploadsCom.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class BillionuploadsCom(XFileSharingPro): - __name__ = "BillionuploadsCom" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?billionuploads.com/\w{12}' - - __description__ = """Billionuploads.com hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - HOSTER_NAME = "billionuploads.com" - - FILE_NAME_PATTERN = r'<b>Filename:</b>(?P<N>.*?)<br>' - FILE_SIZE_PATTERN = r'<b>Size:</b>(?P<S>.*?)<br>' - - -getInfo = create_getInfo(BillionuploadsCom) diff --git a/module/plugins/hoster/BitshareCom.py b/module/plugins/hoster/BitshareCom.py deleted file mode 100644 index 3c84ce5da..000000000 --- a/module/plugins/hoster/BitshareCom.py +++ /dev/null @@ -1,151 +0,0 @@ -# -*- coding: utf-8 -*- - -from __future__ import with_statement - -import re - -from module.plugins.internal.CaptchaService import ReCaptcha -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class BitshareCom(SimpleHoster): - __name__ = "BitshareCom" - __type__ = "hoster" - __version__ = "0.50" - - __pattern__ = r'http://(?:www\.)?bitshare\.com/(files/(?P<id1>[a-zA-Z0-9]+)(/(?P<name>.*?)\.html)?|\?f=(?P<id2>[a-zA-Z0-9]+))' - - __description__ = """Bitshare.com hoster plugin""" - __author_name__ = ("Paul King", "fragonib") - __author_mail__ = ("", "fragonib[AT]yahoo[DOT]es") - - FILE_INFO_PATTERN = r'Downloading (?P<N>.+) - (?P<S>[\d.]+) (?P<U>\w+)</h1>' - OFFLINE_PATTERN = r'(>We are sorry, but the requested file was not found in our database|>Error - File not available<|The file was deleted either by the uploader, inactivity or due to copyright claim)' - - FILE_AJAXID_PATTERN = r'var ajaxdl = "(.*?)";' - CAPTCHA_KEY_PATTERN = r'http://api\.recaptcha\.net/challenge\?k=(.*?) ' - TRAFFIC_USED_UP = r'Your Traffic is used up for today. Upgrade to premium to continue!' - - - def setup(self): - self.req.cj.setCookie(".bitshare.com", "language_selection", "EN") - self.multiDL = self.premium - self.chunkLimit = 1 - - def process(self, pyfile): - if self.premium: - self.account.relogin(self.user) - - self.pyfile = pyfile - - # File id - m = re.match(self.__pattern__, pyfile.url) - self.file_id = max(m.group('id1'), m.group('id2')) - self.logDebug("File id is [%s]" % self.file_id) - - # Load main page - self.html = self.load(pyfile.url, ref=False, decode=True) - - # Check offline - if re.search(self.OFFLINE_PATTERN, self.html): - self.offline() - - # Check Traffic used up - if re.search(self.TRAFFIC_USED_UP, self.html): - self.logInfo("Your Traffic is used up for today") - self.wait(30 * 60, True) - self.retry() - - # File name - m = re.match(self.__pattern__, pyfile.url) - name1 = m.group('name') if m else None - m = re.search(self.FILE_INFO_PATTERN, self.html) - name2 = m.group('N') if m else None - pyfile.name = max(name1, name2) - - # Ajax file id - self.ajaxid = re.search(self.FILE_AJAXID_PATTERN, self.html).group(1) - self.logDebug("File ajax id is [%s]" % self.ajaxid) - - # This may either download our file or forward us to an error page - url = self.getDownloadUrl() - self.logDebug("Downloading file with url [%s]" % url) - self.download(url) - - check = self.checkDownload({"404": ">404 Not Found<", "Error": ">Error occured<"}) - if check == "404": - self.retry(3, 60, 'Error 404') - elif check == "error": - self.retry(5, 5 * 60, "Bitshare host : Error occured") - - def getDownloadUrl(self): - # Return location if direct download is active - if self.premium: - header = self.load(self.pyfile.url, cookies=True, just_header=True) - if 'location' in header: - return header['location'] - - # Get download info - self.logDebug("Getting download info") - response = self.load("http://bitshare.com/files-ajax/" + self.file_id + "/request.html", - post={"request": "generateID", "ajaxid": self.ajaxid}) - self.handleErrors(response, ':') - parts = response.split(":") - filetype = parts[0] - wait = int(parts[1]) - captcha = int(parts[2]) - self.logDebug("Download info [type: '%s', waiting: %d, captcha: %d]" % (filetype, wait, captcha)) - - # Waiting - if wait > 0: - self.logDebug("Waiting %d seconds." % wait) - if wait < 120: - self.wait(wait, False) - else: - self.wait(wait - 55, True) - self.retry() - - # Resolve captcha - if captcha == 1: - self.logDebug("File is captcha protected") - id = re.search(self.CAPTCHA_KEY_PATTERN, self.html).group(1) - # Try up to 3 times - for i in xrange(3): - self.logDebug("Resolving ReCaptcha with key [%s], round %d" % (id, i + 1)) - recaptcha = ReCaptcha(self) - challenge, code = recaptcha.challenge(id) - response = self.load("http://bitshare.com/files-ajax/" + self.file_id + "/request.html", - post={"request": "validateCaptcha", "ajaxid": self.ajaxid, - "recaptcha_challenge_field": challenge, "recaptcha_response_field": code}) - if self.handleCaptchaErrors(response): - break - - # Get download URL - self.logDebug("Getting download url") - response = self.load("http://bitshare.com/files-ajax/" + self.file_id + "/request.html", - post={"request": "getDownloadURL", "ajaxid": self.ajaxid}) - self.handleErrors(response, '#') - url = response.split("#")[-1] - - return url - - def handleErrors(self, response, separator): - self.logDebug("Checking response [%s]" % response) - if "ERROR:Session timed out" in response: - self.retry() - elif "ERROR" in response: - msg = response.split(separator)[-1] - self.fail(msg) - - def handleCaptchaErrors(self, response): - self.logDebug("Result of captcha resolving [%s]" % response) - if "SUCCESS" in response: - self.correctCaptcha() - return True - elif "ERROR:SESSION ERROR" in response: - self.retry() - self.logDebug("Wrong captcha") - self.invalidCaptcha() - - -getInfo = create_getInfo(BitshareCom) diff --git a/module/plugins/hoster/BoltsharingCom.py b/module/plugins/hoster/BoltsharingCom.py deleted file mode 100644 index d038c50ca..000000000 --- a/module/plugins/hoster/BoltsharingCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class BoltsharingCom(DeadHoster): - __name__ = "BoltsharingCom" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?boltsharing.com/\w{12}' - - __description__ = """Boltsharing.com hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - -getInfo = create_getInfo(BoltsharingCom) diff --git a/module/plugins/hoster/CatShareNet.py b/module/plugins/hoster/CatShareNet.py deleted file mode 100644 index 4bbdfce89..000000000 --- a/module/plugins/hoster/CatShareNet.py +++ /dev/null @@ -1,44 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.CaptchaService import ReCaptcha -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class CatShareNet(SimpleHoster): - __name__ = "CatShareNet" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?catshare.net/\w{16}.*' - - __description__ = """CatShare.net hoster plugin""" - __author_name__ = "z00nx" - __author_mail__ = "z00nx0@gmail.com" - - FILE_INFO_PATTERN = r'<h3 class="pull-left"[^>]+>(?P<N>.*)</h3>\s+<h3 class="pull-right"[^>]+>(?P<S>.*)</h3>' - OFFLINE_PATTERN = r'Podany plik zosta' - - SECONDS_PATTERN = r'var\s+count\s+=\s+(\d+);' - - RECAPTCHA_KEY = "6Lfln9kSAAAAANZ9JtHSOgxUPB9qfDFeLUI_QMEy" - - - def handleFree(self): - m = re.search(self.SECONDS_PATTERN, self.html) - seconds = int(m.group(1)) - self.logDebug("Seconds found", seconds) - self.wait(seconds + 1) - recaptcha = ReCaptcha(self) - challenge, code = recaptcha.challenge(self.RECAPTCHA_KEY) - post_data = {"recaptcha_challenge_field": challenge, "recaptcha_response_field": code} - self.download(self.pyfile.url, post=post_data) - check = self.checkDownload({"html": re.compile("\A<!DOCTYPE html PUBLIC")}) - if check == "html": - self.logDebug("Wrong captcha entered") - self.invalidCaptcha() - self.retry() - - -getInfo = create_getInfo(CatShareNet) diff --git a/module/plugins/hoster/CloudzerNet.py b/module/plugins/hoster/CloudzerNet.py deleted file mode 100644 index 72332c56f..000000000 --- a/module/plugins/hoster/CloudzerNet.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class CloudzerNet(DeadHoster): - __name__ = "CloudzerNet" - __type__ = "hoster" - __version__ = "0.05" - - __pattern__ = r'https?://(?:www\.)?(cloudzer\.net/file/|clz\.to/(file/)?)\w+' - - __description__ = """Cloudzer.net hoster plugin""" - __author_name__ = ("gs", "z00nx", "stickell") - __author_mail__ = ("I-_-I-_-I@web.de", "z00nx0@gmail.com", "l.stickell@yahoo.it") - - -getInfo = create_getInfo(CloudzerNet) diff --git a/module/plugins/hoster/CramitIn.py b/module/plugins/hoster/CramitIn.py deleted file mode 100644 index 6a872ab34..000000000 --- a/module/plugins/hoster/CramitIn.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class CramitIn(XFileSharingPro): - __name__ = "CramitIn" - __type__ = "hoster" - __version__ = "0.04" - - __pattern__ = r'http://(?:www\.)?cramit.in/\w{12}' - - __description__ = """Cramit.in hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - HOSTER_NAME = "cramit.in" - - FILE_INFO_PATTERN = r'<span class=t2>\s*(?P<N>.*?)</span>.*?<small>\s*\((?P<S>.*?)\)' - LINK_PATTERN = r'href="(http://cramit.in/file_download/.*?)"' - - - def setup(self): - self.resumeDownload = self.multiDL = self.premium - - -getInfo = create_getInfo(CramitIn) diff --git a/module/plugins/hoster/CrockoCom.py b/module/plugins/hoster/CrockoCom.py deleted file mode 100644 index 80d9b3d61..000000000 --- a/module/plugins/hoster/CrockoCom.py +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.CaptchaService import ReCaptcha -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class CrockoCom(SimpleHoster): - __name__ = "CrockoCom" - __type__ = "hoster" - __version__ = "0.16" - - __pattern__ = r'http://(?:www\.)?(crocko|easy-share).com/\w+' - - __description__ = """Crocko hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_NAME_PATTERN = r'<span class="fz24">Download:\s*<strong>(?P<N>.*)' - FILE_SIZE_PATTERN = r'<span class="tip1"><span class="inner">(?P<S>[^<]+)</span></span>' - OFFLINE_PATTERN = r"<h1>Sorry,<br />the page you're looking for <br />isn't here.</h1>|File not found" - - CAPTCHA_URL_PATTERN = re.compile(r"u='(/file_contents/captcha/\w+)';\s*w='(\d+)';") - CAPTCHA_KEY_PATTERN = re.compile(r'Recaptcha.create\("([^"]+)"') - - FORM_PATTERN = r'<form method="post" action="([^"]+)">(.*?)</form>' - FORM_INPUT_PATTERN = r'<input[^>]* name="?([^" ]+)"? value="?([^" ]+)"?[^>]*>' - - FILE_NAME_REPLACEMENTS = [(r'<[^>]*>', '')] - - - def handleFree(self): - if "You need Premium membership to download this file." in self.html: - self.fail("You need Premium membership to download this file.") - - for _ in xrange(5): - m = re.search(self.CAPTCHA_URL_PATTERN, self.html) - if m: - url, wait_time = 'http://crocko.com' + m.group(1), m.group(2) - self.wait(wait_time) - self.html = self.load(url) - else: - break - - m = re.search(self.CAPTCHA_KEY_PATTERN, self.html) - if m is None: - self.parseError('Captcha KEY') - captcha_key = m.group(1) - - m = re.search(self.FORM_PATTERN, self.html, re.DOTALL) - if m is None: - self.parseError('ACTION') - action, form = m.groups() - inputs = dict(re.findall(self.FORM_INPUT_PATTERN, form)) - - recaptcha = ReCaptcha(self) - - for _ in xrange(5): - inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge(captcha_key) - self.download(action, post=inputs) - - check = self.checkDownload({ - "captcha_err": self.CAPTCHA_KEY_PATTERN - }) - - if check == "captcha_err": - self.invalidCaptcha() - else: - break - else: - self.fail('No valid captcha solution received') - - -getInfo = create_getInfo(CrockoCom) diff --git a/module/plugins/hoster/CyberlockerCh.py b/module/plugins/hoster/CyberlockerCh.py deleted file mode 100644 index bfab72b7c..000000000 --- a/module/plugins/hoster/CyberlockerCh.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class CyberlockerCh(DeadHoster): - __name__ = "CyberlockerCh" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?cyberlocker\.ch/\w+' - - __description__ = """Cyberlocker.ch hoster plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - -getInfo = create_getInfo(CyberlockerCh) diff --git a/module/plugins/hoster/CzshareCom.py b/module/plugins/hoster/CzshareCom.py deleted file mode 100644 index 4f581651b..000000000 --- a/module/plugins/hoster/CzshareCom.py +++ /dev/null @@ -1,148 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://czshare.com/5278880/random.bin - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo -from module.utils import parseFileSize - - -class CzshareCom(SimpleHoster): - __name__ = "CzshareCom" - __type__ = "hoster" - __version__ = "0.94" - - __pattern__ = r'http://(?:www\.)?(czshare|sdilej)\.(com|cz)/(\d+/|download.php\?).*' - - __description__ = """CZshare.com hoster plugin, now Sdilej.cz""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_NAME_PATTERN = r'<div class="tab" id="parameters">\s*<p>\s*Cel. n.zev: <a href=[^>]*>(?P<N>[^<]+)</a>' - FILE_SIZE_PATTERN = r'<div class="tab" id="category">(?:\s*<p>[^\n]*</p>)*\s*Velikost:\s*(?P<S>[0-9., ]+)(?P<U>[kKMG])i?B\s*</div>' - OFFLINE_PATTERN = r'<div class="header clearfix">\s*<h2 class="red">' - - FILE_SIZE_REPLACEMENTS = [(' ', '')] - FILE_URL_REPLACEMENTS = [(r'http://[^/]*/download.php\?.*?id=(\w+).*', r'http://sdilej.cz/\1/x/')] - - SH_CHECK_TRAFFIC = True - - FREE_URL_PATTERN = r'<a href="([^"]+)" class="page-download">[^>]*alt="([^"]+)" /></a>' - FREE_FORM_PATTERN = r'<form action="download.php" method="post">\s*<img src="captcha.php" id="captcha" />(.*?)</form>' - PREMIUM_FORM_PATTERN = r'<form action="/profi_down.php" method="post">(.*?)</form>' - FORM_INPUT_PATTERN = r'<input[^>]* name="([^"]+)" value="([^"]+)"[^>]*/>' - MULTIDL_PATTERN = r"<p><font color='red'>Z[^<]*PROFI.</font></p>" - USER_CREDIT_PATTERN = r'<div class="credit">\s*kredit: <strong>([0-9., ]+)([kKMG]i?B)</strong>\s*</div><!-- .credit -->' - - - def checkTrafficLeft(self): - # check if user logged in - m = re.search(self.USER_CREDIT_PATTERN, self.html) - if m is None: - self.account.relogin(self.user) - self.html = self.load(self.pyfile.url, cookies=True, decode=True) - m = re.search(self.USER_CREDIT_PATTERN, self.html) - if m is None: - return False - - # check user credit - try: - credit = parseFileSize(m.group(1).replace(' ', ''), m.group(2)) - self.logInfo("Premium download for %i KiB of Credit" % (self.pyfile.size / 1024)) - self.logInfo("User %s has %i KiB left" % (self.user, credit / 1024)) - if credit < self.pyfile.size: - self.logInfo("Not enough credit to download file %s" % self.pyfile.name) - return False - except Exception, e: - # let's continue and see what happens... - self.logError('Parse error (CREDIT): %s' % e) - - return True - - def handlePremium(self): - # parse download link - try: - form = re.search(self.PREMIUM_FORM_PATTERN, self.html, re.DOTALL).group(1) - inputs = dict(re.findall(self.FORM_INPUT_PATTERN, form)) - except Exception, e: - self.logError("Parse error (FORM): %s" % e) - self.resetAccount() - - # download the file, destination is determined by pyLoad - self.download("http://sdilej.cz/profi_down.php", post=inputs, disposition=True) - self.checkDownloadedFile() - - def handleFree(self): - # get free url - m = re.search(self.FREE_URL_PATTERN, self.html) - if m is None: - self.parseError('Free URL') - parsed_url = "http://sdilej.cz" + m.group(1) - self.logDebug("PARSED_URL:" + parsed_url) - - # get download ticket and parse html - self.html = self.load(parsed_url, cookies=True, decode=True) - if re.search(self.MULTIDL_PATTERN, self.html): - self.longWait(5 * 60, 12) - - try: - form = re.search(self.FREE_FORM_PATTERN, self.html, re.DOTALL).group(1) - inputs = dict(re.findall(self.FORM_INPUT_PATTERN, form)) - self.pyfile.size = int(inputs['size']) - except Exception, e: - self.logError(e) - self.parseError('Form') - - # get and decrypt captcha - captcha_url = 'http://sdilej.cz/captcha.php' - for _ in xrange(5): - inputs['captchastring2'] = self.decryptCaptcha(captcha_url) - self.html = self.load(parsed_url, cookies=True, post=inputs, decode=True) - if u"<li>ZadanÜ ovÄÅovacà kód nesouhlasÃ!</li>" in self.html: - self.invalidCaptcha() - elif re.search(self.MULTIDL_PATTERN, self.html): - self.longWait(5 * 60, 12) - else: - self.correctCaptcha() - break - else: - self.fail("No valid captcha code entered") - - m = re.search("countdown_number = (\d+);", self.html) - self.setWait(int(m.group(1)) if m else 50) - - # download the file, destination is determined by pyLoad - self.logDebug("WAIT URL", self.req.lastEffectiveURL) - m = re.search("free_wait.php\?server=(.*?)&(.*)", self.req.lastEffectiveURL) - if m is None: - self.parseError('Download URL') - - url = "http://%s/download.php?%s" % (m.group(1), m.group(2)) - - self.wait() - self.download(url) - self.checkDownloadedFile() - - def checkDownloadedFile(self): - # check download - check = self.checkDownload({ - "tempoffline": re.compile(r"^Soubor je do.*asn.* nedostupn.*$"), - "credit": re.compile(r"^Nem.*te dostate.*n.* kredit.$"), - "multi_dl": re.compile(self.MULTIDL_PATTERN), - "captcha_err": "<li>ZadanÜ ovÄÅovacà kód nesouhlasÃ!</li>" - }) - - if check == "tempoffline": - self.fail("File not available - try later") - if check == "credit": - self.resetAccount() - elif check == "multi_dl": - self.longWait(5 * 60, 12) - elif check == "captcha_err": - self.invalidCaptcha() - self.retry() - - -getInfo = create_getInfo(CzshareCom) diff --git a/module/plugins/hoster/DailymotionCom.py b/module/plugins/hoster/DailymotionCom.py deleted file mode 100644 index 79b7acb45..000000000 --- a/module/plugins/hoster/DailymotionCom.py +++ /dev/null @@ -1,111 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.PyFile import statusMap -from module.common.json_layer import json_loads -from module.network.RequestFactory import getURL -from module.plugins.Hoster import Hoster - - -def getInfo(urls): - result = [] #: [ .. (name, size, status, url) .. ] - regex = re.compile(DailymotionCom.__pattern__) - apiurl = "https://api.dailymotion.com/video/" - request = {"fields": "access_error,status,title"} - for url in urls: - id = regex.search(url).group("ID") - page = getURL(apiurl + id, get=request) - info = json_loads(page) - - if "title" in info: - name = info['title'] + ".mp4" - else: - name = url - - if "error" in info or info['access_error']: - status = "offline" - else: - status = info['status'] - if status in ("ready", "published"): - status = "online" - elif status in ("waiting", "processing"): - status = "temp. offline" - else: - status = "offline" - - result.append((name, 0, statusMap[status], url)) - return result - - -class DailymotionCom(Hoster): - __name__ = "DailymotionCom" - __type__ = "hoster" - __version__ = "0.2" - - __pattern__ = r'https?://(?:www\.)?dailymotion\.com/.*?video/(?P<ID>[\w^_]+)' - __config__ = [("quality", "Lowest;LD 144p;LD 240p;SD 384p;HQ 480p;HD 720p;HD 1080p;Highest", "Quality", "Highest")] - - __description__ = """Dailymotion.com hoster plugin""" - __author_name__ = "Walter Purcaro" - __author_mail__ = "vuolter@gmail.com" - - - def setup(self): - self.resumeDownload = self.multiDL = True - - def getStreams(self): - streams = [] - for result in re.finditer(r"\"(?P<URL>http:\\/\\/www.dailymotion.com\\/cdn\\/H264-(?P<QF>.*?)\\.*?)\"", - self.html): - url = result.group("URL") - qf = result.group("QF") - link = url.replace("\\", "") - quality = tuple(int(x) for x in qf.split("x")) - streams.append((quality, link)) - return sorted(streams, key=lambda x: x[0][::-1]) - - def getQuality(self): - q = self.getConfig("quality") - if q == "Lowest": - quality = 0 - elif q == "Highest": - quality = -1 - else: - quality = int(q.rsplit(" ")[1][:-1]) - return quality - - def getLink(self, streams, quality): - if quality > 0: - for x, s in reversed([item for item in enumerate(streams)]): - qf = s[0][1] - if qf <= quality: - idx = x - break - else: - idx = 0 - else: - idx = quality - - s = streams[idx] - self.logInfo("Download video quality %sx%s" % s[0]) - return s[1] - - def checkInfo(self, pyfile): - pyfile.name, pyfile.size, pyfile.status, pyfile.url = getInfo([pyfile.url])[0] - if pyfile.status == 1: - self.offline() - elif pyfile.status == 6: - self.tempOffline() - - def process(self, pyfile): - self.checkInfo(pyfile) - - id = re.match(self.__pattern__, pyfile.url).group("ID") - self.html = self.load("http://www.dailymotion.com/embed/video/" + id, decode=True) - - streams = self.getStreams() - quality = self.getQuality() - link = self.getLink(streams, quality) - - self.download(link) diff --git a/module/plugins/hoster/DataHu.py b/module/plugins/hoster/DataHu.py deleted file mode 100644 index 3dc01eef3..000000000 --- a/module/plugins/hoster/DataHu.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://data.hu/get/6381232/random.bin - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class DataHu(SimpleHoster): - __name__ = "DataHu" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?data.hu/get/\w+' - - __description__ = """Data.hu hoster plugin""" - __author_name__ = ("crash", "stickell") - __author_mail__ = "l.stickell@yahoo.it" - - FILE_INFO_PATTERN = ur'<title>(?P<N>.*) \((?P<S>[^)]+)\) let\xf6lt\xe9se</title>' - OFFLINE_PATTERN = ur'Az adott f\xe1jl nem l\xe9tezik' - LINK_PATTERN = r'<div class="download_box_button"><a href="([^"]+)">' - - - def handleFree(self): - self.resumeDownload = True - self.html = self.load(self.pyfile.url, decode=True) - - m = re.search(self.LINK_PATTERN, self.html) - if m: - url = m.group(1) - self.logDebug('Direct link: ' + url) - else: - self.parseError('Unable to get direct link') - - self.download(url, disposition=True) - - -getInfo = create_getInfo(DataHu) diff --git a/module/plugins/hoster/DataportCz.py b/module/plugins/hoster/DataportCz.py deleted file mode 100644 index 56b2c2398..000000000 --- a/module/plugins/hoster/DataportCz.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class DataportCz(SimpleHoster): - __name__ = "DataportCz" - __type__ = "hoster" - __version__ = "0.37" - - __pattern__ = r'http://(?:www\.)?dataport.cz/file/(.*)' - - __description__ = """Dataport.cz hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_NAME_PATTERN = r'<span itemprop="name">(?P<N>[^<]+)</span>' - FILE_SIZE_PATTERN = r'<td class="fil">Velikost</td>\s*<td>(?P<S>[^<]+)</td>' - OFFLINE_PATTERN = r'<h2>Soubor nebyl nalezen</h2>' - - FILE_URL_REPLACEMENTS = [(__pattern__, r'http://www.dataport.cz/file/\1')] - - CAPTCHA_URL_PATTERN = r'<section id="captcha_bg">\s*<img src="(.*?)"' - FREE_SLOTS_PATTERN = ur'PoÄet volnÜch slotů: <span class="darkblue">(\d+)</span><br />' - - - def handleFree(self): - captchas = {"1": "jkeG", "2": "hMJQ", "3": "vmEK", "4": "ePQM", "5": "blBd"} - - for _ in xrange(60): - action, inputs = self.parseHtmlForm('free_download_form') - self.logDebug(action, inputs) - if not action or not inputs: - self.parseError('free_download_form') - - if "captchaId" in inputs and inputs['captchaId'] in captchas: - inputs['captchaCode'] = captchas[inputs['captchaId']] - else: - self.parseError('captcha') - - self.html = self.download("http://www.dataport.cz%s" % action, post=inputs) - - check = self.checkDownload({"captcha": 'alert("\u0160patn\u011b opsan\u00fd k\u00f3d z obr\u00e1zu");', - "slot": 'alert("Je n\u00e1m l\u00edto, ale moment\u00e1ln\u011b nejsou'}) - if check == "captcha": - self.parseError('invalid captcha') - elif check == "slot": - self.logDebug("No free slots - wait 60s and retry") - self.wait(60, False) - self.html = self.load(self.pyfile.url, decode=True) - continue - else: - break - - -create_getInfo(DataportCz) diff --git a/module/plugins/hoster/DateiTo.py b/module/plugins/hoster/DateiTo.py deleted file mode 100644 index ff8c430ee..000000000 --- a/module/plugins/hoster/DateiTo.py +++ /dev/null @@ -1,83 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.CaptchaService import ReCaptcha -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class DateiTo(SimpleHoster): - __name__ = "DateiTo" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?datei\.to/datei/(?P<ID>\w+)\.html' - - __description__ = """Datei.to hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_NAME_PATTERN = r'Dateiname:</td>\s*<td colspan="2"><strong>(?P<N>.*?)</' - FILE_SIZE_PATTERN = r'Dateigröße:</td>\s*<td colspan="2">(?P<S>.*?)</' - OFFLINE_PATTERN = r'>Datei wurde nicht gefunden<|>Bitte wÀhle deine Datei aus... <' - PARALELL_PATTERN = r'>Du lÀdst bereits eine Datei herunter<' - - WAIT_PATTERN = r'countdown\({seconds: (\d+)' - DATA_PATTERN = r'url: "(.*?)", data: "(.*?)",' - RECAPTCHA_KEY_PATTERN = r'Recaptcha.create\("(.*?)"' - - - def handleFree(self): - url = 'http://datei.to/ajax/download.php' - data = {'P': 'I', 'ID': self.file_info['ID']} - - recaptcha = ReCaptcha(self) - - for _ in xrange(10): - self.logDebug("URL", url, "POST", data) - self.html = self.load(url, post=data) - self.checkErrors() - - if url.endswith('download.php') and 'P' in data: - if data['P'] == 'I': - self.doWait() - - elif data['P'] == 'IV': - break - - m = re.search(self.DATA_PATTERN, self.html) - if m is None: - self.parseError('data') - url = 'http://datei.to/' + m.group(1) - data = dict(x.split('=') for x in m.group(2).split('&')) - - if url.endswith('recaptcha.php'): - m = re.search(self.RECAPTCHA_KEY_PATTERN, self.html) - recaptcha_key = m.group(1) if m else "6LdBbL8SAAAAAI0vKUo58XRwDd5Tu_Ze1DA7qTao" - - data['recaptcha_challenge_field'], data['recaptcha_response_field'] = recaptcha.challenge(recaptcha_key) - - else: - self.fail('Too bad...') - - download_url = self.html - self.logDebug('Download URL', download_url) - self.download(download_url) - - def checkErrors(self): - m = re.search(self.PARALELL_PATTERN, self.html) - if m: - m = re.search(self.WAIT_PATTERN, self.html) - wait_time = int(m.group(1)) if m else 30 - self.wait(wait_time + 1, False) - self.retry() - - def doWait(self): - m = re.search(self.WAIT_PATTERN, self.html) - wait_time = int(m.group(1)) if m else 30 - - self.load('http://datei.to/ajax/download.php', post={'P': 'Ads'}) - self.wait(wait_time + 1, False) - - -getInfo = create_getInfo(DateiTo) diff --git a/module/plugins/hoster/DdlstorageCom.py b/module/plugins/hoster/DdlstorageCom.py deleted file mode 100644 index 4d77289d7..000000000 --- a/module/plugins/hoster/DdlstorageCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class DdlstorageCom(DeadHoster): - __name__ = "DdlstorageCom" - __type__ = "hoster" - __version__ = "1.02" - - __pattern__ = r'https?://(?:www\.)?ddlstorage\.com/\w+' - - __description__ = """DDLStorage.com hoster plugin""" - __author_name__ = ("zoidberg", "stickell") - __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") - - -getInfo = create_getInfo(DdlstorageCom) diff --git a/module/plugins/hoster/DebridItaliaCom.py b/module/plugins/hoster/DebridItaliaCom.py deleted file mode 100644 index 5880b2738..000000000 --- a/module/plugins/hoster/DebridItaliaCom.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.Hoster import Hoster - - -class DebridItaliaCom(Hoster): - __name__ = "DebridItaliaCom" - __type__ = "hoster" - __version__ = "0.05" - - __pattern__ = r'https?://(?:[^/]*\.)?debriditalia\.com' - - __description__ = """Debriditalia.com hoster plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - - def setup(self): - self.chunkLimit = -1 - self.resumeDownload = True - - def process(self, pyfile): - if re.match(self.__pattern__, pyfile.url): - new_url = pyfile.url - elif not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "DebridItalia") - self.fail("No DebridItalia account provided") - else: - self.logDebug("Old URL: %s" % pyfile.url) - url = "http://debriditalia.com/linkgen2.php?xjxfun=convertiLink&xjxargs[]=S<![CDATA[%s]]>" % pyfile.url - page = self.load(url) - self.logDebug("XML data: %s" % page) - - if 'File not available' in page: - self.fail('File not available') - else: - new_url = re.search(r'<a href="(?:[^"]+)">(?P<direct>[^<]+)</a>', page).group('direct') - - if new_url != pyfile.url: - self.logDebug("New URL: %s" % new_url) - - self.download(new_url, disposition=True) - - check = self.checkDownload({"empty": re.compile(r"^$")}) - - if check == "empty": - self.retry(5, 2 * 60, "Empty file downloaded") diff --git a/module/plugins/hoster/DepositfilesCom.py b/module/plugins/hoster/DepositfilesCom.py deleted file mode 100644 index e2b2d46fd..000000000 --- a/module/plugins/hoster/DepositfilesCom.py +++ /dev/null @@ -1,129 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urllib import unquote - -from module.plugins.internal.CaptchaService import ReCaptcha -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class DepositfilesCom(SimpleHoster): - __name__ = "DepositfilesCom" - __type__ = "hoster" - __version__ = "0.48" - - __pattern__ = r'https?://(?:www\.)?(depositfiles\.com|dfiles\.(eu|ru))(/\w{1,3})?/files/(?P<ID>\w+)' - - __description__ = """Depositfiles.com hoster plugin""" - __author_name__ = ("spoob", "zoidberg", "Walter Purcaro") - __author_mail__ = ("spoob@pyload.org", "zoidberg@mujmail.cz", "vuolter@gmail.com") - - FILE_NAME_PATTERN = r'<script type="text/javascript">eval\( unescape\(\'(?P<N>.*?)\'' - FILE_SIZE_PATTERN = r': <b>(?P<S>[0-9.]+) (?P<U>[kKMG])i?B</b>' - OFFLINE_PATTERN = r'<span class="html_download_api-not_exists"></span>' - - FILE_NAME_REPLACEMENTS = [(r'\%u([0-9A-Fa-f]{4})', lambda m: unichr(int(m.group(1), 16))), - (r'.*<b title="(?P<N>[^"]+).*', "\g<N>")] - FILE_URL_REPLACEMENTS = [(__pattern__, "https://dfiles.eu/files/\g<ID>")] - - SH_COOKIES = [(".dfiles.eu", "lang_current", "en")] - - RECAPTCHA_PATTERN = r"Recaptcha.create\('([^']+)'" - - FREE_LINK_PATTERN = r'<form id="downloader_file_form" action="(http://.+?\.(dfiles\.eu|depositfiles\.com)/.+?)" method="post"' - PREMIUM_LINK_PATTERN = r'class="repeat"><a href="(.+?)"' - PREMIUM_MIRROR_PATTERN = r'class="repeat_mirror"><a href="(.+?)"' - - - def handleFree(self): - self.html = self.load(self.pyfile.url, post={"gateway_result": "1"}, cookies=True) - - if re.search(r'File is checked, please try again in a minute.', self.html) is not None: - self.logInfo("DepositFiles.com: The file is being checked. Waiting 1 minute.") - self.wait(61) - self.retry() - - wait = re.search(r'html_download_api-limit_interval\">(\d+)</span>', self.html) - if wait: - wait_time = int(wait.group(1)) - self.logInfo("%s: Traffic used up. Waiting %d seconds." % (self.__name__, wait_time)) - self.wait(wait_time, True) - self.retry() - - wait = re.search(r'>Try in (\d+) minutes or use GOLD account', self.html) - if wait: - wait_time = int(wait.group(1)) - self.logInfo("%s: All free slots occupied. Waiting %d minutes." % (self.__name__, wait_time)) - self.setWait(wait_time * 60, False) - - wait = re.search(r'Please wait (\d+) sec', self.html) - if wait: - self.setWait(int(wait.group(1))) - - m = re.search(r"var fid = '(\w+)';", self.html) - if m is None: - self.retry(wait_time=5) - params = {'fid': m.group(1)} - self.logDebug("FID: %s" % params['fid']) - - captcha_key = '6LdRTL8SAAAAAE9UOdWZ4d0Ky-aeA7XfSqyWDM2m' - m = re.search(self.RECAPTCHA_PATTERN, self.html) - if m: - captcha_key = m.group(1) - self.logDebug("CAPTCHA_KEY: %s" % captcha_key) - - self.wait() - recaptcha = ReCaptcha(self) - - for _ in xrange(5): - self.html = self.load("https://dfiles.eu/get_file.php", get=params) - - if '<input type=button value="Continue" onclick="check_recaptcha' in self.html: - if not captcha_key: - self.parseError('Captcha key') - if 'response' in params: - self.invalidCaptcha() - params['challenge'], params['response'] = recaptcha.challenge(captcha_key) - self.logDebug(params) - continue - - m = re.search(self.FREE_LINK_PATTERN, self.html) - if m: - if 'response' in params: - self.correctCaptcha() - link = unquote(m.group(1)) - self.logDebug("LINK: %s" % link) - break - else: - self.parseError('Download link') - else: - self.fail('No valid captcha response received') - - try: - self.download(link, disposition=True) - except: - self.retry(wait_time=60) - - def handlePremium(self): - self.html = self.load(self.pyfile.url, cookies=self.SH_COOKIES) - - if '<span class="html_download_api-gold_traffic_limit">' in self.html: - self.logWarning("Download limit reached") - self.retry(25, 60 * 60, "Download limit reached") - elif 'onClick="show_gold_offer' in self.html: - self.account.relogin(self.user) - self.retry() - else: - link = re.search(self.PREMIUM_LINK_PATTERN, self.html) - mirror = re.search(self.PREMIUM_MIRROR_PATTERN, self.html) - if link: - dlink = link.group(1) - elif mirror: - dlink = mirror.group(1) - else: - self.parseError("No direct download link or mirror found") - self.download(dlink, disposition=True) - - -getInfo = create_getInfo(DepositfilesCom) diff --git a/module/plugins/hoster/DlFreeFr.py b/module/plugins/hoster/DlFreeFr.py deleted file mode 100644 index e25de18b4..000000000 --- a/module/plugins/hoster/DlFreeFr.py +++ /dev/null @@ -1,205 +0,0 @@ -# -*- coding: utf-8 -*- - -import pycurl -import re - -from module.common.json_layer import json_loads -from module.network.Browser import Browser -from module.network.CookieJar import CookieJar -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, replace_patterns - - -class CustomBrowser(Browser): - - def __init__(self, bucket=None, options={}): - Browser.__init__(self, bucket, options) - - def load(self, *args, **kwargs): - post = kwargs.get("post") - - if post is None and len(args) > 2: - post = args[2] - - if post: - self.http.c.setopt(pycurl.FOLLOWLOCATION, 0) - self.http.c.setopt(pycurl.POST, 1) - self.http.c.setopt(pycurl.CUSTOMREQUEST, "POST") - else: - self.http.c.setopt(pycurl.FOLLOWLOCATION, 1) - self.http.c.setopt(pycurl.POST, 0) - self.http.c.setopt(pycurl.CUSTOMREQUEST, "GET") - - return Browser.load(self, *args, **kwargs) - - -class AdYouLike: - """ - Class to support adyoulike captcha service - """ - ADYOULIKE_INPUT_PATTERN = r'Adyoulike.create\((.*?)\);' - ADYOULIKE_CALLBACK = r'Adyoulike.g._jsonp_5579316662423138' - ADYOULIKE_CHALLENGE_PATTERN = ADYOULIKE_CALLBACK + r'\((.*?)\)' - - def __init__(self, plugin, engine="adyoulike"): - self.plugin = plugin - self.engine = engine - - def challenge(self, html): - adyoulike_data_string = None - m = re.search(self.ADYOULIKE_INPUT_PATTERN, html) - if m: - adyoulike_data_string = m.group(1) - else: - self.plugin.fail("Can't read AdYouLike input data") - - # {"adyoulike":{"key":"P~zQ~O0zV0WTiAzC-iw0navWQpCLoYEP"}, - # "all":{"element_id":"ayl_private_cap_92300","lang":"fr","env":"prod"}} - ayl_data = json_loads(adyoulike_data_string) - - res = self.plugin.load( - r'http://api-ayl.appspot.com/challenge?key=%(ayl_key)s&env=%(ayl_env)s&callback=%(callback)s' % { - "ayl_key": ayl_data[self.engine]['key'], "ayl_env": ayl_data['all']['env'], - "callback": self.ADYOULIKE_CALLBACK}) - - m = re.search(self.ADYOULIKE_CHALLENGE_PATTERN, res) - challenge_string = None - if m: - challenge_string = m.group(1) - else: - self.plugin.fail("Invalid AdYouLike challenge") - challenge_data = json_loads(challenge_string) - - return ayl_data, challenge_data - - def result(self, ayl, challenge): - """ - Adyoulike.g._jsonp_5579316662423138 - ({"translations":{"fr":{"instructions_visual":"Recopiez « Soonnight » ci-dessous :"}}, - "site_under":true,"clickable":true,"pixels":{"VIDEO_050":[],"DISPLAY":[],"VIDEO_000":[],"VIDEO_100":[], - "VIDEO_025":[],"VIDEO_075":[]},"medium_type":"image/adyoulike", - "iframes":{"big":"<iframe src=\"http://www.soonnight.com/campagn.html\" scrolling=\"no\" - height=\"250\" width=\"300\" frameborder=\"0\"></iframe>"},"shares":{},"id":256, - "token":"e6QuI4aRSnbIZJg02IsV6cp4JQ9~MjA1","formats":{"small":{"y":300,"x":0,"w":300,"h":60}, - "big":{"y":0,"x":0,"w":300,"h":250},"hover":{"y":440,"x":0,"w":300,"h":60}}, - "tid":"SqwuAdxT1EZoi4B5q0T63LN2AkiCJBg5"}) - """ - response = None - try: - instructions_visual = challenge['translations'][ayl['all']['lang']]['instructions_visual'] - m = re.search(u".*«(.*)».*", instructions_visual) - if m: - response = m.group(1).strip() - else: - self.plugin.fail("Can't parse instructions visual") - except KeyError: - self.plugin.fail("No instructions visual") - - #TODO: Supports captcha - - if not response: - self.plugin.fail("AdYouLike result failed") - - return {"_ayl_captcha_engine": self.engine, - "_ayl_env": ayl['all']['env'], - "_ayl_tid": challenge['tid'], - "_ayl_token_challenge": challenge['token'], - "_ayl_response": response} - - -class DlFreeFr(SimpleHoster): - __name__ = "DlFreeFr" - __type__ = "hoster" - __version__ = "0.25" - - __pattern__ = r'http://(?:www\.)?dl\.free\.fr/([a-zA-Z0-9]+|getfile\.pl\?file=/[a-zA-Z0-9]+)' - - __description__ = """Dl.free.fr hoster plugin""" - __author_name__ = ("the-razer", "zoidberg", "Toilal") - __author_mail__ = ("daniel_ AT gmx DOT net", "zoidberg@mujmail.cz", "toilal.dev@gmail.com") - - FILE_NAME_PATTERN = r'Fichier:</td>\s*<td[^>]*>(?P<N>[^>]*)</td>' - FILE_SIZE_PATTERN = r'Taille:</td>\s*<td[^>]*>(?P<S>[\d.]+[KMG])o' - OFFLINE_PATTERN = r"Erreur 404 - Document non trouv|Fichier inexistant|Le fichier demandé n'a pas été trouvé" - - - def setup(self): - self.multiDL = self.resumeDownload = True - self.limitDL = 5 - self.chunkLimit = 1 - - def init(self): - factory = self.core.requestFactory - self.req = CustomBrowser(factory.bucket, factory.getOptions()) - - def process(self, pyfile): - self.req.setCookieJar(None) - - pyfile.url = replace_patterns(pyfile.url, self.FILE_URL_REPLACEMENTS) - valid_url = pyfile.url - headers = self.load(valid_url, just_header=True) - - self.html = None - if headers.get('code') == 302: - valid_url = headers.get('location') - headers = self.load(valid_url, just_header=True) - - if headers.get('code') == 200: - content_type = headers.get('content-type') - if content_type and content_type.startswith("text/html"): - # Undirect acces to requested file, with a web page providing it (captcha) - self.html = self.load(valid_url) - self.handleFree() - else: - # Direct access to requested file for users using free.fr as Internet Service Provider. - self.download(valid_url, disposition=True) - elif headers.get('code') == 404: - self.offline() - else: - self.fail("Invalid return code: " + str(headers.get('code'))) - - def handleFree(self): - action, inputs = self.parseHtmlForm('action="getfile.pl"') - - adyoulike = AdYouLike(self) - ayl, challenge = adyoulike.challenge(self.html) - result = adyoulike.result(ayl, challenge) - inputs.update(result) - - self.load("http://dl.free.fr/getfile.pl", post=inputs) - headers = self.getLastHeaders() - if headers.get("code") == 302 and "set-cookie" in headers and "location" in headers: - m = re.search("(.*?)=(.*?); path=(.*?); domain=(.*?)", headers.get("set-cookie")) - cj = CookieJar(__name__) - if m: - cj.setCookie(m.group(4), m.group(1), m.group(2), m.group(3)) - else: - self.fail("Cookie error") - location = headers.get("location") - self.req.setCookieJar(cj) - self.download(location, disposition=True) - else: - self.fail("Invalid response") - - def getLastHeaders(self): - #parse header - header = {"code": self.req.code} - for line in self.req.http.header.splitlines(): - line = line.strip() - if not line or ":" not in line: - continue - - key, none, value = line.partition(":") - key = key.lower().strip() - value = value.strip() - - if key in header: - if type(header[key]) == list: - header[key].append(value) - else: - header[key] = [header[key], value] - else: - header[key] = value - return header - - -getInfo = create_getInfo(DlFreeFr) diff --git a/module/plugins/hoster/DuploadOrg.py b/module/plugins/hoster/DuploadOrg.py deleted file mode 100644 index c11d694c5..000000000 --- a/module/plugins/hoster/DuploadOrg.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class DuploadOrg(XFileSharingPro): - __name__ = "DuploadOrg" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?dupload\.org/\w{12}' - - __description__ = """Dupload.grg hoster plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - HOSTER_NAME = "dupload.org" - - FILE_INFO_PATTERN = r'<h3[^>]*>(?P<N>.+) \((?P<S>[\d.]+) (?P<U>\w+)\)</h3>' - - -getInfo = create_getInfo(DuploadOrg) diff --git a/module/plugins/hoster/EasybytezCom.py b/module/plugins/hoster/EasybytezCom.py deleted file mode 100644 index f9dfe6a13..000000000 --- a/module/plugins/hoster/EasybytezCom.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class EasybytezCom(XFileSharingPro): - __name__ = "EasybytezCom" - __type__ = "hoster" - __version__ = "0.18" - - __pattern__ = r'http://(?:www\.)?easybytez.com/(\w+).*' - - __description__ = """Easybytez.com hoster plugin""" - __author_name__ = ("zoidberg", "stickell") - __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") - - HOSTER_NAME = "easybytez.com" - - FILE_INFO_PATTERN = r'<span class="name">(?P<N>.+)</span><br>\s*<span class="size">(?P<S>[^<]+)</span>' - OFFLINE_PATTERN = r'<h1>File not available</h1>' - - LINK_PATTERN = r'(http://(\w+\.(easyload|easybytez|zingload)\.(com|to)|\d+\.\d+\.\d+\.\d+)/files/\d+/\w+/[^"<]+)' - OVR_LINK_PATTERN = r'<h2>Download Link</h2>\s*<textarea[^>]*>([^<]+)' - ERROR_PATTERN = r'(?:class=["\']err["\'][^>]*>|<Center><b>)(.*?)</' - - - def setup(self): - self.resumeDownload = self.multiDL = self.premium - - -getInfo = create_getInfo(EasybytezCom) diff --git a/module/plugins/hoster/EdiskCz.py b/module/plugins/hoster/EdiskCz.py deleted file mode 100644 index 449dc0050..000000000 --- a/module/plugins/hoster/EdiskCz.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class EdiskCz(SimpleHoster): - __name__ = "EdiskCz" - __type__ = "hoster" - __version__ = "0.21" - - __pattern__ = r'http://(?:www\.)?edisk.(cz|sk|eu)/(stahni|sk/stahni|en/download)/.*' - - __description__ = """Edisk.cz hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_INFO_PATTERN = r'<span class="fl" title="(?P<N>[^"]+)">\s*.*?\((?P<S>[0-9.]*) (?P<U>[kKMG])i?B\)</h1></span>' - OFFLINE_PATTERN = r'<h3>This file does not exist due to one of the following:</h3><ul><li>' - - ACTION_PATTERN = r'/en/download/(\d+/.*\.html)' - LINK_PATTERN = r'http://.*edisk.cz.*\.html' - - - def setup(self): - self.multiDL = False - - def process(self, pyfile): - url = re.sub("/(stahni|sk/stahni)/", "/en/download/", pyfile.url) - - self.logDebug('URL:' + url) - - m = re.search(self.ACTION_PATTERN, url) - if m is None: - self.parseError("ACTION") - action = m.group(1) - - self.html = self.load(url, decode=True) - self.getFileInfo() - - self.html = self.load(re.sub("/en/download/", "/en/download-slow/", url)) - - url = self.load(re.sub("/en/download/", "/x-download/", url), post={ - "action": action - }) - - if not re.match(self.LINK_PATTERN, url): - self.fail("Unexpected server response") - - self.download(url) - - -getInfo = create_getInfo(EdiskCz) diff --git a/module/plugins/hoster/EgoFilesCom.py b/module/plugins/hoster/EgoFilesCom.py deleted file mode 100644 index 547f042e4..000000000 --- a/module/plugins/hoster/EgoFilesCom.py +++ /dev/null @@ -1,89 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://egofiles.com/mOZfMI1WLZ6HBkGG/random.bin - -import re - -from module.plugins.internal.CaptchaService import ReCaptcha -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class EgoFilesCom(SimpleHoster): - __name__ = "EgoFilesCom" - __type__ = "hoster" - __version__ = "0.15" - - __pattern__ = r'https?://(?:www\.)?egofiles.com/(\w+)' - - __description__ = """Egofiles.com hoster plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - FILE_INFO_PATTERN = r'<div class="down-file">\s+(?P<N>[^\t]+)\s+<div class="file-properties">\s+(File size|Rozmiar): (?P<S>[\w.]+) (?P<U>\w+) \|' - OFFLINE_PATTERN = r'(File size|Rozmiar): 0 KB' - WAIT_TIME_PATTERN = r'For next free download you have to wait <strong>((?P<m>\d*)m)? ?((?P<s>\d+)s)?</strong>' - LINK_PATTERN = r'<a href="(?P<link>[^"]+)">Download ></a>' - RECAPTCHA_KEY = "6LeXatQSAAAAAHezcjXyWAni-4t302TeYe7_gfvX" - - - def setup(self): - # Set English language - self.load("https://egofiles.com/ajax/lang.php?lang=en", just_header=True) - - def process(self, pyfile): - if self.premium and (not self.SH_CHECK_TRAFFIC or self.checkTrafficLeft()): - self.handlePremium() - else: - self.handleFree() - - def handleFree(self): - self.html = self.load(self.pyfile.url, decode=True) - self.getFileInfo() - - # Wait time between free downloads - if 'For next free download you have to wait' in self.html: - m = re.search(self.WAIT_TIME_PATTERN, self.html).groupdict('0') - waittime = int(m['m']) * 60 + int(m['s']) - self.wait(waittime, True) - - downloadURL = r'' - recaptcha = ReCaptcha(self) - for _ in xrange(5): - challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY) - post_data = {'recaptcha_challenge_field': challenge, - 'recaptcha_response_field': response} - self.html = self.load(self.pyfile.url, post=post_data, decode=True) - m = re.search(self.LINK_PATTERN, self.html) - if m is None: - self.logInfo('Wrong captcha') - self.invalidCaptcha() - elif hasattr(m, 'group'): - downloadURL = m.group('link') - self.correctCaptcha() - break - else: - self.fail('Unknown error - Plugin may be out of date') - - if not downloadURL: - self.fail("No Download url retrieved/all captcha attempts failed") - - self.download(downloadURL, disposition=True) - - def handlePremium(self): - header = self.load(self.pyfile.url, just_header=True) - if 'location' in header: - self.logDebug('DIRECT LINK from header: ' + header['location']) - self.download(header['location']) - else: - self.html = self.load(self.pyfile.url, decode=True) - self.getFileInfo() - m = re.search(r'<a href="(?P<link>[^"]+)">Download ></a>', self.html) - if m is None: - self.parseError('Unable to detect direct download url') - else: - self.logDebug('DIRECT URL from html: ' + m.group('link')) - self.download(m.group('link'), disposition=True) - - -getInfo = create_getInfo(EgoFilesCom) diff --git a/module/plugins/hoster/EpicShareNet.py b/module/plugins/hoster/EpicShareNet.py deleted file mode 100644 index 73b16c08e..000000000 --- a/module/plugins/hoster/EpicShareNet.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# BigBuckBunny_320x180.mp4 - 61.7 Mb - http://epicshare.net/fch3m2bk6ihp/BigBuckBunny_320x180.mp4.html - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class EpicShareNet(XFileSharingPro): - __name__ = "EpicShareNet" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'https?://(?:www\.)?epicshare\.net/\w{12}' - - __description__ = """EpicShare.net hoster plugin""" - __author_name__ = "t4skforce" - __author_mail__ = "t4skforce1337[AT]gmail[DOT]com" - - HOSTER_NAME = "epicshare.net" - - OFFLINE_PATTERN = r'<b>File Not Found</b><br><br>' - FILE_NAME_PATTERN = r'<b>Password:</b></div>\s*<h2>(?P<N>[^<]+)</h2>' - - -getInfo = create_getInfo(EpicShareNet) diff --git a/module/plugins/hoster/EuroshareEu.py b/module/plugins/hoster/EuroshareEu.py deleted file mode 100644 index fdb76cd5c..000000000 --- a/module/plugins/hoster/EuroshareEu.py +++ /dev/null @@ -1,64 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class EuroshareEu(SimpleHoster): - __name__ = "EuroshareEu" - __type__ = "hoster" - __version__ = "0.25" - - __pattern__ = r'http://(?:www\.)?euroshare.(eu|sk|cz|hu|pl)/file/.*' - - __description__ = """Euroshare.eu hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_INFO_PATTERN = r'<span style="float: left;"><strong>(?P<N>.+?)</strong> \((?P<S>.+?)\)</span>' - OFFLINE_PATTERN = ur'<h2>S.bor sa nena.iel</h2>|PoÅŸadovaná stránka neexistuje!' - - FREE_URL_PATTERN = r'<a href="(/file/\d+/[^/]*/download/)"><div class="downloadButton"' - ERR_PARDL_PATTERN = r'<h2>Prebieha s.ahovanie</h2>|<p>Naraz je z jednej IP adresy mo.n. s.ahova. iba jeden s.bor' - ERR_NOT_LOGGED_IN_PATTERN = r'href="/customer-zone/login/"' - - FILE_URL_REPLACEMENTS = [(r"(http://[^/]*\.)(sk|cz|hu|pl)/", r"\1eu/")] - - - def setup(self): - self.multiDL = self.resumeDownload = self.premium - self.req.setOption("timeout", 120) - - def handlePremium(self): - if self.ERR_NOT_LOGGED_IN_PATTERN in self.html: - self.account.relogin(self.user) - self.retry(reason="User not logged in") - - self.download(self.pyfile.url.rstrip('/') + "/download/") - - check = self.checkDownload({"login": re.compile(self.ERR_NOT_LOGGED_IN_PATTERN), - "json": re.compile(r'\{"status":"error".*?"message":"(.*?)"')}) - if check == "login" or (check == "json" and self.lastCheck.group(1) == "Access token expired"): - self.account.relogin(self.user) - self.retry(reason="Access token expired") - elif check == "json": - self.fail(self.lastCheck.group(1)) - - def handleFree(self): - if re.search(self.ERR_PARDL_PATTERN, self.html) is not None: - self.longWait(5 * 60, 12) - - m = re.search(self.FREE_URL_PATTERN, self.html) - if m is None: - self.parseError("Parse error (URL)") - parsed_url = "http://euroshare.eu%s" % m.group(1) - self.logDebug("URL", parsed_url) - self.download(parsed_url, disposition=True) - - check = self.checkDownload({"multi_dl": re.compile(self.ERR_PARDL_PATTERN)}) - if check == "multi_dl": - self.longWait(5 * 60, 12) - - -getInfo = create_getInfo(EuroshareEu) diff --git a/module/plugins/hoster/ExtabitCom.py b/module/plugins/hoster/ExtabitCom.py deleted file mode 100644 index 2409d8517..000000000 --- a/module/plugins/hoster/ExtabitCom.py +++ /dev/null @@ -1,77 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.common.json_layer import json_loads - -from module.plugins.hoster.UnrestrictLi import secondsToMidnight -from module.plugins.internal.CaptchaService import ReCaptcha -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class ExtabitCom(SimpleHoster): - __name__ = "ExtabitCom" - __type__ = "hoster" - __version__ = "0.6" - - __pattern__ = r'http://(?:www\.)?extabit\.com/(file|go|fid)/(?P<ID>\w+)' - - __description__ = """Extabit.com hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_NAME_PATTERN = r'<th>File:</th>\s*<td class="col-fileinfo">\s*<div title="(?P<N>[^"]+)">' - FILE_SIZE_PATTERN = r'<th>Size:</th>\s*<td class="col-fileinfo">(?P<S>[^<]+)</td>' - OFFLINE_PATTERN = r'>File not found<' - TEMP_OFFLINE_PATTERN = r'>(File is temporary unavailable|No download mirror)<' - - LINK_PATTERN = r'[\'"](http://guest\d+\.extabit\.com/[a-z0-9]+/.*?)[\'"]' - - - def handleFree(self): - if r">Only premium users can download this file" in self.html: - self.fail("Only premium users can download this file") - - m = re.search(r"Next free download from your ip will be available in <b>(\d+)\s*minutes", self.html) - if m: - self.wait(int(m.group(1)) * 60, True) - elif "The daily downloads limit from your IP is exceeded" in self.html: - self.logWarning("You have reached your daily downloads limit for today") - self.wait(secondsToMidnight(gmt=2), True) - - self.logDebug("URL: " + self.req.http.lastEffectiveURL) - m = re.match(self.__pattern__, self.req.http.lastEffectiveURL) - fileID = m.group('ID') if m else self.file_info('ID') - - m = re.search(r'recaptcha/api/challenge\?k=(\w+)', self.html) - if m: - recaptcha = ReCaptcha(self) - captcha_key = m.group(1) - - for _ in xrange(5): - get_data = {"type": "recaptcha"} - get_data['challenge'], get_data['capture'] = recaptcha.challenge(captcha_key) - response = json_loads(self.load("http://extabit.com/file/%s/" % fileID, get=get_data)) - if "ok" in response: - self.correctCaptcha() - break - else: - self.invalidCaptcha() - else: - self.fail("Invalid captcha") - else: - self.parseError('Captcha') - - if not "href" in response: - self.parseError('JSON') - - self.html = self.load("http://extabit.com/file/%s%s" % (fileID, response['href'])) - m = re.search(self.LINK_PATTERN, self.html) - if m is None: - self.parseError('Download URL') - url = m.group(1) - self.logDebug("Download URL: " + url) - self.download(url) - - -getInfo = create_getInfo(ExtabitCom) diff --git a/module/plugins/hoster/FastixRu.py b/module/plugins/hoster/FastixRu.py deleted file mode 100644 index 199544840..000000000 --- a/module/plugins/hoster/FastixRu.py +++ /dev/null @@ -1,71 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from random import randrange -from urllib import unquote - -from module.common.json_layer import json_loads -from module.plugins.Hoster import Hoster - - -class FastixRu(Hoster): - __name__ = "FastixRu" - __type__ = "hoster" - __version__ = "0.04" - - __pattern__ = r'http://(?:www\.)?fastix\.(ru|it)/file/(?P<ID>[a-zA-Z0-9]{24})' - - __description__ = """Fastix hoster plugin""" - __author_name__ = "Massimo Rosamilia" - __author_mail__ = "max@spiritix.eu" - - - def getFilename(self, url): - try: - name = unquote(url.rsplit("/", 1)[1]) - except IndexError: - name = "Unknown_Filename..." - if name.endswith("..."): # incomplete filename, append random stuff - name += "%s.tmp" % randrange(100, 999) - return name - - def setup(self): - self.chunkLimit = 3 - self.resumeDownload = True - - def process(self, pyfile): - if re.match(self.__pattern__, pyfile.url): - new_url = pyfile.url - elif not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "Fastix") - self.fail("No Fastix account provided") - else: - self.logDebug("Old URL: %s" % pyfile.url) - api_key = self.account.getAccountData(self.user) - api_key = api_key['api'] - url = "http://fastix.ru/api_v2/?apikey=%s&sub=getdirectlink&link=%s" % (api_key, pyfile.url) - page = self.load(url) - data = json_loads(page) - self.logDebug("Json data: %s" % str(data)) - if "error\":true" in page: - self.offline() - else: - new_url = data['downloadlink'] - - if new_url != pyfile.url: - self.logDebug("New URL: %s" % new_url) - - if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown"): - #only use when name wasnt already set - pyfile.name = self.getFilename(new_url) - - self.download(new_url, disposition=True) - - check = self.checkDownload({"error": "<title>An error occurred while processing your request</title>", - "empty": re.compile(r"^$")}) - - if check == "error": - self.retry(wait_time=60, reason="An error occurred while generating link.") - elif check == "empty": - self.retry(wait_time=60, reason="Downloaded File was empty.") diff --git a/module/plugins/hoster/FastshareCz.py b/module/plugins/hoster/FastshareCz.py deleted file mode 100644 index 7a847fdc4..000000000 --- a/module/plugins/hoster/FastshareCz.py +++ /dev/null @@ -1,88 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://www.fastshare.cz/2141189/random.bin - -import re - -from urlparse import urljoin - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class FastshareCz(SimpleHoster): - __name__ = "FastshareCz" - __type__ = "hoster" - __version__ = "0.22" - - __pattern__ = r'http://(?:www\.)?fastshare\.cz/\d+/.+' - - __description__ = """FastShare.cz hoster plugin""" - __author_name__ = ("zoidberg", "stickell", "Walter Purcaro") - __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it", "vuolter@gmail.com") - - FILE_INFO_PATTERN = r'<h1 class="dwp">(?P<N>[^<]+)</h1>\s*<div class="fileinfo">\s*Size\s*: (?P<S>\d+) (?P<U>\w+),' - OFFLINE_PATTERN = r'>(The file has been deleted|Requested page not found)' - - FILE_URL_REPLACEMENTS = [("#.*", "")] - - SH_COOKIES = [(".fastshare.cz", "lang", "en")] - - FREE_URL_PATTERN = r'action=(/free/.*?)>\s*<img src="([^"]*)"><br' - PREMIUM_URL_PATTERN = r'(http://data\d+\.fastshare\.cz/download\.php\?id=\d+&)' - CREDIT_PATTERN = r' credit for ' - - - def handleFree(self): - if "> 100% of FREE slots are full" in self.html: - self.retry(120, 60, "No free slots") - - m = re.search(self.FREE_URL_PATTERN, self.html) - if m: - action, captcha_src = m.groups() - else: - self.parseError("Free URL") - - baseurl = "http://www.fastshare.cz" - captcha = self.decryptCaptcha(urljoin(baseurl, captcha_src)) - self.download(urljoin(baseurl, action), post={"code": captcha, "btn.x": 77, "btn.y": 18}) - - check = self.checkDownload({ - "paralell_dl": - "<title>FastShare.cz</title>|<script>alert\('Pres FREE muzete stahovat jen jeden soubor najednou.'\)", - "wrong_captcha": "Download for FREE" - }) - - if check == "paralell_dl": - self.retry(6, 10 * 60, "Paralell download") - elif check == "wrong_captcha": - self.retry(max_tries=5, reason="Wrong captcha") - - def handlePremium(self): - header = self.load(self.pyfile.url, just_header=True) - if "location" in header: - url = header['location'] - else: - self.html = self.load(self.pyfile.url) - - self.getFileInfo() # - - if self.CREDIT_PATTERN in self.html: - self.logWarning("Not enough traffic left") - self.resetAccount() - else: - m = re.search(self.PREMIUM_URL_PATTERN, self.html) - if m: - url = m.group(1) - else: - self.parseError("Premium URL") - - self.logDebug("PREMIUM URL: " + url) - self.download(url, disposition=True) - - check = self.checkDownload({"credit": re.compile(self.CREDIT_PATTERN)}) - if check == "credit": - self.resetAccount() - - -getInfo = create_getInfo(FastshareCz) diff --git a/module/plugins/hoster/File4safeCom.py b/module/plugins/hoster/File4safeCom.py deleted file mode 100644 index 7ec775103..000000000 --- a/module/plugins/hoster/File4safeCom.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pycurl import FOLLOWLOCATION - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class File4safeCom(XFileSharingPro): - __name__ = "File4safeCom" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'https?://(?:www\.)?file4safe\.com/\w+' - - __description__ = """File4safe.com hoster plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - HOSTER_NAME = "file4safe.com" - - - def handlePremium(self): - self.req.http.lastURL = self.pyfile.url - - self.req.http.c.setopt(FOLLOWLOCATION, 0) - self.load(self.pyfile.url, post=self.getPostParameters(), decode=True) - self.header = self.req.http.header - self.req.http.c.setopt(FOLLOWLOCATION, 1) - - m = re.search(r"Location\s*:\s*(.*)", self.header, re.I) - if m and re.match(self.LINK_PATTERN, m.group(1)): - location = m.group(1).strip() - self.startDownload(location) - else: - self.parseError("Unable to detect premium download link") - - -getInfo = create_getInfo(File4safeCom) diff --git a/module/plugins/hoster/FileApeCom.py b/module/plugins/hoster/FileApeCom.py deleted file mode 100644 index 91744c7c2..000000000 --- a/module/plugins/hoster/FileApeCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class FileApeCom(DeadHoster): - __name__ = "FileApeCom" - __type__ = "hoster" - __version__ = "0.12" - - __pattern__ = r'http://(?:www\.)?fileape\.com/(index\.php\?act=download\&id=|dl/)\w+' - - __description__ = """FileApe.com hoster plugin""" - __author_name__ = "espes" - __author_mail__ = None - - -getInfo = create_getInfo(FileApeCom) diff --git a/module/plugins/hoster/FileParadoxIn.py b/module/plugins/hoster/FileParadoxIn.py deleted file mode 100644 index d6395b130..000000000 --- a/module/plugins/hoster/FileParadoxIn.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class FileParadoxIn(XFileSharingPro): - __name__ = "FileParadoxIn" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'https?://(?:www\.)?fileparadox\.in/\w+' - - __description__ = """FileParadox.in hoster plugin""" - __author_name__ = "RazorWing" - __author_mail__ = "muppetuk1@hotmail.com" - - HOSTER_NAME = "fileparadox.in" - - FILE_SIZE_PATTERN = r'</font>\s*\(\s*(?P<S>[^)]+)\s*\)</font>' - LINK_PATTERN = r'(http://([^/]*?fileparadox.in|\d+\.\d+\.\d+\.\d+)(:\d+/d/|/files/\w+/\w+/)[^"\'<]+)' - - -getInfo = create_getInfo(FileParadoxIn) diff --git a/module/plugins/hoster/FileStoreTo.py b/module/plugins/hoster/FileStoreTo.py deleted file mode 100644 index 98d67609a..000000000 --- a/module/plugins/hoster/FileStoreTo.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class FileStoreTo(SimpleHoster): - __name__ = "FileStoreTo" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?filestore\.to/\?d=(?P<ID>\w+)' - - __description__ = """FileStore.to hoster plugin""" - __author_name__ = ("Walter Purcaro", "stickell") - __author_mail__ = ("vuolter@gmail.com", "l.stickell@yahoo.it") - - FILE_INFO_PATTERN = r'File: <span[^>]*>(?P<N>.+)</span><br />Size: (?P<S>[\d,.]+) (?P<U>\w+)' - OFFLINE_PATTERN = r'>Download-Datei wurde nicht gefunden<' - - - def setup(self): - self.resumeDownload = self.multiDL = True - - def handleFree(self): - self.wait(10) - ldc = re.search(r'wert="(\w+)"', self.html).group(1) - link = self.load("http://filestore.to/ajax/download.php", get={"LDC": ldc}) - self.logDebug("Download link = " + link) - self.download(link) - - -getInfo = create_getInfo(FileStoreTo) diff --git a/module/plugins/hoster/FilebeerInfo.py b/module/plugins/hoster/FilebeerInfo.py deleted file mode 100644 index 3e8cfb6a3..000000000 --- a/module/plugins/hoster/FilebeerInfo.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class FilebeerInfo(DeadHoster): - __name__ = "FilebeerInfo" - __type__ = "hoster" - __version__ = "0.03" - - __pattern__ = r'http://(?:www\.)?filebeer\.info/(?!\d*~f)(?P<ID>\w+).*' - - __description__ = """Filebeer.info plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - -getInfo = create_getInfo(FilebeerInfo) diff --git a/module/plugins/hoster/FilecloudIo.py b/module/plugins/hoster/FilecloudIo.py deleted file mode 100644 index 025bd483f..000000000 --- a/module/plugins/hoster/FilecloudIo.py +++ /dev/null @@ -1,115 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.common.json_layer import json_loads -from module.plugins.internal.CaptchaService import ReCaptcha -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class FilecloudIo(SimpleHoster): - __name__ = "FilecloudIo" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?(?:filecloud\.io|ifile\.it|mihd\.net)/(?P<ID>\w+).*' - - __description__ = """Filecloud.io hoster plugin""" - __author_name__ = ("zoidberg", "stickell") - __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") - - FILE_SIZE_PATTERN = r'{var __ab1 = (?P<S>\d+);}' - FILE_NAME_PATTERN = r'id="aliasSpan">(?P<N>.*?) <' - OFFLINE_PATTERN = r'l10n.(FILES__DOESNT_EXIST|REMOVED)' - TEMP_OFFLINE_PATTERN = r'l10n.FILES__WARNING' - - UKEY_PATTERN = r"'ukey'\s*:'(\w+)'," - AB1_PATTERN = r"if\( __ab1 == '(\w+)' \)" - ERROR_MSG_PATTERN = r'var __error_msg\s*=\s*l10n\.(.*?);' - LINK_PATTERN = r'"(http://s\d+.filecloud.io/%s/\d+/.*?)"' - RECAPTCHA_KEY_PATTERN = r"var __recaptcha_public\s*=\s*'([^']+)';" - RECAPTCHA_KEY = "6Lf5OdISAAAAAEZObLcx5Wlv4daMaASRov1ysDB1" - - - def setup(self): - self.resumeDownload = self.multiDL = True - self.chunkLimit = 1 - - def handleFree(self): - data = {"ukey": self.file_info['ID']} - - m = re.search(self.AB1_PATTERN, self.html) - if m is None: - self.parseError("__AB1") - data['__ab1'] = m.group(1) - - if not self.account: - self.fail("User not logged in") - elif not self.account.logged_in: - recaptcha = ReCaptcha(self) - captcha_challenge, captcha_response = recaptcha.challenge(self.RECAPTCHA_KEY) - self.account.form_data = {"recaptcha_challenge_field": captcha_challenge, - "recaptcha_response_field": captcha_response} - self.account.relogin(self.user) - self.retry(2) - - json_url = "http://filecloud.io/download-request.json" - response = self.load(json_url, post=data) - self.logDebug(response) - response = json_loads(response) - - if "error" in response and response['error']: - self.fail(response) - - self.logDebug(response) - if response['captcha']: - recaptcha = ReCaptcha(self) - m = re.search(self.RECAPTCHA_KEY_PATTERN, self.html) - captcha_key = m.group(1) if m else self.RECAPTCHA_KEY - data['ctype'] = "recaptcha" - - for _ in xrange(5): - data['recaptcha_challenge'], data['recaptcha_response'] = recaptcha.challenge(captcha_key) - - json_url = "http://filecloud.io/download-request.json" - response = self.load(json_url, post=data) - self.logDebug(response) - response = json_loads(response) - - if "retry" in response and response['retry']: - self.invalidCaptcha() - else: - self.correctCaptcha() - break - else: - self.fail("Incorrect captcha") - - if response['dl']: - self.html = self.load('http://filecloud.io/download.html') - m = re.search(self.LINK_PATTERN % self.file_info['ID'], self.html) - if m is None: - self.parseError("Download URL") - download_url = m.group(1) - self.logDebug("Download URL: %s" % download_url) - - if "size" in self.file_info and self.file_info['size']: - self.check_data = {"size": int(self.file_info['size'])} - self.download(download_url) - else: - self.fail("Unexpected server response") - - def handlePremium(self): - akey = self.account.getAccountData(self.user)['akey'] - ukey = self.file_info['ID'] - self.logDebug("Akey: %s | Ukey: %s" % (akey, ukey)) - rep = self.load("http://api.filecloud.io/api-fetch_download_url.api", - post={"akey": akey, "ukey": ukey}) - self.logDebug("FetchDownloadUrl: " + rep) - rep = json_loads(rep) - if rep['status'] == 'ok': - self.download(rep['download_url'], disposition=True) - else: - self.fail(rep['message']) - - -getInfo = create_getInfo(FilecloudIo) diff --git a/module/plugins/hoster/FilefactoryCom.py b/module/plugins/hoster/FilefactoryCom.py deleted file mode 100644 index 1ac7550fc..000000000 --- a/module/plugins/hoster/FilefactoryCom.py +++ /dev/null @@ -1,106 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.network.RequestFactory import getURL -from module.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo - - -def getInfo(urls): - for url in urls: - h = getURL(url, just_header=True) - m = re.search(r'Location: (.+)\r\n', h) - if m and not re.match(m.group(1), FilefactoryCom.__pattern__): # It's a direct link! Skipping - yield (url, 0, 3, url) - else: # It's a standard html page - file_info = parseFileInfo(FilefactoryCom, url, getURL(url)) - yield file_info - - -class FilefactoryCom(SimpleHoster): - __name__ = "FilefactoryCom" - __type__ = "hoster" - __version__ = "0.50" - - __pattern__ = r'https?://(?:www\.)?filefactory\.com/file/(?P<id>[a-zA-Z0-9]+)' - - __description__ = """Filefactory.com hoster plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - FILE_INFO_PATTERN = r'<div id="file_name"[^>]*>\s*<h2>(?P<N>[^<]+)</h2>\s*<div id="file_info">\s*(?P<S>[\d.]+) (?P<U>\w+) uploaded' - LINK_PATTERN = r'<a href="(https?://[^"]+)"[^>]*><i[^>]*></i> Download with FileFactory Premium</a>' - OFFLINE_PATTERN = r'<h2>File Removed</h2>|This file is no longer available' - PREMIUM_ONLY_PATTERN = r'>Premium Account Required<' - - SH_COOKIES = [(".filefactory.com", "locale", "en_US.utf8")] - - - def handleFree(self): - self.html = self.load(self.pyfile.url, decode=True) - if "Currently only Premium Members can download files larger than" in self.html: - self.fail("File too large for free download") - elif "All free download slots on this server are currently in use" in self.html: - self.retry(50, 15 * 60, "All free slots are busy") - - m = re.search(r'data-href(?:-direct)?="(http://[^"]+)"', self.html) - if m: - t = re.search(r'<div id="countdown_clock" data-delay="(\d+)">', self.html) - if t: - t = t.group(1) - else: - self.logDebug("Unable to detect countdown duration. Guessing 60 seconds") - t = 60 - self.wait(t) - direct = m.group(1) - else: # This section could be completely useless now - # Load the page that contains the direct link - url = re.search(r"document\.location\.host \+\s*'(.+)';", self.html) - if url is None: - self.parseError('Unable to detect free link') - url = 'http://www.filefactory.com' + url.group(1) - self.html = self.load(url, decode=True) - - # Free downloads wait time - waittime = re.search(r'id="startWait" value="(\d+)"', self.html) - if not waittime: - self.parseError('Unable to detect wait time') - self.wait(int(waittime.group(1))) - - # Parse the direct link and download it - direct = re.search(r'data-href(?:-direct)?="(.*)" class="button', self.html) - if not direct: - self.parseError('Unable to detect free direct link') - direct = direct.group(1) - - self.logDebug('DIRECT LINK: ' + direct) - self.download(direct, disposition=True) - - check = self.checkDownload({"multiple": "You are currently downloading too many files at once.", - "error": '<div id="errorMessage">'}) - - if check == "multiple": - self.logDebug("Parallel downloads detected; waiting 15 minutes") - self.retry(wait_time=15 * 60, reason="Parallel downloads") - elif check == "error": - self.fail("Unknown error") - - def handlePremium(self): - header = self.load(self.pyfile.url, just_header=True) - if 'location' in header: - url = header['location'].strip() - if not url.startswith("http://"): - url = "http://www.filefactory.com" + url - elif 'content-disposition' in header: - url = self.pyfile.url - else: - self.logInfo('You could enable "Direct Downloads" on http://filefactory.com/account/') - html = self.load(self.pyfile.url) - m = re.search(self.LINK_PATTERN, html) - if m: - url = m.group(1) - else: - self.parseError('Unable to detect premium direct link') - - self.logDebug('DIRECT PREMIUM LINK: ' + url) - self.download(url, disposition=True) diff --git a/module/plugins/hoster/FilejungleCom.py b/module/plugins/hoster/FilejungleCom.py deleted file mode 100644 index 9380be90e..000000000 --- a/module/plugins/hoster/FilejungleCom.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.hoster.FileserveCom import FileserveCom, checkFile -from module.plugins.Plugin import chunks - - -class FilejungleCom(FileserveCom): - __name__ = "FilejungleCom" - __type__ = "hoster" - __version__ = "0.51" - - __pattern__ = r'http://(?:www\.)?filejungle\.com/f/(?P<id>[^/]+).*' - - __description__ = """Filejungle.com hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - URLS = ["http://www.filejungle.com/f/", "http://www.filejungle.com/check_links.php", - "http://www.filejungle.com/checkReCaptcha.php"] - LINKCHECK_TR = r'<li>\s*(<div class="col1">.*?)</li>' - LINKCHECK_TD = r'<div class="(?:col )?col\d">(?:<[^>]*>| )*([^<]*)' - - LONG_WAIT_PATTERN = r'<h1>Please wait for (\d+) (\w+)\s*to download the next file\.</h1>' - - -def getInfo(urls): - for chunk in chunks(urls, 100): - yield checkFile(FilejungleCom, chunk) diff --git a/module/plugins/hoster/FileomCom.py b/module/plugins/hoster/FileomCom.py deleted file mode 100644 index 2f876466b..000000000 --- a/module/plugins/hoster/FileomCom.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://fileom.com/gycaytyzdw3g/random.bin.html - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class FileomCom(XFileSharingPro): - __name__ = "FileomCom" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'https?://(?:www\.)?fileom\.com/\w+' - - __description__ = """Fileom.com hoster plugin""" - __author_name__ = "Walter Purcaro" - __author_mail__ = "vuolter@gmail.com" - - HOSTER_NAME = "fileom.com" - - FILE_URL_REPLACEMENTS = [(r'/$', "")] - SH_COOKIES = [(".fileom.com", "lang", "english")] - - FILE_NAME_PATTERN = r'Filename: <span>(?P<N>.+?)<' - FILE_SIZE_PATTERN = r'File Size: <span class="size">(?P<S>[\d\.]+) (?P<U>\w+)' - - ERROR_PATTERN = r'class=["\']err["\'][^>]*>(.*?)(?:\'|</)' - - LINK_PATTERN = r"var url2 = '(.+?)';" - - - def setup(self): - self.resumeDownload = self.premium - self.multiDL = True - self.chunkLimit = 1 - - -getInfo = create_getInfo(FileomCom) diff --git a/module/plugins/hoster/FilepostCom.py b/module/plugins/hoster/FilepostCom.py deleted file mode 100644 index 0e1b6ea5a..000000000 --- a/module/plugins/hoster/FilepostCom.py +++ /dev/null @@ -1,129 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from time import time - -from module.common.json_layer import json_loads -from module.plugins.internal.CaptchaService import ReCaptcha -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class FilepostCom(SimpleHoster): - __name__ = "FilepostCom" - __type__ = "hoster" - __version__ = "0.28" - - __pattern__ = r'https?://(?:www\.)?(?:filepost\.com/files|fp.io)/([^/]+).*' - - __description__ = """Filepost.com hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_INFO_PATTERN = r'<input type="text" id="url" value=\'<a href[^>]*>(?P<N>[^>]+?) - (?P<S>[0-9\.]+ [kKMG]i?B)</a>\' class="inp_text"/>' - OFFLINE_PATTERN = r'class="error_msg_title"> Invalid or Deleted File. </div>|<div class="file_info file_info_deleted">' - - PREMIUM_ONLY_PATTERN = r'members only. Please upgrade to premium|a premium membership is required to download this file' - RECAPTCHA_KEY_PATTERN = r"Captcha.init\({\s*key:\s*'([^']+)'" - FLP_TOKEN_PATTERN = r"set_store_options\({token: '([^']+)'" - - - def handleFree(self): - # Find token and captcha key - file_id = re.match(self.__pattern__, self.pyfile.url).group(1) - - m = re.search(self.FLP_TOKEN_PATTERN, self.html) - if m is None: - self.parseError("Token") - flp_token = m.group(1) - - m = re.search(self.RECAPTCHA_KEY_PATTERN, self.html) - if m is None: - self.parseError("Captcha key") - captcha_key = m.group(1) - - # Get wait time - get_dict = {'SID': self.req.cj.getCookie('SID'), 'JsHttpRequest': str(int(time() * 10000)) + '-xml'} - post_dict = {'action': 'set_download', 'token': flp_token, 'code': file_id} - wait_time = int(self.getJsonResponse(get_dict, post_dict, 'wait_time')) - - if wait_time > 0: - self.wait(wait_time) - - post_dict = {"token": flp_token, "code": file_id, "file_pass": ''} - - if 'var is_pass_exists = true;' in self.html: - # Solve password - for file_pass in self.getPassword().splitlines(): - get_dict['JsHttpRequest'] = str(int(time() * 10000)) + '-xml' - post_dict['file_pass'] = file_pass - self.logInfo("Password protected link, trying " + file_pass) - - download_url = self.getJsonResponse(get_dict, post_dict, 'link') - if download_url: - break - - else: - self.fail("No or incorrect password") - - else: - # Solve recaptcha - recaptcha = ReCaptcha(self) - - for i in xrange(5): - get_dict['JsHttpRequest'] = str(int(time() * 10000)) + '-xml' - if i: - post_dict['recaptcha_challenge_field'], post_dict['recaptcha_response_field'] = recaptcha.challenge( - captcha_key) - self.logDebug(u"RECAPTCHA: %s : %s : %s" % ( - captcha_key, post_dict['recaptcha_challenge_field'], post_dict['recaptcha_response_field'])) - - download_url = self.getJsonResponse(get_dict, post_dict, 'link') - if download_url: - if i: - self.correctCaptcha() - break - elif i: - self.invalidCaptcha() - - else: - self.fail("Invalid captcha") - - # Download - self.download(download_url) - - def getJsonResponse(self, get_dict, post_dict, field): - json_response = json_loads(self.load('https://filepost.com/files/get/', get=get_dict, post=post_dict)) - self.logDebug(json_response) - - if not 'js' in json_response: - self.parseError('JSON %s 1' % field) - - # i changed js_answer to json_response['js'] since js_answer is nowhere set. - # i don't know the JSON-HTTP specs in detail, but the previous author - # accessed json_response['js']['error'] as well as js_answer['error']. - # see the two lines commented out with "# ~?". - if 'error' in json_response['js']: - if json_response['js']['error'] == 'download_delay': - self.retry(wait_time=json_response['js']['params']['next_download']) - # ~? self.retry(wait_time=js_answer['params']['next_download']) - elif 'Wrong file password' in json_response['js']['error']: - return None - elif 'You entered a wrong CAPTCHA code' in json_response['js']['error']: - return None - elif 'CAPTCHA Code nicht korrekt' in json_response['js']['error']: - return None - elif 'CAPTCHA' in json_response['js']['error']: - self.logDebug('error response is unknown, but mentions CAPTCHA -> return None') - return None - else: - self.fail(json_response['js']['error']) - # ~? self.fail(js_answer['error']) - - if not 'answer' in json_response['js'] or not field in json_response['js']['answer']: - self.parseError('JSON %s 2' % field) - - return json_response['js']['answer'][field] - - -getInfo = create_getInfo(FilepostCom) diff --git a/module/plugins/hoster/FilerNet.py b/module/plugins/hoster/FilerNet.py deleted file mode 100644 index a36607f8a..000000000 --- a/module/plugins/hoster/FilerNet.py +++ /dev/null @@ -1,109 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://filer.net/get/ivgf5ztw53et3ogd -# http://filer.net/get/hgo14gzcng3scbvv - -import pycurl -import re - -from urlparse import urljoin - -from module.plugins.internal.CaptchaService import ReCaptcha -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class FilerNet(SimpleHoster): - __name__ = "FilerNet" - __type__ = "hoster" - __version__ = "0.03" - - __pattern__ = r'https?://(?:www\.)?filer\.net/get/(\w+)' - - __description__ = """Filer.net hoster plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - FILE_INFO_PATTERN = r'<h1 class="page-header">Free Download (?P<N>\S+) <small>(?P<S>[\w.]+) (?P<U>\w+)</small></h1>' - OFFLINE_PATTERN = r'Nicht gefunden' - RECAPTCHA_KEY = "6LcFctISAAAAAAgaeHgyqhNecGJJRnxV1m_vAz3V" - LINK_PATTERN = r'href="([^"]+)">Get download</a>' - - - def process(self, pyfile): - if self.premium and (not self.SH_CHECK_TRAFFIC or self.checkTrafficLeft()): - self.handlePremium() - else: - self.handleFree() - - def handleFree(self): - self.req.setOption("timeout", 120) - self.html = self.load(self.pyfile.url, decode=not self.SH_BROKEN_ENCODING, cookies=self.SH_COOKIES) - - # Wait between downloads - m = re.search(r'musst du <span id="time">(\d+)</span> Sekunden warten', self.html) - if m: - waittime = int(m.group(1)) - self.retry(3, waittime, "Wait between free downloads") - - self.getFileInfo() - - self.html = self.load(self.pyfile.url, decode=True) - - inputs = self.parseHtmlForm(input_names='token')[1] - if 'token' not in inputs: - self.parseError('Unable to detect token') - token = inputs['token'] - self.logDebug('Token: ' + token) - - self.html = self.load(self.pyfile.url, post={'token': token}, decode=True) - - inputs = self.parseHtmlForm(input_names='hash')[1] - if 'hash' not in inputs: - self.parseError('Unable to detect hash') - hash_data = inputs['hash'] - self.logDebug('Hash: ' + hash_data) - - downloadURL = r'' - recaptcha = ReCaptcha(self) - for _ in xrange(5): - challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY) - post_data = {'recaptcha_challenge_field': challenge, - 'recaptcha_response_field': response, - 'hash': hash_data} - - # Workaround for 0.4.9 just_header issue. In 0.5 clean the code using just_header - self.req.http.c.setopt(pycurl.FOLLOWLOCATION, 0) - self.load(self.pyfile.url, post=post_data) - self.req.http.c.setopt(pycurl.FOLLOWLOCATION, 1) - - if 'location' in self.req.http.header.lower(): - location = re.search(r'location: (\S+)', self.req.http.header, re.I).group(1) - downloadURL = urljoin('http://filer.net', location) - self.correctCaptcha() - break - else: - self.logInfo('Wrong captcha') - self.invalidCaptcha() - - if not downloadURL: - self.fail("No Download url retrieved/all captcha attempts failed") - - self.download(downloadURL, disposition=True) - - def handlePremium(self): - header = self.load(self.pyfile.url, just_header=True) - if 'location' in header: # Direct Download ON - dl = self.pyfile.url - else: # Direct Download OFF - html = self.load(self.pyfile.url) - m = re.search(self.LINK_PATTERN, html) - if m is None: - self.parseError("Unable to detect direct link, try to enable 'Direct download' in your user settings") - dl = 'http://filer.net' + m.group(1) - - self.logDebug('Direct link: ' + dl) - self.download(dl, disposition=True) - - -getInfo = create_getInfo(FilerNet) diff --git a/module/plugins/hoster/FilerioCom.py b/module/plugins/hoster/FilerioCom.py deleted file mode 100644 index 5cac34b04..000000000 --- a/module/plugins/hoster/FilerioCom.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class FilerioCom(XFileSharingPro): - __name__ = "FilerioCom" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?(filerio\.(in|com)|filekeen\.com)/\w{12}' - - __description__ = """FileRio.in hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - HOSTER_NAME = "filerio.in" - - OFFLINE_PATTERN = r'<b>"File Not Found"</b>|File has been removed due to Copyright Claim' - FILE_URL_REPLACEMENTS = [(r'http://.*?/', 'http://filerio.in/')] - - - def setup(self): - self.resumeDownload = self.multiDL = self.premium - - -getInfo = create_getInfo(FilerioCom) diff --git a/module/plugins/hoster/FilesMailRu.py b/module/plugins/hoster/FilesMailRu.py deleted file mode 100644 index bbb6fa57b..000000000 --- a/module/plugins/hoster/FilesMailRu.py +++ /dev/null @@ -1,101 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.network.RequestFactory import getURL -from module.plugins.Hoster import Hoster -from module.plugins.Plugin import chunks - - -def getInfo(urls): - result = [] - for chunk in chunks(urls, 10): - for url in chunk: - src = getURL(url) - if r'<div class="errorMessage mb10">' in src: - result.append((url, 0, 1, url)) - elif r'Page cannot be displayed' in src: - result.append((url, 0, 1, url)) - else: - try: - url_pattern = '<a href="(.+?)" onclick="return Act\(this\, \'dlink\'\, event\)">(.+?)</a>' - file_name = re.search(url_pattern, src).group(0).split(', event)">')[1].split('</a>')[0] - result.append((file_name, 0, 2, url)) - except: - pass - - # status 1=OFFLINE, 2=OK, 3=UNKNOWN - # result.append((#name,#size,#status,#url)) - yield result - - -class FilesMailRu(Hoster): - __name__ = "FilesMailRu" - __type__ = "hoster" - __version__ = "0.31" - - __pattern__ = r'http://(?:www\.)?files\.mail\.ru/.*' - - __description__ = """Files.mail.ru hoster plugin""" - __author_name__ = "oZiRiz" - __author_mail__ = "ich@oziriz.de" - - - def setup(self): - if not self.account: - self.multiDL = False - - def process(self, pyfile): - self.html = self.load(pyfile.url) - self.url_pattern = '<a href="(.+?)" onclick="return Act\(this\, \'dlink\'\, event\)">(.+?)</a>' - - #marks the file as "offline" when the pattern was found on the html-page''' - if r'<div class="errorMessage mb10">' in self.html: - self.offline() - - elif r'Page cannot be displayed' in self.html: - self.offline() - - #the filename that will be showed in the list (e.g. test.part1.rar)''' - pyfile.name = self.getFileName() - - #prepare and download''' - if not self.account: - self.prepare() - self.download(self.getFileUrl()) - self.myPostProcess() - else: - self.download(self.getFileUrl()) - self.myPostProcess() - - def prepare(self): - """You have to wait some seconds. Otherwise you will get a 40Byte HTML Page instead of the file you expected""" - self.setWait(10) - self.wait() - return True - - def getFileUrl(self): - """gives you the URL to the file. Extracted from the Files.mail.ru HTML-page stored in self.html""" - return re.search(self.url_pattern, self.html).group(0).split('<a href="')[1].split('" onclick="return Act')[0] - - def getFileName(self): - """gives you the Name for each file. Also extracted from the HTML-Page""" - return re.search(self.url_pattern, self.html).group(0).split(', event)">')[1].split('</a>')[0] - - def myPostProcess(self): - # searches the file for HTMl-Code. Sometimes the Redirect - # doesn't work (maybe a curl Problem) and you get only a small - # HTML file and the Download is marked as "finished" - # then the download will be restarted. It's only bad for these - # who want download a HTML-File (it's one in a million ;-) ) - # - # The maximum UploadSize allowed on files.mail.ru at the moment is 100MB - # so i set it to check every download because sometimes there are downloads - # that contain the HTML-Text and 60MB ZEROs after that in a xyzfile.part1.rar file - # (Loading 100MB in to ram is not an option) - check = self.checkDownload({"html": "<meta name="}, read_size=50000) - if check == "html": - self.logInfo(_( - "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." % - self.pyfile.name)) - self.retry() diff --git a/module/plugins/hoster/FileserveCom.py b/module/plugins/hoster/FileserveCom.py deleted file mode 100644 index b7f051d80..000000000 --- a/module/plugins/hoster/FileserveCom.py +++ /dev/null @@ -1,209 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.common.json_layer import json_loads -from module.network.RequestFactory import getURL -from module.plugins.Hoster import Hoster -from module.plugins.Plugin import chunks -from module.plugins.hoster.UnrestrictLi import secondsToMidnight -from module.plugins.internal.CaptchaService import ReCaptcha -from module.utils import parseFileSize - - -def checkFile(plugin, urls): - html = getURL(plugin.URLS[1], post={"urls": "\n".join(urls)}, decode=True) - - file_info = [] - for li in re.finditer(plugin.LINKCHECK_TR, html, re.DOTALL): - try: - cols = re.findall(plugin.LINKCHECK_TD, li.group(1)) - if cols: - file_info.append(( - cols[1] if cols[1] != '--' else cols[0], - parseFileSize(cols[2]) if cols[2] != '--' else 0, - 2 if cols[3].startswith('Available') else 1, - cols[0])) - except Exception, e: - continue - - return file_info - - -class FileserveCom(Hoster): - __name__ = "FileserveCom" - __type__ = "hoster" - __version__ = "0.52" - - __pattern__ = r'http://(?:www\.)?fileserve\.com/file/(?P<id>[^/]+).*' - - __description__ = """Fileserve.com hoster plugin""" - __author_name__ = ("jeix", "mkaay", "Paul King", "zoidberg") - __author_mail__ = ("jeix@hasnomail.de", "mkaay@mkaay.de", "", "zoidberg@mujmail.cz") - - URLS = ["http://www.fileserve.com/file/", "http://www.fileserve.com/link-checker.php", - "http://www.fileserve.com/checkReCaptcha.php"] - LINKCHECK_TR = r'<tr>\s*(<td>http://www.fileserve\.com/file/.*?)</tr>' - LINKCHECK_TD = r'<td>(?:<[^>]*>| )*([^<]*)' - - CAPTCHA_KEY_PATTERN = r"var reCAPTCHA_publickey='(?P<key>[^']+)'" - LONG_WAIT_PATTERN = r'<li class="title">You need to wait (\d+) (\w+) to start another download\.</li>' - LINK_EXPIRED_PATTERN = r'Your download link has expired' - DAILY_LIMIT_PATTERN = r'Your daily download limit has been reached' - NOT_LOGGED_IN_PATTERN = r'<form (name="loginDialogBoxForm"|id="login_form")|<li><a href="/login.php">Login</a></li>' - - - def setup(self): - self.resumeDownload = self.multiDL = self.premium - - self.file_id = re.match(self.__pattern__, self.pyfile.url).group('id') - self.url = "%s%s" % (self.URLS[0], self.file_id) - self.logDebug("File ID: %s URL: %s" % (self.file_id, self.url)) - - def process(self, pyfile): - pyfile.name, pyfile.size, status, self.url = checkFile(self, [self.url])[0] - if status != 2: - self.offline() - self.logDebug("File Name: %s Size: %d" % (pyfile.name, pyfile.size)) - - if self.premium: - self.handlePremium() - else: - self.handleFree() - - def handleFree(self): - self.html = self.load(self.url) - action = self.load(self.url, post={"checkDownload": "check"}, decode=True) - action = json_loads(action) - self.logDebug(action) - - if "fail" in action: - if action['fail'] == "timeLimit": - self.html = self.load(self.url, post={"checkDownload": "showError", "errorType": "timeLimit"}, - decode=True) - - self.doLongWait(re.search(self.LONG_WAIT_PATTERN, self.html)) - - elif action['fail'] == "parallelDownload": - self.logWarning(_("Parallel download error, now waiting 60s.")) - self.retry(wait_time=60, reason="parallelDownload") - - else: - self.fail("Download check returned %s" % action['fail']) - - elif "success" in action: - if action['success'] == "showCaptcha": - self.doCaptcha() - self.doTimmer() - elif action['success'] == "showTimmer": - self.doTimmer() - - else: - self.fail("Unknown server response") - - # show download link - response = self.load(self.url, post={"downloadLink": "show"}, decode=True) - self.logDebug("show downloadLink response : %s" % response) - if "fail" in response: - self.fail("Couldn't retrieve download url") - - # this may either download our file or forward us to an error page - self.download(self.url, post={"download": "normal"}) - self.logDebug(self.req.http.lastEffectiveURL) - - check = self.checkDownload({"expired": self.LINK_EXPIRED_PATTERN, - "wait": re.compile(self.LONG_WAIT_PATTERN), - "limit": self.DAILY_LIMIT_PATTERN}) - - if check == "expired": - self.logDebug("Download link was expired") - self.retry() - elif check == "wait": - self.doLongWait(self.lastCheck) - elif check == "limit": - self.logWarning("Download limited reached for today") - self.setWait(secondsToMidnight(gmt=2), True) - self.wait() - self.retry() - - self.thread.m.reconnecting.wait(3) # Ease issue with later downloads appearing to be in parallel - - def doTimmer(self): - response = self.load(self.url, post={"downloadLink": "wait"}, decode=True) - self.logDebug("wait response : %s" % response[:80]) - - if "fail" in response: - self.fail("Failed getting wait time") - - if self.__name__ == "FilejungleCom": - m = re.search(r'"waitTime":(\d+)', response) - if m is None: - self.fail("Cannot get wait time") - wait_time = int(m.group(1)) - else: - wait_time = int(response) + 3 - - self.setWait(wait_time) - self.wait() - - def doCaptcha(self): - captcha_key = re.search(self.CAPTCHA_KEY_PATTERN, self.html).group("key") - recaptcha = ReCaptcha(self) - - for _ in xrange(5): - challenge, code = recaptcha.challenge(captcha_key) - - response = json_loads(self.load(self.URLS[2], - post={'recaptcha_challenge_field': challenge, - 'recaptcha_response_field': code, - 'recaptcha_shortencode_field': self.file_id})) - self.logDebug("reCaptcha response : %s" % response) - if not response['success']: - self.invalidCaptcha() - else: - self.correctCaptcha() - break - else: - self.fail("Invalid captcha") - - def doLongWait(self, m): - wait_time = (int(m.group(1)) * {'seconds': 1, 'minutes': 60, 'hours': 3600}[m.group(2)]) if m else 12 * 60 - self.setWait(wait_time, True) - self.wait() - self.retry() - - def handlePremium(self): - premium_url = None - if self.__name__ == "FileserveCom": - #try api download - response = self.load("http://app.fileserve.com/api/download/premium/", - post={"username": self.user, - "password": self.account.getAccountData(self.user)['password'], - "shorten": self.file_id}, - decode=True) - if response: - response = json_loads(response) - if response['error_code'] == "302": - premium_url = response['next'] - elif response['error_code'] in ["305", "500"]: - self.tempOffline() - elif response['error_code'] in ["403", "605"]: - self.resetAccount() - elif response['error_code'] in ["606", "607", "608"]: - self.offline() - else: - self.logError(response['error_code'], response['error_message']) - - self.download(premium_url or self.pyfile.url) - - if not premium_url: - check = self.checkDownload({"login": re.compile(self.NOT_LOGGED_IN_PATTERN)}) - - if check == "login": - self.account.relogin(self.user) - self.retry(reason=_("Not logged in.")) - - -def getInfo(urls): - for chunk in chunks(urls, 100): - yield checkFile(FileserveCom, chunk) diff --git a/module/plugins/hoster/FileshareInUa.py b/module/plugins/hoster/FileshareInUa.py deleted file mode 100644 index f76942f6d..000000000 --- a/module/plugins/hoster/FileshareInUa.py +++ /dev/null @@ -1,83 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.network.RequestFactory import getURL -from module.plugins.Hoster import Hoster -from module.utils import parseFileSize - - -class FileshareInUa(Hoster): - __name__ = "FileshareInUa" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?fileshare.in.ua/[A-Za-z0-9]+' - - __description__ = """Fileshare.in.ua hoster plugin""" - __author_name__ = "fwannmacher" - __author_mail__ = "felipe@warhammerproject.com" - - PATTERN_FILENAME = r'<h3 class="b-filename">(.*?)</h3>' - PATTERN_FILESIZE = r'<b class="b-filesize">(.*?)</b>' - PATTERN_OFFLINE = r"This file doesn't exist, or has been removed." - - - def setup(self): - self.resumeDownload = self.multiDL = True - - def process(self, pyfile): - self.pyfile = pyfile - self.html = self.load(pyfile.url, decode=True) - - if not self._checkOnline(): - self.offline() - - pyfile.name = self._getName() - - link = self._getLink() - - if not link.startswith('http://'): - link = "http://fileshare.in.ua" + link - - self.download(link) - - def _checkOnline(self): - if re.search(self.PATTERN_OFFLINE, self.html): - return False - else: - return True - - def _getName(self): - name = re.search(self.PATTERN_FILENAME, self.html) - if name is None: - self.fail("%s: Plugin broken." % self.__name__) - - return name.group(1) - - def _getLink(self): - return re.search("<a href=\"(/get/.+)\" class=\"b-button m-blue m-big\" >", self.html).group(1) - - -def getInfo(urls): - result = [] - - for url in urls: - html = getURL(url) - - if re.search(FileshareInUa.PATTERN_OFFLINE, html): - result.append((url, 0, 1, url)) - else: - name = re.search(FileshareInUa.PATTERN_FILENAME, html) - - if name is None: - result.append((url, 0, 1, url)) - continue - - name = name.group(1) - size = re.search(FileshareInUa.PATTERN_FILESIZE, html) - size = parseFileSize(size.group(1)) - - result.append((name, size, 3, url)) - - yield result diff --git a/module/plugins/hoster/FilezyNet.py b/module/plugins/hoster/FilezyNet.py deleted file mode 100644 index 969007a8a..000000000 --- a/module/plugins/hoster/FilezyNet.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class FilezyNet(XFileSharingPro): - __name__ = "FilezyNet" - __type__ = "hoster" - __version__ = "0.1" - - __pattern__ = r'http://(?:www\.)?filezy.net/.*/.*.html' - - __description__ = """Filezy.net hoster plugin""" - __author_name__ = None - __author_mail__ = None - - HOSTER_NAME = "filezy.net" - - FILE_SIZE_PATTERN = r'<span class="plansize">(?P<S>[0-9.]+) (?P<U>[kKMG])i?B</span>' - WAIT_PATTERN = r'<div id="countdown_str" class="seconds">\n<!--Wait--> <span id=".*?">(\d+)</span>' - DOWNLOAD_JS_PATTERN = r"<script type='text/javascript'>eval(.*)" - - - def setup(self): - self.resumeDownload = True - self.multiDL = self.premium - - def getDownloadLink(self): - self.logDebug("Getting download link") - - data = self.getPostParameters() - self.html = self.load(self.pyfile.url, post=data, ref=True, decode=True) - - obfuscated_js = re.search(self.DOWNLOAD_JS_PATTERN, self.html) - dl_file_now = self.js.eval(obfuscated_js.group(1)) - link = re.search(self.LINK_PATTERN, dl_file_now) - return link.group(1) - - -getInfo = create_getInfo(FilezyNet) diff --git a/module/plugins/hoster/FiredriveCom.py b/module/plugins/hoster/FiredriveCom.py deleted file mode 100644 index 47c6a4214..000000000 --- a/module/plugins/hoster/FiredriveCom.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class FiredriveCom(SimpleHoster): - __name__ = "FiredriveCom" - __type__ = "hoster" - __version__ = "0.03" - - __pattern__ = r'https?://(?:www\.)?(firedrive|putlocker)\.com/(mobile/)?(file|embed)/(?P<ID>\w+)' - - __description__ = """Firedrive.com hoster plugin""" - __author_name__ = "Walter Purcaro" - __author_mail__ = "vuolter@gmail.com" - - FILE_NAME_PATTERN = r'<b>Name:</b> (?P<N>.+) <br>' - FILE_SIZE_PATTERN = r'<b>Size:</b> (?P<S>[\d.]+) (?P<U>[a-zA-Z]+) <br>' - OFFLINE_PATTERN = r'class="sad_face_image"|>No such page here.<' - TEMP_OFFLINE_PATTERN = r'>(File Temporarily Unavailable|Server Error. Try again later)' - - FILE_URL_REPLACEMENTS = [(__pattern__, r'http://www.firedrive.com/file/\g<ID>')] - - LINK_PATTERN = r'<a href="(https?://dl\.firedrive\.com/\?key=.+?)"' - - - def setup(self): - self.multiDL = self.resumeDownload = True - self.chunkLimit = -1 - - def handleFree(self): - link = self._getLink() - self.logDebug("Direct link: " + link) - self.download(link, disposition=True) - - def _getLink(self): - f = re.search(self.LINK_PATTERN, self.html) - if f: - return f.group(1) - else: - self.html = self.load(self.pyfile.url, post={"confirm": re.search(r'name="confirm" value="(.+?)"', self.html).group(1)}) - f = re.search(self.LINK_PATTERN, self.html) - if f: - return f.group(1) - else: - self.parseError("Direct download link not found") - - -getInfo = create_getInfo(FiredriveCom) diff --git a/module/plugins/hoster/FlyFilesNet.py b/module/plugins/hoster/FlyFilesNet.py deleted file mode 100644 index 2bf9e0caf..000000000 --- a/module/plugins/hoster/FlyFilesNet.py +++ /dev/null @@ -1,46 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urllib import unquote - -from module.network.RequestFactory import getURL -from module.plugins.internal.SimpleHoster import SimpleHoster - - -class FlyFilesNet(SimpleHoster): - __name__ = "FlyFilesNet" - __type__ = "hoster" - __version__ = "0.1" - - __pattern__ = r'http://(?:www\.)?flyfiles\.net/.*' - - __description__ = """FlyFiles.net hoster plugin""" - __author_name__ = None - __author_mail__ = None - - SESSION_PATTERN = r'flyfiles\.net/(.*)/.*' - FILE_NAME_PATTERN = r'flyfiles\.net/.*/(.*)' - - - def process(self, pyfile): - name = re.search(self.FILE_NAME_PATTERN, pyfile.url).group(1) - pyfile.name = unquote_plus(name) - - session = re.search(self.SESSION_PATTERN, pyfile.url).group(1) - - url = "http://flyfiles.net" - - # get download URL - parsed_url = getURL(url, post={"getDownLink": session}, cookies=True) - self.logDebug("Parsed URL: %s" % parsed_url) - - if parsed_url == '#downlink|' or parsed_url == "#downlink|#": - self.logWarning("Could not get the download URL. Please wait 10 minutes.") - self.wait(10 * 60, True) - self.retry() - - download_url = parsed_url.replace('#downlink|', '') - - self.logDebug("Download URL: %s" % download_url) - self.download(download_url) diff --git a/module/plugins/hoster/FourSharedCom.py b/module/plugins/hoster/FourSharedCom.py deleted file mode 100644 index 2668a22d3..000000000 --- a/module/plugins/hoster/FourSharedCom.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class FourSharedCom(SimpleHoster): - __name__ = "FourSharedCom" - __type__ = "hoster" - __version__ = "0.29" - - __pattern__ = r'https?://(?:www\.)?4shared(\-china)?\.com/(account/)?(download|get|file|document|photo|video|audio|mp3|office|rar|zip|archive|music)/.+?/.*' - - __description__ = """4Shared.com hoster plugin""" - __author_name__ = ("jeix", "zoidberg") - __author_mail__ = ("jeix@hasnomail.de", "zoidberg@mujmail.cz") - - FILE_NAME_PATTERN = r'<meta name="title" content="(?P<N>.+?)"' - FILE_SIZE_PATTERN = r'<span title="Size: (?P<S>[0-9,.]+) (?P<U>[kKMG])i?B">' - OFFLINE_PATTERN = r'The file link that you requested is not valid\.|This file was deleted.' - - FILE_NAME_REPLACEMENTS = [(r"&#(\d+).", lambda m: unichr(int(m.group(1))))] - FILE_SIZE_REPLACEMENTS = [(",", "")] - - DOWNLOAD_URL_PATTERN = r'name="d3link" value="(.*?)"' - DOWNLOAD_BUTTON_PATTERN = r'id="btnLink" href="(.*?)"' - FID_PATTERN = r'name="d3fid" value="(.*?)"' - - - def handleFree(self): - if not self.account: - self.fail("User not logged in") - - m = re.search(self.DOWNLOAD_BUTTON_PATTERN, self.html) - if m: - link = m.group(1) - else: - link = re.sub(r'/(download|get|file|document|photo|video|audio)/', r'/get/', self.pyfile.url) - - self.html = self.load(link) - - m = re.search(self.DOWNLOAD_URL_PATTERN, self.html) - if m is None: - self.parseError('Download link') - link = m.group(1) - - try: - m = re.search(self.FID_PATTERN, self.html) - response = self.load('http://www.4shared.com/web/d2/getFreeDownloadLimitInfo?fileId=%s' % m.group(1)) - self.logDebug(response) - except: - pass - - self.wait(20) - self.download(link) - - -getInfo = create_getInfo(FourSharedCom) diff --git a/module/plugins/hoster/FreakshareCom.py b/module/plugins/hoster/FreakshareCom.py deleted file mode 100644 index 1b042bde3..000000000 --- a/module/plugins/hoster/FreakshareCom.py +++ /dev/null @@ -1,173 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.Hoster import Hoster -from module.plugins.hoster.UnrestrictLi import secondsToMidnight -from module.plugins.internal.CaptchaService import ReCaptcha - - -class FreakshareCom(Hoster): - __name__ = "FreakshareCom" - __type__ = "hoster" - __version__ = "0.39" - - __pattern__ = r'http://(?:www\.)?freakshare\.(net|com)/files/\S*?/' - - __description__ = """Freakshare.com hoster plugin""" - __author_name__ = ("sitacuisses", "spoob", "mkaay", "Toilal") - __author_mail__ = ("sitacuisses@yahoo.de", "spoob@pyload.org", "mkaay@mkaay.de", "toilal.dev@gmail.com") - - - def setup(self): - self.multiDL = False - self.req_opts = [] - - def process(self, pyfile): - self.pyfile = pyfile - - pyfile.url = pyfile.url.replace("freakshare.net/", "freakshare.com/") - - if self.account: - self.html = self.load(pyfile.url, cookies=False) - pyfile.name = self.get_file_name() - self.download(pyfile.url) - - else: - self.prepare() - self.get_file_url() - - self.download(pyfile.url, post=self.req_opts) - - check = self.checkDownload({"bad": "bad try", - "paralell": "> Sorry, you cant download more then 1 files at time. <", - "empty": "Warning: Unknown: Filename cannot be empty", - "wrong_captcha": "Wrong Captcha!", - "downloadserver": "No Downloadserver. Please try again later!"}) - - if check == "bad": - self.fail("Bad Try.") - elif check == "paralell": - self.setWait(300, True) - self.wait() - self.retry() - elif check == "empty": - self.fail("File not downloadable") - elif check == "wrong_captcha": - self.invalidCaptcha() - self.retry() - elif check == "downloadserver": - self.retry(5, 15 * 60, "No Download server") - - def prepare(self): - pyfile = self.pyfile - - self.wantReconnect = False - - self.download_html() - - if not self.file_exists(): - self.offline() - - self.setWait(self.get_waiting_time()) - - pyfile.name = self.get_file_name() - pyfile.size = self.get_file_size() - - self.wait() - - return True - - def download_html(self): - self.load("http://freakshare.com/index.php", {"language": "EN"}) # Set english language in server session - self.html = self.load(self.pyfile.url) - - def get_file_url(self): - """ returns the absolute downloadable filepath - """ - if not self.html: - self.download_html() - if not self.wantReconnect: - self.req_opts = self.get_download_options() # get the Post options for the Request - #file_url = self.pyfile.url - #return file_url - else: - self.offline() - - def get_file_name(self): - if not self.html: - self.download_html() - if not self.wantReconnect: - file_name = re.search(r"<h1\sclass=\"box_heading\"\sstyle=\"text-align:center;\">([^ ]+)", self.html) - if file_name is not None: - file_name = file_name.group(1) - else: - file_name = self.pyfile.url - return file_name - else: - return self.pyfile.url - - def get_file_size(self): - size = 0 - if not self.html: - self.download_html() - if not self.wantReconnect: - file_size_check = re.search( - r"<h1\sclass=\"box_heading\"\sstyle=\"text-align:center;\">[^ ]+ - ([^ ]+) (\w\w)yte", self.html) - if file_size_check is not None: - units = float(file_size_check.group(1).replace(",", "")) - pow = {'KB': 1, 'MB': 2, 'GB': 3}[file_size_check.group(2)] - size = int(units * 1024 ** pow) - - return size - - def get_waiting_time(self): - if not self.html: - self.download_html() - - if "Your Traffic is used up for today" in self.html: - self.wantReconnect = True - return secondsToMidnight(gmt=2) - - timestring = re.search('\s*var\s(?:downloadWait|time)\s=\s(\d*)[.\d]*;', self.html) - if timestring: - return int(timestring.group(1)) + 1 # add 1 sec as tenths of seconds are cut off - else: - return 60 - - def file_exists(self): - """ returns True or False - """ - if not self.html: - self.download_html() - if re.search(r"This file does not exist!", self.html) is not None: - return False - else: - return True - - def get_download_options(self): - re_envelope = re.search(r".*?value=\"Free\sDownload\".*?\n*?(.*?<.*?>\n*)*?\n*\s*?</form>", - self.html).group(0) # get the whole request - to_sort = re.findall(r"<input\stype=\"hidden\"\svalue=\"(.*?)\"\sname=\"(.*?)\"\s\/>", re_envelope) - request_options = dict((n, v) for (v, n) in to_sort) - - herewego = self.load(self.pyfile.url, None, request_options) # the actual download-Page - - # comment this in, when it doesnt work - # with open("DUMP__FS_.HTML", "w") as fp: - # fp.write(herewego) - - to_sort = re.findall(r"<input\stype=\".*?\"\svalue=\"(\S*?)\".*?name=\"(\S*?)\"\s.*?\/>", herewego) - request_options = dict((n, v) for (v, n) in to_sort) - - # comment this in, when it doesnt work as well - #print "\n\n%s\n\n" % ";".join(["%s=%s" % x for x in to_sort]) - - challenge = re.search(r"http://api\.recaptcha\.net/challenge\?k=([0-9A-Za-z]+)", herewego) - - if challenge: - re_captcha = ReCaptcha(self) - (request_options['recaptcha_challenge_field'], - request_options['recaptcha_response_field']) = re_captcha.challenge(challenge.group(1)) - - return request_options diff --git a/module/plugins/hoster/FreeWayMe.py b/module/plugins/hoster/FreeWayMe.py deleted file mode 100644 index dc9188f05..000000000 --- a/module/plugins/hoster/FreeWayMe.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Hoster import Hoster - - -class FreeWayMe(Hoster): - __name__ = "FreeWayMe" - __type__ = "hoster" - __version__ = "0.11" - - __pattern__ = r'https://(?:www\.)?free-way.me/.*' - - __description__ = """FreeWayMe hoster plugin""" - __author_name__ = "Nicolas Giese" - __author_mail__ = "james@free-way.me" - - - def setup(self): - self.resumeDownload = False - self.chunkLimit = 1 - self.multiDL = self.premium - - def process(self, pyfile): - if not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "FreeWayMe") - self.fail("No FreeWay account provided") - - self.logDebug("Old URL: %s" % pyfile.url) - - (user, data) = self.account.selectAccount() - - self.download( - "https://www.free-way.me/load.php", - get={"multiget": 7, "url": pyfile.url, "user": user, "pw": self.account.getpw(user), "json": ""}, - disposition=True) diff --git a/module/plugins/hoster/FreevideoCz.py b/module/plugins/hoster/FreevideoCz.py deleted file mode 100644 index d6549a8df..000000000 --- a/module/plugins/hoster/FreevideoCz.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class FreevideoCz(DeadHoster): - __name__ = "FreevideoCz" - __type__ = "hoster" - __version__ = "0.3" - - __pattern__ = r'http://(?:www\.)?freevideo\.cz/vase-videa/.+' - - __description__ = """Freevideo.cz hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - -getInfo = create_getInfo(FreevideoCz)
\ No newline at end of file diff --git a/module/plugins/hoster/FshareVn.py b/module/plugins/hoster/FshareVn.py deleted file mode 100644 index bc042cbcc..000000000 --- a/module/plugins/hoster/FshareVn.py +++ /dev/null @@ -1,120 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from time import strptime, mktime, gmtime - -from module.network.RequestFactory import getURL -from module.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo - - -def getInfo(urls): - for url in urls: - html = getURL('http://www.fshare.vn/check_link.php', post={ - "action": "check_link", - "arrlinks": url - }, decode=True) - - file_info = parseFileInfo(FshareVn, url, html) - - yield file_info - - -def doubleDecode(m): - return m.group(1).decode('raw_unicode_escape') - - -class FshareVn(SimpleHoster): - __name__ = "FshareVn" - __type__ = "hoster" - __version__ = "0.16" - - __pattern__ = r'http://(?:www\.)?fshare.vn/file/.*' - - __description__ = """FshareVn hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_INFO_PATTERN = r'<p>(?P<N>[^<]+)<\\/p>[\\trn\s]*<p>(?P<S>[0-9,.]+)\s*(?P<U>[kKMG])i?B<\\/p>' - OFFLINE_PATTERN = r'<div class=\\"f_left file_w\\"|<\\/p>\\t\\t\\t\\t\\r\\n\\t\\t<p><\\/p>\\t\\t\\r\\n\\t\\t<p>0 KB<\\/p>' - - FILE_NAME_REPLACEMENTS = [("(.*)", doubleDecode)] - - LINK_PATTERN = r'action="(http://download.*?)[#"]' - WAIT_PATTERN = ur'Lượt tải xuá»ng kế tiếp là :\s*(.*?)\s*<' - - - def process(self, pyfile): - self.html = self.load('http://www.fshare.vn/check_link.php', post={ - "action": "check_link", - "arrlinks": pyfile.url - }, decode=True) - self.getFileInfo() - - if self.premium: - self.handlePremium() - else: - self.handleFree() - self.checkDownloadedFile() - - def handleFree(self): - self.html = self.load(self.pyfile.url, decode=True) - - self.checkErrors() - - action, inputs = self.parseHtmlForm('frm_download') - self.url = self.pyfile.url + action - - if not inputs: - self.parseError('FORM') - elif 'link_file_pwd_dl' in inputs: - for password in self.getPassword().splitlines(): - self.logInfo('Password protected link, trying "%s"' % password) - inputs['link_file_pwd_dl'] = password - self.html = self.load(self.url, post=inputs, decode=True) - if not 'name="link_file_pwd_dl"' in self.html: - break - else: - self.fail("No or incorrect password") - else: - self.html = self.load(self.url, post=inputs, decode=True) - - self.checkErrors() - - m = re.search(r'var count = (\d+)', self.html) - self.setWait(int(m.group(1)) if m else 30) - - m = re.search(self.LINK_PATTERN, self.html) - if m is None: - self.parseError('FREE DL URL') - self.url = m.group(1) - self.logDebug("FREE DL URL: %s" % self.url) - - self.wait() - self.download(self.url) - - def handlePremium(self): - self.download(self.pyfile.url) - - def checkErrors(self): - if '/error.php?' in self.req.lastEffectiveURL or u"Liên kết bạn chá»n khÃŽng tá»n" in self.html: - self.offline() - - m = re.search(self.WAIT_PATTERN, self.html) - if m: - self.logInfo("Wait until %s ICT" % m.group(1)) - wait_until = mktime(strptime(m.group(1), "%d/%m/%Y %H:%M")) - self.wait(wait_until - mktime(gmtime()) - 7 * 60 * 60, True) - self.retry() - elif '<ul class="message-error">' in self.html: - self.logError("Unknown error occured or wait time not parsed") - self.retry(30, 2 * 60, "Unknown error") - - def checkDownloadedFile(self): - # check download - check = self.checkDownload({ - "not_found": "<head><title>404 Not Found</title></head>" - }) - - if check == "not_found": - self.fail("File not m on server") diff --git a/module/plugins/hoster/Ftp.py b/module/plugins/hoster/Ftp.py deleted file mode 100644 index 8de3f4f47..000000000 --- a/module/plugins/hoster/Ftp.py +++ /dev/null @@ -1,74 +0,0 @@ -# -*- coding: utf-8 -*- - -import pycurl -import re - -from urllib import quote, unquote -from urlparse import urlparse - -from module.plugins.Hoster import Hoster - - -class Ftp(Hoster): - __name__ = "Ftp" - __type__ = "hoster" - __version__ = "0.41" - - __description__ = """Download from ftp directory""" - __author_name__ = ("jeix", "mkaay", "zoidberg") - __author_mail__ = ("jeix@hasnomail.com", "mkaay@mkaay.de", "zoidberg@mujmail.cz") - - - def setup(self): - self.chunkLimit = -1 - self.resumeDownload = True - - def process(self, pyfile): - parsed_url = urlparse(pyfile.url) - netloc = parsed_url.netloc - - pyfile.name = parsed_url.path.rpartition('/')[2] - try: - pyfile.name = unquote(str(pyfile.name)).decode('utf8') - except: - pass - - if not "@" in netloc: - servers = [x['login'] for x in self.account.getAllAccounts()] if self.account else [] - - if netloc in servers: - self.logDebug("Logging on to %s" % netloc) - self.req.addAuth(self.account.accounts[netloc]['password']) - else: - for pwd in pyfile.package().password.splitlines(): - if ":" in pwd: - self.req.addAuth(pwd.strip()) - break - - self.req.http.c.setopt(pycurl.NOBODY, 1) - - try: - response = self.load(pyfile.url) - except pycurl.error, e: - self.fail("Error %d: %s" % e.args) - - self.req.http.c.setopt(pycurl.NOBODY, 0) - self.logDebug(self.req.http.header) - - m = re.search(r"Content-Length:\s*(\d+)", response) - if m: - pyfile.size = int(m.group(1)) - self.download(pyfile.url) - else: - #Naive ftp directory listing - if re.search(r'^25\d.*?"', self.req.http.header, re.M): - pyfile.url = pyfile.url.rstrip('/') - pkgname = "/".join(pyfile.package().name, urlparse(pyfile.url).path.rpartition('/')[2]) - pyfile.url += '/' - self.req.http.c.setopt(48, 1) # CURLOPT_DIRLISTONLY - response = self.load(pyfile.url, decode=False) - links = [pyfile.url + quote(x) for x in response.splitlines()] - self.logDebug("LINKS", links) - self.core.api.addPackage(pkgname, links) - else: - self.fail("Unexpected server response") diff --git a/module/plugins/hoster/GamefrontCom.py b/module/plugins/hoster/GamefrontCom.py deleted file mode 100644 index 66cef3013..000000000 --- a/module/plugins/hoster/GamefrontCom.py +++ /dev/null @@ -1,84 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.network.RequestFactory import getURL -from module.plugins.Hoster import Hoster -from module.utils import parseFileSize - - -class GamefrontCom(Hoster): - __name__ = "GamefrontCom" - __type__ = "hoster" - __version__ = "0.04" - - __pattern__ = r'http://(?:www\.)?gamefront.com/files/[A-Za-z0-9]+' - - __description__ = """Gamefront.com hoster plugin""" - __author_name__ = "fwannmacher" - __author_mail__ = "felipe@warhammerproject.com" - - PATTERN_FILENAME = r'<title>(.*?) | Game Front' - PATTERN_FILESIZE = r'<dt>File Size:</dt>[\n\s]*<dd>(.*?)</dd>' - PATTERN_OFFLINE = r"This file doesn't exist, or has been removed." - - - def setup(self): - self.resumeDownload = self.multiDL = True - self.chunkLimit = -1 - - def process(self, pyfile): - self.pyfile = pyfile - self.html = self.load(pyfile.url, decode=True) - - if not self._checkOnline(): - self.offline() - - pyfile.name = self._getName() - - link = self._getLink() - - if not link.startswith('http://'): - link = "http://www.gamefront.com/" + link - - self.download(link) - - def _checkOnline(self): - if re.search(self.PATTERN_OFFLINE, self.html): - return False - else: - return True - - def _getName(self): - name = re.search(self.PATTERN_FILENAME, self.html) - if name is None: - self.fail("%s: Plugin broken." % self.__name__) - - return name.group(1) - - def _getLink(self): - self.html2 = self.load("http://www.gamefront.com/" + re.search("(files/service/thankyou\\?id=[A-Za-z0-9]+)", - self.html).group(1)) - return re.search("<a href=\"(http://media[0-9]+\.gamefront.com/.*)\">click here</a>", self.html2).group(1).replace("&", "&") - - -def getInfo(urls): - result = [] - - for url in urls: - html = getURL(url) - - if re.search(GamefrontCom.PATTERN_OFFLINE, html): - result.append((url, 0, 1, url)) - else: - name = re.search(GamefrontCom.PATTERN_FILENAME, html) - if name is None: - result.append((url, 0, 1, url)) - else: - name = name.group(1) - size = re.search(GamefrontCom.PATTERN_FILESIZE, html) - size = parseFileSize(size.group(1)) - - result.append((name, size, 3, url)) - - yield result diff --git a/module/plugins/hoster/GigapetaCom.py b/module/plugins/hoster/GigapetaCom.py deleted file mode 100644 index 966ac8094..000000000 --- a/module/plugins/hoster/GigapetaCom.py +++ /dev/null @@ -1,64 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pycurl import FOLLOWLOCATION -from random import randint - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class GigapetaCom(SimpleHoster): - __name__ = "GigapetaCom" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?gigapeta\.com/dl/\w+' - - __description__ = """GigaPeta.com hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_NAME_PATTERN = r'<img src=".*" alt="file" />-->\s*(?P<N>.*?)\s*</td>' - FILE_SIZE_PATTERN = r'<th>\s*Size\s*</th>\s*<td>\s*(?P<S>.*?)\s*</td>' - OFFLINE_PATTERN = r'<div id="page_error">' - - SH_COOKIES = [(".gigapeta.com", "lang", "us")] - - - def handleFree(self): - captcha_key = str(randint(1, 100000000)) - captcha_url = "http://gigapeta.com/img/captcha.gif?x=%s" % captcha_key - - self.req.http.c.setopt(FOLLOWLOCATION, 0) - - for _ in xrange(5): - self.checkErrors() - - captcha = self.decryptCaptcha(captcha_url) - self.html = self.load(self.pyfile.url, post={ - "captcha_key": captcha_key, - "captcha": captcha, - "download": "Download"}) - - m = re.search(r"Location\s*:\s*(.*)", self.req.http.header, re.I) - if m: - download_url = m.group(1) - break - elif "Entered figures don`t coincide with the picture" in self.html: - self.invalidCaptcha() - else: - self.fail("No valid captcha code entered") - - self.req.http.c.setopt(FOLLOWLOCATION, 1) - self.logDebug("Download URL: %s" % download_url) - self.download(download_url) - - def checkErrors(self): - if "All threads for IP" in self.html: - self.logDebug("Your IP is already downloading a file - wait and retry") - self.wait(5 * 60, True) - self.retry() - - -getInfo = create_getInfo(GigapetaCom) diff --git a/module/plugins/hoster/GooIm.py b/module/plugins/hoster/GooIm.py deleted file mode 100644 index c43bd0fc9..000000000 --- a/module/plugins/hoster/GooIm.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# https://goo.im/devs/liquidsmooth/3.x/codina/Nightly/LS-KK-v3.2-2014-08-01-codina.zip - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class GooIm(SimpleHoster): - __name__ = "GooIm" - __type__ = "hoster" - __version__ = "0.03" - - __pattern__ = r'https?://(?:www\.)?goo\.im/.+' - - __description__ = """Goo.im hoster plugin""" - __author_name__ = "zapp-brannigan" - __author_mail__ = "fuerst.reinje@web.de" - - FILE_NAME_PATTERN = r'You will be redirected to .*(?P<N>[^/ ]+) in' - OFFLINE_PATTERN = r'The file you requested was not found' - - - def setup(self): - self.multiDL = self.resumeDownload = True - - def handleFree(self): - url = self.pyfile.url - self.html = self.load(url, cookies=True) - self.wait(10) - self.download(url, cookies=True) - - -getInfo = create_getInfo(GooIm) diff --git a/module/plugins/hoster/HellshareCz.py b/module/plugins/hoster/HellshareCz.py deleted file mode 100644 index 239d90f46..000000000 --- a/module/plugins/hoster/HellshareCz.py +++ /dev/null @@ -1,47 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class HellshareCz(SimpleHoster): - __name__ = "HellshareCz" - __type__ = "hoster" - __version__ = "0.82" - - __pattern__ = r'(http://(?:www\.)?hellshare\.(?:cz|com|sk|hu|pl)/[^?]*/\d+).*' - - __description__ = """Hellshare.cz hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_NAME_PATTERN = r'<h1 id="filename"[^>]*>(?P<N>[^<]+)</h1>' - FILE_SIZE_PATTERN = r'<strong id="FileSize_master">(?P<S>[0-9.]*) (?P<U>[kKMG])i?B</strong>' - OFFLINE_PATTERN = r'<h1>File not found.</h1>' - SHOW_WINDOW_PATTERN = r'<a href="([^?]+/(\d+)/\?do=(fileDownloadButton|relatedFileDownloadButton-\2)-showDownloadWindow)"' - - - def setup(self): - self.resumeDownload = self.multiDL = True if self.account else False - self.chunkLimit = 1 - - def process(self, pyfile): - if not self.account: - self.fail("User not logged in") - pyfile.url = re.match(self.__pattern__, pyfile.url).group(1) - self.html = self.load(pyfile.url, decode=True) - self.getFileInfo() - if not self.checkTrafficLeft(): - self.fail("Not enough traffic left for user %s." % self.user) - - m = re.search(self.SHOW_WINDOW_PATTERN, self.html) - if m is None: - self.parseError('SHOW WINDOW') - self.url = "http://www.hellshare.com" + m.group(1) - self.logDebug("DOWNLOAD URL: " + self.url) - - self.download(self.url) - - -getInfo = create_getInfo(HellshareCz) diff --git a/module/plugins/hoster/HellspyCz.py b/module/plugins/hoster/HellspyCz.py deleted file mode 100644 index 5800f28a0..000000000 --- a/module/plugins/hoster/HellspyCz.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class HellspyCz(DeadHoster): - __name__ = "HellspyCz" - __type__ = "hoster" - __version__ = "0.28" - - __pattern__ = r'http://(?:www\.)?(?:hellspy\.(?:cz|com|sk|hu|pl)|sciagaj.pl)(/\S+/\d+)/?.*' - - __description__ = """HellSpy.cz hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - -getInfo = create_getInfo(HellspyCz) diff --git a/module/plugins/hoster/HotfileCom.py b/module/plugins/hoster/HotfileCom.py deleted file mode 100644 index aac312a6b..000000000 --- a/module/plugins/hoster/HotfileCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class HotfileCom(DeadHoster): - __name__ = "HotfileCom" - __type__ = "hoster" - __version__ = "0.37" - - __pattern__ = r'https?://(www.)?hotfile\.com/dl/\d+/[0-9a-zA-Z]+/' - - __description__ = """Hotfile.com hoster plugin""" - __author_name__ = ("sitacuisses", "spoob", "mkaay", "JoKoT3") - __author_mail__ = ("sitacuisses@yhoo.de", "spoob@pyload.org", "mkaay@mkaay.de", "jokot3@gmail.com") - - -getInfo = create_getInfo(HotfileCom) diff --git a/module/plugins/hoster/HugefilesNet.py b/module/plugins/hoster/HugefilesNet.py deleted file mode 100644 index bf0a26c68..000000000 --- a/module/plugins/hoster/HugefilesNet.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://hugefiles.net/prthf9ya4w6s - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class HugefilesNet(XFileSharingPro): - __name__ = "HugefilesNet" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?hugefiles\.net/\w{12}' - - __description__ = """Hugefiles.net hoster plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - HOSTER_NAME = "hugefiles.net" - - FILE_SIZE_PATTERN = r'File Size:</span>\s*<span[^>]*>(?P<S>[^<]+)</span></div>' - - -getInfo = create_getInfo(HugefilesNet) diff --git a/module/plugins/hoster/HundredEightyUploadCom.py b/module/plugins/hoster/HundredEightyUploadCom.py deleted file mode 100644 index e2e34ad00..000000000 --- a/module/plugins/hoster/HundredEightyUploadCom.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://180upload.com/js9qdm6kjnrs - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class HundredEightyUploadCom(XFileSharingPro): - __name__ = "HundredEightyUploadCom" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?180upload\.com/(\w+).*' - - __description__ = """180upload.com hoster plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - HOSTER_NAME = "180upload.com" - - FILE_NAME_PATTERN = r'Filename:</b></td><td nowrap>(?P<N>.+)</td></tr>-->' - FILE_SIZE_PATTERN = r'Size:</b></td><td>(?P<S>[\d.]+) (?P<U>[A-Z]+)\s*<small>' - - -getInfo = create_getInfo(HundredEightyUploadCom) diff --git a/module/plugins/hoster/IFileWs.py b/module/plugins/hoster/IFileWs.py deleted file mode 100644 index 94d3e599e..000000000 --- a/module/plugins/hoster/IFileWs.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class IFileWs(XFileSharingPro): - __name__ = "IFileWs" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?ifile\.ws/\w+(/.+)?' - - __description__ = """Ifile.ws hoster plugin""" - __author_name__ = "z00nx" - __author_mail__ = "z00nx0@gmail.com" - - HOSTER_NAME = "ifile.ws" - - FILE_INFO_PATTERN = r'<h1\s+style="display:inline;">(?P<N>[^<]+)</h1>\s+\[(?P<S>[^]]+)\]' - OFFLINE_PATTERN = r'File Not Found|The file was removed by administrator' - - -getInfo = create_getInfo(IFileWs) diff --git a/module/plugins/hoster/IcyFilesCom.py b/module/plugins/hoster/IcyFilesCom.py deleted file mode 100644 index a7c69009e..000000000 --- a/module/plugins/hoster/IcyFilesCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class IcyFilesCom(DeadHoster): - __name__ = "IcyFilesCom" - __type__ = "hoster" - __version__ = "0.06" - - __pattern__ = r'http://(?:www\.)?icyfiles\.com/(.*)' - - __description__ = """IcyFiles.com hoster plugin""" - __author_name__ = "godofdream" - __author_mail__ = "soilfiction@gmail.com" - - -getInfo = create_getInfo(IcyFilesCom) diff --git a/module/plugins/hoster/IfileIt.py b/module/plugins/hoster/IfileIt.py deleted file mode 100644 index 5dfd14d82..000000000 --- a/module/plugins/hoster/IfileIt.py +++ /dev/null @@ -1,62 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.common.json_layer import json_loads -from module.plugins.internal.CaptchaService import ReCaptcha -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class IfileIt(SimpleHoster): - __name__ = "IfileIt" - __type__ = "hoster" - __version__ = "0.27" - - __pattern__ = r'^unmatchable$' - - __description__ = """Ifile.it""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - LINK_PATTERN = r'</span> If it doesn\'t, <a target="_blank" href="([^"]+)">' - RECAPTCHA_KEY_PATTERN = r"var __recaptcha_public\s*=\s*'([^']+)';" - FILE_INFO_PATTERN = r'<span style="cursor: default;[^>]*>\s*(?P<N>.*?)\s* \s*<strong>\s*(?P<S>[0-9.]+)\s*(?P<U>[kKMG])i?B\s*</strong>\s*</span>' - OFFLINE_PATTERN = r'<span style="cursor: default;[^>]*>\s* \s*<strong>\s*</strong>\s*</span>' - TEMP_OFFLINE_PATTERN = r'<span class="msg_red">Downloading of this file is temporarily disabled</span>' - - - def handleFree(self): - ukey = re.match(self.__pattern__, self.pyfile.url).group(1) - json_url = 'http://ifile.it/new_download-request.json' - post_data = {"ukey": ukey, "ab": "0"} - - json_response = json_loads(self.load(json_url, post=post_data)) - self.logDebug(json_response) - if json_response['status'] == 3: - self.offline() - - if json_response['captcha']: - captcha_key = re.search(self.RECAPTCHA_KEY_PATTERN, self.html).group(1) - recaptcha = ReCaptcha(self) - post_data['ctype'] = "recaptcha" - - for _ in xrange(5): - post_data['recaptcha_challenge'], post_data['recaptcha_response'] = recaptcha.challenge(captcha_key) - json_response = json_loads(self.load(json_url, post=post_data)) - self.logDebug(json_response) - - if json_response['retry']: - self.invalidCaptcha() - else: - self.correctCaptcha() - break - else: - self.fail("Incorrect captcha") - - if not "ticket_url" in json_response: - self.parseError("Download URL") - - self.download(json_response['ticket_url']) - - -getInfo = create_getInfo(IfileIt) diff --git a/module/plugins/hoster/IfolderRu.py b/module/plugins/hoster/IfolderRu.py deleted file mode 100644 index efa8d8ab9..000000000 --- a/module/plugins/hoster/IfolderRu.py +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class IfolderRu(SimpleHoster): - __name__ = "IfolderRu" - __type__ = "hoster" - __version__ = "0.38" - - __pattern__ = r'http://(?:www\.)?(?:ifolder\.ru|rusfolder\.(?:com|net|ru))/(?:files/)?(?P<ID>\d+).*' - - __description__ = """Ifolder.ru hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_SIZE_REPLACEMENTS = [(u'Ðб', 'KB'), (u'Ðб', 'MB'), (u'Ðб', 'GB')] - FILE_NAME_PATTERN = ur'(?:<div><span>)?ÐазваМОе:(?:</span>)? <b>(?P<N>[^<]+)</b><(?:/div|br)>' - FILE_SIZE_PATTERN = ur'(?:<div><span>)?РазЌеÑ:(?:</span>)? <b>(?P<S>[^<]+)</b><(?:/div|br)>' - OFFLINE_PATTERN = ur'<p>Ѐайл ÐœÐŸÐŒÐµÑ <b>[^<]*</b> (Ме МайЎеМ|ÑЎалеМ) !!!</p>' - - SESSION_ID_PATTERN = r'<a href=(http://ints.(?:rusfolder.com|ifolder.ru)/ints/sponsor/\?bi=\d*&session=([^&]+)&u=[^>]+)>' - INTS_SESSION_PATTERN = r'\(\'ints_session\'\);\s*if\(tag\)\{tag.value = "([^"]+)";\}' - HIDDEN_INPUT_PATTERN = r"var v = .*?name='([^']+)' value='1'" - LINK_PATTERN = r'<a id="download_file_href" href="([^"]+)"' - WRONG_CAPTCHA_PATTERN = ur'<font color=Red>МевеÑМÑй кПЎ,<br>ввеЎОÑе еÑе Ñаз</font><br>' - - - def setup(self): - self.resumeDownload = self.multiDL = True if self.account else False - self.chunkLimit = 1 - - def process(self, pyfile): - file_id = re.match(self.__pattern__, pyfile.url).group('ID') - self.html = self.load("http://rusfolder.com/%s" % file_id, cookies=True, decode=True) - self.getFileInfo() - - url = re.search(r"location\.href = '(http://ints\..*?=)'", self.html).group(1) - self.html = self.load(url, cookies=True, decode=True) - - url, session_id = re.search(self.SESSION_ID_PATTERN, self.html).groups() - self.html = self.load(url, cookies=True, decode=True) - - url = "http://ints.rusfolder.com/ints/frame/?session=%s" % session_id - self.html = self.load(url, cookies=True) - - self.wait(31, False) - - captcha_url = "http://ints.rusfolder.com/random/images/?session=%s" % session_id - for _ in xrange(5): - self.html = self.load(url, cookies=True) - action, inputs = self.parseHtmlForm('ID="Form1"') - inputs['ints_session'] = re.search(self.INTS_SESSION_PATTERN, self.html).group(1) - inputs[re.search(self.HIDDEN_INPUT_PATTERN, self.html).group(1)] = '1' - inputs['confirmed_number'] = self.decryptCaptcha(captcha_url, cookies=True) - inputs['action'] = '1' - self.logDebug(inputs) - - self.html = self.load(url, decode=True, cookies=True, post=inputs) - if self.WRONG_CAPTCHA_PATTERN in self.html: - self.invalidCaptcha() - else: - break - else: - self.fail("Invalid captcha") - - download_url = re.search(self.LINK_PATTERN, self.html).group(1) - self.correctCaptcha() - self.logDebug("Download URL: %s" % download_url) - self.download(download_url) - - -getInfo = create_getInfo(IfolderRu) diff --git a/module/plugins/hoster/JumbofilesCom.py b/module/plugins/hoster/JumbofilesCom.py deleted file mode 100644 index 2c9e4418b..000000000 --- a/module/plugins/hoster/JumbofilesCom.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class JumbofilesCom(SimpleHoster): - __name__ = "JumbofilesCom" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?jumbofiles.com/(\w{12}).*' - - __description__ = """JumboFiles.com hoster plugin""" - __author_name__ = "godofdream" - __author_mail__ = "soilfiction@gmail.com" - - FILE_INFO_PATTERN = r'<TR><TD>(?P<N>[^<]+?)\s*<small>\((?P<S>[\d.]+)\s*(?P<U>[KMG][bB])\)</small></TD></TR>' - OFFLINE_PATTERN = r'Not Found or Deleted / Disabled due to inactivity or DMCA' - LINK_PATTERN = r'<meta http-equiv="refresh" content="10;url=(.+)">' - - - def setup(self): - self.resumeDownload = self.multiDL = True - - def handleFree(self): - ukey = re.match(self.__pattern__, self.pyfile.url).group(1) - post_data = {"id": ukey, "op": "download3", "rand": ""} - html = self.load(self.pyfile.url, post=post_data, decode=True) - url = re.search(self.LINK_PATTERN, html).group(1) - self.logDebug("Download " + url) - self.download(url) - - -getInfo = create_getInfo(JumbofilesCom) diff --git a/module/plugins/hoster/Keep2shareCC.py b/module/plugins/hoster/Keep2shareCC.py deleted file mode 100644 index c1ec66435..000000000 --- a/module/plugins/hoster/Keep2shareCC.py +++ /dev/null @@ -1,110 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://k2s.cc/file/55fb73e1c00c5/random.bin - -import re - -from urlparse import urlparse, urljoin - -from module.plugins.internal.CaptchaService import ReCaptcha -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class Keep2shareCC(SimpleHoster): - __name__ = "Keep2shareCC" - __type__ = "hoster" - __version__ = "0.10" - - __pattern__ = r'https?://(?:www\.)?(keep2share|k2s|keep2s)\.cc/file/(?P<ID>\w+)' - - __description__ = """Keep2share.cc hoster plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - FILE_NAME_PATTERN = r'File: <span>(?P<N>.+)</span>' - FILE_SIZE_PATTERN = r'Size: (?P<S>[^<]+)</div>' - OFFLINE_PATTERN = r'File not found or deleted|Sorry, this file is blocked or deleted|Error 404' - - LINK_PATTERN = r'To download this file with slow speed, use <a href="([^"]+)">this link</a>' - WAIT_PATTERN = r'Please wait ([\d:]+) to download this file' - ALREADY_DOWNLOADING_PATTERN = r'Free account does not allow to download more than one file at the same time' - - RECAPTCHA_KEY = "6LcYcN0SAAAAABtMlxKj7X0hRxOY8_2U86kI1vbb" - - - def handleFree(self): - self.sanitize_url() - self.html = self.load(self.pyfile.url) - - self.fid = re.search(r'<input type="hidden" name="slow_id" value="([^"]+)">', self.html).group(1) - self.html = self.load(self.pyfile.url, post={'yt0': '', 'slow_id': self.fid}) - - m = re.search(r"function download\(\){.*window\.location\.href = '([^']+)';", self.html, re.DOTALL) - if m: # Direct mode - self.startDownload(m.group(1)) - else: - self.handleCaptcha() - - self.wait(30) - - self.html = self.load(self.pyfile.url, post={'uniqueId': self.fid, 'free': 1}) - - m = re.search(self.WAIT_PATTERN, self.html) - if m: - self.logDebug('Hoster told us to wait for %s' % m.group(1)) - # string to time convert courtesy of https://stackoverflow.com/questions/10663720 - ftr = [3600, 60, 1] - wait_time = sum([a * b for a, b in zip(ftr, map(int, m.group(1).split(':')))]) - self.wait(wait_time, reconnect=True) - self.retry() - - m = re.search(self.ALREADY_DOWNLOADING_PATTERN, self.html) - if m: - # if someone is already downloading on our line, wait 30min and retry - self.logDebug('Already downloading, waiting for 30 minutes') - self.wait(30 * 60, reconnect=True) - self.retry() - - m = re.search(self.LINK_PATTERN, self.html) - if m is None: - self.parseError("Unable to detect direct link") - self.startDownload(m.group(1)) - - def handleCaptcha(self): - recaptcha = ReCaptcha(self) - for _ in xrange(5): - challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY) - post_data = {'recaptcha_challenge_field': challenge, - 'recaptcha_response_field': response, - 'CaptchaForm%5Bcode%5D': '', - 'free': 1, - 'freeDownloadRequest': 1, - 'uniqueId': self.fid, - 'yt0': ''} - - self.html = self.load(self.pyfile.url, post=post_data) - - if 'recaptcha' not in self.html: - self.correctCaptcha() - break - else: - self.logInfo('Wrong captcha') - self.invalidCaptcha() - else: - self.fail("All captcha attempts failed") - - def startDownload(self, url): - d = urljoin(self.base_url, url) - self.logDebug('Direct Link: ' + d) - self.download(d, disposition=True) - - def sanitize_url(self): - header = self.load(self.pyfile.url, just_header=True) - if 'location' in header: - self.pyfile.url = header['location'] - p = urlparse(self.pyfile.url) - self.base_url = "%s://%s" % (p.scheme, p.hostname) - - -getInfo = create_getInfo(Keep2shareCC) diff --git a/module/plugins/hoster/LemUploadsCom.py b/module/plugins/hoster/LemUploadsCom.py deleted file mode 100644 index b8a6062cb..000000000 --- a/module/plugins/hoster/LemUploadsCom.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# BigBuckBunny_320x180.mp4 - 61.7 Mb - http://lemuploads.com/uwol0aly9dld - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class LemUploadsCom(XFileSharingPro): - __name__ = "LemUploadsCom" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'https?://(?:www\.)?lemuploads.com/\w{12}' - - __description__ = """LemUploads.com hoster plugin""" - __author_name__ = "t4skforce" - __author_mail__ = "t4skforce1337[AT]gmail[DOT]com" - - HOSTER_NAME = "lemuploads.com" - - OFFLINE_PATTERN = r'<b>File Not Found</b><br><br>' - FILE_NAME_PATTERN = r'<b>Password:</b></div>\s*<h2>(?P<N>[^<]+)</h2>' - - -getInfo = create_getInfo(LemUploadsCom) diff --git a/module/plugins/hoster/LetitbitNet.py b/module/plugins/hoster/LetitbitNet.py deleted file mode 100644 index 3159be4f1..000000000 --- a/module/plugins/hoster/LetitbitNet.py +++ /dev/null @@ -1,160 +0,0 @@ -# -*- coding: utf-8 -*- -# -# API Documentation: -# http://api.letitbit.net/reg/static/api.pdf -# -# Test links: -# http://letitbit.net/download/07874.0b5709a7d3beee2408bb1f2eefce/random.bin.html - -import re - -from urllib import urlencode, urlopen - -from module.common.json_layer import json_loads, json_dumps -from module.plugins.hoster.UnrestrictLi import secondsToMidnight -from module.plugins.internal.CaptchaService import ReCaptcha -from module.plugins.internal.SimpleHoster import SimpleHoster - - -def api_download_info(url): - json_data = ["yw7XQy2v9", ["download/info", {"link": url}]] - post_data = urlencode({'r': json_dumps(json_data)}) - api_rep = urlopen("http://api.letitbit.net/json", data=post_data).read() - return json_loads(api_rep) - - -def getInfo(urls): - for url in urls: - api_rep = api_download_info(url) - if api_rep['status'] == 'OK': - info = api_rep['data'][0] - yield (info['name'], info['size'], 2, url) - else: - yield (url, 0, 1, url) - - -class LetitbitNet(SimpleHoster): - __name__ = "LetitbitNet" - __type__ = "hoster" - __version__ = "0.24" - - __pattern__ = r'http://(?:www\.)?(letitbit|shareflare).net/download/.*' - - __description__ = """Letitbit.net hoster plugin""" - __author_name__ = ("zoidberg", "z00nx") - __author_mail__ = ("zoidberg@mujmail.cz", "z00nx0@gmail.com") - - FILE_URL_REPLACEMENTS = [(r"(?<=http://)([^/]+)", "letitbit.net")] - - HOSTER_NAME = "letitbit.net" - - SECONDS_PATTERN = r'seconds\s*=\s*(\d+);' - CAPTCHA_CONTROL_FIELD = r"recaptcha_control_field\s=\s'(?P<value>[^']+)'" - RECAPTCHA_KEY = "6Lc9zdMSAAAAAF-7s2wuQ-036pLRbM0p8dDaQdAM" - - - def setup(self): - self.resumeDownload = True - #TODO confirm that resume works - - def getFileInfo(self): - api_rep = api_download_info(self.pyfile.url) - if api_rep['status'] == 'OK': - self.api_data = api_rep['data'][0] - self.pyfile.name = self.api_data['name'] - self.pyfile.size = self.api_data['size'] - else: - self.offline() - - def handleFree(self): - action, inputs = self.parseHtmlForm('id="ifree_form"') - if not action: - self.parseError("page 1 / ifree_form") - - domain = "http://www." + self.HOSTER_NAME - self.pyfile.size = float(inputs['sssize']) - self.logDebug(action, inputs) - inputs['desc'] = "" - - self.html = self.load(domain + action, post=inputs, cookies=True) - - # action, inputs = self.parseHtmlForm('id="d3_form"') - # if not action: - # self.parseError("page 2 / d3_form") - # self.logDebug(action, inputs) - # - # self.html = self.load(action, post = inputs, cookies = True) - # - # try: - # ajax_check_url, captcha_url = re.search(self.CHECK_URL_PATTERN, self.html).groups() - # m = re.search(self.SECONDS_PATTERN, self.html) - # seconds = int(m.group(1)) if m else 60 - # self.wait(seconds+1) - # except Exception, e: - # self.logError(e) - # self.parseError("page 3 / js") - - m = re.search(self.SECONDS_PATTERN, self.html) - seconds = int(m.group(1)) if m else 60 - self.logDebug("Seconds found", seconds) - m = re.search(self.CAPTCHA_CONTROL_FIELD, self.html) - recaptcha_control_field = m.group(1) - self.logDebug("ReCaptcha control field found", recaptcha_control_field) - self.wait(seconds + 1) - - response = self.load("%s/ajax/download3.php" % domain, post=" ", cookies=True) - if response != '1': - self.parseError('Unknown response - ajax_check_url') - self.logDebug(response) - - recaptcha = ReCaptcha(self) - challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY) - post_data = {"recaptcha_challenge_field": challenge, "recaptcha_response_field": response, - "recaptcha_control_field": recaptcha_control_field} - self.logDebug("Post data to send", post_data) - response = self.load('%s/ajax/check_recaptcha.php' % domain, post=post_data, cookies=True) - self.logDebug(response) - if not response: - self.invalidCaptcha() - if response == "error_free_download_blocked": - self.logWarning("Daily limit reached") - self.wait(secondsToMidnight(gmt=2), True) - if response == "error_wrong_captcha": - self.logError("Wrong Captcha") - self.invalidCaptcha() - self.retry() - elif response.startswith('['): - urls = json_loads(response) - elif response.startswith('http://'): - urls = [response] - else: - self.parseError("Unknown response - captcha check") - - self.correctCaptcha() - - for download_url in urls: - try: - self.logDebug("Download URL", download_url) - self.download(download_url) - break - except Exception, e: - self.logError(e) - else: - self.fail("Download did not finish correctly") - - def handlePremium(self): - api_key = self.user - premium_key = self.account.getAccountData(self.user)['password'] - - json_data = [api_key, ["download/direct_links", {"pass": premium_key, "link": self.pyfile.url}]] - api_rep = self.load('http://api.letitbit.net/json', post={'r': json_dumps(json_data)}) - self.logDebug('API Data: ' + api_rep) - api_rep = json_loads(api_rep) - - if api_rep['status'] == 'FAIL': - self.fail(api_rep['data']) - - direct_link = api_rep['data'][0][0] - self.logDebug('Direct Link: ' + direct_link) - - self.download(direct_link, disposition=True) diff --git a/module/plugins/hoster/LinksnappyCom.py b/module/plugins/hoster/LinksnappyCom.py deleted file mode 100644 index e4200e9f2..000000000 --- a/module/plugins/hoster/LinksnappyCom.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urlparse import urlsplit - -from module.common.json_layer import json_loads, json_dumps -from module.plugins.Hoster import Hoster - - -class LinksnappyCom(Hoster): - __name__ = "LinksnappyCom" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'https?://(?:[^/]*\.)?linksnappy\.com' - - __description__ = """Linksnappy.com hoster plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - SINGLE_CHUNK_HOSTERS = ('easybytez.com') - - - def setup(self): - self.chunkLimit = -1 - self.resumeDownload = True - - def process(self, pyfile): - if re.match(self.__pattern__, pyfile.url): - new_url = pyfile.url - elif not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "Linksnappy.com") - self.fail("No Linksnappy.com account provided") - else: - self.logDebug("Old URL: %s" % pyfile.url) - host = self._get_host(pyfile.url) - json_params = json_dumps({'link': pyfile.url, - 'type': host, - 'username': self.user, - 'password': self.account.getAccountData(self.user)['password']}) - r = self.load('http://gen.linksnappy.com/genAPI.php', - post={'genLinks': json_params}) - self.logDebug("JSON data: " + r) - - j = json_loads(r)['links'][0] - - if j['error']: - self.logError('Error converting the link: %s' % j['error']) - self.fail('Error converting the link') - - pyfile.name = j['filename'] - new_url = j['generated'] - - if host in self.SINGLE_CHUNK_HOSTERS: - self.chunkLimit = 1 - else: - self.setup() - - if new_url != pyfile.url: - self.logDebug("New URL: " + new_url) - - self.download(new_url, disposition=True) - - check = self.checkDownload({"html302": "<title>302 Found</title>"}) - if check == "html302": - self.retry(wait_time=5, reason="Linksnappy returns only HTML data.") - - @staticmethod - def _get_host(url): - host = urlsplit(url).netloc - return re.search(r'[\w-]+\.\w+$', host).group(0) diff --git a/module/plugins/hoster/LoadTo.py b/module/plugins/hoster/LoadTo.py deleted file mode 100644 index 18398e905..000000000 --- a/module/plugins/hoster/LoadTo.py +++ /dev/null @@ -1,69 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://www.load.to/JWydcofUY6/random.bin -# http://www.load.to/oeSmrfkXE/random100.bin - -import re - -from module.plugins.internal.CaptchaService import SolveMedia -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class LoadTo(SimpleHoster): - __name__ = "LoadTo" - __type__ = "hoster" - __version__ = "0.16" - - __pattern__ = r'http://(?:www\.)?load\.to/\w+' - - __description__ = """ Load.to hoster plugin """ - __author_name__ = ("halfman", "stickell") - __author_mail__ = ("Pulpan3@gmail.com", "l.stickell@yahoo.it") - - FILE_NAME_PATTERN = r'<h1>(?P<N>.+)</h1>' - FILE_SIZE_PATTERN = r'Size: (?P<S>[\d.]+) (?P<U>\w+)' - OFFLINE_PATTERN = r'>Can\'t find file' - - LINK_PATTERN = r'<form method="post" action="(.+?)"' - WAIT_PATTERN = r'type="submit" value="Download \((\d+)\)"' - SOLVEMEDIA_PATTERN = r'http://api\.solvemedia\.com/papi/challenge\.noscript\?k=([^"]+)' - - FILE_URL_REPLACEMENTS = [(r'(\w)$', r'\1/')] - - - def setup(self): - self.multiDL = True - self.chunkLimit = 1 - - - def handleFree(self): - # Search for Download URL - m = re.search(self.LINK_PATTERN, self.html) - if m is None: - self.parseError("Unable to detect download URL") - - download_url = m.group(1) - - # Set Timer - may be obsolete - m = re.search(self.WAIT_PATTERN, self.html) - if m: - self.wait(m.group(1)) - - # Load.to is using solvemedia captchas since ~july 2014: - m = re.search(self.SOLVEMEDIA_PATTERN, self.html) - if m is None: - self.download(download_url) - else: - captcha_key = m.group(1) - solvemedia = SolveMedia(self) - captcha_challenge, captcha_response = solvemedia.challenge(captcha_key) - self.download(download_url, post={"adcopy_challenge": captcha_challenge, "adcopy_response": captcha_response}) - check = self.checkDownload({"404": re.compile("\A<h1>404 Not Found</h1>")}) - if check == "404": - self.logWarning("The captcha you entered was incorrect. Please try again.") - self.invalidCaptcha() - self.retry() - - -getInfo = create_getInfo(LoadTo) diff --git a/module/plugins/hoster/LomafileCom.py b/module/plugins/hoster/LomafileCom.py deleted file mode 100644 index 372d42fd3..000000000 --- a/module/plugins/hoster/LomafileCom.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class LomafileCom(SimpleHoster): - __name__ = "LomafileCom" - __type__ = "hoster" - __version__ = "0.2" - - __pattern__ = r'https?://lomafile\.com/.+/[\w\.]+' - - __description__ = """ Lomafile.com hoster plugin """ - __author_name__ = "nath_schwarz" - __author_mail__ = "nathan.notwhite@gmail.com" - - FILE_NAME_PATTERN = r'Filename:[^>]*>(?P<N>[\w\.]+)' - FILE_SIZE_PATTERN = r'\((?P<S>\d+)\s(?P<U>\w+)\)' - OFFLINE_PATTERN = r'Software error' - - - def handleFree(self): - for _ in range(3): - captcha_id = re.search(r'src="http://lomafile\.com/captchas/(?P<id>\w+)\.jpg"', self.html) - if not captcha_id: - self.parseError("Unable to parse captcha id.") - else: - captcha_id = captcha_id.group("id") - - form_id = re.search(r'name="id" value="(?P<id>\w+)"', self.html) - if not form_id: - self.parseError("Unable to parse form id") - else: - form_id = form_id.group("id") - - captcha = self.decryptCaptcha("http://lomafile.com/captchas/" + captcha_id + ".jpg") - - self.wait(60) - - self.html = self.load(self.pyfile.url, post={ - "op": "download2", - "id": form_id, - "rand": captcha_id, - "code": captcha, - "down_direct": "1"}) - - download_url = re.search(r'http://[\d\.]+:\d+/d/\w+/[\w\.]+', self.html) - if download_url is None: - self.invalidCaptcha() - self.logDebug("Invalid captcha.") - else: - download_url = download_url.group(0) - self.logDebug("Download URL: %s" % download_url) - self.download(download_url) - else: - self.fail("Invalid captcha-code entered.") - - -getInfo = create_getInfo(LomafileCom) diff --git a/module/plugins/hoster/LuckyShareNet.py b/module/plugins/hoster/LuckyShareNet.py deleted file mode 100644 index 60f1204e5..000000000 --- a/module/plugins/hoster/LuckyShareNet.py +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.lib.bottle import json_loads - -from module.plugins.internal.CaptchaService import ReCaptcha -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class LuckyShareNet(SimpleHoster): - __name__ = "LuckyShareNet" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'https?://(?:www\.)?luckyshare.net/(?P<ID>\d{10,})' - - __description__ = """LuckyShare.net hoster plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - FILE_INFO_PATTERN = r"<h1 class='file_name'>(?P<N>\S+)</h1>\s*<span class='file_size'>Filesize: (?P<S>[\d.]+)(?P<U>\w+)</span>" - OFFLINE_PATTERN = r'There is no such file available' - RECAPTCHA_KEY = "6LdivsgSAAAAANWh-d7rPE1mus4yVWuSQIJKIYNw" - - - def parseJson(self, rep): - if 'AJAX Error' in rep: - html = self.load(self.pyfile.url, decode=True) - m = re.search(r"waitingtime = (\d+);", html) - if m: - waittime = int(m.group(1)) - self.logDebug('You have to wait %d seconds between free downloads' % waittime) - self.retry(wait_time=waittime) - else: - self.parseError('Unable to detect wait time between free downloads') - elif 'Hash expired' in rep: - self.retry(reason="Hash expired") - return json_loads(rep) - - # TODO: There should be a filesize limit for free downloads - # TODO: Some files could not be downloaded in free mode - def handleFree(self): - file_id = re.match(self.__pattern__, self.pyfile.url).group('ID') - self.logDebug('File ID: ' + file_id) - rep = self.load(r"http://luckyshare.net/download/request/type/time/file/" + file_id, decode=True) - self.logDebug('JSON: ' + rep) - json = self.parseJson(rep) - - self.wait(int(json['time'])) - - recaptcha = ReCaptcha(self) - for _ in xrange(5): - challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY) - rep = self.load(r"http://luckyshare.net/download/verify/challenge/%s/response/%s/hash/%s" % - (challenge, response, json['hash']), decode=True) - self.logDebug('JSON: ' + rep) - if 'link' in rep: - json.update(self.parseJson(rep)) - self.correctCaptcha() - break - elif 'Verification failed' in rep: - self.logInfo('Wrong captcha') - self.invalidCaptcha() - else: - self.parseError('Unable to get downlaod link') - - if not json['link']: - self.fail("No Download url retrieved/all captcha attempts failed") - - self.logDebug('Direct URL: ' + json['link']) - self.download(json['link']) - - -getInfo = create_getInfo(LuckyShareNet) diff --git a/module/plugins/hoster/MediafireCom.py b/module/plugins/hoster/MediafireCom.py deleted file mode 100644 index d0878a34d..000000000 --- a/module/plugins/hoster/MediafireCom.py +++ /dev/null @@ -1,125 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.CaptchaService import SolveMedia -from module.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo -from module.network.RequestFactory import getURL - - -def replace_eval(js_expr): - return js_expr.replace(r'eval("', '').replace(r"\'", r"'").replace(r'\"', r'"') - - -def checkHTMLHeader(url): - try: - for _ in xrange(3): - header = getURL(url, just_header=True) - for line in header.splitlines(): - line = line.lower() - if 'location' in line: - url = line.split(':', 1)[1].strip() - if 'error.php?errno=320' in url: - return url, 1 - if not url.startswith('http://'): - url = 'http://www.mediafire.com' + url - break - elif 'content-disposition' in line: - return url, 2 - else: - break - except: - return url, 3 - - return url, 0 - - -def getInfo(urls): - for url in urls: - location, status = checkHTMLHeader(url) - if status: - file_info = (url, 0, status, url) - else: - file_info = parseFileInfo(MediafireCom, url, getURL(url, decode=True)) - yield file_info - - -class MediafireCom(SimpleHoster): - __name__ = "MediafireCom" - __type__ = "hoster" - __version__ = "0.79" - - __pattern__ = r'http://(?:www\.)?mediafire\.com/(file/|(view/?|download.php)?\?)(\w{11}|\w{15})($|/)' - - __description__ = """Mediafire.com hoster plugin""" - __author_name__ = ("zoidberg", "stickell") - __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") - - LINK_PATTERN = r'<div class="download_link"[^>]*(?:z-index:(?P<zindex>\d+))?[^>]*>\s*<a href="(?P<href>http://[^"]+)"' - JS_KEY_PATTERN = r"DoShow\('mfpromo1'\);[^{]*{((\w+)='';.*?)eval\(\2\);" - JS_ZMODULO_PATTERN = r"\('z-index'\)\) \% (\d+)\)\);" - SOLVEMEDIA_PATTERN = r'http://api\.solvemedia\.com/papi/challenge\.noscript\?k=([^"]+)' - PAGE1_ACTION_PATTERN = r'<link rel="canonical" href="([^"]+)"/>' - PASSWORD_PATTERN = r'<form name="form_password"' - - FILE_NAME_PATTERN = r'<META NAME="description" CONTENT="(?P<N>[^"]+)"/>' - FILE_INFO_PATTERN = r"oFileSharePopup\.ald\('(?P<ID>[^']*)','(?P<N>[^']*)','(?P<S>[^']*)','','(?P<sha256>[^']*)'\)" - OFFLINE_PATTERN = r'class="error_msg_title"> Invalid or Deleted File. </div>' - - - def setup(self): - self.multiDL = False - - def process(self, pyfile): - pyfile.url = re.sub(r'/view/?\?', '/?', pyfile.url) - - self.url, result = checkHTMLHeader(pyfile.url) - self.logDebug('Location (%d): %s' % (result, self.url)) - - if result == 0: - self.html = self.load(self.url, decode=True) - self.checkCaptcha() - self.multiDL = True - self.check_data = self.getFileInfo() - - if self.account: - self.handlePremium() - else: - self.handleFree() - elif result == 1: - self.offline() - else: - self.multiDL = True - self.download(self.url, disposition=True) - - def handleFree(self): - passwords = self.getPassword().splitlines() - while self.PASSWORD_PATTERN in self.html: - if len(passwords): - password = passwords.pop(0) - self.logInfo("Password protected link, trying " + password) - self.html = self.load(self.url, post={"downloadp": password}) - else: - self.fail("No or incorrect password") - - m = re.search(r'kNO = r"(http://.*?)";', self.html) - if m is None: - self.parseError("Download URL") - download_url = m.group(1) - self.logDebug("DOWNLOAD LINK:", download_url) - - self.download(download_url) - - def checkCaptcha(self): - for _ in xrange(5): - m = re.search(self.SOLVEMEDIA_PATTERN, self.html) - if m: - captcha_key = m.group(1) - solvemedia = SolveMedia(self) - captcha_challenge, captcha_response = solvemedia.challenge(captcha_key) - self.html = self.load(self.url, post={"adcopy_challenge": captcha_challenge, - "adcopy_response": captcha_response}, decode=True) - else: - break - else: - self.fail("No valid recaptcha solution received") diff --git a/module/plugins/hoster/MegaDebridEu.py b/module/plugins/hoster/MegaDebridEu.py deleted file mode 100644 index 13415d063..000000000 --- a/module/plugins/hoster/MegaDebridEu.py +++ /dev/null @@ -1,89 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urllib import unquote_plus - -from module.common.json_layer import json_loads -from module.plugins.Hoster import Hoster - - -class MegaDebridEu(Hoster): - __name__ = "MegaDebridEu" - __type__ = "hoster" - __version__ = "0.4" - - __pattern__ = r'^https?://(?:w{3}\d+\.mega-debrid.eu|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/download/file/[^/]+/.+$' - - __description__ = """mega-debrid.eu hoster plugin""" - __author_name__ = "D.Ducatel" - __author_mail__ = "dducatel@je-geek.fr" - - API_URL = "https://www.mega-debrid.eu/api.php" - - - def getFilename(self, url): - try: - return unquote_plus(url.rsplit("/", 1)[1]) - except IndexError: - return "" - - def process(self, pyfile): - if re.match(self.__pattern__, pyfile.url): - new_url = pyfile.url - elif not self.account: - self.exitOnFail(_("Please enter your %s account or deactivate this plugin") % "Mega-debrid.eu") - else: - if not self.connectToApi(): - self.exitOnFail(_("Unable to connect to %s") % "Mega-debrid.eu") - - self.logDebug("Old URL: %s" % pyfile.url) - new_url = self.debridLink(pyfile.url) - self.logDebug("New URL: " + new_url) - - filename = self.getFilename(new_url) - if filename != "": - pyfile.name = filename - self.download(new_url, disposition=True) - - def connectToApi(self): - """ - Connexion to the mega-debrid API - Return True if succeed - """ - user, data = self.account.selectAccount() - jsonResponse = self.load(self.API_URL, - get={'action': 'connectUser', 'login': user, 'password': data['password']}) - response = json_loads(jsonResponse) - - if response['response_code'] == "ok": - self.token = response['token'] - return True - else: - return False - - def debridLink(self, linkToDebrid): - """ - Debrid a link - Return The debrided link if succeed or original link if fail - """ - jsonResponse = self.load(self.API_URL, get={'action': 'getLink', 'token': self.token}, - post={"link": linkToDebrid}) - response = json_loads(jsonResponse) - - if response['response_code'] == "ok": - debridedLink = response['debridLink'][1:-1] - return debridedLink - else: - self.exitOnFail("Unable to debrid %s" % linkToDebrid) - - def exitOnFail(self, msg): - """ - exit the plugin on fail case - And display the reason of this failure - """ - if self.getConfig("unloadFailing"): - self.logError(msg) - self.resetAccount() - else: - self.fail(msg) diff --git a/module/plugins/hoster/MegaFilesSe.py b/module/plugins/hoster/MegaFilesSe.py deleted file mode 100644 index 975708597..000000000 --- a/module/plugins/hoster/MegaFilesSe.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class MegaFilesSe(XFileSharingPro): - __name__ = "MegaFilesSe" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?megafiles\.se/\w{12}' - - __description__ = """MegaFiles.se hoster plugin""" - __author_name__ = "t4skforce" - __author_mail__ = "t4skforce1337[AT]gmail[DOT]com" - - HOSTER_NAME = "megafiles.se" - - OFFLINE_PATTERN = r'<b><font[^>]*>File Not Found</font></b><br><br>' - FILE_NAME_PATTERN = r'<div[^>]+>\s*<b>(?P<N>[^<]+)</b>\s*</div>' - - -getInfo = create_getInfo(MegaFilesSe) diff --git a/module/plugins/hoster/MegaNz.py b/module/plugins/hoster/MegaNz.py deleted file mode 100644 index 5562aad06..000000000 --- a/module/plugins/hoster/MegaNz.py +++ /dev/null @@ -1,132 +0,0 @@ -# -*- coding: utf-8 -*- - -import random -import re - -from Crypto.Cipher import AES -from Crypto.Util import Counter -from array import array -from base64 import standard_b64decode -from os import remove - -from module.common.json_layer import json_loads, json_dumps -from module.plugins.Hoster import Hoster - - -class MegaNz(Hoster): - __name__ = "MegaNz" - __type__ = "hoster" - __version__ = "0.14" - - __pattern__ = r'https?://([a-z0-9]+\.)?mega\.co\.nz/#!([a-zA-Z0-9!_\-]+)' - - __description__ = """Mega.co.nz hoster plugin""" - __author_name__ = "RaNaN" - __author_mail__ = "ranan@pyload.org" - - API_URL = "https://g.api.mega.co.nz/cs?id=%d" - FILE_SUFFIX = ".crypted" - - - def b64_decode(self, data): - data = data.replace("-", "+").replace("_", "/") - return standard_b64decode(data + '=' * (-len(data) % 4)) - - def getCipherKey(self, key): - """ Construct the cipher key from the given data """ - a = array("I", key) - key_array = array("I", [a[0] ^ a[4], a[1] ^ a[5], a[2] ^ a[6], a[3] ^ a[7]]) - return key_array - - def callApi(self, **kwargs): - """ Dispatch a call to the api, see https://mega.co.nz/#developers """ - # generate a session id, no idea where to obtain elsewhere - uid = random.randint(10 << 9, 10 ** 10) - - resp = self.load(self.API_URL % uid, post=json_dumps([kwargs])) - self.logDebug("Api Response: " + resp) - return json_loads(resp) - - def decryptAttr(self, data, key): - - cbc = AES.new(self.getCipherKey(key), AES.MODE_CBC, "\0" * 16) - attr = cbc.decrypt(self.b64_decode(data)) - self.logDebug("Decrypted Attr: " + attr) - if not attr.startswith("MEGA"): - self.fail(_("Decryption failed")) - - # Data is padded, 0-bytes must be stripped - return json_loads(attr.replace("MEGA", "").rstrip("\0").strip()) - - def decryptFile(self, key): - """ Decrypts the file at lastDownload` """ - - # upper 64 bit of counter start - n = key[16:24] - - # convert counter to long and shift bytes - ctr = Counter.new(128, initial_value=long(n.encode("hex"), 16) << 64) - cipher = AES.new(self.getCipherKey(key), AES.MODE_CTR, counter=ctr) - - self.pyfile.setStatus("decrypting") - - file_crypted = self.lastDownload - file_decrypted = file_crypted.rsplit(self.FILE_SUFFIX)[0] - f = open(file_crypted, "rb") - df = open(file_decrypted, "wb") - - # TODO: calculate CBC-MAC for checksum - - size = 2 ** 15 # buffer size, 32k - while True: - buf = f.read(size) - if not buf: - break - - df.write(cipher.decrypt(buf)) - - f.close() - df.close() - remove(file_crypted) - - self.lastDownload = file_decrypted - - def process(self, pyfile): - - key = None - - # match is guaranteed because plugin was chosen to handle url - node = re.match(self.__pattern__, pyfile.url).group(2) - if "!" in node: - node, key = node.split("!") - - self.logDebug("File id: %s | Key: %s" % (node, key)) - - if not key: - self.fail(_("No file key provided in the URL")) - - # g is for requesting a download url - # this is similar to the calls in the mega js app, documentation is very bad - dl = self.callApi(a="g", g=1, p=node, ssl=1)[0] - - if "e" in dl: - e = dl['e'] - # ETEMPUNAVAIL (-18): Resource temporarily not available, please try again later - if e == -18: - self.retry() - else: - self.fail(_("Error code:") + e) - - # TODO: map other error codes, e.g - # EACCESS (-11): Access violation (e.g., trying to write to a read-only share) - - key = self.b64_decode(key) - attr = self.decryptAttr(dl['at'], key) - - pyfile.name = attr['n'] + self.FILE_SUFFIX - - self.download(dl['g']) - self.decryptFile(key) - - # Everything is finished and final name can be set - pyfile.name = attr['n'] diff --git a/module/plugins/hoster/MegacrypterCom.py b/module/plugins/hoster/MegacrypterCom.py deleted file mode 100644 index 7a86dbf70..000000000 --- a/module/plugins/hoster/MegacrypterCom.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.common.json_layer import json_loads, json_dumps -from module.plugins.hoster.MegaNz import MegaNz - - -class MegacrypterCom(MegaNz): - __name__ = "MegacrypterCom" - __type__ = "hoster" - __version__ = "0.2" - - __pattern__ = r'(https?://[a-z0-9]{0,10}\.?megacrypter\.com/[a-zA-Z0-9!_\-]+)' - - __description__ = """Megacrypter.com decrypter plugin""" - __author_name__ = "GonzaloSR" - __author_mail__ = "gonzalo@gonzalosr.com" - - API_URL = "http://megacrypter.com/api" - FILE_SUFFIX = ".crypted" - - - def callApi(self, **kwargs): - """ Dispatch a call to the api, see megacrypter.com/api_doc """ - self.logDebug("JSON request: " + json_dumps(kwargs)) - resp = self.load(self.API_URL, post=json_dumps(kwargs)) - self.logDebug("API Response: " + resp) - return json_loads(resp) - - def process(self, pyfile): - # match is guaranteed because plugin was chosen to handle url - node = re.match(self.__pattern__, pyfile.url).group(1) - - # get Mega.co.nz link info - info = self.callApi(link=node, m="info") - - # get crypted file URL - dl = self.callApi(link=node, m="dl") - - # TODO: map error codes, implement password protection - # if info['pass'] is True: - # crypted_file_key, md5_file_key = info['key'].split("#") - - key = self.b64_decode(info['key']) - - pyfile.name = info['name'] + self.FILE_SUFFIX - - self.download(dl['url']) - self.decryptFile(key) - - # Everything is finished and final name can be set - pyfile.name = info['name'] diff --git a/module/plugins/hoster/MegareleaseOrg.py b/module/plugins/hoster/MegareleaseOrg.py deleted file mode 100644 index 05b05c3b5..000000000 --- a/module/plugins/hoster/MegareleaseOrg.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class MegareleaseOrg(XFileSharingPro): - __name__ = "MegareleaseOrg" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'https?://(?:www\.)?megarelease.org/\w{12}' - - __description__ = """Megarelease.org hoster plugin""" - __author_name__ = ("derek3x", "stickell") - __author_mail__ = ("derek3x@vmail.me", "l.stickell@yahoo.it") - - HOSTER_NAME = "megarelease.org" - - FILE_INFO_PATTERN = r'<font color="red">%s/(?P<N>.+)</font> \((?P<S>[^)]+)\)</font>' % __pattern__ - - -getInfo = create_getInfo(MegareleaseOrg) diff --git a/module/plugins/hoster/MegasharesCom.py b/module/plugins/hoster/MegasharesCom.py deleted file mode 100644 index c12897ed0..000000000 --- a/module/plugins/hoster/MegasharesCom.py +++ /dev/null @@ -1,105 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from time import time - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class MegasharesCom(SimpleHoster): - __name__ = "MegasharesCom" - __type__ = "hoster" - __version__ = "0.24" - - __pattern__ = r'http://(?:www\.)?megashares.com/.*' - - __description__ = """Megashares.com hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_NAME_PATTERN = r'<h1 class="black xxl"[^>]*title="(?P<N>[^"]+)">' - FILE_SIZE_PATTERN = r'<strong><span class="black">Filesize:</span></strong> (?P<S>[0-9.]+) (?P<U>[kKMG])i?B<br />' - OFFLINE_PATTERN = r'<dd class="red">(Invalid Link Request|Link has been deleted)' - - LINK_PATTERN = r'<div id="show_download_button_%d"[^>]*>\s*<a href="([^"]+)">' - PASSPORT_LEFT_PATTERN = r'Your Download Passport is: <[^>]*>(\w+).*\s*You have\s*<[^>]*>\s*([0-9.]+) ([kKMG]i?B)' - PASSPORT_RENEW_PATTERN = r'Your download passport will renew in\s*<strong>(\d+)</strong>:<strong>(\d+)</strong>:<strong>(\d+)</strong>' - REACTIVATE_NUM_PATTERN = r'<input[^>]*id="random_num" value="(\d+)" />' - REACTIVATE_PASSPORT_PATTERN = r'<input[^>]*id="passport_num" value="(\w+)" />' - REQUEST_URI_PATTERN = r'var request_uri = "([^"]+)";' - NO_SLOTS_PATTERN = r'<dd class="red">All download slots for this link are currently filled' - - - def setup(self): - self.resumeDownload = True - self.multiDL = self.premium - - def handlePremium(self): - self.handleDownload(True) - - def handleFree(self): - self.html = self.load(self.pyfile.url, decode=True) - - if self.NO_SLOTS_PATTERN in self.html: - self.retry(wait_time=5 * 60) - - self.getFileInfo() - # if self.pyfile.size > 576716800: - # self.fail("This file is too large for free download") - - # Reactivate passport if needed - m = re.search(self.REACTIVATE_PASSPORT_PATTERN, self.html) - if m: - passport_num = m.group(1) - request_uri = re.search(self.REQUEST_URI_PATTERN, self.html).group(1) - - for _ in xrange(5): - random_num = re.search(self.REACTIVATE_NUM_PATTERN, self.html).group(1) - - verifyinput = self.decryptCaptcha( - "http://d01.megashares.com/index.php?secgfx=gfx&random_num=%s" % random_num) - self.logInfo("Reactivating passport %s: %s %s" % (passport_num, random_num, verifyinput)) - - url = ("http://d01.megashares.com%s&rs=check_passport_renewal" % request_uri + - "&rsargs[]=%s&rsargs[]=%s&rsargs[]=%s" % (verifyinput, random_num, passport_num) + - "&rsargs[]=replace_sec_pprenewal&rsrnd=%s" % str(int(time() * 1000))) - self.logDebug(url) - response = self.load(url) - - if 'Thank you for reactivating your passport.' in response: - self.correctCaptcha() - self.retry() - else: - self.invalidCaptcha() - else: - self.fail("Failed to reactivate passport") - - # Check traffic left on passport - m = re.search(self.PASSPORT_LEFT_PATTERN, self.html) - if m is None: - self.fail('Passport not found') - self.logInfo("Download passport: %s" % m.group(1)) - data_left = float(m.group(2)) * 1024 ** {'KB': 1, 'MB': 2, 'GB': 3}[m.group(3)] - self.logInfo("Data left: %s %s (%d MB needed)" % (m.group(2), m.group(3), self.pyfile.size / 1048576)) - - if not data_left: - m = re.search(self.PASSPORT_RENEW_PATTERN, self.html) - renew = m.group(1) + m.group(2) + m.group(3) * 60 * 60 if m else 10 * 60 - self.retry(max_tries=15, wait_time=renew, reason="Unable to get passport") - - self.handleDownload(False) - - def handleDownload(self, premium=False): - # Find download link; - m = re.search(self.LINK_PATTERN % (1 if premium else 2), self.html) - msg = '%s download URL' % ('Premium' if premium else 'Free') - if m is None: - self.parseError(msg) - - download_url = m.group(1) - self.logDebug("%s: %s" % (msg, download_url)) - self.download(download_url) - - -getInfo = create_getInfo(MegasharesCom) diff --git a/module/plugins/hoster/MovReelCom.py b/module/plugins/hoster/MovReelCom.py deleted file mode 100644 index 6b13422b0..000000000 --- a/module/plugins/hoster/MovReelCom.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class MovReelCom(XFileSharingPro): - __name__ = "MovReelCom" - __type__ = "hoster" - __version__ = "1.20" - - __pattern__ = r'http://(?:www\.)?movreel.com/.*' - - __description__ = """MovReel.com hoster plugin""" - __author_name__ = "JorisV83" - __author_mail__ = "jorisv83-pyload@yahoo.com" - - HOSTER_NAME = "movreel.com" - - FILE_INFO_PATTERN = r'<h3>(?P<N>.+?) <small><sup>(?P<S>[\d.]+) (?P<U>..)</sup> </small></h3>' - OFFLINE_PATTERN = r'<b>File Not Found</b><br><br>' - LINK_PATTERN = r'<a href="(http://[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/.*)">Download Link</a>' - - -getInfo = create_getInfo(MovReelCom) diff --git a/module/plugins/hoster/MultiDebridCom.py b/module/plugins/hoster/MultiDebridCom.py deleted file mode 100644 index f70fa0f0e..000000000 --- a/module/plugins/hoster/MultiDebridCom.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.common.json_layer import json_loads -from module.plugins.Hoster import Hoster - - -class MultiDebridCom(Hoster): - __name__ = "MultiDebridCom" - __type__ = "hoster" - __version__ = "0.03" - - __pattern__ = r'http://(?:www\.)?\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/dl/' - - __description__ = """Multi-debrid.com hoster plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - - def setup(self): - self.chunkLimit = -1 - self.resumeDownload = True - - def process(self, pyfile): - if re.match(self.__pattern__, pyfile.url): - new_url = pyfile.url - elif not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "Multi-debrid.com") - self.fail("No Multi-debrid.com account provided") - else: - self.logDebug("Original URL: %s" % pyfile.url) - page = self.req.load('http://multi-debrid.com/api.php', - get={'user': self.user, 'pass': self.account.getAccountData(self.user)['password'], - 'link': pyfile.url}) - self.logDebug("JSON data: " + page) - page = json_loads(page) - if page['status'] != 'ok': - self.fail('Unable to unrestrict link') - new_url = page['link'] - - if new_url != pyfile.url: - self.logDebug("Unrestricted URL: " + new_url) - - self.download(new_url, disposition=True) diff --git a/module/plugins/hoster/MultishareCz.py b/module/plugins/hoster/MultishareCz.py deleted file mode 100644 index fdf5fbd70..000000000 --- a/module/plugins/hoster/MultishareCz.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from random import random - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class MultishareCz(SimpleHoster): - __name__ = "MultishareCz" - __type__ = "hoster" - __version__ = "0.34" - - __pattern__ = r'http://(?:www\.)?multishare.cz/stahnout/(?P<ID>\d+).*' - - __description__ = """MultiShare.cz hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_INFO_PATTERN = ur'(?:<li>Název|Soubor): <strong>(?P<N>[^<]+)</strong><(?:/li><li|br)>Velikost: <strong>(?P<S>[^<]+)</strong>' - OFFLINE_PATTERN = ur'<h1>Stáhnout soubor</h1><p><strong>PoÅŸadovanÜ soubor neexistuje.</strong></p>' - FILE_SIZE_REPLACEMENTS = [(' ', '')] - - - def process(self, pyfile): - msurl = re.match(self.__pattern__, pyfile.url) - if msurl: - self.fileID = msurl.group('ID') - self.html = self.load(pyfile.url, decode=True) - self.getFileInfo() - - if self.premium: - self.handlePremium() - else: - self.handleFree() - else: - self.handleOverriden() - - def handleFree(self): - self.download("http://www.multishare.cz/html/download_free.php?ID=%s" % self.fileID) - - def handlePremium(self): - if not self.checkCredit(): - self.logWarning("Not enough credit left to download file") - self.resetAccount() - - self.download("http://www.multishare.cz/html/download_premium.php?ID=%s" % self.fileID) - - def handleOverriden(self): - if not self.premium: - self.fail("Only premium users can download from other hosters") - - self.html = self.load('http://www.multishare.cz/html/mms_ajax.php', post={"link": self.pyfile.url}, decode=True) - self.getFileInfo() - - if not self.checkCredit(): - self.fail("Not enough credit left to download file") - - url = "http://dl%d.mms.multishare.cz/html/mms_process.php" % round(random() * 10000 * random()) - params = {"u_ID": self.acc_info['u_ID'], "u_hash": self.acc_info['u_hash'], "link": self.pyfile.url} - self.logDebug(url, params) - self.download(url, get=params) - - def checkCredit(self): - self.acc_info = self.account.getAccountInfo(self.user, True) - self.logInfo("User %s has %i MB left" % (self.user, self.acc_info['trafficleft'] / 1024)) - - return self.pyfile.size / 1024 <= self.acc_info['trafficleft'] - - -getInfo = create_getInfo(MultishareCz) diff --git a/module/plugins/hoster/MyvideoDe.py b/module/plugins/hoster/MyvideoDe.py deleted file mode 100644 index 630c97ec0..000000000 --- a/module/plugins/hoster/MyvideoDe.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.Hoster import Hoster -from module.unescape import unescape - - -class MyvideoDe(Hoster): - __name__ = "MyvideoDe" - __type__ = "hoster" - __version__ = "0.9" - - __pattern__ = r'http://(?:www\.)?myvideo.de/watch/' - - __description__ = """Myvideo.de hoster plugin""" - __author_name__ = "spoob" - __author_mail__ = "spoob@pyload.org" - - - def process(self, pyfile): - self.pyfile = pyfile - self.download_html() - pyfile.name = self.get_file_name() - self.download(self.get_file_url()) - - def download_html(self): - self.html = self.load(self.pyfile.url) - - def get_file_url(self): - videoId = re.search(r"addVariable\('_videoid','(.*)'\);p.addParam\('quality'", self.html).group(1) - videoServer = re.search("rel='image_src' href='(.*)thumbs/.*' />", self.html).group(1) - file_url = videoServer + videoId + ".flv" - return file_url - - def get_file_name(self): - file_name_pattern = r"<h1 class='globalHd'>(.*)</h1>" - return unescape(re.search(file_name_pattern, self.html).group(1).replace("/", "") + '.flv') - - def file_exists(self): - self.download_html() - self.load(str(self.pyfile.url), cookies=False, just_header=True) - if self.req.lastEffectiveURL == "http://www.myvideo.de/": - return False - return True diff --git a/module/plugins/hoster/NarodRu.py b/module/plugins/hoster/NarodRu.py deleted file mode 100644 index 18bed0231..000000000 --- a/module/plugins/hoster/NarodRu.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from random import random - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class NarodRu(SimpleHoster): - __name__ = "NarodRu" - __type__ = "hoster" - __version__ = "0.1" - - __pattern__ = r'http://(?:www\.)?narod(\.yandex)?\.ru/(disk|start/[0-9]+\.\w+-narod\.yandex\.ru)/(?P<ID>\d+)/.+' - - __description__ = """Narod.ru hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_NAME_PATTERN = r'<dt class="name">(?:<[^<]*>)*(?P<N>[^<]+)</dt>' - FILE_SIZE_PATTERN = r'<dd class="size">(?P<S>\d[^<]*)</dd>' - OFFLINE_PATTERN = r'<title>404</title>|Ѐайл ÑЎалеМ Ñ ÑеÑвОÑа|ÐакПМÑОлÑÑ ÑÑПк Ñ
ÑÐ°ÐœÐµÐœÐžÑ Ñайла\.' - - FILE_SIZE_REPLACEMENTS = [(u'ÐÐ', 'KB'), (u'ÐÐ', 'MB'), (u'ÐÐ', 'GB')] - FILE_URL_REPLACEMENTS = [("narod.yandex.ru/", "narod.ru/"), - (r"/start/[0-9]+\.\w+-narod\.yandex\.ru/([0-9]{6,15})/\w+/(\w+)", r"/disk/\1/\2")] - - CAPTCHA_PATTERN = r'<number url="(.*?)">(\w+)</number>' - LINK_PATTERN = r'<a class="h-link" rel="yandex_bar" href="(.+?)">' - - - def handleFree(self): - for _ in xrange(5): - self.html = self.load('http://narod.ru/disk/getcapchaxml/?rnd=%d' % int(random() * 777)) - m = re.search(self.CAPTCHA_PATTERN, self.html) - if m is None: - self.parseError('Captcha') - post_data = {"action": "sendcapcha"} - captcha_url, post_data['key'] = m.groups() - post_data['rep'] = self.decryptCaptcha(captcha_url) - - self.html = self.load(self.pyfile.url, post=post_data, decode=True) - m = re.search(self.LINK_PATTERN, self.html) - if m: - url = 'http://narod.ru' + m.group(1) - self.correctCaptcha() - break - elif u'<b class="error-msg"><strong>ÐÑОблОÑÑ?</strong>' in self.html: - self.invalidCaptcha() - else: - self.parseError('Download link') - else: - self.fail("No valid captcha code entered") - - self.logDebug('Download link: ' + url) - self.download(url) - - -getInfo = create_getInfo(NarodRu) diff --git a/module/plugins/hoster/NetloadIn.py b/module/plugins/hoster/NetloadIn.py deleted file mode 100644 index a45aafa63..000000000 --- a/module/plugins/hoster/NetloadIn.py +++ /dev/null @@ -1,258 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from time import sleep, time - -from module.network.RequestFactory import getURL -from module.plugins.Hoster import Hoster -from module.plugins.Plugin import chunks - - -def getInfo(urls): - ## returns list of tupels (name, size (in bytes), status (see FileDatabase), url) - - apiurl = "http://api.netload.in/info.php?auth=Zf9SnQh9WiReEsb18akjvQGqT0I830e8&bz=1&md5=1&file_id=" - id_regex = re.compile(NetloadIn.__pattern__) - urls_per_query = 80 - - for chunk in chunks(urls, urls_per_query): - ids = "" - for url in chunk: - match = id_regex.search(url) - if match: - ids = ids + match.group(1) + ";" - - api = getURL(apiurl + ids, decode=True) - - if api is None or len(api) < 10: - print "Netload prefetch: failed " - return - if api.find("unknown_auth") >= 0: - print "Netload prefetch: Outdated auth code " - return - - result = [] - - for i, r in enumerate(api.splitlines()): - try: - tmp = r.split(";") - try: - size = int(tmp[2]) - except: - size = 0 - result.append((tmp[1], size, 2 if tmp[3] == "online" else 1, chunk[i])) - except: - print "Netload prefetch: Error while processing response: " - print r - - yield result - - -class NetloadIn(Hoster): - __name__ = "NetloadIn" - __type__ = "hoster" - __version__ = "0.45" - - __pattern__ = r'https?://(?:[^/]*\.)?netload\.in/(?:datei(.*?)(?:\.htm|/)|index.php?id=10&file_id=)' - - __description__ = """Netload.in hoster plugin""" - __author_name__ = ("spoob", "RaNaN", "Gregy") - __author_mail__ = ("spoob@pyload.org", "ranan@pyload.org", "gregy@gregy.cz") - - - def setup(self): - self.multiDL = self.resumeDownload = self.premium - - def process(self, pyfile): - self.url = pyfile.url - self.prepare() - pyfile.setStatus("downloading") - self.proceed(self.url) - - def prepare(self): - self.download_api_data() - - if self.api_data and self.api_data['filename']: - self.pyfile.name = self.api_data['filename'] - - if self.premium: - self.logDebug("Netload: Use Premium Account") - settings = self.load("http://www.netload.in/index.php?id=2&lang=en") - if '<option value="2" selected="selected">Direkter Download' in settings: - self.logDebug("Using direct download") - return True - else: - self.logDebug("Direct downloads not enabled. Parsing html for a download URL") - - if self.download_html(): - return True - else: - self.fail("Failed") - return False - - def download_api_data(self, n=0): - url = self.url - id_regex = re.compile(self.__pattern__) - match = id_regex.search(url) - - if match: - #normalize url - self.url = 'http://www.netload.in/datei%s.htm' % match.group(1) - self.logDebug("URL: %s" % self.url) - else: - self.api_data = False - return - - apiurl = "http://api.netload.in/info.php" - src = self.load(apiurl, cookies=False, - get={"file_id": match.group(1), "auth": "Zf9SnQh9WiReEsb18akjvQGqT0I830e8", "bz": "1", - "md5": "1"}, decode=True).strip() - if not src and n <= 3: - sleep(0.2) - self.download_api_data(n + 1) - return - - self.logDebug("Netload: APIDATA: " + src) - self.api_data = {} - if src and ";" in src and src not in ("unknown file_data", "unknown_server_data", "No input file specified."): - lines = src.split(";") - self.api_data['exists'] = True - self.api_data['fileid'] = lines[0] - self.api_data['filename'] = lines[1] - self.api_data['size'] = lines[2] - self.api_data['status'] = lines[3] - if self.api_data['status'] == "online": - self.api_data['checksum'] = lines[4].strip() - else: - self.api_data = False # check manually since api data is useless sometimes - - if lines[0] == lines[1] and lines[2] == "0": # useless api data - self.api_data = False - else: - self.api_data = False - - def final_wait(self, page): - wait_time = self.get_wait_time(page) - self.setWait(wait_time) - self.logDebug("Netload: final wait %d seconds" % wait_time) - self.wait() - self.url = self.get_file_url(page) - - def download_html(self): - self.logDebug("Netload: Entering download_html") - page = self.load(self.url, decode=True) - t = time() + 30 - - if "/share/templates/download_hddcrash.tpl" in page: - self.logError("Netload HDD Crash") - self.fail(_("File temporarily not available")) - - if not self.api_data: - self.logDebug("API Data may be useless, get details from html page") - - if "* The file was deleted" in page: - self.offline() - - name = re.search(r'class="dl_first_filename">([^<]+)', page, re.MULTILINE) - # the found filename is not truncated - if name: - name = name.group(1).strip() - if not name.endswith(".."): - self.pyfile.name = name - - captchawaited = False - for i in xrange(10): - - if not page: - page = self.load(self.url) - t = time() + 30 - - if "/share/templates/download_hddcrash.tpl" in page: - self.logError("Netload HDD Crash") - self.fail(_("File temporarily not available")) - - self.logDebug("Netload: try number %d " % i) - - if ">Your download is being prepared.<" in page: - self.logDebug("Netload: We will prepare your download") - self.final_wait(page) - return True - if ">An access request has been made from IP address <" in page: - wait = self.get_wait_time(page) - if not wait: - self.logDebug("Netload: Wait was 0 setting 30") - wait = 30 * 60 - self.logInfo(_("Netload: waiting between downloads %d s." % wait)) - self.wantReconnect = True - self.setWait(wait) - self.wait() - - return self.download_html() - - self.logDebug("Netload: Trying to find captcha") - - try: - url_captcha_html = "http://netload.in/" + re.search('(index.php\?id=10&.*&captcha=1)', - page).group(1).replace("amp;", "") - except: - page = None - continue - - try: - page = self.load(url_captcha_html, cookies=True) - captcha_url = "http://netload.in/" + re.search('(share/includes/captcha.php\?t=\d*)', page).group(1) - except: - self.logDebug("Netload: Could not find captcha, try again from beginning") - captchawaited = False - continue - - file_id = re.search('<input name="file_id" type="hidden" value="(.*)" />', page).group(1) - if not captchawaited: - wait = self.get_wait_time(page) - if i == 0: - self.pyfile.waitUntil = time() # dont wait contrary to time on website - else: - self.pyfile.waitUntil = t - self.logInfo(_("Netload: waiting for captcha %d s.") % (self.pyfile.waitUntil - time())) - #self.setWait(wait) - self.wait() - captchawaited = True - - captcha = self.decryptCaptcha(captcha_url) - page = self.load("http://netload.in/index.php?id=10", post={"file_id": file_id, "captcha_check": captcha}, - cookies=True) - - return False - - def get_file_url(self, page): - try: - file_url_pattern = r"<a class=\"Orange_Link\" href=\"(http://.+)\".?>Or click here" - attempt = re.search(file_url_pattern, page) - if attempt is not None: - return attempt.group(1) - else: - self.logDebug("Netload: Backup try for final link") - file_url_pattern = r"<a href=\"(.+)\" class=\"Orange_Link\">Click here" - attempt = re.search(file_url_pattern, page) - return "http://netload.in/" + attempt.group(1) - except: - self.logDebug("Netload: Getting final link failed") - return None - - def get_wait_time(self, page): - wait_seconds = int(re.search(r"countdown\((.+),'change\(\)'\)", page).group(1)) / 100 - return wait_seconds - - def proceed(self, url): - self.logDebug("Netload: Downloading..") - - self.download(url, disposition=True) - - check = self.checkDownload({"empty": re.compile(r"^$"), "offline": re.compile("The file was deleted")}) - - if check == "empty": - self.logInfo(_("Downloaded File was empty")) - self.retry() - elif check == "offline": - self.offline() diff --git a/module/plugins/hoster/NosuploadCom.py b/module/plugins/hoster/NosuploadCom.py deleted file mode 100644 index 3187dd89f..000000000 --- a/module/plugins/hoster/NosuploadCom.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class NosuploadCom(XFileSharingPro): - __name__ = "NosuploadCom" - __type__ = "hoster" - __version__ = "0.1" - - __pattern__ = r'http://(?:www\.)?nosupload\.com/\?d=\w{12}' - - __description__ = """Nosupload.com hoster plugin""" - __author_name__ = "igel" - __author_mail__ = "igelkun@myopera.com" - - HOSTER_NAME = "nosupload.com" - - FILE_SIZE_PATTERN = r'<p><strong>Size:</strong> (?P<S>[0-9\.]+) (?P<U>[kKMG]?B)</p>' - LINK_PATTERN = r'<a class="select" href="(http://.+?)">Download</a>' - WAIT_PATTERN = r'Please wait.*?>(\d+)</span>' - - - def getDownloadLink(self): - # stage1: press the "Free Download" button - data = self.getPostParameters() - self.html = self.load(self.pyfile.url, post=data, ref=True, decode=True) - - # stage2: wait some time and press the "Download File" button - data = self.getPostParameters() - wait_time = re.search(self.WAIT_PATTERN, self.html, re.MULTILINE | re.DOTALL).group(1) - self.logDebug("hoster told us to wait %s seconds" % wait_time) - self.wait(wait_time) - self.html = self.load(self.pyfile.url, post=data, ref=True, decode=True) - - # stage3: get the download link - return re.search(self.LINK_PATTERN, self.html, re.S).group(1) - - -getInfo = create_getInfo(NosuploadCom) diff --git a/module/plugins/hoster/NovafileCom.py b/module/plugins/hoster/NovafileCom.py deleted file mode 100644 index 4a89064ea..000000000 --- a/module/plugins/hoster/NovafileCom.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://novafile.com/vfun4z6o2cit -# http://novafile.com/s6zrr5wemuz4 - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class NovafileCom(XFileSharingPro): - __name__ = "NovafileCom" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?novafile\.com/\w{12}' - - __description__ = """Novafile.com hoster plugin""" - __author_name__ = ("zoidberg", "stickell") - __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") - - HOSTER_NAME = "novafile.com" - - FILE_SIZE_PATTERN = r'<div class="size">(?P<S>.+?)</div>' - ERROR_PATTERN = r'class="alert[^"]*alert-separate"[^>]*>\s*(?:<p>)?(.*?)\s*</' - LINK_PATTERN = r'<a href="(http://s\d+\.novafile\.com/.*?)" class="btn btn-green">Download File</a>' - WAIT_PATTERN = r'<p>Please wait <span id="count"[^>]*>(\d+)</span> seconds</p>' - - - def setup(self): - self.multiDL = False - - -getInfo = create_getInfo(NovafileCom) diff --git a/module/plugins/hoster/NowDownloadEu.py b/module/plugins/hoster/NowDownloadEu.py deleted file mode 100644 index 193698f17..000000000 --- a/module/plugins/hoster/NowDownloadEu.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo -from module.utils import fixup - - -class NowDownloadEu(SimpleHoster): - __name__ = "NowDownloadEu" - __type__ = "hoster" - __version__ = "0.05" - - __pattern__ = r'http://(?:www\.)?nowdownload\.(ch|co|eu|sx)/(dl/|download\.php\?id=)(?P<ID>\w+)' - - __description__ = """NowDownload.ch hoster plugin""" - __author_name__ = ("godofdream", "Walter Purcaro") - __author_mail__ = ("soilfiction@gmail.com", "vuolter@gmail.com") - - FILE_INFO_PATTERN = r'Downloading</span> <br> (?P<N>.*) (?P<S>[0-9,.]+) (?P<U>[kKMG])i?B </h4>' - OFFLINE_PATTERN = r'(This file does not exist!)' - - TOKEN_PATTERN = r'"(/api/token\.php\?token=[a-z0-9]+)"' - CONTINUE_PATTERN = r'"(/dl2/[a-z0-9]+/[a-z0-9]+)"' - WAIT_PATTERN = r'\.countdown\(\{until: \+(\d+),' - LINK_PATTERN = r'"(http://f\d+\.nowdownload\.ch/dl/[a-z0-9]+/[a-z0-9]+/[^<>"]*?)"' - - FILE_NAME_REPLACEMENTS = [("&#?\w+;", fixup), (r'<[^>]*>', '')] - - - def setup(self): - self.multiDL = self.resumeDownload = True - self.chunkLimit = -1 - - def handleFree(self): - tokenlink = re.search(self.TOKEN_PATTERN, self.html) - continuelink = re.search(self.CONTINUE_PATTERN, self.html) - if tokenlink is None or continuelink is None: - self.fail('Plugin out of Date') - - m = re.search(self.WAIT_PATTERN, self.html) - if m: - wait = int(m.group(1)) - else: - wait = 60 - - baseurl = "http://www.nowdownload.ch" - self.html = self.load(baseurl + str(tokenlink.group(1))) - self.wait(wait) - - self.html = self.load(baseurl + str(continuelink.group(1))) - - url = re.search(self.LINK_PATTERN, self.html) - if url is None: - self.fail('Download Link not Found (Plugin out of Date?)') - self.logDebug('Download link: ' + str(url.group(1))) - self.download(str(url.group(1))) - - -getInfo = create_getInfo(NowDownloadEu) diff --git a/module/plugins/hoster/OboomCom.py b/module/plugins/hoster/OboomCom.py deleted file mode 100644 index f30c64184..000000000 --- a/module/plugins/hoster/OboomCom.py +++ /dev/null @@ -1,132 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# https://www.oboom.com/B7CYZIEB/10Mio.dat - -import re - -from module.common.json_layer import json_loads -from module.plugins.Hoster import Hoster -from module.plugins.internal.CaptchaService import ReCaptcha - - -class OboomCom(Hoster): - __name__ = "OboomCom" - __type__ = "hoster" - __version__ = "0.1" - - __pattern__ = r'https?://(?:www\.)?oboom\.com/(#(id=|/)?)?(?P<ID>[A-Z0-9]{8})' - - __description__ = """oboom.com hoster plugin""" - __author_name__ = "stanley" - __author_mail__ = "stanley.foerster@gmail.com" - - RECAPTCHA_KEY = "6LdqpO0SAAAAAJGHXo63HyalP7H4qlRs_vff0kJX" - - - def loadUrl(self, url, get=None): - if get is None: - get = dict() - return json_loads(self.load(url, get, decode=True)) - - def getFileId(self, url): - self.fileId = re.match(OboomCom.__pattern__, url).group('ID') - - def getSessionToken(self): - if self.premium: - accountInfo = self.account.getAccountInfo(self.user, True) - if "session" in accountInfo: - self.sessionToken = accountInfo['session'] - else: - self.fail("Could not retrieve premium session") - else: - apiUrl = "https://www.oboom.com/1.0/guestsession" - result = self.loadUrl(apiUrl) - if result[0] == 200: - self.sessionToken = result[1] - else: - self.fail("Could not retrieve token for guest session. Error code %s" % result[0]) - - def solveCaptcha(self): - recaptcha = ReCaptcha(self) - for _ in xrange(5): - challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY) - apiUrl = "https://www.oboom.com/1.0/download/ticket" - params = {"recaptcha_challenge_field": challenge, - "recaptcha_response_field": response, - "download_id": self.fileId, - "token": self.sessionToken} - result = self.loadUrl(apiUrl, params) - - if result[0] == 200: - self.downloadToken = result[1] - self.downloadAuth = result[2] - self.correctCaptcha() - self.setWait(30) - self.wait() - break - elif result[0] == 400: - if result[1] == "incorrect-captcha-sol": - self.invalidCaptcha() - elif result[1] == "captcha-timeout": - self.invalidCaptcha() - elif result[1] == "forbidden": - self.retry(5, 15 * 60, "Service unavailable") - elif result[0] == 403: - if result[1] == -1: # another download is running - self.setWait(15 * 60) - else: - self.setWait(result[1], reconnect=True) - self.wait() - self.retry(5) - else: - self.invalidCaptcha() - self.fail("Received invalid captcha 5 times") - - def getFileInfo(self, token, fileId): - apiUrl = "https://api.oboom.com/1.0/info" - params = {"token": token, "items": fileId, "http_errors": 0} - - result = self.loadUrl(apiUrl, params) - if result[0] == 200: - item = result[1][0] - if item['state'] == "online": - self.fileSize = item['size'] - self.fileName = item['name'] - else: - self.offline() - else: - self.fail("Could not retrieve file info. Error code %s: %s" % (result[0], result[1])) - - def getDownloadTicket(self): - apiUrl = "https://api.oboom.com/1.0/dl" - params = {"item": self.fileId, "http_errors": 0} - if self.premium: - params['token'] = self.sessionToken - else: - params['token'] = self.downloadToken - params['auth'] = self.downloadAuth - - result = self.loadUrl(apiUrl, params) - if result[0] == 200: - self.downloadDomain = result[1] - self.downloadTicket = result[2] - else: - self.fail("Could not retrieve download ticket. Error code %s" % result[0]) - - def setup(self): - self.chunkLimit = 1 - self.multiDL = self.premium - - def process(self, pyfile): - self.pyfile.url.replace(".com/#id=", ".com/#") - self.pyfile.url.replace(".com/#/", ".com/#") - self.getFileId(self.pyfile.url) - self.getSessionToken() - self.getFileInfo(self.sessionToken, self.fileId) - self.pyfile.name = self.fileName - self.pyfile.size = self.fileSize - if not self.premium: - self.solveCaptcha() - self.getDownloadTicket() - self.download("https://%s/1.0/dlh" % self.downloadDomain, get={"ticket": self.downloadTicket, "http_errors": 0}) diff --git a/module/plugins/hoster/OneFichierCom.py b/module/plugins/hoster/OneFichierCom.py deleted file mode 100644 index 0536f7185..000000000 --- a/module/plugins/hoster/OneFichierCom.py +++ /dev/null @@ -1,90 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://5pnm24ltcw.1fichier.com/ - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class OneFichierCom(SimpleHoster): - __name__ = "OneFichierCom" - __type__ = "hoster" - __version__ = "0.61" - - __pattern__ = r'(http://(?P<id>\w+)\.(?P<host>(1fichier|d(es)?fichiers|pjointe)\.(com|fr|net|org)|(cjoint|mesfichiers|piecejointe|oi)\.(org|net)|tenvoi\.(com|org|net)|dl4free\.com|alterupload\.com|megadl.fr))/?' - - __description__ = """1fichier.com hoster plugin""" - __author_name__ = ("fragonib", "the-razer", "zoidberg", "imclem", "stickell", "Elrick69") - __author_mail__ = ("fragonib[AT]yahoo[DOT]es", "daniel_ AT gmx DOT net", "zoidberg@mujmail.cz", - "imclem on github", "l.stickell@yahoo.it", "elrick69[AT]rocketmail[DOT]com") - - FILE_NAME_PATTERN = r'">Filename :</th>\s*<td>(?P<N>[^<]+)</td>' - FILE_SIZE_PATTERN = r'<th>Size :</th>\s*<td>(?P<S>[^<]+)</td>' - OFFLINE_PATTERN = r'The (requested)? file (could not be found|has been deleted)' - - FILE_URL_REPLACEMENTS = [(__pattern__, r'http://\g<id>.\g<host>/en/')] - - WAITING_PATTERN = r'Warning ! Without premium status, you must wait between each downloads' - NOT_PARALLEL = r'Warning ! Without premium status, you can download only one file at a time' - WAIT_TIME = 10 * 60 # Retry time between each free download - RETRY_TIME = 15 * 60 # Default retry time in seconds (if detected parallel download) - - - def setup(self): - self.multiDL = self.premium - self.resumeDownload = True - - def handleFree(self): - self.html = self.load(self.pyfile.url, decode=True) - - if self.WAITING_PATTERN in self.html: - self.logInfo('You have to wait been each free download! Retrying in %d seconds.' % self.WAIT_TIME) - self.waitAndRetry(self.WAIT_TIME) - else: # detect parallel download - m = re.search(self.NOT_PARALLEL, self.html) - if m: - self.waitAndRetry(self.RETRY_TIME) - - url, inputs = self.parseHtmlForm('action="http://%s' % self.file_info['id']) - if not url: - self.parseError("Download link not found") - - # Check for protection - if "pass" in inputs: - inputs['pass'] = self.getPassword() - inputs['submit'] = "Download" - - self.download(url, post=inputs) - - # Check download - self.checkDownloadedFile() - - def handlePremium(self): - url, inputs = self.parseHtmlForm('action="http://%s' % self.file_info['id']) - if not url: - self.parseError("Download link not found") - - # Check for protection - if "pass" in inputs: - inputs['pass'] = self.getPassword() - inputs['submit'] = "Download" - - self.download(url, post=inputs) - - # Check download - self.checkDownloadedFile() - - def checkDownloadedFile(self): - check = self.checkDownload({"wait": self.WAITING_PATTERN}) - if check == "wait": - self.waitAndRetry(int(self.lastcheck.group(1)) * 60) - - def waitAndRetry(self, wait_time): - self.wait(wait_time, True) - self.retry() - - - -getInfo = create_getInfo(OneFichierCom) diff --git a/module/plugins/hoster/OverLoadMe.py b/module/plugins/hoster/OverLoadMe.py deleted file mode 100644 index 7b7c83893..000000000 --- a/module/plugins/hoster/OverLoadMe.py +++ /dev/null @@ -1,82 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from random import randrange -from urllib import unquote - -from module.common.json_layer import json_loads -from module.plugins.Hoster import Hoster -from module.utils import parseFileSize - - -class OverLoadMe(Hoster): - __name__ = "OverLoadMe" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'https?://.*overload\.me.*' - - __description__ = """Over-Load.me hoster plugin""" - __author_name__ = "marley" - __author_mail__ = "marley@over-load.me" - - - def getFilename(self, url): - try: - name = unquote(url.rsplit("/", 1)[1]) - except IndexError: - name = "Unknown_Filename..." - if name.endswith("..."): # incomplete filename, append random stuff - name += "%s.tmp" % randrange(100, 999) - return name - - def setup(self): - self.chunkLimit = 5 - self.resumeDownload = True - - def process(self, pyfile): - if re.match(self.__pattern__, pyfile.url): - new_url = pyfile.url - elif not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "Over-Load") - self.fail("No Over-Load account provided") - else: - self.logDebug("Old URL: %s" % pyfile.url) - data = self.account.getAccountData(self.user) - - page = self.load("https://api.over-load.me/getdownload.php", - get={"auth": data['password'], "link": pyfile.url}) - data = json_loads(page) - - self.logDebug("Returned Data: %s" % data) - - if data['err'] == 1: - self.logWarning(data['msg']) - self.tempOffline() - else: - if pyfile.name is not None and pyfile.name.endswith('.tmp') and data['filename']: - pyfile.name = data['filename'] - pyfile.size = parseFileSize(data['filesize']) - new_url = data['downloadlink'] - - if self.getConfig("https"): - new_url = new_url.replace("http://", "https://") - else: - new_url = new_url.replace("https://", "http://") - - if new_url != pyfile.url: - self.logDebug("New URL: %s" % new_url) - - if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown") or pyfile.name.endswith('..'): - # only use when name wasn't already set - pyfile.name = self.getFilename(new_url) - - self.download(new_url, disposition=True) - - check = self.checkDownload( - {"error": "<title>An error occured while processing your request</title>"}) - - if check == "error": - # usual this download can safely be retried - self.retry(reason="An error occured while generating link.", wait_time=60) diff --git a/module/plugins/hoster/PandaPlanet.py b/module/plugins/hoster/PandaPlanet.py deleted file mode 100644 index 6f852ac9a..000000000 --- a/module/plugins/hoster/PandaPlanet.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# test.bin - 214 B - http://pandapla.net/pew1cz3ot586 -# BigBuckBunny_320x180.mp4 - 61.7 Mb - http://pandapla.net/tz0rgjfyyoh7 - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class PandaPlanet(XFileSharingPro): - __name__ = "PandaPlanet" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'https?://(?:www\.)?pandapla\.net/\w{12}' - - __description__ = """Pandapla.net hoster plugin""" - __author_name__ = "t4skforce" - __author_mail__ = "t4skforce1337[AT]gmail[DOT]com" - - HOSTER_NAME = "pandapla.net" - - FILE_SIZE_PATTERN = r'File Size:</b>\s*</td>\s*<td[^>]*>(?P<S>[^<]+)</td>\s*</tr>' - FILE_NAME_PATTERN = r'File Name:</b>\s*</td>\s*<td[^>]*>(?P<N>[^<]+)</td>\s*</tr>' - LINK_PATTERN = r'(http://([^/]*?%s|\d+\.\d+\.\d+\.\d+)(:\d+)?(/d/|(?:/files)?/\d+/\w+/)[^"\'<]+\/(?!video\.mp4)[^"\'<]+)' % HOSTER_NAME - - -getInfo = create_getInfo(PandaPlanet) diff --git a/module/plugins/hoster/PornhostCom.py b/module/plugins/hoster/PornhostCom.py deleted file mode 100644 index f0621c420..000000000 --- a/module/plugins/hoster/PornhostCom.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.Hoster import Hoster - - -class PornhostCom(Hoster): - __name__ = "PornhostCom" - __type__ = "hoster" - __version__ = "0.2" - - __pattern__ = r'http://(?:www\.)?pornhost\.com/([0-9]+/[0-9]+\.html|[0-9]+)' - - __description__ = """Pornhost.com hoster plugin""" - __author_name__ = "jeix" - __author_mail__ = "jeix@hasnomail.de" - - - def process(self, pyfile): - self.download_html() - if not self.file_exists(): - self.offline() - - pyfile.name = self.get_file_name() - self.download(self.get_file_url()) - - # Old interface - def download_html(self): - url = self.pyfile.url - self.html = self.load(url) - - def get_file_url(self): - """ returns the absolute downloadable filepath - """ - if not self.html: - self.download_html() - - url = re.search(r'download this file</label>.*?<a href="(.*?)"', self.html) - if url is None: - url = re.search(r'"(http://dl[0-9]+\.pornhost\.com/files/.*?/.*?/.*?/.*?/.*?/.*?\..*?)"', self.html) - if url is None: - url = re.search(r'width: 894px; height: 675px">.*?<img src="(.*?)"', self.html) - if url is None: - url = re.search(r'"http://file[0-9]+\.pornhost\.com/[0-9]+/.*?"', - self.html) # TODO: fix this one since it doesn't match - - return url.group(1).strip() - - def get_file_name(self): - if not self.html: - self.download_html() - - name = re.search(r'<title>pornhost\.com - free file hosting with a twist - gallery(.*?)</title>', self.html) - if name is None: - name = re.search(r'id="url" value="http://www\.pornhost\.com/(.*?)/"', self.html) - if name is None: - name = re.search(r'<title>pornhost\.com - free file hosting with a twist -(.*?)</title>', self.html) - if name is None: - name = re.search(r'"http://file[0-9]+\.pornhost\.com/.*?/(.*?)"', self.html) - - name = name.group(1).strip() + ".flv" - - return name - - def file_exists(self): - """ returns True or False - """ - if not self.html: - self.download_html() - - if (re.search(r'gallery not found', self.html) is not None or - re.search(r'You will be redirected to', self.html) is not None): - return False - else: - return True diff --git a/module/plugins/hoster/PornhubCom.py b/module/plugins/hoster/PornhubCom.py deleted file mode 100644 index cecdc4339..000000000 --- a/module/plugins/hoster/PornhubCom.py +++ /dev/null @@ -1,85 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.Hoster import Hoster - - -class PornhubCom(Hoster): - __name__ = "PornhubCom" - __type__ = "hoster" - __version__ = "0.5" - - __pattern__ = r'http://(?:www\.)?pornhub\.com/view_video\.php\?viewkey=[\w\d]+' - - __description__ = """Pornhub.com hoster plugin""" - __author_name__ = "jeix" - __author_mail__ = "jeix@hasnomail.de" - - - def process(self, pyfile): - self.download_html() - if not self.file_exists(): - self.offline() - - pyfile.name = self.get_file_name() - self.download(self.get_file_url()) - - def download_html(self): - url = self.pyfile.url - self.html = self.load(url) - - def get_file_url(self): - """ returns the absolute downloadable filepath - """ - if not self.html: - self.download_html() - - url = "http://www.pornhub.com//gateway.php" - video_id = self.pyfile.url.split('=')[-1] - # thanks to jD team for this one v - post_data = "\x00\x03\x00\x00\x00\x01\x00\x0c\x70\x6c\x61\x79\x65\x72\x43\x6f\x6e\x66\x69\x67\x00\x02\x2f\x31\x00\x00\x00\x44\x0a\x00\x00\x00\x03\x02\x00" - post_data += chr(len(video_id)) - post_data += video_id - post_data += "\x02\x00\x02\x2d\x31\x02\x00\x20" - post_data += "add299463d4410c6d1b1c418868225f7" - - content = self.req.load(url, post=str(post_data)) - - new_content = "" - for x in content: - if ord(x) < 32 or ord(x) > 176: - new_content += '#' - else: - new_content += x - - content = new_content - - return re.search(r'flv_url.*(http.*?)##post_roll', content).group(1) - - def get_file_name(self): - if not self.html: - self.download_html() - - m = re.search(r'<title[^>]+>([^<]+) - ', self.html) - if m: - name = m.group(1) - else: - matches = re.findall('<h1>(.*?)</h1>', self.html) - if len(matches) > 1: - name = matches[1] - else: - name = matches[0] - - return name + '.flv' - - def file_exists(self): - """ returns True or False - """ - if not self.html: - self.download_html() - - if re.search(r'This video is no longer in our database or is in conversion', self.html) is not None: - return False - else: - return True diff --git a/module/plugins/hoster/PotloadCom.py b/module/plugins/hoster/PotloadCom.py deleted file mode 100644 index 087b7a265..000000000 --- a/module/plugins/hoster/PotloadCom.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class PotloadCom(XFileSharingPro): - __name__ = "PotloadCom" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?potload\.com/\w{12}' - - __description__ = """Potload.com hoster plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - HOSTER_NAME = "potload.com" - - FILE_INFO_PATTERN = r'<h[1-6]>(?P<N>.+) \((?P<S>\d+) (?P<U>\w+)\)</h' - - -getInfo = create_getInfo(PotloadCom) diff --git a/module/plugins/hoster/Premium4Me.py b/module/plugins/hoster/Premium4Me.py deleted file mode 100644 index ea841338a..000000000 --- a/module/plugins/hoster/Premium4Me.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- - -from os import remove -from os.path import exists -from urllib import quote - -from module.plugins.Hoster import Hoster -from module.utils import fs_encode - - -class Premium4Me(Hoster): - __name__ = "Premium4Me" - __type__ = "hoster" - __version__ = "0.08" - - __pattern__ = r'http://(?:www\.)?premium.to/.*' - - __description__ = """Premium.to hoster plugin""" - __author_name__ = ("RaNaN", "zoidberg", "stickell") - __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz", "l.stickell@yahoo.it") - - - def setup(self): - self.resumeDownload = True - self.chunkLimit = 1 - - def process(self, pyfile): - if not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "premium.to") - self.fail("No premium.to account provided") - - self.logDebug("premium.to: Old URL: %s" % pyfile.url) - - tra = self.getTraffic() - - #raise timeout to 2min - self.req.setOption("timeout", 120) - - self.download( - "http://premium.to/api/getfile.php?authcode=%s&link=%s" % (self.account.authcode, quote(pyfile.url, "")), - disposition=True) - - check = self.checkDownload({"nopremium": "No premium account available"}) - - if check == "nopremium": - self.retry(60, 5 * 60, "No premium account available") - - err = '' - if self.req.http.code == '420': - # Custom error code send - fail - lastDownload = fs_encode(self.lastDownload) - - if exists(lastDownload): - f = open(lastDownload, "rb") - err = f.read(256).strip() - f.close() - remove(lastDownload) - else: - err = 'File does not exist' - - trb = self.getTraffic() - self.logInfo("Filesize: %d, Traffic used %d, traffic left %d" % (pyfile.size, tra - trb, trb)) - - if err: - self.fail(err) - - def getTraffic(self): - try: - traffic = int(self.load("http://premium.to/api/traffic.php?authcode=%s" % self.account.authcode)) - except: - traffic = 0 - return traffic diff --git a/module/plugins/hoster/PremiumizeMe.py b/module/plugins/hoster/PremiumizeMe.py deleted file mode 100644 index 7d0ca9ed2..000000000 --- a/module/plugins/hoster/PremiumizeMe.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.common.json_layer import json_loads -from module.plugins.Hoster import Hoster - - -class PremiumizeMe(Hoster): - __name__ = "PremiumizeMe" - __type__ = "hoster" - __version__ = "0.12" - - __pattern__ = None #: Since we want to allow the user to specify the list of hoster to use we let MultiHoster.coreReady - - __description__ = """Premiumize.me hoster plugin""" - __author_name__ = "Florian Franzen" - __author_mail__ = "FlorianFranzen@gmail.com" - - - def process(self, pyfile): - # Check account - if not self.account or not self.account.canUse(): - self.logError(_("Please enter your %s account or deactivate this plugin") % "premiumize.me") - self.fail("No valid premiumize.me account provided") - - # In some cases hostsers do not supply us with a filename at download, so we - # are going to set a fall back filename (e.g. for freakshare or xfileshare) - pyfile.name = pyfile.name.split('/').pop() # Remove everthing before last slash - - # Correction for automatic assigned filename: Removing html at end if needed - suffix_to_remove = ["html", "htm", "php", "php3", "asp", "shtm", "shtml", "cfml", "cfm"] - temp = pyfile.name.split('.') - if temp.pop() in suffix_to_remove: - pyfile.name = ".".join(temp) - - # Get account data - (user, data) = self.account.selectAccount() - - # Get rewritten link using the premiumize.me api v1 (see https://secure.premiumize.me/?show=api) - answer = self.load( - "https://api.premiumize.me/pm-api/v1.php?method=directdownloadlink¶ms[login]=%s¶ms[pass]=%s¶ms[link]=%s" % ( - user, data['password'], pyfile.url)) - data = json_loads(answer) - - # Check status and decide what to do - status = data['status'] - if status == 200: - self.download(data['result']['location'], disposition=True) - elif status == 400: - self.fail("Invalid link") - elif status == 404: - self.offline() - elif status >= 500: - self.tempOffline() - else: - self.fail(data['statusmessage']) diff --git a/module/plugins/hoster/PromptfileCom.py b/module/plugins/hoster/PromptfileCom.py deleted file mode 100644 index d16af7e5a..000000000 --- a/module/plugins/hoster/PromptfileCom.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class PromptfileCom(SimpleHoster): - __name__ = "PromptfileCom" - __type__ = "hoster" - __version__ = "0.1" - - __pattern__ = r'https?://(?:www\.)?promptfile\.com/' - - __description__ = """Promptfile.com hoster plugin""" - __author_name__ = "igel" - __author_mail__ = "igelkun@myopera.com" - - FILE_INFO_PATTERN = r'<span style="[^"]*" title="[^"]*">(?P<N>.*?) \((?P<S>[\d.]+) (?P<U>\w+)\)</span>' - OFFLINE_PATTERN = r'<span style="[^"]*" title="File Not Found">File Not Found</span>' - - CHASH_PATTERN = r'<input type="hidden" name="chash" value="([^"]*)" />' - LINK_PATTERN = r"clip: {\s*url: '(https?://(?:www\.)promptfile[^']*)'," - - - def handleFree(self): - # STAGE 1: get link to continue - m = re.search(self.CHASH_PATTERN, self.html) - if m is None: - self.parseError("Unable to detect chash") - chash = m.group(1) - self.logDebug("read chash %s" % chash) - # continue to stage2 - self.html = self.load(self.pyfile.url, decode=True, post={'chash': chash}) - - # STAGE 2: get the direct link - m = re.search(self.LINK_PATTERN, self.html, re.MULTILINE | re.DOTALL) - if m is None: - self.parseError("Unable to detect direct link") - direct = m.group(1) - self.logDebug("found direct link: " + direct) - self.download(direct, disposition=True) - - -getInfo = create_getInfo(PromptfileCom) diff --git a/module/plugins/hoster/QuickshareCz.py b/module/plugins/hoster/QuickshareCz.py deleted file mode 100644 index 972effffb..000000000 --- a/module/plugins/hoster/QuickshareCz.py +++ /dev/null @@ -1,92 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pycurl import FOLLOWLOCATION - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class QuickshareCz(SimpleHoster): - __name__ = "QuickshareCz" - __type__ = "hoster" - __version__ = "0.54" - - __pattern__ = r'http://(?:[^/]*\.)?quickshare.cz/stahnout-soubor/.*' - - __description__ = """Quickshare.cz hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_NAME_PATTERN = r'<th width="145px">Název:</th>\s*<td style="word-wrap:break-word;">(?P<N>[^<]+)</td>' - FILE_SIZE_PATTERN = r'<th>Velikost:</th>\s*<td>(?P<S>[0-9.]+) (?P<U>[kKMG])i?B</td>' - OFFLINE_PATTERN = r'<script type="text/javascript">location.href=\'/chyba\';</script>' - - - def process(self, pyfile): - self.html = self.load(pyfile.url, decode=True) - self.getFileInfo() - - # parse js variables - self.jsvars = dict((x, y.strip("'")) for x, y in re.findall(r"var (\w+) = ([0-9.]+|'[^']*')", self.html)) - self.logDebug(self.jsvars) - pyfile.name = self.jsvars['ID3'] - - # determine download type - free or premium - if self.premium: - if 'UU_prihlasen' in self.jsvars: - if self.jsvars['UU_prihlasen'] == '0': - self.logWarning('User not logged in') - self.relogin(self.user) - self.retry() - elif float(self.jsvars['UU_kredit']) < float(self.jsvars['kredit_odecet']): - self.logWarning('Not enough credit left') - self.premium = False - - if self.premium: - self.handlePremium() - else: - self.handleFree() - - check = self.checkDownload({"err": re.compile(r"\AChyba!")}, max_size=100) - if check == "err": - self.fail("File not m or plugin defect") - - def handleFree(self): - # get download url - download_url = '%s/download.php' % self.jsvars['server'] - data = dict((x, self.jsvars[x]) for x in self.jsvars if x in ("ID1", "ID2", "ID3", "ID4")) - self.logDebug("FREE URL1:" + download_url, data) - - self.req.http.c.setopt(FOLLOWLOCATION, 0) - self.load(download_url, post=data) - self.header = self.req.http.header - self.req.http.c.setopt(FOLLOWLOCATION, 1) - - m = re.search("Location\s*:\s*(.*)", self.header, re.I) - if m is None: - self.fail('File not found') - download_url = m.group(1) - self.logDebug("FREE URL2:" + download_url) - - # check errors - m = re.search(r'/chyba/(\d+)', download_url) - if m: - if m.group(1) == '1': - self.retry(60, 2 * 60, "This IP is already downloading") - elif m.group(1) == '2': - self.retry(60, 60, "No free slots available") - else: - self.fail('Error %d' % m.group(1)) - - # download file - self.download(download_url) - - def handlePremium(self): - download_url = '%s/download_premium.php' % self.jsvars['server'] - data = dict((x, self.jsvars[x]) for x in self.jsvars if x in ("ID1", "ID2", "ID4", "ID5")) - self.logDebug("PREMIUM URL:" + download_url, data) - self.download(download_url, get=data) - - -getInfo = create_getInfo(QuickshareCz) diff --git a/module/plugins/hoster/RPNetBiz.py b/module/plugins/hoster/RPNetBiz.py deleted file mode 100644 index 47f255074..000000000 --- a/module/plugins/hoster/RPNetBiz.py +++ /dev/null @@ -1,80 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.Hoster import Hoster -from module.common.json_layer import json_loads - - -class RPNetBiz(Hoster): - __name__ = "RPNetBiz" - __type__ = "hoster" - __version__ = "0.1" - - __description__ = """RPNet.biz hoster plugin""" - - __pattern__ = r'https?://.*rpnet\.biz' - __author_name__ = "Dman" - __author_mail__ = "dmanugm@gmail.com" - - - def setup(self): - self.chunkLimit = -1 - self.resumeDownload = True - - def process(self, pyfile): - if re.match(self.__pattern__, pyfile.url): - link_status = {'generated': pyfile.url} - elif not self.account: - # Check account - self.logError(_("Please enter your %s account or deactivate this plugin") % "rpnet") - self.fail("No rpnet account provided") - else: - (user, data) = self.account.selectAccount() - - self.logDebug("Original URL: %s" % pyfile.url) - # Get the download link - response = self.load("https://premium.rpnet.biz/client_api.php", - get={"username": user, "password": data['password'], - "action": "generate", "links": pyfile.url}) - - self.logDebug("JSON data: %s" % response) - link_status = json_loads(response)['links'][0] # get the first link... since we only queried one - - # Check if we only have an id as a HDD link - if 'id' in link_status: - self.logDebug("Need to wait at least 30 seconds before requery") - self.setWait(30) # wait for 30 seconds - self.wait() - # Lets query the server again asking for the status on the link, - # we need to keep doing this until we reach 100 - max_tries = 30 - my_try = 0 - while (my_try <= max_tries): - self.logDebug("Try: %d ; Max Tries: %d" % (my_try, max_tries)) - response = self.load("https://premium.rpnet.biz/client_api.php", - get={"username": user, "password": data['password'], - "action": "downloadInformation", "id": link_status['id']}) - self.logDebug("JSON data hdd query: %s" % response) - download_status = json_loads(response)['download'] - - if download_status['status'] == '100': - link_status['generated'] = download_status['rpnet_link'] - self.logDebug("Successfully downloaded to rpnet HDD: %s" % link_status['generated']) - break - else: - self.logDebug("At %s%% for the file download" % download_status['status']) - - self.setWait(30) - self.wait() - my_try += 1 - - if my_try > max_tries: # We went over the limit! - self.fail("Waited for about 15 minutes for download to finish but failed") - - if 'generated' in link_status: - self.download(link_status['generated'], disposition=True) - elif 'error' in link_status: - self.fail(link_status['error']) - else: - self.fail("Something went wrong, not supposed to enter here") diff --git a/module/plugins/hoster/RapidgatorNet.py b/module/plugins/hoster/RapidgatorNet.py deleted file mode 100644 index ce4d9ab36..000000000 --- a/module/plugins/hoster/RapidgatorNet.py +++ /dev/null @@ -1,191 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pycurl import HTTPHEADER - -from module.common.json_layer import json_loads -from module.network.HTTPRequest import BadHeader -from module.plugins.hoster.UnrestrictLi import secondsToMidnight -from module.plugins.internal.CaptchaService import AdsCaptcha, ReCaptcha, SolveMedia -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class RapidgatorNet(SimpleHoster): - __name__ = "RapidgatorNet" - __type__ = "hoster" - __version__ = "0.22" - - __pattern__ = r'http://(?:www\.)?(rapidgator\.net|rg\.to)/file/\w+' - - __description__ = """Rapidgator.net hoster plugin""" - __author_name__ = ("zoidberg", "chrox", "stickell", "Walter Purcaro") - __author_mail__ = ("zoidberg@mujmail.cz", "", "l.stickell@yahoo.it", "vuolter@gmail.com") - - API_URL = "http://rapidgator.net/api/file" - - FILE_NAME_PATTERN = r'<title>Download file (?P<N>.*)</title>' - FILE_SIZE_PATTERN = r'File size:\s*<strong>(?P<S>[\d\.]+) (?P<U>\w+)</strong>' - OFFLINE_PATTERN = r'>(File not found|Error 404)' - - JSVARS_PATTERN = r"\s+var\s*(startTimerUrl|getDownloadUrl|captchaUrl|fid|secs)\s*=\s*'?(.*?)'?;" - PREMIUM_ONLY_ERROR_PATTERN = r'You can download files up to|This file can be downloaded by premium only<' - DOWNLOAD_LIMIT_ERROR_PATTERN = r'You have reached your (daily|hourly) downloads limit' - WAIT_PATTERN = r'(?:Delay between downloads must be not less than|Try again in)\s*(\d+)\s*(hour|min)' - LINK_PATTERN = r"return '(http://\w+.rapidgator.net/.*)';" - - RECAPTCHA_KEY_PATTERN = r'"http://api\.recaptcha\.net/challenge\?k=(.*?)"' - ADSCAPTCHA_SRC_PATTERN = r'(http://api\.adscaptcha\.com/Get\.aspx[^"\']*)' - SOLVEMEDIA_PATTERN = r'http://api\.solvemedia\.com/papi/challenge\.script\?k=(.*?)"' - - - def setup(self): - self.resumeDownload = self.multiDL = self.premium - self.sid = None - self.chunkLimit = 1 - self.req.setOption("timeout", 120) - - def process(self, pyfile): - if self.account: - self.sid = self.account.getAccountData(self.user).get('SID', None) - - if self.sid: - self.handlePremium() - else: - self.handleFree() - - def api_response(self, cmd): - try: - json = self.load('%s/%s' % (self.API_URL, cmd), - get={'sid': self.sid, - 'url': self.pyfile.url}, decode=True) - self.logDebug('API:%s' % cmd, json, "SID: %s" % self.sid) - json = json_loads(json) - status = json['response_status'] - msg = json['response_details'] - except BadHeader, e: - self.logError('API:%s' % cmd, e, "SID: %s" % self.sid) - status = e.code - msg = e - - if status == 200: - return json['response'] - elif status == 423: - self.account.empty(self.user) - self.retry() - else: - self.account.relogin(self.user) - self.retry(wait_time=60) - - def handlePremium(self): - #self.logDebug("ACCOUNT_DATA", self.account.getAccountData(self.user)) - self.api_data = self.api_response('info') - self.api_data['md5'] = self.api_data['hash'] - self.pyfile.name = self.api_data['filename'] - self.pyfile.size = self.api_data['size'] - url = self.api_response('download')['url'] - self.download(url) - - def handleFree(self): - self.html = self.load(self.pyfile.url, decode=True) - - self.checkFree() - - jsvars = dict(re.findall(self.JSVARS_PATTERN, self.html)) - self.logDebug(jsvars) - - self.req.http.lastURL = self.pyfile.url - self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"]) - - url = "http://rapidgator.net%s?fid=%s" % ( - jsvars.get('startTimerUrl', '/download/AjaxStartTimer'), jsvars['fid']) - jsvars.update(self.getJsonResponse(url)) - - self.wait(int(jsvars.get('secs', 45)) + 1, False) - - url = "http://rapidgator.net%s?sid=%s" % ( - jsvars.get('getDownloadUrl', '/download/AjaxGetDownload'), jsvars['sid']) - jsvars.update(self.getJsonResponse(url)) - - self.req.http.lastURL = self.pyfile.url - self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With:"]) - - url = "http://rapidgator.net%s" % jsvars.get('captchaUrl', '/download/captcha') - self.html = self.load(url) - - for _ in xrange(5): - m = re.search(self.LINK_PATTERN, self.html) - if m: - link = m.group(1) - self.logDebug(link) - self.download(link, disposition=True) - break - else: - captcha, captcha_key = self.getCaptcha() - captcha_challenge, captcha_response = captcha.challenge(captcha_key) - - self.html = self.load(url, post={ - "DownloadCaptchaForm[captcha]": "", - "adcopy_challenge": captcha_challenge, - "adcopy_response": captcha_response - }) - - if "The verification code is incorrect" in self.html: - self.invalidCaptcha() - else: - self.correctCaptcha() - else: - self.parseError("Download link") - - def getCaptcha(self): - m = re.search(self.ADSCAPTCHA_SRC_PATTERN, self.html) - if m: - captcha_key = m.group(1) - captcha = AdsCaptcha(self) - else: - m = re.search(self.RECAPTCHA_KEY_PATTERN, self.html) - if m: - captcha_key = m.group(1) - captcha = ReCaptcha(self) - else: - m = re.search(self.SOLVEMEDIA_PATTERN, self.html) - if m: - captcha_key = m.group(1) - captcha = SolveMedia(self) - else: - self.parseError("Captcha") - - return captcha, captcha_key - - def checkFree(self): - m = re.search(self.PREMIUM_ONLY_ERROR_PATTERN, self.html) - if m: - self.fail("Premium account needed for download") - else: - m = re.search(self.WAIT_PATTERN, self.html) - - if m: - wait_time = int(m.group(1)) * {"hour": 60, "min": 1}[m.group(2)] - else: - m = re.search(self.DOWNLOAD_LIMIT_ERROR_PATTERN, self.html) - if m is None: - return - elif m.group(1) == "daily": - self.logWarning("You have reached your daily downloads limit for today") - wait_time = secondsToMidnight(gmt=2) - else: - wait_time = 1 * 60 * 60 - - self.logDebug("Waiting %d minutes" % wait_time / 60) - self.wait(wait_time, True) - self.retry() - - def getJsonResponse(self, url): - response = self.load(url, decode=True) - if not response.startswith('{'): - self.retry() - self.logDebug(url, response) - return json_loads(response) - - -getInfo = create_getInfo(RapidgatorNet) diff --git a/module/plugins/hoster/RapidshareCom.py b/module/plugins/hoster/RapidshareCom.py deleted file mode 100644 index 19d6cf772..000000000 --- a/module/plugins/hoster/RapidshareCom.py +++ /dev/null @@ -1,223 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.network.RequestFactory import getURL -from module.plugins.Hoster import Hoster - - -def getInfo(urls): - ids = "" - names = "" - - p = re.compile(RapidshareCom.__pattern__) - - for url in urls: - r = p.search(url) - if r.group("name"): - ids += "," + r.group("id") - names += "," + r.group("name") - elif r.group("name_new"): - ids += "," + r.group("id_new") - names += "," + r.group("name_new") - - url = "http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=checkfiles&files=%s&filenames=%s" % (ids[1:], names[1:]) - - api = getURL(url) - result = [] - i = 0 - for res in api.split(): - tmp = res.split(",") - if tmp[4] in ("0", "4", "5"): - status = 1 - elif tmp[4] == "1": - status = 2 - else: - status = 3 - - result.append((tmp[1], tmp[2], status, urls[i])) - i += 1 - - yield result - - -class RapidshareCom(Hoster): - __name__ = "RapidshareCom" - __type__ = "hoster" - __version__ = "1.39" - - __pattern__ = r'https?://(?:www\.)?rapidshare.com/(?:files/(?P<id>\d*?)/(?P<name>[^?]+)|#!download\|(?:\w+)\|(?P<id_new>\d+)\|(?P<name_new>[^|]+))' - __config__ = [("server", - "Cogent;Deutsche Telekom;Level(3);Level(3) #2;GlobalCrossing;Level(3) #3;Teleglobe;GlobalCrossing #2;TeliaSonera #2;Teleglobe #2;TeliaSonera #3;TeliaSonera", - "Preferred Server", "None")] - - __description__ = """Rapidshare.com hoster plugin""" - __author_name__ = ("spoob", "RaNaN", "mkaay") - __author_mail__ = ("spoob@pyload.org", "ranan@pyload.org", "mkaay@mkaay.de") - - - def setup(self): - self.no_download = True - self.api_data = None - self.offset = 0 - self.dl_dict = {} - - self.id = None - self.name = None - - self.chunkLimit = -1 if self.premium else 1 - self.multiDL = self.resumeDownload = self.premium - - def process(self, pyfile): - self.url = pyfile.url - self.prepare() - - def prepare(self): - m = re.match(self.__pattern__, self.url) - - if m.group("name"): - self.id = m.group("id") - self.name = m.group("name") - else: - self.id = m.group("id_new") - self.name = m.group("name_new") - - self.download_api_data() - if self.api_data['status'] == "1": - self.pyfile.name = self.get_file_name() - - if self.premium: - self.handlePremium() - else: - self.handleFree() - - elif self.api_data['status'] == "2": - self.logInfo(_("Rapidshare: Traffic Share (direct download)")) - self.pyfile.name = self.get_file_name() - - self.download(self.pyfile.url, get={"directstart": 1}) - - elif self.api_data['status'] in ("0", "4", "5"): - self.offline() - elif self.api_data['status'] == "3": - self.tempOffline() - else: - self.fail("Unknown response code.") - - def handleFree(self): - while self.no_download: - self.dl_dict = self.freeWait() - - #tmp = "#!download|%(server)s|%(id)s|%(name)s|%(size)s" - download = "http://%(host)s/cgi-bin/rsapi.cgi?sub=download&editparentlocation=0&bin=1&fileid=%(id)s&filename=%(name)s&dlauth=%(auth)s" % self.dl_dict - - self.logDebug("RS API Request: %s" % download) - self.download(download, ref=False) - - check = self.checkDownload({"ip": "You need RapidPro to download more files from your IP address", - "auth": "Download auth invalid"}) - if check == "ip": - self.setWait(60) - self.logInfo(_("Already downloading from this ip address, waiting 60 seconds")) - self.wait() - self.handleFree() - elif check == "auth": - self.logInfo(_("Invalid Auth Code, download will be restarted")) - self.offset += 5 - self.handleFree() - - def handlePremium(self): - info = self.account.getAccountInfo(self.user, True) - self.logDebug("%s: Use Premium Account" % self.__name__) - url = self.api_data['mirror'] - self.download(url, get={"directstart": 1}) - - def download_api_data(self, force=False): - """ - http://images.rapidshare.com/apidoc.txt - """ - if self.api_data and not force: - return - api_url_base = "http://api.rapidshare.com/cgi-bin/rsapi.cgi" - api_param_file = {"sub": "checkfiles", "incmd5": "1", "files": self.id, "filenames": self.name} - src = self.load(api_url_base, cookies=False, get=api_param_file).strip() - self.logDebug("RS INFO API: %s" % src) - if src.startswith("ERROR"): - return - fields = src.split(",") - - # status codes: - # 0=File not found - # 1=File OK (Anonymous downloading) - # 3=Server down - # 4=File marked as illegal - # 5=Anonymous file locked, because it has more than 10 downloads already - # 50+n=File OK (TrafficShare direct download type "n" without any logging.) - # 100+n=File OK (TrafficShare direct download type "n" with logging. - # Read our privacy policy to see what is logged.) - - self.api_data = {"fileid": fields[0], "filename": fields[1], "size": int(fields[2]), "serverid": fields[3], - "status": fields[4], "shorthost": fields[5], "checksum": fields[6].strip().lower()} - - if int(self.api_data['status']) > 100: - self.api_data['status'] = str(int(self.api_data['status']) - 100) - elif int(self.api_data['status']) > 50: - self.api_data['status'] = str(int(self.api_data['status']) - 50) - - self.api_data['mirror'] = "http://rs%(serverid)s%(shorthost)s.rapidshare.com/files/%(fileid)s/%(filename)s" % self.api_data - - def freeWait(self): - """downloads html with the important information - """ - self.no_download = True - - id = self.id - name = self.name - - prepare = "https://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=download&fileid=%(id)s&filename=%(name)s&try=1&cbf=RSAPIDispatcher&cbid=1" % { - "name": name, "id": id} - - self.logDebug("RS API Request: %s" % prepare) - result = self.load(prepare, ref=False) - self.logDebug("RS API Result: %s" % result) - - between_wait = re.search("You need to wait (\d+) seconds", result) - - if "You need RapidPro to download more files from your IP address" in result: - self.setWait(60) - self.logInfo(_("Already downloading from this ip address, waiting 60 seconds")) - self.wait() - elif ("Too many users downloading from this server right now" in result or - "All free download slots are full" in result): - self.setWait(120) - self.logInfo(_("RapidShareCom: No free slots")) - self.wait() - elif "This file is too big to download it for free" in result: - self.fail(_("You need a premium account for this file")) - elif "Filename invalid." in result: - self.fail(_("Filename reported invalid")) - elif between_wait: - self.setWait(int(between_wait.group(1))) - self.wantReconnect = True - self.wait() - else: - self.no_download = False - - tmp, info = result.split(":") - data = info.split(",") - - dl_dict = {"id": id, - "name": name, - "host": data[0], - "auth": data[1], - "server": self.api_data['serverid'], - "size": self.api_data['size']} - self.setWait(int(data[2]) + 2 + self.offset) - self.wait() - - return dl_dict - - def get_file_name(self): - if self.api_data['filename']: - return self.api_data['filename'] - return self.url.split("/")[-1] diff --git a/module/plugins/hoster/RarefileNet.py b/module/plugins/hoster/RarefileNet.py deleted file mode 100644 index 51df5c882..000000000 --- a/module/plugins/hoster/RarefileNet.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo -from module.utils import html_unescape - - -class RarefileNet(XFileSharingPro): - __name__ = "RarefileNet" - __type__ = "hoster" - __version__ = "0.03" - - __pattern__ = r'http://(?:www\.)?rarefile.net/\w{12}' - - __description__ = """Rarefile.net hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - HOSTER_NAME = "rarefile.net" - - FILE_NAME_PATTERN = r'<td><font color="red">(?P<N>.*?)</font></td>' - FILE_SIZE_PATTERN = r'<td>Size : (?P<S>.+?) ' - LINK_PATTERN = r'<a href="(?P<link>[^"]+)">(?P=link)</a>' - - - def setup(self): - self.resumeDownload = self.multiDL = self.premium - - def handleCaptcha(self, inputs): - captcha_div = re.search(r'<b>Enter code.*?<div.*?>(.*?)</div>', self.html, re.S).group(1) - self.logDebug(captcha_div) - numerals = re.findall('<span.*?padding-left\s*:\s*(\d+).*?>(\d)</span>', html_unescape(captcha_div)) - inputs['code'] = "".join([a[1] for a in sorted(numerals, key=lambda num: int(num[0]))]) - self.logDebug("CAPTCHA", inputs['code'], numerals) - return 3 - - -getInfo = create_getInfo(RarefileNet) diff --git a/module/plugins/hoster/RealdebridCom.py b/module/plugins/hoster/RealdebridCom.py deleted file mode 100644 index de7540628..000000000 --- a/module/plugins/hoster/RealdebridCom.py +++ /dev/null @@ -1,91 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from random import randrange -from urllib import quote, unquote -from time import time - -from module.common.json_layer import json_loads -from module.plugins.Hoster import Hoster -from module.utils import parseFileSize - - -class RealdebridCom(Hoster): - __name__ = "RealdebridCom" - __type__ = "hoster" - __version__ = "0.53" - - __pattern__ = r'https?://(?:[^/]*\.)?real-debrid\..*' - - __description__ = """Real-Debrid.com hoster plugin""" - __author_name__ = "Devirex Hazzard" - __author_mail__ = "naibaf_11@yahoo.de" - - - def getFilename(self, url): - try: - name = unquote(url.rsplit("/", 1)[1]) - except IndexError: - name = "Unknown_Filename..." - if not name or name.endswith(".."): # incomplete filename, append random stuff - name += "%s.tmp" % randrange(100, 999) - return name - - def setup(self): - self.chunkLimit = 3 - self.resumeDownload = True - - def process(self, pyfile): - if re.match(self.__pattern__, pyfile.url): - new_url = pyfile.url - elif not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "Real-debrid") - self.fail("No Real-debrid account provided") - else: - self.logDebug("Old URL: %s" % pyfile.url) - password = self.getPassword().splitlines() - if not password: - password = "" - else: - password = password[0] - - url = "https://real-debrid.com/ajax/unrestrict.php?lang=en&link=%s&password=%s&time=%s" % ( - quote(pyfile.url, ""), password, int(time() * 1000)) - page = self.load(url) - data = json_loads(page) - - self.logDebug("Returned Data: %s" % data) - - if data['error'] != 0: - if data['message'] == "Your file is unavailable on the hoster.": - self.offline() - else: - self.logWarning(data['message']) - self.tempOffline() - else: - if pyfile.name is not None and pyfile.name.endswith('.tmp') and data['file_name']: - pyfile.name = data['file_name'] - pyfile.size = parseFileSize(data['file_size']) - new_url = data['generated_links'][0][-1] - - if self.getConfig("https"): - new_url = new_url.replace("http://", "https://") - else: - new_url = new_url.replace("https://", "http://") - - if new_url != pyfile.url: - self.logDebug("New URL: %s" % new_url) - - if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown") or pyfile.name.endswith('..'): - #only use when name wasnt already set - pyfile.name = self.getFilename(new_url) - - self.download(new_url, disposition=True) - - check = self.checkDownload( - {"error": "<title>An error occured while processing your request</title>"}) - - if check == "error": - #usual this download can safely be retried - self.retry(wait_time=60, reason="An error occured while generating link.") diff --git a/module/plugins/hoster/RedtubeCom.py b/module/plugins/hoster/RedtubeCom.py deleted file mode 100644 index bdb948d6d..000000000 --- a/module/plugins/hoster/RedtubeCom.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.Hoster import Hoster -from module.unescape import unescape - - -class RedtubeCom(Hoster): - __name__ = "RedtubeCom" - __type__ = "hoster" - __version__ = "0.2" - - __pattern__ = r'http://(?:www\.)?redtube\.com/\d+' - - __description__ = """Redtube.com hoster plugin""" - __author_name__ = "jeix" - __author_mail__ = "jeix@hasnomail.de" - - - def process(self, pyfile): - self.download_html() - if not self.file_exists(): - self.offline() - - pyfile.name = self.get_file_name() - self.download(self.get_file_url()) - - def download_html(self): - url = self.pyfile.url - self.html = self.load(url) - - def get_file_url(self): - """ returns the absolute downloadable filepath - """ - if not self.html: - self.download_html() - - file_url = unescape(re.search(r'hashlink=(http.*?)"', self.html).group(1)) - - return file_url - - def get_file_name(self): - if not self.html: - self.download_html() - - return re.search('<title>(.*?)- RedTube - Free Porn Videos</title>', self.html).group(1).strip() + ".flv" - - def file_exists(self): - """ returns True or False - """ - if not self.html: - self.download_html() - - if re.search(r'This video has been removed.', self.html) is not None: - return False - else: - return True diff --git a/module/plugins/hoster/RehostTo.py b/module/plugins/hoster/RehostTo.py deleted file mode 100644 index 98fb10d94..000000000 --- a/module/plugins/hoster/RehostTo.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- - -from urllib import quote, unquote - -from module.plugins.Hoster import Hoster - - -class RehostTo(Hoster): - __name__ = "RehostTo" - __type__ = "hoster" - __version__ = "0.13" - - __pattern__ = r'https?://.*rehost.to\..*' - - __description__ = """Rehost.com hoster plugin""" - __author_name__ = "RaNaN" - __author_mail__ = "RaNaN@pyload.org" - - - def getFilename(self, url): - return unquote(url.rsplit("/", 1)[1]) - - def setup(self): - self.chunkLimit = 1 - self.resumeDownload = True - - def process(self, pyfile): - if not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "rehost.to") - self.fail("No rehost.to account provided") - - data = self.account.getAccountInfo(self.user) - long_ses = data['long_ses'] - - self.logDebug("Rehost.to: Old URL: %s" % pyfile.url) - new_url = "http://rehost.to/process_download.php?user=cookie&pass=%s&dl=%s" % (long_ses, quote(pyfile.url, "")) - - #raise timeout to 2min - self.req.setOption("timeout", 120) - - self.download(new_url, disposition=True) diff --git a/module/plugins/hoster/RemixshareCom.py b/module/plugins/hoster/RemixshareCom.py deleted file mode 100644 index ea396495e..000000000 --- a/module/plugins/hoster/RemixshareCom.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://remixshare.com/download/p946u -# -# Note: -# The remixshare.com website is very very slow, so -# if your download not starts because of pycurl timeouts: -# Adjust timeouts in /usr/share/pyload/module/network/HTTPRequest.py - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class RemixshareCom(SimpleHoster): - __name__ = "RemixshareCom" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'https?://remixshare\.com/(download|dl)/\w+' - - __description__ = """Remixshare.com hoster plugin""" - __author_name__ = ("zapp-brannigan", "Walter Purcaro") - __author_mail__ = ("fuerst.reinje@web.de", "vuolter@gmail.com") - - FILE_INFO_PATTERN = r'title=\'.+?\'>(?P<N>.+?)</span><span class=\'light2\'> \((?P<S>\d+) (?P<U>\w+)\)<' - OFFLINE_PATTERN = r'<h1>Ooops!<' - - LINK_PATTERN = r'(http://remixshare\.com/downloadfinal/.+?)"' - TOKEN_PATTERN = r'var acc = (\d+)' - WAIT_PATTERN = r'var XYZ = r"(\d+)"' - - - def setup(self): - self.multiDL = True - self.chunkLimit = 1 - - def handleFree(self): - b = re.search(self.LINK_PATTERN, self.html) - if not b: - self.parseError("Cannot parse download url") - c = re.search(self.TOKEN_PATTERN, self.html) - if not c: - self.parseError("Cannot parse file token") - dl_url = b.group(1) + c.group(1) - - #Check if we have to wait - seconds = re.search(self.WAIT_PATTERN, self.html) - if seconds: - self.logDebug("Wait " + seconds.group(1)) - self.wait(seconds.group(1)) - - # Finally start downloading... - self.logDebug("Download URL = r" + dl_url) - self.download(dl_url, disposition=True) - - -getInfo = create_getInfo(RemixshareCom) diff --git a/module/plugins/hoster/RgHostNet.py b/module/plugins/hoster/RgHostNet.py deleted file mode 100644 index dccc6e557..000000000 --- a/module/plugins/hoster/RgHostNet.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class RgHostNet(SimpleHoster): - __name__ = "RgHostNet" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?rghost\.net/\d+(?:r=\d+)?' - - __description__ = """RgHost.net hoster plugin""" - __author_name__ = "z00nx" - __author_mail__ = "z00nx0@gmail.com" - - FILE_INFO_PATTERN = r'<h1>\s+(<a[^>]+>)?(?P<N>[^<]+)(</a>)?\s+<small[^>]+>\s+\((?P<S>[^)]+)\)\s+</small>\s+</h1>' - OFFLINE_PATTERN = r'File is deleted|this page is not found' - LINK_PATTERN = r'''<a\s+href="([^"]+)"\s+class="btn\s+large\s+download"[^>]+>Download</a>''' - - - def handleFree(self): - m = re.search(self.LINK_PATTERN, self.html) - if m is None: - self.parseError("Unable to detect the direct link") - download_link = m.group(1) - self.download(download_link, disposition=True) - - -getInfo = create_getInfo(RgHostNet) diff --git a/module/plugins/hoster/RyushareCom.py b/module/plugins/hoster/RyushareCom.py deleted file mode 100644 index a24090cde..000000000 --- a/module/plugins/hoster/RyushareCom.py +++ /dev/null @@ -1,85 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://ryushare.com/cl0jy8ric2js/random.bin - -import re - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo -from module.plugins.internal.CaptchaService import SolveMedia - - -class RyushareCom(XFileSharingPro): - __name__ = "RyushareCom" - __type__ = "hoster" - __version__ = "0.16" - - __pattern__ = r'http://(?:www\.)?ryushare\.com/\w+' - - __description__ = """Ryushare.com hoster plugin""" - __author_name__ = ("zoidberg", "stickell", "quareevo") - __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it", "quareevo@arcor.de") - - HOSTER_NAME = "ryushare.com" - - FILE_SIZE_PATTERN = r'You have requested <font color="red">[^<]+</font> \((?P<S>[\d\.]+) (?P<U>\w+)' - - WAIT_PATTERN = r'You have to wait ((?P<hour>\d+) hour[s]?, )?((?P<min>\d+) minute[s], )?(?P<sec>\d+) second[s]' - LINK_PATTERN = r'<a href="([^"]+)">Click here to download<' - SOLVEMEDIA_PATTERN = r'http:\/\/api\.solvemedia\.com\/papi\/challenge\.script\?k=(.*?)"' - - - def getDownloadLink(self): - retry = False - self.html = self.load(self.pyfile.url) - action, inputs = self.parseHtmlForm(input_names={"op": re.compile("^download")}) - if "method_premium" in inputs: - del inputs['method_premium'] - - self.html = self.load(self.pyfile.url, post=inputs) - action, inputs = self.parseHtmlForm('F1') - - self.setWait(65) - # Wait 1 hour - if "You have reached the download-limit" in self.html: - self.setWait(1 * 60 * 60, True) - retry = True - - m = re.search(self.WAIT_PATTERN, self.html) - if m: - wait = m.groupdict(0) - waittime = int(wait['hour']) * 60 * 60 + int(wait['min']) * 60 + int(wait['sec']) - self.setWait(waittime, True) - retry = True - - self.wait() - if retry: - self.retry() - - for _ in xrange(5): - m = re.search(self.SOLVEMEDIA_PATTERN, self.html) - if m is None: - self.parseError("Error parsing captcha") - - captchaKey = m.group(1) - captcha = SolveMedia(self) - challenge, response = captcha.challenge(captchaKey) - - inputs['adcopy_challenge'] = challenge - inputs['adcopy_response'] = response - - self.html = self.load(self.pyfile.url, post=inputs) - if "WRONG CAPTCHA" in self.html: - self.invalidCaptcha() - self.logInfo("Invalid Captcha") - else: - self.correctCaptcha() - break - else: - self.fail("You have entered 5 invalid captcha codes") - - if "Click here to download" in self.html: - return re.search(r'<a href="([^"]+)">Click here to download</a>', self.html).group(1) - - -getInfo = create_getInfo(RyushareCom) diff --git a/module/plugins/hoster/SecureUploadEu.py b/module/plugins/hoster/SecureUploadEu.py deleted file mode 100644 index 3691be7da..000000000 --- a/module/plugins/hoster/SecureUploadEu.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class SecureUploadEu(XFileSharingPro): - __name__ = "SecureUploadEu" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?secureupload\.eu/(\w){12}(/\w+)' - - __description__ = """SecureUpload.eu hoster plugin""" - __author_name__ = "z00nx" - __author_mail__ = "z00nx0@gmail.com" - - HOSTER_NAME = "secureupload.eu" - - FILE_INFO_PATTERN = r'<h3>Downloading (?P<N>[^<]+) \((?P<S>[^<]+)\)</h3>' - OFFLINE_PATTERN = r'The file was removed|File Not Found' - - -getInfo = create_getInfo(SecureUploadEu) diff --git a/module/plugins/hoster/SendmywayCom.py b/module/plugins/hoster/SendmywayCom.py deleted file mode 100644 index f5e9e9ca6..000000000 --- a/module/plugins/hoster/SendmywayCom.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class SendmywayCom(XFileSharingPro): - __name__ = "SendmywayCom" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?sendmyway.com/\w{12}' - - __description__ = """SendMyWay hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - HOSTER_NAME = "sendmyway.com" - - FILE_NAME_PATTERN = r'<p class="file-name" ><.*?>\s*(?P<N>.+)' - FILE_SIZE_PATTERN = r'<small>\((?P<S>\d+) bytes\)</small>' - - -getInfo = create_getInfo(SendmywayCom) diff --git a/module/plugins/hoster/SendspaceCom.py b/module/plugins/hoster/SendspaceCom.py deleted file mode 100644 index 1dac231eb..000000000 --- a/module/plugins/hoster/SendspaceCom.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class SendspaceCom(SimpleHoster): - __name__ = "SendspaceCom" - __type__ = "hoster" - __version__ = "0.13" - - __pattern__ = r'http://(?:www\.)?sendspace.com/file/.*' - - __description__ = """Sendspace.com hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_NAME_PATTERN = r'<h2 class="bgray">\s*<(?:b|strong)>(?P<N>[^<]+)</' - FILE_SIZE_PATTERN = r'<div class="file_description reverse margin_center">\s*<b>File Size:</b>\s*(?P<S>[0-9.]+)(?P<U>[kKMG])i?B\s*</div>' - OFFLINE_PATTERN = r'<div class="msg error" style="cursor: default">Sorry, the file you requested is not available.</div>' - - LINK_PATTERN = r'<a id="download_button" href="([^"]+)"' - CAPTCHA_PATTERN = r'<td><img src="(/captchas/captcha.php?captcha=([^"]+))"></td>' - USER_CAPTCHA_PATTERN = r'<td><img src="/captchas/captcha.php?user=([^"]+))"></td>' - - - def handleFree(self): - params = {} - for _ in xrange(3): - m = re.search(self.LINK_PATTERN, self.html) - if m: - if 'captcha_hash' in params: - self.correctCaptcha() - download_url = m.group(1) - break - - m = re.search(self.CAPTCHA_PATTERN, self.html) - if m: - if 'captcha_hash' in params: - self.invalidCaptcha() - captcha_url1 = "http://www.sendspace.com/" + m.group(1) - m = re.search(self.USER_CAPTCHA_PATTERN, self.html) - captcha_url2 = "http://www.sendspace.com/" + m.group(1) - params = {'captcha_hash': m.group(2), - 'captcha_submit': 'Verify', - 'captcha_answer': self.decryptCaptcha(captcha_url1) + " " + self.decryptCaptcha(captcha_url2)} - else: - params = {'download': "Regular Download"} - - self.logDebug(params) - self.html = self.load(self.pyfile.url, post=params) - else: - self.fail("Download link not found") - - self.logDebug("Download URL: %s" % download_url) - self.download(download_url) - - -create_getInfo(SendspaceCom) diff --git a/module/plugins/hoster/Share4webCom.py b/module/plugins/hoster/Share4webCom.py deleted file mode 100644 index e5221baa9..000000000 --- a/module/plugins/hoster/Share4webCom.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.hoster.UnibytesCom import UnibytesCom -from module.plugins.internal.SimpleHoster import create_getInfo - - -class Share4webCom(UnibytesCom): - __name__ = "Share4webCom" - __type__ = "hoster" - __version__ = "0.1" - - __pattern__ = r'http://(?:www\.)?share4web\.com/get/\w+' - - __description__ = """Share4web.com hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - HOSTER_NAME = "share4web.com" - - -getInfo = create_getInfo(UnibytesCom) diff --git a/module/plugins/hoster/Share76Com.py b/module/plugins/hoster/Share76Com.py deleted file mode 100644 index 2c5dd877d..000000000 --- a/module/plugins/hoster/Share76Com.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class Share76Com(DeadHoster): - __name__ = "Share76Com" - __type__ = "hoster" - __version__ = "0.04" - - __pattern__ = r'http://(?:www\.)?share76.com/\w{12}' - - __description__ = """Share76.com hoster plugin""" - __author_name__ = "me" - __author_mail__ = None - - -getInfo = create_getInfo(Share76Com) diff --git a/module/plugins/hoster/ShareFilesCo.py b/module/plugins/hoster/ShareFilesCo.py deleted file mode 100644 index 54ae7777a..000000000 --- a/module/plugins/hoster/ShareFilesCo.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class ShareFilesCo(DeadHoster): - __name__ = "ShareFilesCo" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?sharefiles\.co/\w{12}' - - __description__ = """Sharefiles.co hoster plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - -getInfo = create_getInfo(ShareFilesCo) diff --git a/module/plugins/hoster/ShareRapidCom.py b/module/plugins/hoster/ShareRapidCom.py deleted file mode 100644 index 414e92feb..000000000 --- a/module/plugins/hoster/ShareRapidCom.py +++ /dev/null @@ -1,66 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pycurl import HTTPHEADER - -from module.network.RequestFactory import getRequest -from module.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo - - -def getInfo(urls): - h = getRequest() - h.c.setopt(HTTPHEADER, - ["Accept: text/html", - "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0"]) - for url in urls: - html = h.load(url, decode=True) - file_info = parseFileInfo(ShareRapidCom, url, html) - yield file_info - - -class ShareRapidCom(SimpleHoster): - __name__ = "ShareRapidCom" - __type__ = "hoster" - __version__ = "0.54" - - __pattern__ = r'http://(?:www\.)?(share|mega)rapid\.cz/soubor/\d+/.+' - - __description__ = """MegaRapid.cz hoster plugin""" - __author_name__ = ("MikyWoW", "zoidberg", "stickell", "Walter Purcaro") - __author_mail__ = ("mikywow@seznam.cz", "zoidberg@mujmail.cz", "l.stickell@yahoo.it", "vuolter@gmail.com") - - FILE_NAME_PATTERN = r'<h1[^>]*><span[^>]*>(?:<a[^>]*>)?(?P<N>[^<]+)' - FILE_SIZE_PATTERN = r'<td class="i">Velikost:</td>\s*<td class="h"><strong>\s*(?P<S>[0-9.]+) (?P<U>[kKMG])i?B</strong></td>' - OFFLINE_PATTERN = ur'Nastala chyba 404|Soubor byl smazán' - - SH_CHECK_TRAFFIC = True - - LINK_PATTERN = r'<a href="([^"]+)" title="Stahnout">([^<]+)</a>' - ERR_LOGIN_PATTERN = ur'<div class="error_div"><strong>Stahovánà je pÅÃstupné pouze pÅihlášenÜm uÅŸivatelům' - ERR_CREDIT_PATTERN = ur'<div class="error_div"><strong>Stahovánà zdarma je moÅŸné jen pÅes náš' - - - def setup(self): - self.chunkLimit = 1 - - def handlePremium(self): - try: - self.html = self.load(self.pyfile.url, decode=True) - except BadHeader, e: - self.account.relogin(self.user) - self.retry(max_tries=3, reason=str(e)) - - m = re.search(self.LINK_PATTERN, self.html) - if m: - link = m.group(1) - self.logDebug("Premium link: %s" % link) - self.download(link, disposition=True) - else: - if re.search(self.ERR_LOGIN_PATTERN, self.html): - self.relogin(self.user) - self.retry(max_tries=3, reason="User login failed") - elif re.search(self.ERR_CREDIT_PATTERN, self.html): - self.fail("Not enough credit left") - else: - self.fail("Download link not found") diff --git a/module/plugins/hoster/SharebeesCom.py b/module/plugins/hoster/SharebeesCom.py deleted file mode 100644 index d5b4a3bbc..000000000 --- a/module/plugins/hoster/SharebeesCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class SharebeesCom(DeadHoster): - __name__ = "SharebeesCom" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?sharebees.com/\w{12}' - - __description__ = """ShareBees hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - -getInfo = create_getInfo(SharebeesCom) diff --git a/module/plugins/hoster/ShareonlineBiz.py b/module/plugins/hoster/ShareonlineBiz.py deleted file mode 100644 index feaa95603..000000000 --- a/module/plugins/hoster/ShareonlineBiz.py +++ /dev/null @@ -1,199 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from time import time - -from module.network.RequestFactory import getURL -from module.plugins.Hoster import Hoster -from module.plugins.Plugin import chunks -from module.plugins.internal.CaptchaService import ReCaptcha - - -def getInfo(urls): - api_url_base = "http://api.share-online.biz/linkcheck.php" - - urls = [url.replace("https://", "http://") for url in urls] - - for chunk in chunks(urls, 90): - api_param_file = {"links": "\n".join(x.replace("http://www.share-online.biz/dl/", "").rstrip("/") for x in - chunk)} # api only supports old style links - src = getURL(api_url_base, post=api_param_file, decode=True) - result = [] - for i, res in enumerate(src.split("\n")): - if not res: - continue - fields = res.split(";") - - if fields[1] == "OK": - status = 2 - elif fields[1] in ("DELETED", "NOT FOUND"): - status = 1 - else: - status = 3 - - result.append((fields[2], int(fields[3]), status, chunk[i])) - yield result - - -class ShareonlineBiz(Hoster): - __name__ = "ShareonlineBiz" - __type__ = "hoster" - __version__ = "0.40" - - __pattern__ = r'https?://(?:www\.)?(share-online\.biz|egoshare\.com)/(download.php\?id=|dl/)(?P<ID>\w+)' - - __description__ = """Shareonline.biz hoster plugin""" - __author_name__ = ("spoob", "mkaay", "zoidberg", "Walter Purcaro") - __author_mail__ = ("spoob@pyload.org", "mkaay@mkaay.de", "zoidberg@mujmail.cz", "vuolter@gmail.com") - - ERROR_INFO_PATTERN = r'<p class="b">Information:</p>\s*<div>\s*<strong>(.*?)</strong>' - - - def setup(self): - # range request not working? - # api supports resume, only one chunk - # website isn't supporting resuming in first place - self.file_id = re.match(self.__pattern__, self.pyfile.url).group("ID") - self.pyfile.url = "http://www.share-online.biz/dl/" + self.file_id - - self.resumeDownload = self.premium - self.multiDL = False - #self.chunkLimit = 1 - - self.check_data = None - - def process(self, pyfile): - if self.premium: - self.handlePremium() - #web-download fallback removed - didn't work anyway - else: - self.handleFree() - - # check = self.checkDownload({"failure": re.compile(self.ERROR_INFO_PATTERN)}) - # if check == "failure": - # try: - # self.retry(reason=self.lastCheck.group(1).decode("utf8")) - # except: - # self.retry(reason="Unknown error") - - if self.api_data: - self.check_data = {"size": int(self.api_data['size']), "md5": self.api_data['md5']} - - def loadAPIData(self): - api_url_base = "http://api.share-online.biz/linkcheck.php?md5=1" - api_param_file = {"links": self.file_id} # api only supports old style links - src = self.load(api_url_base, cookies=False, post=api_param_file, decode=True) - - fields = src.split(";") - self.api_data = {"fileid": fields[0], - "status": fields[1]} - if not self.api_data['status'] == "OK": - self.offline() - else: - self.api_data['filename'] = fields[2] - self.api_data['size'] = fields[3] # in bytes - self.api_data['md5'] = fields[4].strip().lower().replace("\n\n", "") # md5 - - def handleFree(self): - self.loadAPIData() - self.pyfile.name = self.api_data['filename'] - self.pyfile.size = int(self.api_data['size']) - - self.html = self.load(self.pyfile.url, cookies=True) # refer, stuff - self.setWait(3) - self.wait() - - self.html = self.load("%s/free/" % self.pyfile.url, post={"dl_free": "1", "choice": "free"}, decode=True) - self.checkErrors() - - m = re.search(r'var wait=(\d+);', self.html) - - recaptcha = ReCaptcha(self) - for _ in xrange(5): - challenge, response = recaptcha.challenge("6LdatrsSAAAAAHZrB70txiV5p-8Iv8BtVxlTtjKX") - self.setWait(int(m.group(1)) if m else 30) - response = self.load("%s/free/captcha/%d" % (self.pyfile.url, int(time() * 1000)), post={ - 'dl_free': '1', - 'recaptcha_challenge_field': challenge, - 'recaptcha_response_field': response}) - - if not response == '0': - self.correctCaptcha() - break - else: - self.invalidCaptcha() - else: - self.invalidCaptcha() - self.fail("No valid captcha solution received") - - download_url = response.decode("base64") - self.logDebug(download_url) - if not download_url.startswith("http://"): - self.parseError("download url") - - self.wait() - self.download(download_url) - # check download - check = self.checkDownload({ - "cookie": re.compile(r'<div id="dl_failure"'), - "fail": re.compile(r"<title>Share-Online") - }) - if check == "cookie": - self.invalidCaptcha() - self.retry(5, 60, "Cookie failure") - elif check == "fail": - self.invalidCaptcha() - self.retry(5, 5 * 60, "Download failed") - else: - self.correctCaptcha() - - def handlePremium(self): #: should be working better loading (account) api internally - self.account.getAccountInfo(self.user, True) - src = self.load("http://api.share-online.biz/account.php", - {"username": self.user, "password": self.account.accounts[self.user]['password'], - "act": "download", "lid": self.file_id}) - - self.api_data = dlinfo = {} - for line in src.splitlines(): - key, value = line.split(": ") - dlinfo[key.lower()] = value - - self.logDebug(dlinfo) - if not dlinfo['status'] == "online": - self.offline() - else: - self.pyfile.name = dlinfo['name'] - self.pyfile.size = int(dlinfo['size']) - - dlLink = dlinfo['url'] - if dlLink == "server_under_maintenance": - self.tempOffline() - else: - self.multiDL = True - self.download(dlLink) - - def checkErrors(self): - m = re.search(r"/failure/(.*?)/1", self.req.lastEffectiveURL) - if m is None: - return - - err = m.group(1) - m = re.search(self.ERROR_INFO_PATTERN, self.html) - msg = m.group(1) if m else "" - self.logError(err, msg or "Unknown error occurred") - - if err == "invalid": - self.fail(msg or "File not available") - elif err in ("freelimit", "size", "proxy"): - self.fail(msg or "Premium account needed") - else: - if err in 'server': - self.setWait(600, False) - elif err in 'expired': - self.setWait(30, False) - else: - self.setWait(300, True) - - self.wait() - self.retry(max_tries=25, reason=msg) diff --git a/module/plugins/hoster/ShareplaceCom.py b/module/plugins/hoster/ShareplaceCom.py deleted file mode 100644 index 0d236fe30..000000000 --- a/module/plugins/hoster/ShareplaceCom.py +++ /dev/null @@ -1,84 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urllib import unquote - -from module.plugins.Hoster import Hoster - - -class ShareplaceCom(Hoster): - __name__ = "ShareplaceCom" - __type__ = "hoster" - __version__ = "0.11" - - __pattern__ = r'(http://)?(?:www\.)?shareplace\.(com|org)/\?[a-zA-Z0-9]+' - - __description__ = """Shareplace.com hoster plugin""" - __author_name__ = "ACCakut" - __author_mail__ = None - - - def process(self, pyfile): - self.pyfile = pyfile - self.prepare() - self.download(self.get_file_url()) - - def prepare(self): - if not self.file_exists(): - self.offline() - - self.pyfile.name = self.get_file_name() - - wait_time = self.get_waiting_time() - self.setWait(wait_time) - self.logDebug("%s: Waiting %d seconds." % (self.__name__, wait_time)) - self.wait() - - def get_waiting_time(self): - if not self.html: - self.download_html() - - #var zzipitime = 15; - m = re.search(r'var zzipitime = (\d+);', self.html) - if m: - sec = int(m.group(1)) - else: - sec = 0 - - return sec - - def download_html(self): - url = re.sub("shareplace.com\/\?", "shareplace.com//index1.php/?a=", self.pyfile.url) - self.html = self.load(url, decode=True) - - def get_file_url(self): - """ returns the absolute downloadable filepath - """ - url = re.search(r"var beer = '(.*?)';", self.html) - if url: - url = url.group(1) - url = unquote( - url.replace("http://http:/", "").replace("vvvvvvvvv", "").replace("lllllllll", "").replace( - "teletubbies", "")) - self.logDebug("URL: %s" % url) - return url - else: - self.fail("absolute filepath could not be found. offline? ") - - def get_file_name(self): - if not self.html: - self.download_html() - - return re.search("<title>\s*(.*?)\s*</title>", self.html).group(1) - - def file_exists(self): - """ returns True or False - """ - if not self.html: - self.download_html() - - if re.search(r"HTTP Status 404", self.html) is not None: - return False - else: - return True diff --git a/module/plugins/hoster/ShragleCom.py b/module/plugins/hoster/ShragleCom.py deleted file mode 100644 index ba3356d66..000000000 --- a/module/plugins/hoster/ShragleCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class ShragleCom(DeadHoster): - __name__ = "ShragleCom" - __type__ = "hoster" - __version__ = "0.22" - - __pattern__ = r'http://(?:www\.)?(cloudnator|shragle).com/files/(?P<ID>.*?)/' - - __description__ = """Cloudnator.com (Shragle.com) hoster plugin""" - __author_name__ = ("RaNaN", "zoidberg") - __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz") - - -getInfo = create_getInfo(ShragleCom) diff --git a/module/plugins/hoster/SimplyPremiumCom.py b/module/plugins/hoster/SimplyPremiumCom.py deleted file mode 100644 index 5db9f5daa..000000000 --- a/module/plugins/hoster/SimplyPremiumCom.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from datetime import datetime, timedelta - -from module.plugins.Hoster import Hoster -from module.plugins.hoster.UnrestrictLi import secondsToMidnight - - -class SimplyPremiumCom(Hoster): - __name__ = "SimplyPremiumCom" - __type__ = "hoster" - __version__ = "0.03" - - __pattern__ = r'https?://.*(simply-premium)\.com' - - __description__ = """Simply-Premium.com hoster plugin""" - __author_name__ = "EvolutionClip" - __author_mail__ = "evolutionclip@live.de" - - - def setup(self): - self.chunkLimit = 16 - self.resumeDownload = False - - def process(self, pyfile): - if re.match(self.__pattern__, pyfile.url): - new_url = pyfile.url - elif not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "Simply-Premium.com") - self.fail("No Simply-Premium.com account provided") - else: - self.logDebug("Old URL: %s" % pyfile.url) - for i in xrange(5): - page = self.load('http://www.simply-premium.com/premium.php?info&link=' + pyfile.url) - self.logDebug("JSON data: " + page) - if page != '': - break - else: - self.logInfo("Unable to get API data, waiting 1 minute and retry") - self.retry(5, 60, "Unable to get API data") - - if '<valid>0</valid>' in page or ( - "You are not allowed to download from this host" in page and self.premium): - self.account.relogin(self.user) - self.retry() - elif "NOTFOUND" in page: - self.offline() - elif "downloadlimit" in page: - self.logWarning("Reached maximum connctions") - self.retry(5, 60, "Reached maximum connctions") - elif "trafficlimit" in page: - self.logWarning("Reached daily limit for this host") - self.retry(1, secondsToMidnight(gmt=2), "Daily limit for this host reached") - elif "hostererror" in page: - self.logWarning("Hoster temporarily unavailable, waiting 1 minute and retry") - self.retry(5, 60, "Hoster is temporarily unavailable") - #page = json_loads(page) - #new_url = page.keys()[0] - #self.api_data = page[new_url] - - try: - self.pyfile.name = re.search(r'<name>([^<]+)</name>', page).group(1) - except AttributeError: - self.pyfile.name = "" - - try: - self.pyfile.size = re.search(r'<size>(\d+)</size>', page).group(1) - except AttributeError: - self.pyfile.size = 0 - - try: - new_url = re.search(r'<download>([^<]+)</download>', page).group(1) - except AttributeError: - new_url = 'http://www.simply-premium.com/premium.php?link=' + pyfile.url - - if new_url != pyfile.url: - self.logDebug("New URL: " + new_url) - - self.download(new_url, disposition=True) diff --git a/module/plugins/hoster/SimplydebridCom.py b/module/plugins/hoster/SimplydebridCom.py deleted file mode 100644 index 78f6c0a34..000000000 --- a/module/plugins/hoster/SimplydebridCom.py +++ /dev/null @@ -1,62 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.Hoster import Hoster - - -class SimplydebridCom(Hoster): - __name__ = "SimplydebridCom" - __type__ = "hoster" - __version__ = "0.1" - - __pattern__ = r'http://(?:www\.)?\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/sd.php/*' - - __description__ = """Simply-debrid.com hoster plugin""" - __author_name__ = "Kagenoshin" - __author_mail__ = "kagenoshin@gmx.ch" - - - def setup(self): - self.resumeDownload = self.multiDL = True - self.chunkLimit = 1 - - def process(self, pyfile): - if not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "simply-debrid.com") - self.fail("No simply-debrid.com account provided") - - self.logDebug("Old URL: %s" % pyfile.url) - - #fix the links for simply-debrid.com! - new_url = pyfile.url - new_url = new_url.replace("clz.to", "cloudzer.net/file") - new_url = new_url.replace("http://share-online", "http://www.share-online") - new_url = new_url.replace("ul.to", "uploaded.net/file") - new_url = new_url.replace("uploaded.com", "uploaded.net") - new_url = new_url.replace("filerio.com", "filerio.in") - new_url = new_url.replace("lumfile.com", "lumfile.se") - if('fileparadox' in new_url): - new_url = new_url.replace("http://", "https://") - - if re.match(self.__pattern__, new_url): - new_url = new_url - - self.logDebug("New URL: %s" % new_url) - - if not re.match(self.__pattern__, new_url): - page = self.load('http://simply-debrid.com/api.php', get={'dl': new_url}) # +'&u='+self.user+'&p='+self.account.getAccountData(self.user)['password']) - if 'tiger Link' in page or 'Invalid Link' in page or ('API' in page and 'ERROR' in page): - self.fail('Unable to unrestrict link') - new_url = page - - self.setWait(5) - self.wait() - self.logDebug("Unrestricted URL: " + new_url) - - self.download(new_url, disposition=True) - - check = self.checkDownload({"bad1": "No address associated with hostname", "bad2": "<html"}) - - if check == "bad1" or check == "bad2": - self.retry(24, 3 * 60, "Bad file downloaded") diff --git a/module/plugins/hoster/SockshareCom.py b/module/plugins/hoster/SockshareCom.py deleted file mode 100644 index 90f092473..000000000 --- a/module/plugins/hoster/SockshareCom.py +++ /dev/null @@ -1,88 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from os import rename - -from module.plugins.hoster.UnrestrictLi import secondsToMidnight -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class SockshareCom(SimpleHoster): - __name__ = "SockshareCom" - __type__ = "hoster" - __version__ = "0.04" - - __pattern__ = r'http://(?:www\.)?sockshare\.com/(mobile/)?(file|embed)/(?P<ID>\w+)' - - __description__ = """Sockshare.com hoster plugin""" - __author_name__ = ("jeix", "stickell", "Walter Purcaro") - __author_mail__ = ("jeix@hasnomail.de", "l.stickell@yahoo.it", "vuolter@gmail.com") - - FILE_INFO_PATTERN = r'site-content">\s*<h1>(?P<N>.+)<strong>\( (?P<S>[^)]+) \)</strong></h1>' - OFFLINE_PATTERN = r'>This file doesn\'t exist, or has been removed.<' - TEMP_OFFLINE_PATTERN = r'(>This content server has been temporarily disabled for upgrades|Try again soon\\. You can still download it below\\.<)' - - FILE_URL_REPLACEMENTS = [(__pattern__, r'http://www.sockshare.com/file/\g<ID>')] - - - def setup(self): - self.multiDL = self.resumeDownload = True - self.chunkLimit = -1 - - def handleFree(self): - name = self.pyfile.name - link = self._getLink() - self.logDebug("Direct link: " + link) - self.download(link, disposition=True) - self.processName(name) - - def _getLink(self): - hash_data = re.search(r'<input type="hidden" value="([a-z0-9]+)" name="hash">', self.html) - if not hash_data: - self.parseError("Unable to detect hash") - - post_data = {"hash": hash_data.group(1), "confirm": "Continue+as+Free+User"} - self.html = self.load(self.pyfile.url, post=post_data) - if ">You have exceeded the daily stream limit for your country\\. You can wait until tomorrow" in self.html: - self.logWarning("You have exceeded your daily stream limit for today") - self.wait(secondsToMidnight(gmt=2), True) - elif re.search(self.TEMP_OFFLINE_PATTERN, self.html): - self.retry(wait_time=2 * 60 * 60, reason="Server temporarily offline") # 2 hours wait - - patterns = (r'(/get_file\.php\?id=[A-Z0-9]+&key=[a-zA-Z0-9=]+&original=1)', - r'(/get_file\.php\?download=[A-Z0-9]+&key=[a-z0-9]+)', - r'(/get_file\.php\?download=[A-Z0-9]+&key=[a-z0-9]+&original=1)', - r'<a href="/gopro\.php">Tired of ads and waiting\? Go Pro!</a>[\t\n\rn ]+</div>[\t\n\rn ]+<a href="(/.*?)"') - for pattern in patterns: - link = re.search(pattern, self.html) - if link: - break - else: - link = re.search(r"playlist: '(/get_file\.php\?stream=[a-zA-Z0-9=]+)'", self.html) - if link: - self.html = self.load("http://www.sockshare.com" + link.group(1)) - link = re.search(r'media:content url="(http://.*?)"', self.html) - if link is None: - link = re.search(r'\"(http://media\\-b\\d+\\.sockshare\\.com/download/\\d+/.*?)\"', self.html) - else: - self.parseError('Unable to detect a download link') - - link = link.group(1).replace("&", "&") - if link.startswith("http://"): - return link - else: - return "http://www.sockshare.com" + link - - def processName(self, name_old): - name = self.pyfile.name - if name <= name_old: - return - name_new = re.sub(r'\.[^.]+$', "", name_old) + name[len(name_old):] - filename = self.lastDownload - self.pyfile.name = name_new - rename(filename, filename.rsplit(name)[0] + name_new) - self.logInfo("%(name)s renamed to %(newname)s" % {"name": name, "newname": name_new}) - - -getInfo = create_getInfo(SockshareCom) diff --git a/module/plugins/hoster/SoundcloudCom.py b/module/plugins/hoster/SoundcloudCom.py deleted file mode 100644 index 05fe897d2..000000000 --- a/module/plugins/hoster/SoundcloudCom.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- - -import pycurl -import re - -from module.plugins.Hoster import Hoster - - -class SoundcloudCom(Hoster): - __name__ = "SoundcloudCom" - __type__ = "hoster" - __version__ = "0.1" - - __pattern__ = r'https?://(?:www\.)?soundcloud\.com/(?P<UID>.*?)/(?P<SID>.*)' - - __description__ = """SoundCloud.com hoster plugin""" - __author_name__ = "Peekayy" - __author_mail__ = "peekayy.dev@gmail.com" - - - def process(self, pyfile): - # default UserAgent of HTTPRequest fails for this hoster so we use this one - self.req.http.c.setopt(pycurl.USERAGENT, 'Mozilla/5.0') - page = self.load(pyfile.url) - m = re.search(r'<div class="haudio.*?large.*?" data-sc-track="(?P<ID>[0-9]*)"', page) - songId = clientId = "" - if m: - songId = m.group("ID") - if len(songId) <= 0: - self.logError("Could not find song id") - self.offline() - else: - m = re.search(r'"clientID":"(?P<CID>.*?)"', page) - if m: - clientId = m.group("CID") - - if len(clientId) <= 0: - clientId = "b45b1aa10f1ac2941910a7f0d10f8e28" - - m = re.search(r'<em itemprop="name">\s(?P<TITLE>.*?)\s</em>', page) - if m: - pyfile.name = m.group("TITLE") + ".mp3" - else: - pyfile.name = re.match(self.__pattern__, pyfile.url).group("SID") + ".mp3" - - # url to retrieve the actual song url - page = self.load("https://api.sndcdn.com/i1/tracks/%s/streams" % songId, get={"client_id": clientId}) - # getting streams - # for now we choose the first stream found in all cases - # it could be improved if relevant for this hoster - streams = [ - (result.group("QUALITY"), result.group("URL")) - for result in re.finditer(r'"(?P<QUALITY>.*?)":"(?P<URL>.*?)"', page) - ] - self.logDebug("Found Streams", streams) - self.logDebug("Downloading", streams[0][0], streams[0][1]) - self.download(streams[0][1]) diff --git a/module/plugins/hoster/SpeedLoadOrg.py b/module/plugins/hoster/SpeedLoadOrg.py deleted file mode 100644 index 8cf1163b2..000000000 --- a/module/plugins/hoster/SpeedLoadOrg.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class SpeedLoadOrg(DeadHoster): - __name__ = "SpeedLoadOrg" - __type__ = "hoster" - __version__ = "1.02" - - __pattern__ = r'http://(?:www\.)?speedload\.org/(?P<ID>\w+)' - - __description__ = """Speedload.org hoster plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - -getInfo = create_getInfo(SpeedLoadOrg) diff --git a/module/plugins/hoster/SpeedfileCz.py b/module/plugins/hoster/SpeedfileCz.py deleted file mode 100644 index 6a42d1dbe..000000000 --- a/module/plugins/hoster/SpeedfileCz.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class SpeedfileCz(DeadHoster): - __name__ = "SpeedFileCz" - __type__ = "hoster" - __version__ = "0.32" - - __pattern__ = r'http://(?:www\.)?speedfile.cz/.*' - - __description__ = """Speedfile.cz hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - -getInfo = create_getInfo(SpeedfileCz) diff --git a/module/plugins/hoster/SpeedyshareCom.py b/module/plugins/hoster/SpeedyshareCom.py deleted file mode 100644 index 22f4ee511..000000000 --- a/module/plugins/hoster/SpeedyshareCom.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- - -# Testlink: -# http://speedy.sh/ep2qY/Zapp-Brannigan.jpg - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class SpeedyshareCom(SimpleHoster): - __name__ = "SpeedyshareCom" - __type__ = "hoster" - __pattern__ = r"https?://(www\.)?(speedyshare.com|speedy.sh)/.*" - __version__ = "0.01" - __description__ = """speedyshare.com hoster plugin""" - __author_name__ = ("zapp-brannigan") - __author_mail__ = ("fuerst.reinje@web.de") - - FILE_NAME_PATTERN = r'class=downloadfilename>(?P<N>.*)</span></td>' - FILE_SIZE_PATTERN = r'class=sizetagtext>(?P<S>.*) (?P<U>[kKmM]?[iI]?[bB]?)</div>' - LINK_PATTERN = r'<a href=\'(.*)\'><img src=/gf/slowdownload.png alt=\'Slow Download\' border=0' - FILE_OFFLINE_PATTERN = r'class=downloadfilenamenotfound>.*</span>' - BASE_URL = 'www.speedyshare.com' - - def setup(self): - self.multiDL = False - self.chunkLimit = 1 - - def process(self, pyfile): - self.html = self.load(pyfile.url, decode=True) - try: - dl_link = re.search(self.LINK_PATTERN, self.html).group(1) - self.logDebug("Link: " + dl_link) - except: - self.parseError("Unable to find download link") - self.download(self.BASE_URL + dl_link, disposition=True) - check = self.checkDownload({"is_html": re.compile("html")}) - if check == "is_html": - self.fail("The downloaded file is html, maybe the plugin is out of date") - - -getInfo = create_getInfo(SpeedyshareCom) diff --git a/module/plugins/hoster/StreamCz.py b/module/plugins/hoster/StreamCz.py deleted file mode 100644 index 526e61eea..000000000 --- a/module/plugins/hoster/StreamCz.py +++ /dev/null @@ -1,70 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.network.RequestFactory import getURL -from module.plugins.Hoster import Hoster - - -def getInfo(urls): - result = [] - - for url in urls: - - html = getURL(url) - if re.search(StreamCz.OFFLINE_PATTERN, html): - # File offline - result.append((url, 0, 1, url)) - else: - result.append((url, 0, 2, url)) - yield result - - -class StreamCz(Hoster): - __name__ = "StreamCz" - __type__ = "hoster" - __version__ = "0.2" - - __pattern__ = r'https?://(?:www\.)?stream\.cz/[^/]+/\d+.*' - - __description__ = """Stream.cz hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_NAME_PATTERN = r'<link rel="video_src" href="http://www.stream.cz/\w+/(\d+)-([^"]+)" />' - OFFLINE_PATTERN = r'<h1 class="commonTitle">Str.nku nebylo mo.n. nal.zt \(404\)</h1>' - - CDN_PATTERN = r'<param name="flashvars" value="[^"]*&id=(?P<ID>\d+)(?:&cdnLQ=(?P<cdnLQ>\d*))?(?:&cdnHQ=(?P<cdnHQ>\d*))?(?:&cdnHD=(?P<cdnHD>\d*))?&' - - - def setup(self): - self.multiDL = True - self.resumeDownload = True - - def process(self, pyfile): - - self.html = self.load(pyfile.url, decode=True) - - if re.search(self.OFFLINE_PATTERN, self.html): - self.offline() - - m = re.search(self.CDN_PATTERN, self.html) - if m is None: - self.fail("Parse error (CDN)") - cdn = m.groupdict() - self.logDebug(cdn) - for cdnkey in ("cdnHD", "cdnHQ", "cdnLQ"): - if cdnkey in cdn and cdn[cdnkey] > '': - cdnid = cdn[cdnkey] - break - else: - self.fail("Stream URL not found") - - m = re.search(self.FILE_NAME_PATTERN, self.html) - if m is None: - self.fail("Parse error (NAME)") - pyfile.name = "%s-%s.%s.mp4" % (m.group(2), m.group(1), cdnkey[-2:]) - - download_url = "http://cdn-dispatcher.stream.cz/?id=" + cdnid - self.logInfo("STREAM (%s): %s" % (cdnkey[-2:], download_url)) - self.download(download_url) diff --git a/module/plugins/hoster/StreamcloudEu.py b/module/plugins/hoster/StreamcloudEu.py deleted file mode 100644 index 11333640e..000000000 --- a/module/plugins/hoster/StreamcloudEu.py +++ /dev/null @@ -1,124 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from time import sleep - -from module.network.HTTPRequest import HTTPRequest -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class StreamcloudEu(XFileSharingPro): - __name__ = "StreamcloudEu" - __type__ = "hoster" - __version__ = "0.04" - - __pattern__ = r'http://(?:www\.)?streamcloud\.eu/\S+' - - __description__ = """Streamcloud.eu hoster plugin""" - __author_name__ = "seoester" - __author_mail__ = "seoester@googlemail.com" - - HOSTER_NAME = "streamcloud.eu" - - LINK_PATTERN = r'file: "(http://(stor|cdn)\d+\.streamcloud.eu:?\d*/.*/video\.(mp4|flv))",' - - - def setup(self): - super(StreamcloudEu, self).setup() - self.multiDL = True - - def getDownloadLink(self): - m = re.search(self.LINK_PATTERN, self.html, re.S) - if m: - return m.group(1) - - for i in xrange(5): - self.logDebug("Getting download link: #%d" % i) - data = self.getPostParameters() - httpRequest = HTTPRequest(options=self.req.options) - httpRequest.cj = self.req.cj - sleep(10) - self.html = httpRequest.load(self.pyfile.url, post=data, referer=False, cookies=True, decode=True) - self.header = httpRequest.header - - m = re.search("Location\s*:\s*(.*)", self.header, re.I) - if m: - break - - m = re.search(self.LINK_PATTERN, self.html, re.S) - if m: - break - - else: - if self.errmsg and 'captcha' in self.errmsg: - self.fail("No valid captcha code entered") - else: - self.fail("Download link not found") - - return m.group(1) - - def getPostParameters(self): - for i in xrange(3): - if not self.errmsg: - self.checkErrors() - - if hasattr(self, "FORM_PATTERN"): - action, inputs = self.parseHtmlForm(self.FORM_PATTERN) - else: - action, inputs = self.parseHtmlForm(input_names={"op": re.compile("^download")}) - - if not inputs: - action, inputs = self.parseHtmlForm('F1') - if not inputs: - if self.errmsg: - self.retry() - else: - self.parseError("Form not found") - - self.logDebug(self.HOSTER_NAME, inputs) - - if 'op' in inputs and inputs['op'] in ("download1", "download2", "download3"): - if "password" in inputs: - if self.passwords: - inputs['password'] = self.passwords.pop(0) - else: - self.fail("No or invalid passport") - - if not self.premium: - m = re.search(self.WAIT_PATTERN, self.html) - if m: - wait_time = int(m.group(1)) + 1 - self.setWait(wait_time, False) - else: - wait_time = 0 - - self.captcha = self.handleCaptcha(inputs) - - if wait_time: - self.wait() - - self.errmsg = None - self.logDebug("getPostParameters {0}".format(i)) - return inputs - - else: - inputs['referer'] = self.pyfile.url - - if self.premium: - inputs['method_premium'] = "Premium Download" - if 'method_free' in inputs: - del inputs['method_free'] - else: - inputs['method_free'] = "Free Download" - if 'method_premium' in inputs: - del inputs['method_premium'] - - self.html = self.load(self.pyfile.url, post=inputs, ref=False) - self.errmsg = None - - else: - self.parseError('FORM: %s' % (inputs['op'] if 'op' in inputs else 'UNKNOWN')) - - -getInfo = create_getInfo(StreamcloudEu) diff --git a/module/plugins/hoster/TurbobitNet.py b/module/plugins/hoster/TurbobitNet.py deleted file mode 100644 index a9cc46614..000000000 --- a/module/plugins/hoster/TurbobitNet.py +++ /dev/null @@ -1,167 +0,0 @@ -# -*- coding: utf-8 -*- - -import random -import re -import time - -from Crypto.Cipher import ARC4 -from binascii import hexlify, unhexlify -from pycurl import HTTPHEADER -from urllib import quote - -from module.network.RequestFactory import getURL -from module.plugins.internal.CaptchaService import ReCaptcha -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, timestamp - - -class TurbobitNet(SimpleHoster): - __name__ = "TurbobitNet" - __type__ = "hoster" - __version__ = "0.11" - - __pattern__ = r'http://(?:www\.)?(turbobit.net|unextfiles.com)/(?!download/folder/)(?:download/free/)?(?P<ID>\w+).*' - - __description__ = """Turbobit.net plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_INFO_PATTERN = r"<span class='file-icon1[^>]*>(?P<N>[^<]+)</span>\s*\((?P<S>[^\)]+)\)\s*</h1>" #: long filenames are shortened - FILE_NAME_PATTERN = r'<meta name="keywords" content="\s+(?P<N>[^,]+)' #: full name but missing on page2 - OFFLINE_PATTERN = r'<h2>File Not Found</h2>|html\(\'File (?:was )?not found' - - FILE_URL_REPLACEMENTS = [(r"http://(?:www\.)?(turbobit.net|unextfiles.com)/(?:download/free/)?(?P<ID>\w+).*", - "http://turbobit.net/\g<ID>.html")] - SH_COOKIES = [(".turbobit.net", "user_lang", "en")] - - LINK_PATTERN = r'(?P<url>/download/redirect/[^"\']+)' - LIMIT_WAIT_PATTERN = r'<div id="time-limit-text">\s*.*?<span id=\'timeout\'>(\d+)</span>' - CAPTCHA_KEY_PATTERN = r'src="http://api\.recaptcha\.net/challenge\?k=([^"]+)"' - CAPTCHA_SRC_PATTERN = r'<img alt="Captcha" src="(.*?)"' - - - def handleFree(self): - self.url = "http://turbobit.net/download/free/%s" % self.file_info['ID'] - self.html = self.load(self.url) - - rtUpdate = self.getRtUpdate() - - self.solveCaptcha() - self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"]) - self.url = self.getDownloadUrl(rtUpdate) - - self.wait() - self.html = self.load(self.url) - self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With:"]) - self.downloadFile() - - def solveCaptcha(self): - for _ in xrange(5): - m = re.search(self.LIMIT_WAIT_PATTERN, self.html) - if m: - wait_time = int(m.group(1)) - self.wait(wait_time, wait_time > 60) - self.retry() - - action, inputs = self.parseHtmlForm("action='#'") - if not inputs: - self.parseError("captcha form") - self.logDebug(inputs) - - if inputs['captcha_type'] == 'recaptcha': - recaptcha = ReCaptcha(self) - m = re.search(self.CAPTCHA_KEY_PATTERN, self.html) - captcha_key = m.group(1) if m else '6LcTGLoSAAAAAHCWY9TTIrQfjUlxu6kZlTYP50_c' - inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge( - captcha_key) - else: - m = re.search(self.CAPTCHA_SRC_PATTERN, self.html) - if m is None: - self.parseError('captcha') - captcha_url = m.group(1) - inputs['captcha_response'] = self.decryptCaptcha(captcha_url) - - self.logDebug(inputs) - self.html = self.load(self.url, post=inputs) - - if not "<div class='download-timer-header'>" in self.html: - self.invalidCaptcha() - else: - self.correctCaptcha() - break - else: - self.fail("Invalid captcha") - - def getRtUpdate(self): - rtUpdate = self.getStorage("rtUpdate") - if not rtUpdate: - if self.getStorage("version") != self.__version__ or int( - self.getStorage("timestamp", 0)) + 86400000 < timestamp(): - # that's right, we are even using jdownloader updates - rtUpdate = getURL("http://update0.jdownloader.org/pluginstuff/tbupdate.js") - rtUpdate = self.decrypt(rtUpdate.splitlines()[1]) - # but we still need to fix the syntax to work with other engines than rhino - rtUpdate = re.sub(r'for each\(var (\w+) in(\[[^\]]+\])\)\{', - r'zza=\2;for(var zzi=0;zzi<zza.length;zzi++){\1=zza[zzi];', rtUpdate) - rtUpdate = re.sub(r"for\((\w+)=", r"for(var \1=", rtUpdate) - - self.logDebug("rtUpdate") - self.setStorage("rtUpdate", rtUpdate) - self.setStorage("timestamp", timestamp()) - self.setStorage("version", self.__version__) - else: - self.logError("Unable to download, wait for update...") - self.tempOffline() - - return rtUpdate - - def getDownloadUrl(self, rtUpdate): - self.req.http.lastURL = self.url - - m = re.search("(/\w+/timeout\.js\?\w+=)([^\"\'<>]+)", self.html) - url = "http://turbobit.net%s%s" % (m.groups() if m else ( - '/files/timeout.js?ver=', ''.join(random.choice('0123456789ABCDEF') for _ in xrange(32)))) - fun = self.load(url) - - self.setWait(65, False) - - for b in [1, 3]: - self.jscode = "var id = \'%s\';var b = %d;var inn = \'%s\';%sout" % ( - self.file_info['ID'], b, quote(fun), rtUpdate) - - try: - out = self.js.eval(self.jscode) - self.logDebug("URL", self.js.engine, out) - if out.startswith('/download/'): - return "http://turbobit.net%s" % out.strip() - except Exception, e: - self.logError(e) - else: - if self.retries >= 2: - # retry with updated js - self.delStorage("rtUpdate") - self.retry() - - def decrypt(self, data): - cipher = ARC4.new(hexlify('E\x15\xa1\x9e\xa3M\xa0\xc6\xa0\x84\xb6H\x83\xa8o\xa0')) - return unhexlify(cipher.encrypt(unhexlify(data))) - - def getLocalTimeString(self): - lt = time.localtime() - tz = time.altzone if lt.tm_isdst else time.timezone - return "%s GMT%+03d%02d" % (time.strftime("%a %b %d %Y %H:%M:%S", lt), -tz // 3600, tz % 3600) - - def handlePremium(self): - self.logDebug("Premium download as user %s" % self.user) - self.html = self.load(self.pyfile.url) # Useless in 0.5 - self.downloadFile() - - def downloadFile(self): - m = re.search(self.LINK_PATTERN, self.html) - if m is None: - self.parseError("download link") - self.url = "http://turbobit.net" + m.group('url') - self.logDebug(self.url) - self.download(self.url) - - -getInfo = create_getInfo(TurbobitNet) diff --git a/module/plugins/hoster/TurbouploadCom.py b/module/plugins/hoster/TurbouploadCom.py deleted file mode 100644 index bcfa2d7d4..000000000 --- a/module/plugins/hoster/TurbouploadCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class TurbouploadCom(DeadHoster): - __name__ = "TurbouploadCom" - __type__ = "hoster" - __version__ = "0.03" - - __pattern__ = r'http://(?:www\.)?turboupload.com/(\w+).*' - - __description__ = """Turboupload.com hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - -getInfo = create_getInfo(TurbouploadCom) diff --git a/module/plugins/hoster/TusfilesNet.py b/module/plugins/hoster/TusfilesNet.py deleted file mode 100644 index 7fb2a375e..000000000 --- a/module/plugins/hoster/TusfilesNet.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class TusfilesNet(XFileSharingPro): - __name__ = "TusfilesNet" - __type__ = "hoster" - __version__ = "0.03" - - __pattern__ = r'https?://(?:www\.)?tusfiles\.net/(?P<ID>\w+)' - - __description__ = """Tusfiles.net hoster plugin""" - __author_name__ = "Walter Purcaro" - __author_mail__ = "vuolter@gmail.com" - - HOSTER_NAME = "tusfiles.net" - - FILE_INFO_PATTERN = r'\](?P<N>.+) - (?P<S>[\d.]+) (?P<U>\w+)\[' - OFFLINE_PATTERN = r'>File Not Found|<Title>TusFiles - Fast Sharing Files!' - - SH_COOKIES = [(".tusfiles.net", "lang", "english")] - - - def setup(self): - self.multiDL = False - self.chunkLimit = -1 - self.resumeDownload = True - - -getInfo = create_getInfo(TusfilesNet) diff --git a/module/plugins/hoster/TwoSharedCom.py b/module/plugins/hoster/TwoSharedCom.py deleted file mode 100644 index dbd33dd83..000000000 --- a/module/plugins/hoster/TwoSharedCom.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class TwoSharedCom(SimpleHoster): - __name__ = "TwoSharedCom" - __type__ = "hoster" - __version__ = "0.11" - - __pattern__ = r'http://(?:www\.)?2shared.com/(account/)?(download|get|file|document|photo|video|audio)/.*' - - __description__ = """2Shared.com hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_NAME_PATTERN = r'<h1>(?P<N>.*)</h1>' - FILE_SIZE_PATTERN = r'<span class="dtitle">File size:</span>\s*(?P<S>[0-9,.]+) (?P<U>[kKMG])i?B' - OFFLINE_PATTERN = r'The file link that you requested is not valid\.|This file was deleted\.' - - LINK_PATTERN = r"window.location ='([^']+)';" - - - def setup(self): - self.resumeDownload = self.multiDL = True - - def handleFree(self): - m = re.search(self.LINK_PATTERN, self.html) - if m is None: - self.parseError('Download link') - link = m.group(1) - self.logDebug("Download URL %s" % link) - - self.download(link) - - -getInfo = create_getInfo(TwoSharedCom) diff --git a/module/plugins/hoster/UlozTo.py b/module/plugins/hoster/UlozTo.py deleted file mode 100644 index dbdaf3f8e..000000000 --- a/module/plugins/hoster/UlozTo.py +++ /dev/null @@ -1,158 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -import time - -from module.common.json_layer import json_loads -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -def convertDecimalPrefix(m): - # decimal prefixes used in filesize and traffic - return ("%%.%df" % {'k': 3, 'M': 6, 'G': 9}[m.group(2)] % float(m.group(1))).replace('.', '') - - -class UlozTo(SimpleHoster): - __name__ = "UlozTo" - __type__ = "hoster" - __version__ = "0.98" - - __pattern__ = r'http://(?:www\.)?(uloz\.to|ulozto\.(cz|sk|net)|bagruj.cz|zachowajto.pl)/(?:live/)?(?P<id>\w+/[^/?]*)' - - __description__ = """Uloz.to hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_INFO_PATTERN = r'<p>File <strong>(?P<N>[^<]+)</strong> is password protected</p>' - FILE_NAME_PATTERN = r'<title>(?P<N>[^<]+) \| Uloz.to</title>' - FILE_SIZE_PATTERN = r'<span id="fileSize">.*?(?P<S>[0-9.]+\s[kMG]?B)</span>' - OFFLINE_PATTERN = r'<title>404 - Page not found</title>|<h1 class="h1">File (has been deleted|was banned)</h1>' - - FILE_SIZE_REPLACEMENTS = [('([0-9.]+)\s([kMG])B', convertDecimalPrefix)] - FILE_URL_REPLACEMENTS = [(r"(?<=http://)([^/]+)", "www.ulozto.net")] - - ADULT_PATTERN = r'<form action="(?P<link>[^\"]*)" method="post" id="frm-askAgeForm">' - PASSWD_PATTERN = r'<div class="passwordProtectedFile">' - VIPLINK_PATTERN = r'<a href="[^"]*\?disclaimer=1" class="linkVip">' - FREE_URL_PATTERN = r'<div class="freeDownloadForm"><form action="([^"]+)"' - PREMIUM_URL_PATTERN = r'<div class="downloadForm"><form action="([^"]+)"' - TOKEN_PATTERN = r'<input type="hidden" name="_token_" id="[^\"]*" value="(?P<token>[^\"]*)" />' - - - def setup(self): - self.multiDL = self.premium - self.resumeDownload = True - - def process(self, pyfile): - pyfile.url = re.sub(r"(?<=http://)([^/]+)", "www.ulozto.net", pyfile.url) - self.html = self.load(pyfile.url, decode=True, cookies=True) - - if re.search(self.ADULT_PATTERN, self.html): - self.logInfo("Adult content confirmation needed. Proceeding..") - - m = re.search(self.TOKEN_PATTERN, self.html) - if m is None: - self.parseError('TOKEN') - token = m.group(1) - - self.html = self.load(pyfile.url, get={"do": "askAgeForm-submit"}, - post={"agree": "Confirm", "_token_": token}, cookies=True) - - passwords = self.getPassword().splitlines() - while self.PASSWD_PATTERN in self.html: - if passwords: - password = passwords.pop(0) - self.logInfo("Password protected link, trying " + password) - self.html = self.load(pyfile.url, get={"do": "passwordProtectedForm-submit"}, - post={"password": password, "password_send": 'Send'}, cookies=True) - else: - self.fail("No or incorrect password") - - if re.search(self.VIPLINK_PATTERN, self.html): - self.html = self.load(pyfile.url, get={"disclaimer": "1"}) - - self.file_info = self.getFileInfo() - - if self.premium and self.checkTrafficLeft(): - self.handlePremium() - else: - self.handleFree() - - self.doCheckDownload() - - def handleFree(self): - action, inputs = self.parseHtmlForm('id="frm-downloadDialog-freeDownloadForm"') - if not action or not inputs: - self.parseError("free download form") - - self.logDebug('inputs.keys() = ' + str(inputs.keys())) - # get and decrypt captcha - if all(key in inputs for key in ("captcha_value", "captcha_id", "captcha_key")): - # Old version - last seen 9.12.2013 - self.logDebug('Using "old" version') - - captcha_value = self.decryptCaptcha("http://img.uloz.to/captcha/%s.png" % inputs['captcha_id']) - self.logDebug('CAPTCHA ID: ' + inputs['captcha_id'] + ", CAPTCHA VALUE: " + captcha_value) - - inputs.update({'captcha_id': inputs['captcha_id'], 'captcha_key': inputs['captcha_key'], 'captcha_value': captcha_value}) - - elif all(key in inputs for key in ("captcha_value", "timestamp", "salt", "hash")): - # New version - better to get new parameters (like captcha reload) because of image url - since 6.12.2013 - self.logDebug('Using "new" version') - - xapca = self.load("http://www.ulozto.net/reloadXapca.php", get={"rnd": str(int(time.time()))}) - self.logDebug('xapca = ' + str(xapca)) - - data = json_loads(xapca) - captcha_value = self.decryptCaptcha(str(data['image'])) - self.logDebug("CAPTCHA HASH: " + data['hash'] + ", CAPTCHA SALT: " + str(data['salt']) + ", CAPTCHA VALUE: " + captcha_value) - - inputs.update({'timestamp': data['timestamp'], 'salt': data['salt'], 'hash': data['hash'], 'captcha_value': captcha_value}) - else: - self.parseError("CAPTCHA form changed") - - self.multiDL = True - self.download("http://www.ulozto.net" + action, post=inputs, cookies=True, disposition=True) - - def handlePremium(self): - self.download(self.pyfile.url + "?do=directDownload", disposition=True) - #parsed_url = self.findDownloadURL(premium=True) - #self.download(parsed_url, post={"download": "Download"}) - - def findDownloadURL(self, premium=False): - msg = "%s link" % ("Premium" if premium else "Free") - m = re.search(self.PREMIUM_URL_PATTERN if premium else self.FREE_URL_PATTERN, self.html) - if m is None: - self.parseError(msg) - parsed_url = "http://www.ulozto.net" + m.group(1) - self.logDebug("%s: %s" % (msg, parsed_url)) - return parsed_url - - def doCheckDownload(self): - check = self.checkDownload({ - "wrong_captcha": re.compile(r'<ul class="error">\s*<li>Error rewriting the text.</li>'), - "offline": re.compile(self.OFFLINE_PATTERN), - "passwd": self.PASSWD_PATTERN, - "server_error": 'src="http://img.ulozto.cz/error403/vykricnik.jpg"', # paralell dl, server overload etc. - "not_found": "<title>UloÅŸ.to</title>" - }) - - if check == "wrong_captcha": - #self.delStorage("captcha_id") - #self.delStorage("captcha_text") - self.invalidCaptcha() - self.retry(reason="Wrong captcha code") - elif check == "offline": - self.offline() - elif check == "passwd": - self.fail("Wrong password") - elif check == "server_error": - self.logError("Server error, try downloading later") - self.multiDL = False - self.wait(1 * 60 * 60, True) - self.retry() - elif check == "not_found": - self.fail("Server error - file not downloadable") - - -getInfo = create_getInfo(UlozTo) diff --git a/module/plugins/hoster/UloziskoSk.py b/module/plugins/hoster/UloziskoSk.py deleted file mode 100644 index ac70f42d4..000000000 --- a/module/plugins/hoster/UloziskoSk.py +++ /dev/null @@ -1,70 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class UloziskoSk(SimpleHoster): - __name__ = "UloziskoSk" - __type__ = "hoster" - __version__ = "0.23" - - __pattern__ = r'http://(?:www\.)?ulozisko.sk/.*' - - __description__ = """Ulozisko.sk hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_NAME_PATTERN = r'<div class="down1">(?P<N>[^<]+)</div>' - FILE_SIZE_PATTERN = ur'VeÄŸkosÅ¥ súboru: <strong>(?P<S>[0-9.]+) (?P<U>[kKMG])i?B</strong><br />' - OFFLINE_PATTERN = ur'<span class = "red">ZadanÜ súbor neexistuje z jedného z nasledujúcich dÃŽvodov:</span>' - - LINK_PATTERN = r'<form name = "formular" action = "([^"]+)" method = "post">' - ID_PATTERN = r'<input type = "hidden" name = "id" value = "([^"]+)" />' - CAPTCHA_PATTERN = r'<img src="(/obrazky/obrazky.php\?fid=[^"]+)" alt="" />' - IMG_PATTERN = ur'<strong>PRE ZVÃÄÅ ENIE KLIKNITE NA OBRÃZOK</strong><br /><a href = "([^"]+)">' - - - def process(self, pyfile): - self.html = self.load(pyfile.url, decode=True) - self.getFileInfo() - - m = re.search(self.IMG_PATTERN, self.html) - if m: - url = "http://ulozisko.sk" + m.group(1) - self.download(url) - else: - self.handleFree() - - def handleFree(self): - m = re.search(self.LINK_PATTERN, self.html) - if m is None: - self.parseError('URL') - parsed_url = 'http://www.ulozisko.sk' + m.group(1) - - m = re.search(self.ID_PATTERN, self.html) - if m is None: - self.parseError('ID') - id = m.group(1) - - self.logDebug('URL:' + parsed_url + ' ID:' + id) - - m = re.search(self.CAPTCHA_PATTERN, self.html) - if m is None: - self.parseError('CAPTCHA') - captcha_url = 'http://www.ulozisko.sk' + m.group(1) - - captcha = self.decryptCaptcha(captcha_url, cookies=True) - - self.logDebug('CAPTCHA_URL:' + captcha_url + ' CAPTCHA:' + captcha) - - self.download(parsed_url, post={ - "antispam": captcha, - "id": id, - "name": self.pyfile.name, - "but": "++++STIAHNI+S%DABOR++++" - }) - - -getInfo = create_getInfo(UloziskoSk) diff --git a/module/plugins/hoster/UnibytesCom.py b/module/plugins/hoster/UnibytesCom.py deleted file mode 100644 index e936b84b1..000000000 --- a/module/plugins/hoster/UnibytesCom.py +++ /dev/null @@ -1,71 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pycurl import FOLLOWLOCATION - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class UnibytesCom(SimpleHoster): - __name__ = "UnibytesCom" - __type__ = "hoster" - __version__ = "0.1" - - __pattern__ = r'http://(?:www\.)?unibytes\.com/[a-zA-Z0-9-._ ]{11}B' - - __description__ = """UniBytes.com hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_INFO_PATTERN = r'<span[^>]*?id="fileName"[^>]*>(?P<N>[^>]+)</span>\s*\((?P<S>\d.*?)\)' - - HOSTER_NAME = "unibytes.com" - WAIT_PATTERN = r'Wait for <span id="slowRest">(\d+)</span> sec' - LINK_PATTERN = r'<a href="([^"]+)">Download</a>' - - - def handleFree(self): - domain = "http://www." + self.HOSTER_NAME - action, post_data = self.parseHtmlForm('id="startForm"') - self.req.http.c.setopt(FOLLOWLOCATION, 0) - - for _ in xrange(8): - self.logDebug(action, post_data) - self.html = self.load(domain + action, post=post_data) - - m = re.search(r'location:\s*(\S+)', self.req.http.header, re.I) - if m: - url = m.group(1) - break - - if '>Somebody else is already downloading using your IP-address<' in self.html: - self.wait(10 * 60, True) - self.retry() - - if post_data['step'] == 'last': - m = re.search(self.LINK_PATTERN, self.html) - if m: - url = m.group(1) - self.correctCaptcha() - break - else: - self.invalidCaptcha() - - last_step = post_data['step'] - action, post_data = self.parseHtmlForm('id="stepForm"') - - if last_step == 'timer': - m = re.search(self.WAIT_PATTERN, self.html) - self.wait(int(m.group(1)) if m else 60, False) - elif last_step in ("captcha", "last"): - post_data['captcha'] = self.decryptCaptcha(domain + '/captcha.jpg') - else: - self.fail("No valid captcha code entered") - - self.logDebug('Download link: ' + url) - self.req.http.c.setopt(FOLLOWLOCATION, 1) - self.download(url) - - -getInfo = create_getInfo(UnibytesCom) diff --git a/module/plugins/hoster/UnrestrictLi.py b/module/plugins/hoster/UnrestrictLi.py deleted file mode 100644 index ed70e023d..000000000 --- a/module/plugins/hoster/UnrestrictLi.py +++ /dev/null @@ -1,89 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from datetime import datetime, timedelta - -from module.common.json_layer import json_loads -from module.plugins.Hoster import Hoster - - -def secondsToMidnight(gmt=0): - now = datetime.utcnow() + timedelta(hours=gmt) - if now.hour is 0 and now.minute < 10: - midnight = now - else: - midnight = now + timedelta(days=1) - midnight = midnight.replace(hour=0, minute=10, second=0, microsecond=0) - return int((midnight - now).total_seconds()) - - -class UnrestrictLi(Hoster): - __name__ = "UnrestrictLi" - __type__ = "hoster" - __version__ = "0.12" - - __pattern__ = r'https?://(?:[^/]*\.)?(unrestrict|unr)\.li' - - __description__ = """Unrestrict.li hoster plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - - def setup(self): - self.chunkLimit = 16 - self.resumeDownload = True - - def process(self, pyfile): - if re.match(self.__pattern__, pyfile.url): - new_url = pyfile.url - elif not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "Unrestrict.li") - self.fail("No Unrestrict.li account provided") - else: - self.logDebug("Old URL: %s" % pyfile.url) - for _ in xrange(5): - page = self.req.load('https://unrestrict.li/unrestrict.php', - post={'link': pyfile.url, 'domain': 'long'}) - self.logDebug("JSON data: " + page) - if page != '': - break - else: - self.logInfo("Unable to get API data, waiting 1 minute and retry") - self.retry(5, 60, "Unable to get API data") - - if 'Expired session' in page or ("You are not allowed to " - "download from this host" in page and self.premium): - self.account.relogin(self.user) - self.retry() - elif "File offline" in page: - self.offline() - elif "You are not allowed to download from this host" in page: - self.fail("You are not allowed to download from this host") - elif "You have reached your daily limit for this host" in page: - self.logWarning("Reached daily limit for this host") - self.retry(5, secondsToMidnight(gmt=2), "Daily limit for this host reached") - elif "ERROR_HOSTER_TEMPORARILY_UNAVAILABLE" in page: - self.logInfo("Hoster temporarily unavailable, waiting 1 minute and retry") - self.retry(5, 60, "Hoster is temporarily unavailable") - page = json_loads(page) - new_url = page.keys()[0] - self.api_data = page[new_url] - - if new_url != pyfile.url: - self.logDebug("New URL: " + new_url) - - if hasattr(self, 'api_data'): - self.setNameSize() - - self.download(new_url, disposition=True) - - if self.getConfig("history"): - self.load("https://unrestrict.li/history/&delete=all") - self.logInfo("Download history deleted") - - def setNameSize(self): - if 'name' in self.api_data: - self.pyfile.name = self.api_data['name'] - if 'size' in self.api_data: - self.pyfile.size = self.api_data['size'] diff --git a/module/plugins/hoster/UploadStationCom.py b/module/plugins/hoster/UploadStationCom.py deleted file mode 100644 index ac5a47f3f..000000000 --- a/module/plugins/hoster/UploadStationCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class UploadStationCom(DeadHoster): - __name__ = "UploadStationCom" - __type__ = "hoster" - __version__ = "0.52" - - __pattern__ = r'http://(?:www\.)?uploadstation\.com/file/(?P<id>[A-Za-z0-9]+)' - - __description__ = """UploadStation.com hoster plugin""" - __author_name__ = ("fragonib", "zoidberg") - __author_mail__ = ("fragonib[AT]yahoo[DOT]es", "zoidberg@mujmail.cz") - - -getInfo = create_getInfo(UploadStationCom) diff --git a/module/plugins/hoster/UploadedTo.py b/module/plugins/hoster/UploadedTo.py deleted file mode 100644 index 286f1caf0..000000000 --- a/module/plugins/hoster/UploadedTo.py +++ /dev/null @@ -1,240 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://ul.to/044yug9o -# http://ul.to/gzfhd0xs - -import re - -from time import sleep - -from module.network.RequestFactory import getURL -from module.plugins.Hoster import Hoster -from module.plugins.Plugin import chunks -from module.plugins.internal.CaptchaService import ReCaptcha -from module.utils import html_unescape, parseFileSize - - -key = "bGhGMkllZXByd2VEZnU5Y2NXbHhYVlZ5cEE1bkEzRUw=".decode('base64') - - -def getID(url): - """ returns id from file url""" - m = re.match(UploadedTo.__pattern__, url) - return m.group('ID') - - -def getAPIData(urls): - post = {"apikey": key} - - idMap = {} - - for i, url in enumerate(urls): - id = getID(url) - post['id_%s' % i] = id - idMap[id] = url - - for _ in xrange(5): - api = unicode(getURL("http://uploaded.net/api/filemultiple", post=post, decode=False), 'iso-8859-1') - if api != "can't find request": - break - else: - sleep(3) - - result = {} - - if api: - for line in api.splitlines(): - data = line.split(",", 4) - if data[1] in idMap: - result[data[1]] = (data[0], data[2], data[4], data[3], idMap[data[1]]) - - return result - - -def parseFileInfo(self, url='', html=''): - if not html and hasattr(self, "html"): - html = self.html - - name = url - size = 0 - fileid = None - - if re.search(self.OFFLINE_PATTERN, html): - # File offline - status = 1 - else: - m = re.search(self.FILE_INFO_PATTERN, html) - if m: - name, fileid = html_unescape(m.group('N')), m.group('ID') - size = parseFileSize(m.group('S')) - status = 2 - else: - status = 3 - - return name, size, status, fileid - - -def getInfo(urls): - for chunk in chunks(urls, 80): - result = [] - - api = getAPIData(chunk) - - for data in api.itervalues(): - if data[0] == "online": - result.append((html_unescape(data[2]), data[1], 2, data[4])) - - elif data[0] == "offline": - result.append((data[4], 0, 1, data[4])) - - yield result - - -class UploadedTo(Hoster): - __name__ = "UploadedTo" - __type__ = "hoster" - __version__ = "0.73" - - __pattern__ = r'https?://(?:www\.)?(uploaded\.(to|net)|ul\.to)(/file/|/?\?id=|.*?&id=|/)(?P<ID>\w+)' - - __description__ = """Uploaded.net hoster plugin""" - __author_name__ = ("spoob", "mkaay", "zoidberg", "netpok", "stickell") - __author_mail__ = ("spoob@pyload.org", "mkaay@mkaay.de", "zoidberg@mujmail.cz", - "netpok@gmail.com", "l.stickell@yahoo.it") - - FILE_INFO_PATTERN = r'<a href="file/(?P<ID>\w+)" id="filename">(?P<N>[^<]+)</a> \s*<small[^>]*>(?P<S>[^<]+)</small>' - OFFLINE_PATTERN = r'<small class="cL">Error: 404</small>' - DL_LIMIT_PATTERN = r'You have reached the max. number of possible free downloads for this hour' - - - def setup(self): - self.multiDL = self.resumeDownload = self.premium - self.chunkLimit = 1 # critical problems with more chunks - - self.fileID = getID(self.pyfile.url) - self.pyfile.url = "http://uploaded.net/file/%s" % self.fileID - - def process(self, pyfile): - self.load("http://uploaded.net/language/en", just_header=True) - - api = getAPIData([pyfile.url]) - - # TODO: fallback to parse from site, because api sometimes delivers wrong status codes - - if not api: - self.logWarning("No response for API call") - - self.html = unicode(self.load(pyfile.url, decode=False), 'iso-8859-1') - name, size, status, self.fileID = parseFileInfo(self) - self.logDebug(name, size, status, self.fileID) - if status == 1: - self.offline() - elif status == 2: - pyfile.name, pyfile.size = name, size - else: - self.fail('Parse error - file info') - elif api == 'Access denied': - self.fail(_("API key invalid")) - - else: - if self.fileID not in api: - self.offline() - - self.data = api[self.fileID] - if self.data[0] != "online": - self.offline() - - pyfile.name = html_unescape(self.data[2]) - - # pyfile.name = self.get_file_name() - - if self.premium: - self.handlePremium() - else: - self.handleFree() - - def handlePremium(self): - info = self.account.getAccountInfo(self.user, True) - self.logDebug("%(name)s: Use Premium Account (%(left)sGB left)" % {"name": self.__name__, - "left": info['trafficleft'] / 1024 / 1024}) - if int(self.data[1]) / 1024 > info['trafficleft']: - self.logInfo(_("%s: Not enough traffic left" % self.__name__)) - self.account.empty(self.user) - self.resetAccount() - self.fail(_("Traffic exceeded")) - - header = self.load("http://uploaded.net/file/%s" % self.fileID, just_header=True) - if "location" in header: - #Direct download - print "Direct Download: " + header['location'] - self.download(header['location']) - else: - #Indirect download - self.html = self.load("http://uploaded.net/file/%s" % self.fileID) - m = re.search(r'<div class="tfree".*\s*<form method="post" action="(.*?)"', self.html) - if m is None: - self.fail("Download URL not m. Try to enable direct downloads.") - url = m.group(1) - print "Premium URL: " + url - self.download(url, post={}) - - def handleFree(self): - self.html = self.load(self.pyfile.url, decode=True) - - if 'var free_enabled = false;' in self.html: - self.logError("Free-download capacities exhausted.") - self.retry(max_tries=24, wait_time=5 * 60) - - m = re.search(r"Current waiting period: <span>(\d+)</span> seconds", self.html) - if m is None: - self.fail("File not downloadable for free users") - self.setWait(int(m.group(1))) - - js = self.load("http://uploaded.net/js/download.js", decode=True) - - challengeId = re.search(r'Recaptcha\.create\("([^"]+)', js) - - url = "http://uploaded.net/io/ticket/captcha/%s" % self.fileID - downloadURL = "" - - for _ in xrange(5): - re_captcha = ReCaptcha(self) - challenge, result = re_captcha.challenge(challengeId.group(1)) - options = {"recaptcha_challenge_field": challenge, "recaptcha_response_field": result} - self.wait() - - result = self.load(url, post=options) - self.logDebug("result: %s" % result) - - if "limit-size" in result: - self.fail("File too big for free download") - elif "limit-slot" in result: # Temporary restriction so just wait a bit - self.setWait(30 * 60, True) - self.wait() - self.retry() - elif "limit-parallel" in result: - self.fail("Cannot download in parallel") - elif self.DL_LIMIT_PATTERN in result: # limit-dl - self.setWait(3 * 60 * 60, True) - self.wait() - self.retry() - elif '"err":"captcha"' in result: - self.logError("ul.net captcha is disabled") - self.invalidCaptcha() - elif "type:'download'" in result: - self.correctCaptcha() - downloadURL = re.search("url:'([^']+)", result).group(1) - break - else: - self.fail("Unknown error '%s'" % result) - - if not downloadURL: - self.fail("No Download url retrieved/all captcha attempts failed") - - self.download(downloadURL, disposition=True) - check = self.checkDownload({"limit-dl": self.DL_LIMIT_PATTERN}) - if check == "limit-dl": - self.setWait(3 * 60 * 60, True) - self.wait() - self.retry() diff --git a/module/plugins/hoster/UploadheroCom.py b/module/plugins/hoster/UploadheroCom.py deleted file mode 100644 index e34701ed7..000000000 --- a/module/plugins/hoster/UploadheroCom.py +++ /dev/null @@ -1,77 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://uploadhero.co/dl/wQBRAVSM - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class UploadheroCom(SimpleHoster): - __name__ = "UploadheroCom" - __type__ = "hoster" - __version__ = "0.15" - - __pattern__ = r'http://(?:www\.)?uploadhero\.com?/dl/\w+' - - __description__ = """UploadHero.co plugin""" - __author_name__ = ("mcmyst", "zoidberg") - __author_mail__ = ("mcmyst@hotmail.fr", "zoidberg@mujmail.cz") - - FILE_NAME_PATTERN = r'<div class="nom_de_fichier">(?P<N>.*?)</div>' - FILE_SIZE_PATTERN = r'Taille du fichier : </span><strong>(?P<S>.*?)</strong>' - OFFLINE_PATTERN = r'<p class="titre_dl_2">|<div class="raison"><strong>Le lien du fichier ci-dessus n\'existe plus.' - - SH_COOKIES = [(".uploadhero.co", "lang", "en")] - - IP_BLOCKED_PATTERN = r'href="(/lightbox_block_download.php\?min=.*?)"' - IP_WAIT_PATTERN = r'<span id="minutes">(\d+)</span>.*\s*<span id="seconds">(\d+)</span>' - - CAPTCHA_PATTERN = r'"(/captchadl\.php\?[a-z0-9]+)"' - FREE_URL_PATTERN = r'var magicomfg = \'<a href="(http://[^<>"]*?)"|"(http://storage\d+\.uploadhero\.co/\?d=[A-Za-z0-9]+/[^<>"/]+)"' - PREMIUM_URL_PATTERN = r'<a href="([^"]+)" id="downloadnow"' - - - def handleFree(self): - self.checkErrors() - - m = re.search(self.CAPTCHA_PATTERN, self.html) - if m is None: - self.parseError("Captcha URL") - captcha_url = "http://uploadhero.co" + m.group(1) - - for _ in xrange(5): - captcha = self.decryptCaptcha(captcha_url) - self.html = self.load(self.pyfile.url, get={"code": captcha}) - m = re.search(self.FREE_URL_PATTERN, self.html) - if m: - self.correctCaptcha() - download_url = m.group(1) or m.group(2) - break - else: - self.invalidCaptcha() - else: - self.fail("No valid captcha code entered") - - self.download(download_url) - - def handlePremium(self): - self.logDebug("%s: Use Premium Account" % self.__name__) - self.html = self.load(self.pyfile.url) - link = re.search(self.PREMIUM_URL_PATTERN, self.html).group(1) - self.logDebug("Downloading link : '%s'" % link) - self.download(link) - - def checkErrors(self): - m = re.search(self.IP_BLOCKED_PATTERN, self.html) - if m: - self.html = self.load("http://uploadhero.co%s" % m.group(1)) - - m = re.search(self.IP_WAIT_PATTERN, self.html) - wait_time = (int(m.group(1)) * 60 + int(m.group(2))) if m else 5 * 60 - self.wait(wait_time, True) - self.retry() - - -getInfo = create_getInfo(UploadheroCom) diff --git a/module/plugins/hoster/UploadingCom.py b/module/plugins/hoster/UploadingCom.py deleted file mode 100644 index 45ab1d4cd..000000000 --- a/module/plugins/hoster/UploadingCom.py +++ /dev/null @@ -1,99 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pycurl import HTTPHEADER - -from module.common.json_layer import json_loads -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, timestamp - - -class UploadingCom(SimpleHoster): - __name__ = "UploadingCom" - __type__ = "hoster" - __version__ = "0.36" - - __pattern__ = r'http://(?:www\.)?uploading\.com/files/(?:get/)?(?P<ID>[\w\d]+)' - - __description__ = """Uploading.com hoster plugin""" - __author_name__ = ("jeix", "mkaay", "zoidberg") - __author_mail__ = ("jeix@hasnomail.de", "mkaay@mkaay.de", "zoidberg@mujmail.cz") - - FILE_NAME_PATTERN = r'id="file_title">(?P<N>.+)</' - FILE_SIZE_PATTERN = r'size tip_container">(?P<S>[\d.]+) (?P<U>\w+)<' - OFFLINE_PATTERN = r'(Page|file) not found' - - - def process(self, pyfile): - # set lang to english - self.req.cj.setCookie(".uploading.com", "lang", "1") - self.req.cj.setCookie(".uploading.com", "language", "1") - self.req.cj.setCookie(".uploading.com", "setlang", "en") - self.req.cj.setCookie(".uploading.com", "_lang", "en") - - if not "/get/" in pyfile.url: - pyfile.url = pyfile.url.replace("/files", "/files/get") - - self.html = self.load(pyfile.url, decode=True) - self.file_info = self.getFileInfo() - - if self.premium: - self.handlePremium() - else: - self.handleFree() - - def handlePremium(self): - postData = {'action': 'get_link', - 'code': self.file_info['ID'], - 'pass': 'undefined'} - - self.html = self.load('http://uploading.com/files/get/?JsHttpRequest=%d-xml' % timestamp(), post=postData) - url = re.search(r'"link"\s*:\s*"(.*?)"', self.html) - if url: - url = url.group(1).replace("\\/", "/") - self.download(url) - - raise Exception("Plugin defect.") - - def handleFree(self): - m = re.search('<h2>((Daily )?Download Limit)</h2>', self.html) - if m: - self.pyfile.error = m.group(1) - self.logWarning(self.pyfile.error) - self.retry(max_tries=6, wait_time=6 * 60 * 60 if m.group(2) else 15 * 60, reason=self.pyfile.error) - - ajax_url = "http://uploading.com/files/get/?ajax" - self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"]) - self.req.http.lastURL = self.pyfile.url - - response = json_loads(self.load(ajax_url, post={'action': 'second_page', 'code': self.file_info['ID']})) - if 'answer' in response and 'wait_time' in response['answer']: - wait_time = int(response['answer']['wait_time']) - self.logInfo("%s: Waiting %d seconds." % (self.__name__, wait_time)) - self.wait(wait_time) - else: - self.parseError("AJAX/WAIT") - - response = json_loads( - self.load(ajax_url, post={'action': 'get_link', 'code': self.file_info['ID'], 'pass': 'false'})) - if 'answer' in response and 'link' in response['answer']: - url = response['answer']['link'] - else: - self.parseError("AJAX/URL") - - self.html = self.load(url) - m = re.search(r'<form id="file_form" action="(.*?)"', self.html) - if m: - url = m.group(1) - else: - self.parseError("URL") - - self.download(url) - - check = self.checkDownload({"html": re.compile("\A<!DOCTYPE html PUBLIC")}) - if check == "html": - self.logWarning("Redirected to a HTML page, wait 10 minutes and retry") - self.wait(10 * 60, True) - - -getInfo = create_getInfo(UploadingCom) diff --git a/module/plugins/hoster/UpstoreNet.py b/module/plugins/hoster/UpstoreNet.py deleted file mode 100644 index 140024731..000000000 --- a/module/plugins/hoster/UpstoreNet.py +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.CaptchaService import ReCaptcha -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class UpstoreNet(SimpleHoster): - __name__ = "UpstoreNet" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'https?://(?:www\.)?upstore\.net/' - - __description__ = """Upstore.Net File Download Hoster""" - __author_name__ = "igel" - __author_mail__ = "igelkun@myopera.com" - - FILE_INFO_PATTERN = r'<div class="comment">.*?</div>\s*\n<h2 style="margin:0">(?P<N>.*?)</h2>\s*\n<div class="comment">\s*\n\s*(?P<S>[\d.]+) (?P<U>\w+)' - OFFLINE_PATTERN = r'<span class="error">File not found</span>' - - WAIT_PATTERN = r'var sec = (\d+)' - CHASH_PATTERN = r'<input type="hidden" name="hash" value="([^"]*)">' - LINK_PATTERN = r'<a href="(https?://.*?)" target="_blank"><b>' - - - def handleFree(self): - # STAGE 1: get link to continue - m = re.search(self.CHASH_PATTERN, self.html) - if m is None: - self.parseError("could not detect hash") - chash = m.group(1) - self.logDebug("read hash " + chash) - # continue to stage2 - post_data = {'hash': chash, 'free': 'Slow download'} - self.html = self.load(self.pyfile.url, post=post_data, decode=True) - - # STAGE 2: solv captcha and wait - # first get the infos we need: recaptcha key and wait time - recaptcha = ReCaptcha(self) - if not recaptcha.detect_key(self.html): - self.parseError("could not find recaptcha pattern") - self.logDebug("using captcha key " + recaptcha.recaptcha_key) - # try the captcha 5 times - for i in xrange(5): - m = re.search(self.WAIT_PATTERN, self.html) - if m is None: - self.parseError("could not find wait pattern") - wait_time = m.group(1) - - # then, do the waiting - self.wait(wait_time) - - # then, handle the captcha - challenge, code = recaptcha.challenge() - post_data['recaptcha_challenge_field'] = challenge - post_data['recaptcha_response_field'] = code - - self.html = self.load(self.pyfile.url, post=post_data, decode=True) - - # STAGE 3: get direct link - m = re.search(self.LINK_PATTERN, self.html, re.DOTALL) - if m: - break - - if m is None: - self.parseError("could not detect direct link") - - direct = m.group(1) - self.logDebug('found direct link: ' + direct) - self.download(direct, disposition=True) - - -getInfo = create_getInfo(UpstoreNet) diff --git a/module/plugins/hoster/UptoboxCom.py b/module/plugins/hoster/UptoboxCom.py deleted file mode 100644 index 6d86c5559..000000000 --- a/module/plugins/hoster/UptoboxCom.py +++ /dev/null @@ -1,69 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urllib import unquote - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo -from module.plugins.internal.CaptchaService import ReCaptcha, SolveMedia -from module.utils import html_unescape - - -class UptoboxCom(XFileSharingPro): - __name__ = "UptoboxCom" - __type__ = "hoster" - __version__ = "0.09" - - __pattern__ = r'https?://(?:www\.)?uptobox\.com/\w+' - - __description__ = """Uptobox.com hoster plugin""" - __author_name__ = "Walter Purcaro" - __author_mail__ = "vuolter@gmail.com" - - HOSTER_NAME = "uptobox.com" - - FILE_INFO_PATTERN = r'"para_title">(?P<N>.+) \((?P<S>[\d\.]+) (?P<U>\w+)\)' - OFFLINE_PATTERN = r'>(File not found|Access Denied|404 Not Found)' - TEMP_OFFLINE_PATTERN = r'>This server is in maintenance mode' - - WAIT_PATTERN = r'>(\d+)</span> seconds<' - - LINK_PATTERN = r'"(https?://\w+\.uptobox\.com/d/.*?)"' - - - def handleCaptcha(self, inputs): - m = re.search(self.SOLVEMEDIA_PATTERN, self.html) - if m: - captcha_key = m.group(1) - captcha = SolveMedia(self) - inputs['adcopy_challenge'], inputs['adcopy_response'] = captcha.challenge(captcha_key) - return 4 - else: - m = re.search(self.CAPTCHA_URL_PATTERN, self.html) - if m: - captcha_url = m.group(1) - inputs['code'] = self.decryptCaptcha(captcha_url) - return 2 - else: - m = re.search(self.CAPTCHA_DIV_PATTERN, self.html, re.DOTALL) - if m: - captcha_div = m.group(1) - self.logDebug(captcha_div) - numerals = re.findall(r'<span.*?padding-left\s*:\s*(\d+).*?>(\d)</span>', - html_unescape(captcha_div)) - inputs['code'] = "".join([a[1] for a in sorted(numerals, key=lambda num: int(num[0]))]) - self.logDebug("CAPTCHA", inputs['code'], numerals) - return 3 - else: - m = re.search(self.RECAPTCHA_URL_PATTERN, self.html) - if m: - recaptcha_key = unquote(m.group(1)) - self.logDebug("RECAPTCHA KEY: %s" % recaptcha_key) - recaptcha = ReCaptcha(self) - inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge( - recaptcha_key) - return 1 - return 0 - - -getInfo = create_getInfo(UptoboxCom) diff --git a/module/plugins/hoster/VeehdCom.py b/module/plugins/hoster/VeehdCom.py deleted file mode 100644 index 66c258439..000000000 --- a/module/plugins/hoster/VeehdCom.py +++ /dev/null @@ -1,79 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.Hoster import Hoster - - -class VeehdCom(Hoster): - __name__ = "VeehdCom" - __type__ = "hoster" - __version__ = "0.23" - - __pattern__ = r'http://veehd\.com/video/\d+_\S+' - __config__ = [("filename_spaces", "bool", "Allow spaces in filename", False), - ("replacement_char", "str", "Filename replacement character", "_")] - - __description__ = """Veehd.com hoster plugin""" - __author_name__ = "cat" - __author_mail__ = "cat@pyload" - - - def _debug(self, msg): - self.logDebug('[%s] %s' % (self.__name__, msg)) - - def setup(self): - self.multiDL = True - self.req.canContinue = True - - def process(self, pyfile): - self.download_html() - if not self.file_exists(): - self.offline() - - pyfile.name = self.get_file_name() - self.download(self.get_file_url()) - - def download_html(self): - url = self.pyfile.url - self._debug("Requesting page: %s" % (repr(url),)) - self.html = self.load(url) - - def file_exists(self): - if not self.html: - self.download_html() - - if '<title>Veehd</title>' in self.html: - return False - return True - - def get_file_name(self): - if not self.html: - self.download_html() - - m = re.search(r'<title[^>]*>([^<]+) on Veehd</title>', self.html) - if m is None: - self.fail("video title not found") - - name = m.group(1) - - # replace unwanted characters in filename - if self.getConfig('filename_spaces'): - pattern = '[^0-9A-Za-z\.\ ]+' - else: - pattern = '[^0-9A-Za-z\.]+' - - return re.sub(pattern, self.getConfig('replacement_char'), name) + '.avi' - - def get_file_url(self): - """ returns the absolute downloadable filepath - """ - if not self.html: - self.download_html() - - m = re.search(r'<embed type="video/divx" src="(http://([^/]*\.)?veehd\.com/dl/[^"]+)"', - self.html) - if m is None: - self.fail("embedded video url not found") - - return m.group(1) diff --git a/module/plugins/hoster/VeohCom.py b/module/plugins/hoster/VeohCom.py deleted file mode 100644 index fcd5e90a4..000000000 --- a/module/plugins/hoster/VeohCom.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class VeohCom(SimpleHoster): - __name__ = "VeohCom" - __type__ = "hoster" - __version__ = "0.2" - - __pattern__ = r'http://(?:www\.)?veoh\.com/(tv/)?(watch|videos)/(?P<ID>v\w+)' - __config__ = [("quality", "Low;High;Auto", "Quality", "Auto")] - - __description__ = """Veoh.com hoster plugin""" - __author_name__ = "Walter Purcaro" - __author_mail__ = "vuolter@gmail.com" - - FILE_NAME_PATTERN = r'<meta name="title" content="(?P<N>.*?)"' - OFFLINE_PATTERN = r'>Sorry, we couldn\'t find the video you were looking for' - - FILE_URL_REPLACEMENTS = [(__pattern__, r'http://www.veoh.com/watch/\g<ID>')] - - SH_COOKIES = [(".veoh.com", "lassieLocale", "en")] - - - def setup(self): - self.resumeDownload = self.multiDL = True - self.chunkLimit = -1 - - def handleFree(self): - quality = self.getConfig("quality") - if quality == "Auto": - quality = ("High", "Low") - for q in quality: - pattern = r'"fullPreviewHash%sPath":"(.+?)"' % q - m = re.search(pattern, self.html) - if m: - self.pyfile.name += ".mp4" - link = m.group(1).replace("\\", "") - self.logDebug("Download link: " + link) - self.download(link) - return - else: - self.logInfo("No %s quality video found" % q.upper()) - else: - self.fail("No video found!") - - -getInfo = create_getInfo(VeohCom) diff --git a/module/plugins/hoster/VidPlayNet.py b/module/plugins/hoster/VidPlayNet.py deleted file mode 100644 index eb7a13e4c..000000000 --- a/module/plugins/hoster/VidPlayNet.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# BigBuckBunny_320x180.mp4 - 61.7 Mb - http://vidplay.net/38lkev0h3jv0 - -from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo - - -class VidPlayNet(XFileSharingPro): - __name__ = "VidPlayNet" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'https?://(?:www\.)?vidplay\.net/\w{12}' - - __description__ = """VidPlay.net hoster plugin""" - __author_name__ = "t4skforce" - __author_mail__ = "t4skforce1337[AT]gmail[DOT]com" - - HOSTER_NAME = "vidplay.net" - - OFFLINE_PATTERN = r'<b>File Not Found</b><br>\s*<br>' - FILE_NAME_PATTERN = r'<b>Password:</b></div>\s*<h[1-6]>(?P<N>[^<]+)</h[1-6]>' - LINK_PATTERN = r'(http://([^/]*?%s|\d+\.\d+\.\d+\.\d+)(:\d+)?(/d/|(?:/files)?/\d+/\w+/)[^"\'<&]+)' % HOSTER_NAME - - -getInfo = create_getInfo(VidPlayNet) diff --git a/module/plugins/hoster/VimeoCom.py b/module/plugins/hoster/VimeoCom.py deleted file mode 100644 index 145d9053f..000000000 --- a/module/plugins/hoster/VimeoCom.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class VimeoCom(SimpleHoster): - __name__ = "VimeoCom" - __type__ = "hoster" - __version__ = "0.02" - - __pattern__ = r'https?://(?:www\.)?(player\.)?vimeo\.com/(video/)?(?P<ID>\d+)' - __config__ = [("quality", "Lowest;Mobile;SD;HD;Highest", "Quality", "Highest"), - ("original", "bool", "Try to download the original file first", True)] - - __description__ = """Vimeo.com hoster plugin""" - __author_name__ = "Walter Purcaro" - __author_mail__ = "vuolter@gmail.com" - - FILE_NAME_PATTERN = r'<title>(?P<N>.+) on Vimeo<' - OFFLINE_PATTERN = r'class="exception_header"' - TEMP_OFFLINE_PATTERN = r'Please try again in a few minutes.<' - - FILE_URL_REPLACEMENTS = [(__pattern__, r'https://www.vimeo.com/\g<ID>')] - - SH_COOKIES = [(".vimeo.com", "language", "en")] - - - def setup(self): - self.resumeDownload = self.multiDL = True - self.chunkLimit = -1 - - def handleFree(self): - password = self.getPassword() - - if self.js and 'class="btn iconify_down_b"' in self.html: - html = self.js.eval(self.load(self.pyfile.url, get={'action': "download", 'password': password}, decode=True)) - pattern = r'href="(?P<URL>http://vimeo\.com.+?)".*?\>(?P<QL>.+?) ' - else: - id = re.match(self.__pattern__, self.pyfile.url).group("ID") - html = self.load("https://player.vimeo.com/video/" + id, get={'password': password}) - pattern = r'"(?P<QL>\w+)":{"profile".*?"(?P<URL>http://pdl\.vimeocdn\.com.+?)"' - - link = dict([(l.group('QL').lower(), l.group('URL')) for l in re.finditer(pattern, html)]) - - if self.getConfig("original"): - if "original" in link: - self.download(link[q]) - return - else: - self.logInfo("Original file not downloadable") - - quality = self.getConfig("quality") - if quality == "Highest": - qlevel = ("hd", "sd", "mobile") - elif quality == "Lowest": - qlevel = ("mobile", "sd", "hd") - else: - qlevel = quality.lower() - - for q in qlevel: - if q in link: - self.download(link[q]) - return - else: - self.logInfo("No %s quality video found" % q.upper()) - else: - self.fail("No video found!") - - -getInfo = create_getInfo(VimeoCom) diff --git a/module/plugins/hoster/Vipleech4uCom.py b/module/plugins/hoster/Vipleech4uCom.py deleted file mode 100644 index da7131d39..000000000 --- a/module/plugins/hoster/Vipleech4uCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class Vipleech4uCom(DeadHoster): - __name__ = "Vipleech4uCom" - __type__ = "hoster" - __version__ = "0.2" - - __pattern__ = r'http://(?:www\.)?vipleech4u\.com/manager\.php' - - __description__ = """Vipleech4u.com hoster plugin""" - __author_name__ = "Kagenoshin" - __author_mail__ = "kagenoshin@gmx.ch" - - -getInfo = create_getInfo(Vipleech4uCom) diff --git a/module/plugins/hoster/WarserverCz.py b/module/plugins/hoster/WarserverCz.py deleted file mode 100644 index 8a565d777..000000000 --- a/module/plugins/hoster/WarserverCz.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class WarserverCz(DeadHoster): - __name__ = "WarserverCz" - __type__ = "hoster" - __version__ = "0.13" - - __pattern__ = r'http://(?:www\.)?warserver\.cz/stahnout/\d+' - - __description__ = """Warserver.cz hoster plugin""" - __author_name__ = "Walter Purcaro" - __author_mail__ = "vuolter@gmail.com" - - -getInfo = create_getInfo(WarserverCz) diff --git a/module/plugins/hoster/WebshareCz.py b/module/plugins/hoster/WebshareCz.py deleted file mode 100644 index a3918d5c4..000000000 --- a/module/plugins/hoster/WebshareCz.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.network.RequestFactory import getRequest -from module.plugins.internal.SimpleHoster import SimpleHoster - - -def getInfo(urls): - h = getRequest() - for url in urls: - h.load(url) - fid = re.search(WebshareCz.__pattern__, url).group('ID') - api_data = h.load('https://webshare.cz/api/file_info/', post={'ident': fid}) - if 'File not found' in api_data: - file_info = (url, 0, 1, url) - else: - name = re.search('<name>(.+)</name>', api_data).group(1) - size = re.search('<size>(.+)</size>', api_data).group(1) - file_info = (name, size, 2, url) - yield file_info - - -class WebshareCz(SimpleHoster): - __name__ = "WebshareCz" - __type__ = "hoster" - __version__ = "0.13" - - __pattern__ = r'https?://(?:www\.)?webshare.cz/(?:#/)?file/(?P<ID>\w+)' - - __description__ = """WebShare.cz hoster plugin""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - - def handleFree(self): - api_data = self.load('https://webshare.cz/api/file_link/', post={'ident': self.fid}) - self.logDebug("API data: " + api_data) - m = re.search('<link>(.+)</link>', api_data) - if m is None: - self.parseError('Unable to detect direct link') - direct = m.group(1) - self.logDebug("Direct link: " + direct) - self.download(direct, disposition=True) - - def getFileInfo(self): - self.logDebug("URL: %s" % self.pyfile.url) - - self.fid = re.match(self.__pattern__, self.pyfile.url).group('ID') - - self.load(self.pyfile.url) - api_data = self.load('https://webshare.cz/api/file_info/', post={'ident': self.fid}) - - if 'File not found' in api_data: - self.offline() - else: - self.pyfile.name = re.search('<name>(.+)</name>', api_data).group(1) - self.pyfile.size = re.search('<size>(.+)</size>', api_data).group(1) - - self.logDebug("FILE NAME: %s FILE SIZE: %s" % (self.pyfile.name, self.pyfile.size)) diff --git a/module/plugins/hoster/WrzucTo.py b/module/plugins/hoster/WrzucTo.py deleted file mode 100644 index 3b26b1a02..000000000 --- a/module/plugins/hoster/WrzucTo.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pycurl import HTTPHEADER - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class WrzucTo(SimpleHoster): - __name__ = "WrzucTo" - __type__ = "hoster" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?wrzuc\.to/([a-zA-Z0-9]+(\.wt|\.html)|(\w+/?linki/[a-zA-Z0-9]+))' - - __description__ = """Wrzuc.to hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_NAME_PATTERN = r'id="file_info">\s*<strong>(?P<N>.*?)</strong>' - FILE_SIZE_PATTERN = r'class="info">\s*<tr>\s*<td>(?P<S>.*?)</td>' - - SH_COOKIES = [(".wrzuc.to", "language", "en")] - - - def setup(self): - self.multiDL = True - - def handleFree(self): - data = dict(re.findall(r'(md5|file): "(.*?)"', self.html)) - if len(data) != 2: - self.parseError('File ID') - - self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"]) - self.req.http.lastURL = self.pyfile.url - self.load("http://www.wrzuc.to/ajax/server/prepair", post={"md5": data['md5']}) - - self.req.http.lastURL = self.pyfile.url - self.html = self.load("http://www.wrzuc.to/ajax/server/download_link", post={"file": data['file']}) - - data.update(re.findall(r'"(download_link|server_id)":"(.*?)"', self.html)) - if len(data) != 4: - self.parseError('Download URL') - - download_url = "http://%s.wrzuc.to/pobierz/%s" % (data['server_id'], data['download_link']) - self.logDebug("Download URL: %s" % download_url) - self.download(download_url) - - -getInfo = create_getInfo(WrzucTo) diff --git a/module/plugins/hoster/WuploadCom.py b/module/plugins/hoster/WuploadCom.py deleted file mode 100644 index b06318d42..000000000 --- a/module/plugins/hoster/WuploadCom.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class WuploadCom(DeadHoster): - __name__ = "WuploadCom" - __type__ = "hoster" - __version__ = "0.23" - - __pattern__ = r'http://(?:www\.)?wupload\..*?/file/(([a-z][0-9]+/)?[0-9]+)(/.*)?' - - __description__ = """Wupload.com hoster plugin""" - __author_name__ = ("jeix", "Paul King") - __author_mail__ = ("jeix@hasnomail.de", "") - - -getInfo = create_getInfo(WuploadCom) diff --git a/module/plugins/hoster/X7To.py b/module/plugins/hoster/X7To.py deleted file mode 100644 index cbd4b8b8e..000000000 --- a/module/plugins/hoster/X7To.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.internal.DeadHoster import DeadHoster, create_getInfo - - -class X7To(DeadHoster): - __name__ = "X7To" - __type__ = "hoster" - __version__ = "0.41" - - __pattern__ = r'http://(?:www\.)?x7.to/' - - __description__ = """X7.to hoster plugin""" - __author_name__ = "ernieb" - __author_mail__ = "ernieb" - - -getInfo = create_getInfo(X7To) diff --git a/module/plugins/hoster/XFileSharingPro.py b/module/plugins/hoster/XFileSharingPro.py deleted file mode 100644 index 25492fb49..000000000 --- a/module/plugins/hoster/XFileSharingPro.py +++ /dev/null @@ -1,324 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pycurl import FOLLOWLOCATION, LOW_SPEED_TIME -from random import random -from urllib import unquote -from urlparse import urlparse - -from module.network.RequestFactory import getURL -from module.plugins.internal.CaptchaService import ReCaptcha, SolveMedia -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, PluginParseError, replace_patterns -from module.utils import html_unescape - - -class XFileSharingPro(SimpleHoster): - """ - Common base for XFileSharingPro hosters like EasybytezCom, CramitIn, FiledinoCom... - Some hosters may work straight away when added to __pattern__ - However, most of them will NOT work because they are either down or running a customized version - """ - __name__ = "XFileSharingPro" - __type__ = "hoster" - __version__ = "0.32" - - __pattern__ = r'^unmatchable$' - - __description__ = """XFileSharingPro base hoster plugin""" - __author_name__ = ("zoidberg", "stickell") - __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") - - FILE_INFO_PATTERN = r'<tr><td align=right><b>Filename:</b></td><td nowrap>(?P<N>[^<]+)</td></tr>\s*.*?<small>\((?P<S>[^<]+)\)</small>' - FILE_NAME_PATTERN = r'<input type="hidden" name="fname" value="(?P<N>[^"]+)"' - FILE_SIZE_PATTERN = r'You have requested .*\((?P<S>[\d\.\,]+) ?(?P<U>\w+)?\)</font>' - OFFLINE_PATTERN = r'>\w+ (Not Found|file (was|has been) removed)' - - WAIT_PATTERN = r'<span id="countdown_str">.*?>(\d+)</span>' - - OVR_LINK_PATTERN = r'<h2>Download Link</h2>\s*<textarea[^>]*>([^<]+)' - - CAPTCHA_URL_PATTERN = r'(http://[^"\']+?/captchas?/[^"\']+)' - RECAPTCHA_URL_PATTERN = r'http://[^"\']+?recaptcha[^"\']+?\?k=([^"\']+)"' - CAPTCHA_DIV_PATTERN = r'>Enter code.*?<div.*?>(.*?)</div>' - SOLVEMEDIA_PATTERN = r'http:\/\/api\.solvemedia\.com\/papi\/challenge\.script\?k=(.*?)"' - - ERROR_PATTERN = r'class=["\']err["\'][^>]*>(.*?)</' - - - def setup(self): - if self.__name__ == "XFileSharingPro": - self.__pattern__ = self.core.pluginManager.hosterPlugins[self.__name__]['pattern'] - self.multiDL = True - else: - self.resumeDownload = self.multiDL = self.premium - - self.chunkLimit = 1 - - def process(self, pyfile): - self.prepare() - - pyfile.url = replace_patterns(pyfile.url, self.FILE_URL_REPLACEMENTS) - - if not re.match(self.__pattern__, pyfile.url): - if self.premium: - self.handleOverriden() - else: - self.fail("Only premium users can download from other hosters with %s" % self.HOSTER_NAME) - else: - try: - # Due to a 0.4.9 core bug self.load would use cookies even if - # cookies=False. Workaround using getURL to avoid cookies. - # Can be reverted in 0.5 as the cookies bug has been fixed. - self.html = getURL(pyfile.url, decode=True) - self.file_info = self.getFileInfo() - except PluginParseError: - self.file_info = None - - self.location = self.getDirectDownloadLink() - - if not self.file_info: - pyfile.name = html_unescape(unquote(urlparse( - self.location if self.location else pyfile.url).path.split("/")[-1])) - - if self.location: - self.startDownload(self.location) - elif self.premium: - self.handlePremium() - else: - self.handleFree() - - def prepare(self): - """ Initialize important variables """ - if not hasattr(self, "HOSTER_NAME"): - self.HOSTER_NAME = re.match(self.__pattern__, self.pyfile.url).group(1) - if not hasattr(self, "LINK_PATTERN"): - self.LINK_PATTERN = r'(http://([^/]*?%s|\d+\.\d+\.\d+\.\d+)(:\d+)?(/d/|(?:/files)?/\d+/\w+/)[^"\'<]+)' % self.HOSTER_NAME - - self.captcha = self.errmsg = None - self.passwords = self.getPassword().splitlines() - - def getDirectDownloadLink(self): - """ Get download link for premium users with direct download enabled """ - self.req.http.lastURL = self.pyfile.url - - self.req.http.c.setopt(FOLLOWLOCATION, 0) - self.html = self.load(self.pyfile.url, cookies=True, decode=True) - self.header = self.req.http.header - self.req.http.c.setopt(FOLLOWLOCATION, 1) - - location = None - m = re.search(r"Location\s*:\s*(.*)", self.header, re.I) - if m and re.match(self.LINK_PATTERN, m.group(1)): - location = m.group(1).strip() - - return location - - def handleFree(self): - url = self.getDownloadLink() - self.logDebug("Download URL: %s" % url) - self.startDownload(url) - - def getDownloadLink(self): - for i in xrange(5): - self.logDebug("Getting download link: #%d" % i) - data = self.getPostParameters() - - self.req.http.c.setopt(FOLLOWLOCATION, 0) - self.html = self.load(self.pyfile.url, post=data, ref=True, decode=True) - self.header = self.req.http.header - self.req.http.c.setopt(FOLLOWLOCATION, 1) - - m = re.search(r"Location\s*:\s*(.*)", self.header, re.I) - if m: - break - - m = re.search(self.LINK_PATTERN, self.html, re.S) - if m: - break - - else: - if self.errmsg and 'captcha' in self.errmsg: - self.fail("No valid captcha code entered") - else: - self.fail("Download link not found") - - return m.group(1) - - def handlePremium(self): - self.html = self.load(self.pyfile.url, post=self.getPostParameters()) - m = re.search(self.LINK_PATTERN, self.html) - if m is None: - self.parseError('DIRECT LINK') - self.startDownload(m.group(1)) - - def handleOverriden(self): - #only tested with easybytez.com - self.html = self.load("http://www.%s/" % self.HOSTER_NAME) - action, inputs = self.parseHtmlForm('') - upload_id = "%012d" % int(random() * 10 ** 12) - action += upload_id + "&js_on=1&utype=prem&upload_type=url" - inputs['tos'] = '1' - inputs['url_mass'] = self.pyfile.url - inputs['up1oad_type'] = 'url' - - self.logDebug(self.HOSTER_NAME, action, inputs) - #wait for file to upload to easybytez.com - self.req.http.c.setopt(LOW_SPEED_TIME, 600) - self.html = self.load(action, post=inputs) - - action, inputs = self.parseHtmlForm('F1') - if not inputs: - self.parseError('TEXTAREA') - self.logDebug(self.HOSTER_NAME, inputs) - if inputs['st'] == 'OK': - self.html = self.load(action, post=inputs) - elif inputs['st'] == 'Can not leech file': - self.retry(max_tries=20, wait_time=3 * 60, reason=inputs['st']) - else: - self.fail(inputs['st']) - - #get easybytez.com link for uploaded file - m = re.search(self.OVR_LINK_PATTERN, self.html) - if m is None: - self.parseError('DIRECT LINK (OVR)') - self.pyfile.url = m.group(1) - header = self.load(self.pyfile.url, just_header=True) - if 'location' in header: # Direct link - self.startDownload(self.pyfile.url) - else: - self.retry() - - def startDownload(self, link): - link = link.strip() - if self.captcha: - self.correctCaptcha() - self.logDebug('DIRECT LINK: %s' % link) - self.download(link, disposition=True) - - def checkErrors(self): - m = re.search(self.ERROR_PATTERN, self.html) - if m: - self.errmsg = m.group(1) - self.logWarning(re.sub(r"<.*?>", " ", self.errmsg)) - - if 'wait' in self.errmsg: - wait_time = sum([int(v) * {"hour": 3600, "minute": 60, "second": 1}[u] for v, u in - re.findall(r'(\d+)\s*(hour|minute|second)', self.errmsg)]) - self.wait(wait_time, True) - elif 'captcha' in self.errmsg: - self.invalidCaptcha() - elif 'premium' in self.errmsg and 'require' in self.errmsg: - self.fail("File can be downloaded by premium users only") - elif 'limit' in self.errmsg: - self.wait(1 * 60 * 60, True) - self.retry(25) - elif 'countdown' in self.errmsg or 'Expired' in self.errmsg: - self.retry() - elif 'maintenance' in self.errmsg: - self.tempOffline() - elif 'download files up to' in self.errmsg: - self.fail("File too large for free download") - else: - self.fail(self.errmsg) - - else: - self.errmsg = None - - return self.errmsg - - def getPostParameters(self): - for _ in xrange(3): - if not self.errmsg: - self.checkErrors() - - if hasattr(self, "FORM_PATTERN"): - action, inputs = self.parseHtmlForm(self.FORM_PATTERN) - else: - action, inputs = self.parseHtmlForm(input_names={"op": re.compile("^download")}) - - if not inputs: - action, inputs = self.parseHtmlForm('F1') - if not inputs: - if self.errmsg: - self.retry() - else: - self.parseError("Form not found") - - self.logDebug(self.HOSTER_NAME, inputs) - - if 'op' in inputs and inputs['op'] in ("download2", "download3"): - if "password" in inputs: - if self.passwords: - inputs['password'] = self.passwords.pop(0) - else: - self.fail("No or invalid passport") - - if not self.premium: - m = re.search(self.WAIT_PATTERN, self.html) - if m: - wait_time = int(m.group(1)) + 1 - self.setWait(wait_time, False) - else: - wait_time = 0 - - self.captcha = self.handleCaptcha(inputs) - - if wait_time: - self.wait() - - self.errmsg = None - return inputs - - else: - inputs['referer'] = self.pyfile.url - - if self.premium: - inputs['method_premium'] = "Premium Download" - if 'method_free' in inputs: - del inputs['method_free'] - else: - inputs['method_free'] = "Free Download" - if 'method_premium' in inputs: - del inputs['method_premium'] - - self.html = self.load(self.pyfile.url, post=inputs, ref=True) - self.errmsg = None - - else: - self.parseError('FORM: %s' % (inputs['op'] if 'op' in inputs else 'UNKNOWN')) - - def handleCaptcha(self, inputs): - m = re.search(self.RECAPTCHA_URL_PATTERN, self.html) - if m: - recaptcha_key = unquote(m.group(1)) - self.logDebug("RECAPTCHA KEY: %s" % recaptcha_key) - recaptcha = ReCaptcha(self) - inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge(recaptcha_key) - return 1 - else: - m = re.search(self.CAPTCHA_URL_PATTERN, self.html) - if m: - captcha_url = m.group(1) - inputs['code'] = self.decryptCaptcha(captcha_url) - return 2 - else: - m = re.search(self.CAPTCHA_DIV_PATTERN, self.html, re.DOTALL) - if m: - captcha_div = m.group(1) - self.logDebug(captcha_div) - numerals = re.findall(r'<span.*?padding-left\s*:\s*(\d+).*?>(\d)</span>', html_unescape(captcha_div)) - inputs['code'] = "".join([a[1] for a in sorted(numerals, key=lambda num: int(num[0]))]) - self.logDebug("CAPTCHA", inputs['code'], numerals) - return 3 - else: - m = re.search(self.SOLVEMEDIA_PATTERN, self.html) - if m: - captcha_key = m.group(1) - captcha = SolveMedia(self) - inputs['adcopy_challenge'], inputs['adcopy_response'] = captcha.challenge(captcha_key) - return 4 - return 0 - - -getInfo = create_getInfo(XFileSharingPro) diff --git a/module/plugins/hoster/XHamsterCom.py b/module/plugins/hoster/XHamsterCom.py deleted file mode 100644 index 3e002a0bb..000000000 --- a/module/plugins/hoster/XHamsterCom.py +++ /dev/null @@ -1,123 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urllib import unquote - -from module.common.json_layer import json_loads -from module.plugins.Hoster import Hoster - - -def clean_json(json_expr): - json_expr = re.sub('[\n\r]', '', json_expr) - json_expr = re.sub(' +', '', json_expr) - json_expr = re.sub('\'', '"', json_expr) - - return json_expr - - -class XHamsterCom(Hoster): - __name__ = "XHamsterCom" - __type__ = "hoster" - __version__ = "0.12" - - __pattern__ = r'http://(?:www\.)?xhamster\.com/movies/.+' - __config__ = [("type", ".mp4;.flv", "Preferred type", ".mp4")] - - __description__ = """XHamster.com hoster plugin""" - __author_name__ = None - __author_mail__ = None - - - def process(self, pyfile): - self.pyfile = pyfile - - if not self.file_exists(): - self.offline() - - if self.getConfig("type"): - self.desired_fmt = self.getConfig("type") - - pyfile.name = self.get_file_name() + self.desired_fmt - self.download(self.get_file_url()) - - def download_html(self): - url = self.pyfile.url - self.html = self.load(url) - - def get_file_url(self): - """ returns the absolute downloadable filepath - """ - if not self.html: - self.download_html() - - flashvar_pattern = re.compile('flashvars = ({.*?});', re.DOTALL) - json_flashvar = flashvar_pattern.search(self.html) - - if not json_flashvar: - self.fail("Parse error (flashvars)") - - j = clean_json(json_flashvar.group(1)) - flashvars = json_loads(j) - - if flashvars['srv']: - srv_url = flashvars['srv'] + '/' - else: - self.fail("Parse error (srv_url)") - - if flashvars['url_mode']: - url_mode = flashvars['url_mode'] - else: - self.fail("Parse error (url_mode)") - - if self.desired_fmt == ".mp4": - file_url = re.search(r"<a href=\"" + srv_url + "(.+?)\"", self.html) - if file_url is None: - self.fail("Parse error (file_url)") - file_url = file_url.group(1) - long_url = srv_url + file_url - self.logDebug("long_url: %s" % long_url) - else: - if flashvars['file']: - file_url = unquote(flashvars['file']) - else: - self.fail("Parse error (file_url)") - - if url_mode == '3': - long_url = file_url - self.logDebug("long_url: %s" % long_url) - else: - long_url = srv_url + "key=" + file_url - self.logDebug("long_url: %s" % long_url) - - return long_url - - def get_file_name(self): - if not self.html: - self.download_html() - - pattern = r"<title>(.*?) - xHamster\.com</title>" - name = re.search(pattern, self.html) - if name is None: - pattern = r"<h1 >(.*)</h1>" - name = re.search(pattern, self.html) - if name is None: - pattern = r"http://[www.]+xhamster\.com/movies/.*/(.*?)\.html?" - name = re.match(file_name_pattern, self.pyfile.url) - if name is None: - pattern = r"<div id=\"element_str_id\" style=\"display:none;\">(.*)</div>" - name = re.search(pattern, self.html) - if name is None: - return "Unknown" - - return name.group(1) - - def file_exists(self): - """ returns True or False - """ - if not self.html: - self.download_html() - if re.search(r"(.*Video not found.*)", self.html) is not None: - return False - else: - return True diff --git a/module/plugins/hoster/XVideosCom.py b/module/plugins/hoster/XVideosCom.py deleted file mode 100644 index 4f2611740..000000000 --- a/module/plugins/hoster/XVideosCom.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urllib import unquote - -from module.plugins.Hoster import Hoster - - -class XVideosCom(Hoster): - __name__ = "XVideos.com" - __type__ = "hoster" - __version__ = "0.1" - - __pattern__ = r'http://(?:www\.)?xvideos\.com/video([0-9]+)/.*' - - __description__ = """XVideos.com hoster plugin""" - __author_name__ = None - __author_mail__ = None - - - def process(self, pyfile): - site = self.load(pyfile.url) - pyfile.name = "%s (%s).flv" % ( - re.search(r"<h2>([^<]+)<span", site).group(1), - re.match(self.__pattern__, pyfile.url).group(1), - ) - self.download(unquote(re.search(r"flv_url=([^&]+)&", site).group(1))) diff --git a/module/plugins/hoster/Xdcc.py b/module/plugins/hoster/Xdcc.py deleted file mode 100644 index d26f12a78..000000000 --- a/module/plugins/hoster/Xdcc.py +++ /dev/null @@ -1,205 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -import socket -import struct -import sys -import time - -from os import makedirs -from os.path import exists, join -from select import select - -from module.plugins.Hoster import Hoster -from module.utils import safe_join - - -class Xdcc(Hoster): - __name__ = "Xdcc" - __type__ = "hoster" - __version__ = "0.32" - - __config__ = [("nick", "str", "Nickname", "pyload"), - ("ident", "str", "Ident", "pyloadident"), - ("realname", "str", "Realname", "pyloadreal")] - - __description__ = """Download from IRC XDCC bot""" - __author_name__ = "jeix" - __author_mail__ = "jeix@hasnomail.com" - - - def setup(self): - self.debug = 0 # 0,1,2 - self.timeout = 30 - self.multiDL = False - - def process(self, pyfile): - # change request type - self.req = pyfile.m.core.requestFactory.getRequest(self.__name__, type="XDCC") - - self.pyfile = pyfile - for _ in xrange(0, 3): - try: - nmn = self.doDownload(pyfile.url) - self.logDebug("%s: Download of %s finished." % (self.__name__, nmn)) - return - except socket.error, e: - if hasattr(e, "errno"): - errno = e.errno - else: - errno = e.args[0] - - if errno == 10054: - self.logDebug("XDCC: Server blocked our ip, retry in 5 min") - self.setWait(300) - self.wait() - continue - - self.fail("Failed due to socket errors. Code: %d" % errno) - - self.fail("Server blocked our ip, retry again later manually") - - def doDownload(self, url): - self.pyfile.setStatus("waiting") # real link - - m = re.match(r'xdcc://(.*?)/#?(.*?)/(.*?)/#?(\d+)/?', url) - server = m.group(1) - chan = m.group(2) - bot = m.group(3) - pack = m.group(4) - nick = self.getConfig('nick') - ident = self.getConfig('ident') - real = self.getConfig('realname') - - temp = server.split(':') - ln = len(temp) - if ln == 2: - host, port = temp - elif ln == 1: - host, port = temp[0], 6667 - else: - self.fail("Invalid hostname for IRC Server (%s)" % server) - - ####################### - # CONNECT TO IRC AND IDLE FOR REAL LINK - dl_time = time.time() - - sock = socket.socket() - sock.connect((host, int(port))) - if nick == "pyload": - nick = "pyload-%d" % (time.time() % 1000) # last 3 digits - sock.send("NICK %s\r\n" % nick) - sock.send("USER %s %s bla :%s\r\n" % (ident, host, real)) - time.sleep(3) - sock.send("JOIN #%s\r\n" % chan) - sock.send("PRIVMSG %s :xdcc send #%s\r\n" % (bot, pack)) - - # IRC recv loop - readbuffer = "" - done = False - retry = None - m = None - while True: - - # done is set if we got our real link - if done: - break - - if retry: - if time.time() > retry: - retry = None - dl_time = time.time() - sock.send("PRIVMSG %s :xdcc send #%s\r\n" % (bot, pack)) - - else: - if (dl_time + self.timeout) < time.time(): # todo: add in config - sock.send("QUIT :byebye\r\n") - sock.close() - self.fail("XDCC Bot did not answer") - - fdset = select([sock], [], [], 0) - if sock not in fdset[0]: - continue - - readbuffer += sock.recv(1024) - temp = readbuffer.split("\n") - readbuffer = temp.pop() - - for line in temp: - if self.debug is 2: - print "*> " + unicode(line, errors='ignore') - line = line.rstrip() - first = line.split() - - if first[0] == "PING": - sock.send("PONG %s\r\n" % first[1]) - - if first[0] == "ERROR": - self.fail("IRC-Error: %s" % line) - - msg = line.split(None, 3) - if len(msg) != 4: - continue - - msg = { - "origin": msg[0][1:], - "action": msg[1], - "target": msg[2], - "text": msg[3][1:] - } - - if nick == msg['target'][0:len(nick)] and "PRIVMSG" == msg['action']: - if msg['text'] == "\x01VERSION\x01": - self.logDebug("XDCC: Sending CTCP VERSION.") - sock.send("NOTICE %s :%s\r\n" % (msg['origin'], "pyLoad! IRC Interface")) - elif msg['text'] == "\x01TIME\x01": - self.logDebug("Sending CTCP TIME.") - sock.send("NOTICE %s :%d\r\n" % (msg['origin'], time.time())) - elif msg['text'] == "\x01LAG\x01": - pass # don't know how to answer - - if not (bot == msg['origin'][0:len(bot)] - and nick == msg['target'][0:len(nick)] - and msg['action'] in ("PRIVMSG", "NOTICE")): - continue - - if self.debug is 1: - print "%s: %s" % (msg['origin'], msg['text']) - - if "You already requested that pack" in msg['text']: - retry = time.time() + 300 - - if "you must be on a known channel to request a pack" in msg['text']: - self.fail("Wrong channel") - - m = re.match('\x01DCC SEND (.*?) (\d+) (\d+)(?: (\d+))?\x01', msg['text']) - if m: - done = True - - # get connection data - ip = socket.inet_ntoa(struct.pack('L', socket.ntohl(int(m.group(2))))) - port = int(m.group(3)) - packname = m.group(1) - - if len(m.groups()) > 3: - self.req.filesize = int(m.group(4)) - - self.pyfile.name = packname - - download_folder = self.config['general']['download_folder'] - filename = safe_join(download_folder, packname) - - self.logInfo("XDCC: Downloading %s from %s:%d" % (packname, ip, port)) - - self.pyfile.setStatus("downloading") - newname = self.req.download(ip, port, filename, sock, self.pyfile.setProgress) - if newname and newname != filename: - self.logInfo("%(name)s saved as %(newname)s" % {"name": self.pyfile.name, "newname": newname}) - filename = newname - - # kill IRC socket - # sock.send("QUIT :byebye\r\n") - sock.close() - - self.lastDownload = filename - return self.lastDownload diff --git a/module/plugins/hoster/YibaishiwuCom.py b/module/plugins/hoster/YibaishiwuCom.py deleted file mode 100644 index c6c285367..000000000 --- a/module/plugins/hoster/YibaishiwuCom.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.common.json_layer import json_loads -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class YibaishiwuCom(SimpleHoster): - __name__ = "YibaishiwuCom" - __type__ = "hoster" - __version__ = "0.12" - - __pattern__ = r'http://(?:www\.)?(?:u\.)?115.com/file/(?P<ID>\w+)' - - __description__ = """115.com hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - FILE_NAME_PATTERN = r"file_name: '(?P<N>[^']+)'" - FILE_SIZE_PATTERN = r"file_size: '(?P<S>[^']+)'" - OFFLINE_PATTERN = ur'<h3><i style="color:red;">ååïŒæåç äžååšïŒäžåŠšææçå§ïŒ</i></h3>' - - LINK_PATTERN = r'(/\?ct=(pickcode|download)[^"\']+)' - - - def handleFree(self): - m = re.search(self.LINK_PATTERN, self.html) - if m is None: - self.parseError("AJAX URL") - url = m.group(1) - self.logDebug(('FREEUSER' if m.group(2) == 'download' else 'GUEST') + ' URL', url) - - response = json_loads(self.load("http://115.com" + url, decode=False)) - if "urls" in response: - mirrors = response['urls'] - elif "data" in response: - mirrors = response['data'] - else: - mirrors = None - - for mr in mirrors: - try: - url = mr['url'].replace("\\", "") - self.logDebug("Trying URL: " + url) - self.download(url) - break - except: - continue - else: - self.fail('No working link found') - - -getInfo = create_getInfo(YibaishiwuCom) diff --git a/module/plugins/hoster/YoupornCom.py b/module/plugins/hoster/YoupornCom.py deleted file mode 100644 index 23b9b0a20..000000000 --- a/module/plugins/hoster/YoupornCom.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.Hoster import Hoster - - -class YoupornCom(Hoster): - __name__ = "YoupornCom" - __type__ = "hoster" - __version__ = "0.2" - - __pattern__ = r'http://(?:www\.)?youporn\.com/watch/.+' - - __description__ = """Youporn.com hoster plugin""" - __author_name__ = "willnix" - __author_mail__ = "willnix@pyload.org" - - - def process(self, pyfile): - self.pyfile = pyfile - - if not self.file_exists(): - self.offline() - - pyfile.name = self.get_file_name() - self.download(self.get_file_url()) - - def download_html(self): - url = self.pyfile.url - self.html = self.load(url, post={"user_choice": "Enter"}, cookies=False) - - def get_file_url(self): - """ returns the absolute downloadable filepath - """ - if not self.html: - self.download_html() - - return re.search(r'(http://download\.youporn\.com/download/\d+\?save=1)">', self.html).group(1) - - def get_file_name(self): - if not self.html: - self.download_html() - - file_name_pattern = r"<title>(.*) - Free Porn Videos - YouPorn</title>" - return re.search(file_name_pattern, self.html).group(1).replace("&", "&").replace("/", "") + '.flv' - - def file_exists(self): - """ returns True or False - """ - if not self.html: - self.download_html() - if re.search(r"(.*invalid video_id.*)", self.html) is not None: - return False - else: - return True diff --git a/module/plugins/hoster/YourfilesTo.py b/module/plugins/hoster/YourfilesTo.py deleted file mode 100644 index bdb91819f..000000000 --- a/module/plugins/hoster/YourfilesTo.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urllib import unquote - -from module.plugins.Hoster import Hoster - - -class YourfilesTo(Hoster): - __name__ = "YourfilesTo" - __type__ = "hoster" - __version__ = "0.21" - - __pattern__ = r'(http://)?(?:www\.)?yourfiles\.(to|biz)/\?d=[a-zA-Z0-9]+' - - __description__ = """Youfiles.to hoster plugin""" - __author_name__ = ("jeix", "skydancer") - __author_mail__ = ("jeix@hasnomail.de", "skydancer@hasnomail.de") - - - def process(self, pyfile): - self.pyfile = pyfile - self.prepare() - self.download(self.get_file_url()) - - def prepare(self): - if not self.file_exists(): - self.offline() - - self.pyfile.name = self.get_file_name() - - wait_time = self.get_waiting_time() - self.setWait(wait_time) - self.logDebug("%s: Waiting %d seconds." % (self.__name__, wait_time)) - self.wait() - - def get_waiting_time(self): - if not self.html: - self.download_html() - - #var zzipitime = 15; - m = re.search(r'var zzipitime = (\d+);', self.html) - if m: - sec = int(m.group(1)) - else: - sec = 0 - - return sec - - def download_html(self): - url = self.pyfile.url - self.html = self.load(url) - - def get_file_url(self): - """ returns the absolute downloadable filepath - """ - url = re.search(r"var bla = '(.*?)';", self.html) - if url: - url = url.group(1) - url = unquote(url.replace("http://http:/http://", "http://").replace("dumdidum", "")) - return url - else: - self.fail("absolute filepath could not be found. offline? ") - - def get_file_name(self): - if not self.html: - self.download_html() - - return re.search("<title>(.*)</title>", self.html).group(1) - - def file_exists(self): - """ returns True or False - """ - if not self.html: - self.download_html() - - if re.search(r"HTTP Status 404", self.html) is not None: - return False - else: - return True diff --git a/module/plugins/hoster/YoutubeCom.py b/module/plugins/hoster/YoutubeCom.py deleted file mode 100644 index 5ffef5531..000000000 --- a/module/plugins/hoster/YoutubeCom.py +++ /dev/null @@ -1,180 +0,0 @@ -# -*- coding: utf-8 -*- - -import os -import re -import subprocess - -from urllib import unquote - -from module.plugins.Hoster import Hoster -from module.plugins.internal.SimpleHoster import replace_patterns -from module.utils import html_unescape - - -def which(program): - """Works exactly like the unix command which - - Courtesy of http://stackoverflow.com/a/377028/675646""" - - def is_exe(fpath): - return os.path.isfile(fpath) and os.access(fpath, os.X_OK) - - fpath, fname = os.path.split(program) - if fpath: - if is_exe(program): - return program - else: - for path in os.environ['PATH'].split(os.pathsep): - path = path.strip('"') - exe_file = os.path.join(path, program) - if is_exe(exe_file): - return exe_file - - return None - - -class YoutubeCom(Hoster): - __name__ = "YoutubeCom" - __type__ = "hoster" - __version__ = "0.40" - - __pattern__ = r'https?://(?:[^/]*\.)?(?:youtube\.com|youtu\.be)/watch.*?[?&]v=.*' - __config__ = [("quality", "sd;hd;fullhd;240p;360p;480p;720p;1080p;3072p", "Quality Setting", "hd"), - ("fmt", "int", "FMT/ITAG Number (5-102, 0 for auto)", 0), - (".mp4", "bool", "Allow .mp4", True), - (".flv", "bool", "Allow .flv", True), - (".webm", "bool", "Allow .webm", False), - (".3gp", "bool", "Allow .3gp", False), - ("3d", "bool", "Prefer 3D", False)] - - __description__ = """Youtube.com hoster plugin""" - __author_name__ = ("spoob", "zoidberg") - __author_mail__ = ("spoob@pyload.org", "zoidberg@mujmail.cz") - - FILE_URL_REPLACEMENTS = [(r'youtu\.be/', 'youtube.com/')] - - # Invalid characters that must be removed from the file name - invalidChars = u'\u2605:?><"|\\' - - # name, width, height, quality ranking, 3D - formats = {5: (".flv", 400, 240, 1, False), - 6: (".flv", 640, 400, 4, False), - 17: (".3gp", 176, 144, 0, False), - 18: (".mp4", 480, 360, 2, False), - 22: (".mp4", 1280, 720, 8, False), - 43: (".webm", 640, 360, 3, False), - 34: (".flv", 640, 360, 4, False), - 35: (".flv", 854, 480, 6, False), - 36: (".3gp", 400, 240, 1, False), - 37: (".mp4", 1920, 1080, 9, False), - 38: (".mp4", 4096, 3072, 10, False), - 44: (".webm", 854, 480, 5, False), - 45: (".webm", 1280, 720, 7, False), - 46: (".webm", 1920, 1080, 9, False), - 82: (".mp4", 640, 360, 3, True), - 83: (".mp4", 400, 240, 1, True), - 84: (".mp4", 1280, 720, 8, True), - 85: (".mp4", 1920, 1080, 9, True), - 100: (".webm", 640, 360, 3, True), - 101: (".webm", 640, 360, 4, True), - 102: (".webm", 1280, 720, 8, True)} - - - def setup(self): - self.resumeDownload = self.multiDL = True - - def process(self, pyfile): - pyfile.url = replace_patterns(pyfile.url, self.FILE_URL_REPLACEMENTS) - html = self.load(pyfile.url, decode=True) - - if re.search(r'<div id="player-unavailable" class="\s*player-width player-height\s*">', html): - self.offline() - - if "We have been receiving a large volume of requests from your network." in html: - self.tempOffline() - - #get config - use3d = self.getConfig("3d") - if use3d: - quality = {"sd": 82, "hd": 84, "fullhd": 85, "240p": 83, "360p": 82, - "480p": 82, "720p": 84, "1080p": 85, "3072p": 85} - else: - quality = {"sd": 18, "hd": 22, "fullhd": 37, "240p": 5, "360p": 18, - "480p": 35, "720p": 22, "1080p": 37, "3072p": 38} - desired_fmt = self.getConfig("fmt") - if desired_fmt and desired_fmt not in self.formats: - self.logWarning("FMT %d unknown - using default." % desired_fmt) - desired_fmt = 0 - if not desired_fmt: - desired_fmt = quality.get(self.getConfig("quality"), 18) - - #parse available streams - streams = re.search(r'"url_encoded_fmt_stream_map": "(.*?)",', html).group(1) - streams = [x.split('\u0026') for x in streams.split(',')] - streams = [dict((y.split('=', 1)) for y in x) for x in streams] - streams = [(int(x['itag']), unquote(x['url'])) for x in streams] - #self.logDebug("Found links: %s" % streams) - self.logDebug("AVAILABLE STREAMS: %s" % [x[0] for x in streams]) - - #build dictionary of supported itags (3D/2D) - allowed = lambda x: self.getConfig(self.formats[x][0]) - streams = [x for x in streams if x[0] in self.formats and allowed(x[0])] - if not streams: - self.fail("No available stream meets your preferences") - fmt_dict = dict([x for x in streams if self.formats[x[0]][4] == use3d] or streams) - - self.logDebug("DESIRED STREAM: ITAG:%d (%s) %sfound, %sallowed" % - (desired_fmt, "%s %dx%d Q:%d 3D:%s" % self.formats[desired_fmt], - "" if desired_fmt in fmt_dict else "NOT ", "" if allowed(desired_fmt) else "NOT ")) - - #return fmt nearest to quality index - if desired_fmt in fmt_dict and allowed(desired_fmt): - fmt = desired_fmt - else: - sel = lambda x: self.formats[x][3] # select quality index - comp = lambda x, y: abs(sel(x) - sel(y)) - - self.logDebug("Choosing nearest fmt: %s" % [(x, allowed(x), comp(x, desired_fmt)) for x in fmt_dict.keys()]) - fmt = reduce(lambda x, y: x if comp(x, desired_fmt) <= comp(y, desired_fmt) and - sel(x) > sel(y) else y, fmt_dict.keys()) - - self.logDebug("Chosen fmt: %s" % fmt) - url = fmt_dict[fmt] - self.logDebug("URL: %s" % url) - - #set file name - file_suffix = self.formats[fmt][0] if fmt in self.formats else ".flv" - file_name_pattern = '<meta name="title" content="(.+?)">' - name = re.search(file_name_pattern, html).group(1).replace("/", "") - - # Cleaning invalid characters from the file name - name = name.encode('ascii', 'replace') - for c in self.invalidChars: - name = name.replace(c, '_') - - pyfile.name = html_unescape(name) - - time = re.search(r"t=((\d+)m)?(\d+)s", pyfile.url) - ffmpeg = which("ffmpeg") - if ffmpeg and time: - m, s = time.groups()[1:] - if m is None: - m = "0" - - pyfile.name += " (starting at %s:%s)" % (m, s) - pyfile.name += file_suffix - - filename = self.download(url) - - if ffmpeg and time: - inputfile = filename + "_" - os.rename(filename, inputfile) - - subprocess.call([ - ffmpeg, - "-ss", "00:%s:%s" % (m, s), - "-i", inputfile, - "-vcodec", "copy", - "-acodec", "copy", - filename]) - os.remove(inputfile) diff --git a/module/plugins/hoster/ZDF.py b/module/plugins/hoster/ZDF.py deleted file mode 100644 index d51a16a80..000000000 --- a/module/plugins/hoster/ZDF.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from xml.etree.ElementTree import fromstring - -from module.plugins.Hoster import Hoster - - -# Based on zdfm by Roland Beermann (http://github.com/enkore/zdfm/) -class ZDF(Hoster): - __name__ = "ZDF Mediathek" - __type__ = "hoster" - __version__ = "0.8" - - __pattern__ = r'http://(?:www\.)?zdf\.de/ZDFmediathek/[^0-9]*([0-9]+)[^0-9]*' - - __description__ = """ZDF.de hoster plugin""" - __author_name__ = None - __author_mail__ = None - - XML_API = "http://www.zdf.de/ZDFmediathek/xmlservice/web/beitragsDetails?id=%i" - - - @staticmethod - def video_key(video): - return ( - int(video.findtext("videoBitrate", "0")), - any(f.text == "progressive" for f in video.iter("facet")), - ) - - @staticmethod - def video_valid(video): - return video.findtext("url").startswith("http") and video.findtext("url").endswith(".mp4") and \ - video.findtext("facets/facet").startswith("progressive") - - @staticmethod - def get_id(url): - return int(re.search(r"[^0-9]*([0-9]{4,})[^0-9]*", url).group(1)) - - def process(self, pyfile): - xml = fromstring(self.load(self.XML_API % self.get_id(pyfile.url))) - - status = xml.findtext("./status/statuscode") - if status != "ok": - self.fail("Error retrieving manifest.") - - video = xml.find("video") - title = video.findtext("information/title") - - pyfile.name = title - - target_url = sorted((v for v in video.iter("formitaet") if self.video_valid(v)), - key=self.video_key)[-1].findtext("url") - - self.download(target_url) diff --git a/module/plugins/hoster/ZeveraCom.py b/module/plugins/hoster/ZeveraCom.py deleted file mode 100644 index b6b59b242..000000000 --- a/module/plugins/hoster/ZeveraCom.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Hoster import Hoster - - -class ZeveraCom(Hoster): - __name__ = "ZeveraCom" - __type__ = "hoster" - __version__ = "0.21" - - __pattern__ = r'http://(?:www\.)?zevera.com/.*' - - __description__ = """Zevera.com hoster plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - - def setup(self): - self.resumeDownload = self.multiDL = True - self.chunkLimit = 1 - - def process(self, pyfile): - if not self.account: - self.logError(_("Please enter your %s account or deactivate this plugin") % "zevera.com") - self.fail("No zevera.com account provided") - - self.logDebug("zevera.com: Old URL: %s" % pyfile.url) - - if self.account.getAPIData(self.req, cmd="checklink", olink=pyfile.url) != "Alive": - self.fail("Offline or not downloadable - contact Zevera support") - - header = self.account.getAPIData(self.req, just_header=True, cmd="generatedownloaddirect", olink=pyfile.url) - if not "location" in header: - self.fail("Unable to initialize download - contact Zevera support") - - self.download(header['location'], disposition=True) - - check = self.checkDownload({"error": 'action="ErrorDownload.aspx'}) - if check == "error": - self.fail("Error response received - contact Zevera support") - - # BitAPI not used - defunct, probably abandoned by Zevera - # - # api_url = "http://zevera.com/API.ashx" - # - # def process(self, pyfile): - # if not self.account: - # self.logError(_("Please enter your zevera.com account or deactivate this plugin")) - # self.fail("No zevera.com account provided") - # - # self.logDebug("zevera.com: Old URL: %s" % pyfile.url) - # - # last_size = retries = 0 - # olink = pyfile.url #quote(pyfile.url.encode('utf_8')) - # - # for _ in xrange(100): - # self.retData = self.account.loadAPIRequest(self.req, cmd = 'download_request', olink = olink) - # self.checkAPIErrors(self.retData) - # - # if self.retData['FileInfo']['StatusID'] == 100: - # break - # elif self.retData['FileInfo']['StatusID'] == 99: - # self.fail('Failed to initialize download (99)') - # else: - # if self.retData['FileInfo']['Progress']['BytesReceived'] <= last_size: - # if retries >= 6: - # self.fail('Failed to initialize download (%d)' % self.retData['FileInfo']['StatusID'] ) - # retries += 1 - # else: - # retries = 0 - # - # last_size = self.retData['FileInfo']['Progress']['BytesReceived'] - # - # self.setWait(self.retData['Update_Wait']) - # self.wait() - # - # pyfile.name = self.retData['FileInfo']['RealFileName'] - # pyfile.size = self.retData['FileInfo']['FileSizeInBytes'] - # - # self.retData = self.account.loadAPIRequest(self.req, cmd = 'download_start', - # FileID = self.retData['FileInfo']['FileID']) - # self.checkAPIErrors(self.retData) - # - # self.download(self.api_url, get = { - # 'cmd': "open_stream", - # 'login': self.account.loginname, - # 'pass': self.account.password, - # 'FileID': self.retData['FileInfo']['FileID'], - # 'startBytes': 0 - # } - # ) - # - # def checkAPIErrors(self, retData): - # if not retData: - # self.fail('Unknown API response') - # - # if retData['ErrorCode']: - # self.logError(retData['ErrorCode'], retData['ErrorMessage']) - # #self.fail('ERROR: ' + retData['ErrorMessage']) - # - # if pyfile.size / 1024000 > retData['AccountInfo']['AvailableTODAYTrafficForUseInMBytes']: - # self.logWarning("Not enough data left to download the file") - # - # def crazyDecode(self, ustring): - # # accepts decoded ie. unicode string - API response is double-quoted, double-utf8-encoded - # # no idea what the proper order of calling these functions would be :-/ - # return html_unescape(unquote(unquote(ustring.replace( - # '@DELIMITER@','#'))).encode('raw_unicode_escape').decode('utf-8')) diff --git a/module/plugins/hoster/ZippyshareCom.py b/module/plugins/hoster/ZippyshareCom.py deleted file mode 100644 index 33a672198..000000000 --- a/module/plugins/hoster/ZippyshareCom.py +++ /dev/null @@ -1,74 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Test links: -# http://www13.zippyshare.com/v/18665333/file.html - -import re - -from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo - - -class ZippyshareCom(SimpleHoster): - __name__ = "ZippyshareCom" - __type__ = "hoster" - __version__ = "0.49" - - __pattern__ = r'(?P<HOST>http://www\d{0,2}\.zippyshare.com)/v(?:/|iew.jsp.*key=)(?P<KEY>\d+)' - - __description__ = """Zippyshare.com hoster plugin""" - __author_name__ = ("spoob", "zoidberg", "stickell", "skylab") - __author_mail__ = ("spoob@pyload.org", "zoidberg@mujmail.cz", "l.stickell@yahoo.it", "development@sky-lab.de") - - FILE_NAME_PATTERN = r'<title>Zippyshare\.com - (?P<N>[^<]+)</title>' - FILE_SIZE_PATTERN = r'>Size:</font>\s*<font [^>]*>(?P<S>[0-9.,]+) (?P<U>[kKMG]+)i?B</font><br />' - FILE_INFO_PATTERN = r'document\.getElementById\(\'dlbutton\'\)\.href = "[^;]*/(?P<N>[^"]+)";' - OFFLINE_PATTERN = r'>File does not exist on this server</div>' - - SH_COOKIES = [(".zippyshare.com", "ziplocale", "en")] - - - def setup(self): - self.multiDL = True - - def handleFree(self): - url = self.get_file_url() - if not url: - self.fail("Download URL not found.") - self.logDebug("Download URL: %s" % url) - self.download(url) - - def get_file_url(self): - """returns the absolute downloadable filepath""" - url_parts = re.search(r'(addthis:url="(http://www(\d+).zippyshare.com/v/(\d*)/file.html))', self.html) - number = url_parts.group(4) - check = re.search(r'<script type="text/javascript">([^<]*?)(var a = (\d*);)', self.html) - if check: - a = int(re.search(r'<script type="text/javascript">([^<]*?)(var a = (\d*);)', self.html).group(3)) - k = int(re.search(r'<script type="text/javascript">([^<]*?)(\d*%(\d*))', self.html).group(3)) - checksum = ((a + 3) % k) * ((a + 3) % 3) + 18 - else: - # This might work but is insecure - # checksum = eval(re.search("((\d*)\s\%\s(\d*)\s\+\s(\d*)\s\%\s(\d*))", self.html).group(0)) - - m = re.search(r"((?P<a>\d*)\s%\s(?P<b>\d*)\s\+\s(?P<c>\d*)\s%\s(?P<k>\d*))", self.html) - if m is None: - self.parseError("Unable to detect values to calculate direct link") - a = int(m.group("a")) - b = int(m.group("b")) - c = int(m.group("c")) - k = int(m.group("k")) - if a == c: - checksum = ((a % b) + (a % k)) - else: - checksum = ((a % b) + (c % k)) - - self.logInfo('Checksum: %s' % checksum) - - filename = re.search(r'>Name:</font>\s*<font [^>]*>(?P<N>[^<]+)</font><br />', self.html).group('N') - - url = "/d/%s/%s/%s" % (number, checksum, filename) - self.logInfo(self.file_info['HOST'] + url) - return self.file_info['HOST'] + url - - -getInfo = create_getInfo(ZippyshareCom) diff --git a/module/plugins/internal/DeadCrypter.py b/module/plugins/internal/DeadCrypter.py deleted file mode 100644 index 296de739d..000000000 --- a/module/plugins/internal/DeadCrypter.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Crypter import Crypter as _Crypter - - -class DeadCrypter(_Crypter): - __name__ = "DeadCrypter" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = None - - __description__ = """Crypter is no longer available""" - __author_name__ = "stickell" - __author_mail__ = "l.stickell@yahoo.it" - - - def setup(self): - self.fail("Crypter is no longer available") diff --git a/module/plugins/internal/DeadHoster.py b/module/plugins/internal/DeadHoster.py deleted file mode 100644 index 35a948824..000000000 --- a/module/plugins/internal/DeadHoster.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.Hoster import Hoster as _Hoster - - -def create_getInfo(plugin): - - def getInfo(urls): - yield [('#N/A: ' + url, 0, 1, url) for url in urls] - - return getInfo - - -class DeadHoster(_Hoster): - __name__ = "DeadHoster" - __type__ = "hoster" - __version__ = "0.11" - - __pattern__ = None - - __description__ = """Hoster is no longer available""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - - def setup(self): - self.fail("Hoster is no longer available") diff --git a/module/plugins/internal/MultiHoster.py b/module/plugins/internal/MultiHoster.py deleted file mode 100644 index 6bcad293c..000000000 --- a/module/plugins/internal/MultiHoster.py +++ /dev/null @@ -1,192 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.Hook import Hook -from module.utils import remove_chars - - -class MultiHoster(Hook): - __name__ = "MultiHoster" - __type__ = "hook" - __version__ = "0.20" - - __description__ = """Generic MultiHoster plugin""" - __author_name__ = "pyLoad Team" - __author_mail__ = "admin@pyload.org" - - replacements = [("2shared.com", "twoshared.com"), ("4shared.com", "fourshared.com"), ("cloudnator.com", "shragle.com"), - ("ifile.it", "filecloud.io"), ("easy-share.com", "crocko.com"), ("freakshare.net", "freakshare.com"), - ("hellshare.com", "hellshare.cz"), ("share-rapid.cz", "sharerapid.com"), ("sharerapid.cz", "sharerapid.com"), - ("ul.to", "uploaded.to"), ("uploaded.net", "uploaded.to"), ("1fichier.com", "onefichier.com")] - ignored = [] - interval = 24 * 60 * 60 #: reload hosters daily - - - def setup(self): - self.hosters = [] - self.supported = [] - self.new_supported = [] - - def getConfig(self, option, default=''): - """getConfig with default value - subclass may not implements all config options""" - try: - # Fixed loop due to getConf deprecation in 0.4.10 - return super(MultiHoster, self).getConfig(option) - except KeyError: - return default - - def getHosterCached(self): - if not self.hosters: - try: - hosterSet = self.toHosterSet(self.getHoster()) - set(self.ignored) - except Exception, e: - self.logError("%s" % str(e)) - return [] - - try: - configMode = self.getConfig('hosterListMode', 'all') - if configMode in ("listed", "unlisted"): - configSet = self.toHosterSet(self.getConfig('hosterList', '').replace('|', ',').replace(';', ',').split(',')) - - if configMode == "listed": - hosterSet &= configSet - else: - hosterSet -= configSet - - except Exception, e: - self.logError("%s" % str(e)) - - self.hosters = list(hosterSet) - - return self.hosters - - def toHosterSet(self, hosters): - hosters = set((str(x).strip().lower() for x in hosters)) - - for rep in self.replacements: - if rep[0] in hosters: - hosters.remove(rep[0]) - hosters.add(rep[1]) - - hosters.discard('') - return hosters - - def getHoster(self): - """Load list of supported hoster - - :return: List of domain names - """ - raise NotImplementedError - - def coreReady(self): - if self.cb: - self.core.scheduler.removeJob(self.cb) - - self.setConfig("activated", True) #: config not in sync after plugin reload - - cfg_interval = self.getConfig("interval", None) #: reload interval in hours - if cfg_interval is not None: - self.interval = cfg_interval * 60 * 60 - - if self.interval: - self._periodical() - else: - self.periodical() - - def initPeriodical(self): - pass - - def periodical(self): - """reload hoster list periodically""" - self.logInfo("Reloading supported hoster list") - - old_supported = self.supported - self.supported, self.new_supported, self.hosters = [], [], [] - - self.overridePlugins() - - old_supported = [hoster for hoster in old_supported if hoster not in self.supported] - if old_supported: - self.logDebug("UNLOAD: %s" % ", ".join(old_supported)) - for hoster in old_supported: - self.unloadHoster(hoster) - - def overridePlugins(self): - pluginMap = {} - for name in self.core.pluginManager.hosterPlugins.keys(): - pluginMap[name.lower()] = name - - accountList = [name.lower() for name, data in self.core.accountManager.accounts.items() if data] - excludedList = [] - - for hoster in self.getHosterCached(): - name = remove_chars(hoster.lower(), "-.") - - if name in accountList: - excludedList.append(hoster) - else: - if name in pluginMap: - self.supported.append(pluginMap[name]) - else: - self.new_supported.append(hoster) - - if not self.supported and not self.new_supported: - self.logError(_("No Hoster loaded")) - return - - module = self.core.pluginManager.getPlugin(self.__name__) - klass = getattr(module, self.__name__) - - # inject plugin plugin - self.logDebug("Overwritten Hosters: %s" % ", ".join(sorted(self.supported))) - for hoster in self.supported: - dict = self.core.pluginManager.hosterPlugins[hoster] - dict['new_module'] = module - dict['new_name'] = self.__name__ - - if excludedList: - self.logInfo("The following hosters were not overwritten - account exists: %s" % ", ".join(sorted(excludedList))) - - if self.new_supported: - self.logDebug("New Hosters: %s" % ", ".join(sorted(self.new_supported))) - - # create new regexp - regexp = r".*(%s).*" % "|".join([x.replace(".", "\\.") for x in self.new_supported]) - if hasattr(klass, "__pattern__") and isinstance(klass.__pattern__, basestring) and '://' in klass.__pattern__: - regexp = r"%s|%s" % (klass.__pattern__, regexp) - - self.logDebug("Regexp: %s" % regexp) - - dict = self.core.pluginManager.hosterPlugins[self.__name__] - dict['pattern'] = regexp - dict['re'] = re.compile(regexp) - - def unloadHoster(self, hoster): - dict = self.core.pluginManager.hosterPlugins[hoster] - if "module" in dict: - del dict['module'] - - if "new_module" in dict: - del dict['new_module'] - del dict['new_name'] - - def unload(self): - """Remove override for all hosters. Scheduler job is removed by hookmanager""" - for hoster in self.supported: - self.unloadHoster(hoster) - - # reset pattern - klass = getattr(self.core.pluginManager.getPlugin(self.__name__), self.__name__) - dict = self.core.pluginManager.hosterPlugins[self.__name__] - dict['pattern'] = getattr(klass, "__pattern__", r'^unmatchable$') - dict['re'] = re.compile(dict['pattern']) - - def downloadFailed(self, pyfile): - """remove plugin override if download fails but not if file is offline/temp.offline""" - if pyfile.hasStatus("failed") and self.getConfig("unloadFailing", True): - hdict = self.core.pluginManager.hosterPlugins[pyfile.pluginname] - if "new_name" in hdict and hdict['new_name'] == self.__name__: - self.logDebug("Unload MultiHoster", pyfile.pluginname, hdict) - self.unloadHoster(pyfile.pluginname) - pyfile.setStatus("queued") diff --git a/module/plugins/internal/SimpleCrypter.py b/module/plugins/internal/SimpleCrypter.py deleted file mode 100644 index 0b99feb42..000000000 --- a/module/plugins/internal/SimpleCrypter.py +++ /dev/null @@ -1,118 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from module.plugins.Crypter import Crypter -from module.plugins.internal.SimpleHoster import PluginParseError, replace_patterns, set_cookies -from module.utils import html_unescape - - -class SimpleCrypter(Crypter): - __name__ = "SimpleCrypter" - __type__ = "crypter" - __version__ = "0.10" - - __pattern__ = None - - __description__ = """Simple decrypter plugin""" - __author_name__ = ("stickell", "zoidberg", "Walter Purcaro") - __author_mail__ = ("l.stickell@yahoo.it", "zoidberg@mujmail.cz", "vuolter@gmail.com") - - """ - Following patterns should be defined by each crypter: - - LINK_PATTERN: group(1) must be a download link or a regex to catch more links - example: LINK_PATTERN = r'<div class="link"><a href="(http://speedload.org/\w+)' - - TITLE_PATTERN: (optional) The group defined by 'title' should be the title - example: TITLE_PATTERN = r'<title>Files of: (?P<title>[^<]+) folder</title>' - - OFFLINE_PATTERN: (optional) Checks if the file is yet available online - example: OFFLINE_PATTERN = r'File (deleted|not found)' - - TEMP_OFFLINE_PATTERN: (optional) Checks if the file is temporarily offline - example: TEMP_OFFLINE_PATTERN = r'Server maintainance' - - - If it's impossible to extract the links using the LINK_PATTERN only you can override the getLinks method. - - If the links are disposed on multiple pages you need to define a pattern: - - PAGES_PATTERN: The group defined by 'pages' must be the total number of pages - example: PAGES_PATTERN = r'Pages: (?P<pages>\d+)' - - and a function: - - loadPage(self, page_n): - return the html of the page number 'page_n' - """ - - URL_REPLACEMENTS = [] - - SH_COOKIES = True # or False or list of tuples [(domain, name, value)] - - - def setup(self): - if isinstance(self.SH_COOKIES, list): - set_cookies(self.req.cj, self.SH_COOKIES) - - def decrypt(self, pyfile): - pyfile.url = replace_patterns(pyfile.url, self.URL_REPLACEMENTS) - - self.html = self.load(pyfile.url, decode=True) - - self.checkOnline() - - package_name, folder_name = self.getPackageNameAndFolder() - - self.package_links = self.getLinks() - - if hasattr(self, 'PAGES_PATTERN') and hasattr(self, 'loadPage'): - self.handleMultiPages() - - self.logDebug('Package has %d links' % len(self.package_links)) - - if self.package_links: - self.packages = [(package_name, self.package_links, folder_name)] - else: - self.fail('Could not extract any links') - - def getLinks(self): - """ - Returns the links extracted from self.html - You should override this only if it's impossible to extract links using only the LINK_PATTERN. - """ - return re.findall(self.LINK_PATTERN, self.html) - - def checkOnline(self): - if hasattr(self, "OFFLINE_PATTERN") and re.search(self.OFFLINE_PATTERN, self.html): - self.offline() - elif hasattr(self, "TEMP_OFFLINE_PATTERN") and re.search(self.TEMP_OFFLINE_PATTERN, self.html): - self.tempOffline() - - def getPackageNameAndFolder(self): - if hasattr(self, 'TITLE_PATTERN'): - m = re.search(self.TITLE_PATTERN, self.html) - if m: - name = folder = html_unescape(m.group('title').strip()) - self.logDebug("Found name [%s] and folder [%s] in package info" % (name, folder)) - return name, folder - - name = self.pyfile.package().name - folder = self.pyfile.package().folder - self.logDebug("Package info not found, defaulting to pyfile name [%s] and folder [%s]" % (name, folder)) - return name, folder - - def handleMultiPages(self): - pages = re.search(self.PAGES_PATTERN, self.html) - if pages: - pages = int(pages.group('pages')) - else: - pages = 1 - - for p in xrange(2, pages + 1): - self.html = self.loadPage(p) - self.package_links += self.getLinks() - - def parseError(self, msg): - raise PluginParseError(msg) diff --git a/module/plugins/internal/SimpleHoster.py b/module/plugins/internal/SimpleHoster.py deleted file mode 100644 index ec9cf1b70..000000000 --- a/module/plugins/internal/SimpleHoster.py +++ /dev/null @@ -1,292 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from time import time -from urlparse import urlparse - -from module.network.CookieJar import CookieJar -from module.network.RequestFactory import getURL -from module.plugins.Hoster import Hoster -from module.utils import fixup, html_unescape, parseFileSize - - -def replace_patterns(string, ruleslist): - for r in ruleslist: - rf, rt = r - string = re.sub(rf, rt, string) - #self.logDebug(rf, rt, string) - return string - - -def set_cookies(cj, cookies): - for cookie in cookies: - if isinstance(cookie, tuple) and len(cookie) == 3: - domain, name, value = cookie - cj.setCookie(domain, name, value) - - -def parseHtmlTagAttrValue(attr_name, tag): - m = re.search(r"%s\s*=\s*([\"']?)((?<=\")[^\"]+|(?<=')[^']+|[^>\s\"'][^>\s]*)\1" % attr_name, tag, re.I) - return m.group(2) if m else None - - -def parseHtmlForm(attr_str, html, input_names=None): - for form in re.finditer(r"(?P<tag><form[^>]*%s[^>]*>)(?P<content>.*?)</?(form|body|html)[^>]*>" % attr_str, - html, re.S | re.I): - inputs = {} - action = parseHtmlTagAttrValue("action", form.group('tag')) - for inputtag in re.finditer(r'(<(input|textarea)[^>]*>)([^<]*(?=</\2)|)', form.group('content'), re.S | re.I): - name = parseHtmlTagAttrValue("name", inputtag.group(1)) - if name: - value = parseHtmlTagAttrValue("value", inputtag.group(1)) - if not value: - inputs[name] = inputtag.group(3) or '' - else: - inputs[name] = value - - if isinstance(input_names, dict): - # check input attributes - for key, val in input_names.items(): - if key in inputs: - if isinstance(val, basestring) and inputs[key] == val: - continue - elif isinstance(val, tuple) and inputs[key] in val: - continue - elif hasattr(val, "search") and re.match(val, inputs[key]): - continue - break # attibute value does not match - else: - break # attibute name does not match - else: - return action, inputs # passed attribute check - else: - # no attribute check - return action, inputs - - return {}, None # no matching form found - - -def parseFileInfo(self, url='', html=''): - info = {"name": url, "size": 0, "status": 3} - - if hasattr(self, "pyfile"): - url = self.pyfile.url - - if hasattr(self, "req") and self.req.http.code == '404': - info['status'] = 1 - else: - if not html and hasattr(self, "html"): - html = self.html - if isinstance(self.SH_BROKEN_ENCODING, (str, unicode)): - html = unicode(html, self.SH_BROKEN_ENCODING) - if hasattr(self, "html"): - self.html = html - - if hasattr(self, "OFFLINE_PATTERN") and re.search(self.OFFLINE_PATTERN, html): - info['status'] = 1 - elif hasattr(self, "FILE_OFFLINE_PATTERN") and re.search(self.FILE_OFFLINE_PATTERN, html): #@TODO: Remove in 0.4.10 - info['status'] = 1 - elif hasattr(self, "TEMP_OFFLINE_PATTERN") and re.search(self.TEMP_OFFLINE_PATTERN, html): - info['status'] = 6 - else: - online = False - try: - info.update(re.match(self.__pattern__, url).groupdict()) - except: - pass - - for pattern in ("FILE_INFO_PATTERN", "FILE_NAME_PATTERN", "FILE_SIZE_PATTERN"): - try: - info.update(re.search(getattr(self, pattern), html).groupdict()) - online = True - except AttributeError: - continue - - if online: - # File online, return name and size - info['status'] = 2 - if 'N' in info: - info['name'] = replace_patterns(info['N'], self.FILE_NAME_REPLACEMENTS) - if 'S' in info: - size = replace_patterns(info['S'] + info['U'] if 'U' in info else info['S'], - self.FILE_SIZE_REPLACEMENTS) - info['size'] = parseFileSize(size) - elif isinstance(info['size'], (str, unicode)): - if 'units' in info: - info['size'] += info['units'] - info['size'] = parseFileSize(info['size']) - - if hasattr(self, "file_info"): - self.file_info = info - - return info['name'], info['size'], info['status'], url - - -def create_getInfo(plugin): - - def getInfo(urls): - for url in urls: - cj = CookieJar(plugin.__name__) - if isinstance(plugin.SH_COOKIES, list): - set_cookies(cj, plugin.SH_COOKIES) - file_info = parseFileInfo(plugin, url, getURL(replace_patterns(url, plugin.FILE_URL_REPLACEMENTS), - decode=not plugin.SH_BROKEN_ENCODING, cookies=cj)) - yield file_info - - return getInfo - - -def timestamp(): - return int(time() * 1000) - - -class PluginParseError(Exception): - - def __init__(self, msg): - Exception.__init__(self) - self.value = 'Parse error (%s) - plugin may be out of date' % msg - - def __str__(self): - return repr(self.value) - - -class SimpleHoster(Hoster): - __name__ = "SimpleHoster" - __type__ = "hoster" - __version__ = "0.35" - - __pattern__ = None - - __description__ = """Simple hoster plugin""" - __author_name__ = ("zoidberg", "stickell") - __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") - - """ - Following patterns should be defined by each hoster: - - FILE_INFO_PATTERN: Name and Size of the file - example: FILE_INFO_PATTERN = r'(?P<N>file_name) (?P<S>file_size) (?P<U>size_unit)' - or - FILE_NAME_PATTERN: Name that will be set for the file - example: FILE_NAME_PATTERN = r'(?P<N>file_name)' - FILE_SIZE_PATTERN: Size that will be checked for the file - example: FILE_SIZE_PATTERN = r'(?P<S>file_size) (?P<U>size_unit)' - - OFFLINE_PATTERN: Checks if the file is yet available online - example: OFFLINE_PATTERN = r'File (deleted|not found)' - - TEMP_OFFLINE_PATTERN: Checks if the file is temporarily offline - example: TEMP_OFFLINE_PATTERN = r'Server maintainance' - - PREMIUM_ONLY_PATTERN: (optional) Checks if the file can be downloaded only with a premium account - example: PREMIUM_ONLY_PATTERN = r'Premium account required' - """ - - FILE_NAME_REPLACEMENTS = [("&#?\w+;", fixup)] - FILE_SIZE_REPLACEMENTS = [] - FILE_URL_REPLACEMENTS = [] - - SH_BROKEN_ENCODING = False # Set to True or encoding name if encoding in http header is not correct - SH_COOKIES = True # or False or list of tuples [(domain, name, value)] - SH_CHECK_TRAFFIC = False # True = force check traffic left for a premium account - - - def init(self): - self.file_info = {} - - def setup(self): - self.resumeDownload = self.multiDL = self.premium - if isinstance(self.SH_COOKIES, list): - set_cookies(self.req.cj, self.SH_COOKIES) - - def process(self, pyfile): - pyfile.url = replace_patterns(pyfile.url, self.FILE_URL_REPLACEMENTS) - self.req.setOption("timeout", 120) - # Due to a 0.4.9 core bug self.load would keep previous cookies even if overridden by cookies parameter. - # Workaround using getURL. Can be reverted in 0.5 as the cookies bug has been fixed. - self.html = getURL(pyfile.url, decode=not self.SH_BROKEN_ENCODING, cookies=self.SH_COOKIES) - premium_only = hasattr(self, 'PREMIUM_ONLY_PATTERN') and re.search(self.PREMIUM_ONLY_PATTERN, self.html) - if not premium_only: # Usually premium only pages doesn't show the file information - self.getFileInfo() - - if self.premium and (not self.SH_CHECK_TRAFFIC or self.checkTrafficLeft()): - self.handlePremium() - elif premium_only: - self.fail("This link require a premium account") - else: - # This line is required due to the getURL workaround. Can be removed in 0.5 - self.html = self.load(pyfile.url, decode=not self.SH_BROKEN_ENCODING, cookies=self.SH_COOKIES) - self.handleFree() - - def load(self, url, get={}, post={}, ref=True, cookies=True, just_header=False, decode=False): - if type(url) == unicode: - url = url.encode('utf8') - return Hoster.load(self, url=url, get=get, post=post, ref=ref, cookies=cookies, - just_header=just_header, decode=decode) - - def getFileInfo(self): - self.logDebug("URL: %s" % self.pyfile.url) - - name, size, status = parseFileInfo(self)[:3] - - if status == 1: - self.offline() - elif status == 6: - self.tempOffline() - elif status != 2: - self.logDebug(self.file_info) - self.parseError('File info') - - if name: - self.pyfile.name = name - else: - self.pyfile.name = html_unescape(urlparse(self.pyfile.url).path.split("/")[-1]) - - if size: - self.pyfile.size = size - else: - self.logError("File size not parsed") - - self.logDebug("FILE NAME: %s FILE SIZE: %s" % (self.pyfile.name, self.pyfile.size)) - return self.file_info - - def handleFree(self): - self.fail("Free download not implemented") - - def handlePremium(self): - self.fail("Premium download not implemented") - - def parseError(self, msg): - raise PluginParseError(msg) - - def longWait(self, wait_time=None, max_tries=3): - if wait_time and isinstance(wait_time, (int, long, float)): - time_str = "%dh %dm" % divmod(wait_time / 60, 60) - else: - wait_time = 900 - time_str = "(unknown time)" - max_tries = 100 - - self.logInfo("Download limit reached, reconnect or wait %s" % time_str) - - self.setWait(wait_time, True) - self.wait() - self.retry(max_tries=max_tries, reason="Download limit reached") - - def parseHtmlForm(self, attr_str='', input_names=None): - return parseHtmlForm(attr_str, self.html, input_names) - - def checkTrafficLeft(self): - traffic = self.account.getAccountInfo(self.user, True)['trafficleft'] - if traffic == -1: - return True - size = self.pyfile.size / 1024 - self.logInfo("Filesize: %i KiB, Traffic left for user %s: %i KiB" % (size, self.user, traffic)) - return size <= traffic - - # TODO: Remove in 0.5 - def wait(self, seconds=False, reconnect=False): - if seconds: - self.setWait(seconds, reconnect) - super(SimpleHoster, self).wait() diff --git a/module/plugins/internal/UnRar.py b/module/plugins/internal/UnRar.py deleted file mode 100644 index 42ba2f66f..000000000 --- a/module/plugins/internal/UnRar.py +++ /dev/null @@ -1,212 +0,0 @@ -# -*- coding: utf-8 -*- - -import os -import re - -from glob import glob -from os.path import join -from string import digits -from subprocess import Popen, PIPE - -from module.plugins.internal.AbstractExtractor import AbtractExtractor, WrongPassword, ArchiveError, CRCError -from module.utils import safe_join, decode - - -class UnRar(AbtractExtractor): - __name__ = "UnRar" - __version__ = "0.16" - - __description__ = """Rar extractor plugin""" - __author_name__ = "RaNaN" - __author_mail__ = "RaNaN@pyload.org" - - CMD = "unrar" - - # there are some more uncovered rar formats - re_version = re.compile(r"(UNRAR 5[\.\d]+(.*?)freeware)") - re_splitfile = re.compile(r"(.*)\.part(\d+)\.rar$", re.I) - re_partfiles = re.compile(r".*\.(rar|r[0-9]+)", re.I) - re_filelist = re.compile(r"(.+)\s+(\d+)\s+(\d+)\s+") - re_filelist5 = re.compile(r"(.+)\s+(\d+)\s+\d\d-\d\d-\d\d\s+\d\d:\d\d\s+(.+)") - re_wrongpwd = re.compile("(Corrupt file or wrong password|password incorrect)", re.I) - - - @staticmethod - def checkDeps(): - if os.name == "nt": - UnRar.CMD = join(pypath, "UnRAR.exe") - p = Popen([UnRar.CMD], stdout=PIPE, stderr=PIPE) - p.communicate() - else: - try: - p = Popen([UnRar.CMD], stdout=PIPE, stderr=PIPE) - p.communicate() - except OSError: - - # fallback to rar - UnRar.CMD = "rar" - p = Popen([UnRar.CMD], stdout=PIPE, stderr=PIPE) - p.communicate() - - return True - - @staticmethod - def getTargets(files_ids): - result = [] - - for file, id in files_ids: - if not file.endswith(".rar"): - continue - - match = UnRar.re_splitfile.findall(file) - if match: - # only add first parts - if int(match[0][1]) == 1: - result.append((file, id)) - else: - result.append((file, id)) - - return result - - def init(self): - self.passwordProtected = False - self.headerProtected = False #: list files will not work without password - self.smallestFile = None #: small file to test passwords - self.password = "" #: save the correct password - - def checkArchive(self): - p = self.call_unrar("l", "-v", self.file) - out, err = p.communicate() - if self.re_wrongpwd.search(err): - self.passwordProtected = True - self.headerProtected = True - return True - - # output only used to check if passworded files are present - if self.re_version.search(out): - for attr, size, name in self.re_filelist5.findall(out): - if attr.startswith("*"): - self.passwordProtected = True - return True - else: - for name, size, packed in self.re_filelist.findall(out): - if name.startswith("*"): - self.passwordProtected = True - return True - - self.listContent() - if not self.files: - raise ArchiveError("Empty Archive") - - return False - - def checkPassword(self, password): - # at this point we can only verify header protected files - if self.headerProtected: - p = self.call_unrar("l", "-v", self.file, password=password) - out, err = p.communicate() - if self.re_wrongpwd.search(err): - return False - - return True - - def extract(self, progress, password=None): - command = "x" if self.fullpath else "e" - - p = self.call_unrar(command, self.file, self.out, password=password) - renice(p.pid, self.renice) - - progress(0) - progressstring = "" - while True: - c = p.stdout.read(1) - # quit loop on eof - if not c: - break - # reading a percentage sign -> set progress and restart - if c == '%': - progress(int(progressstring)) - progressstring = "" - # not reading a digit -> therefore restart - elif c not in digits: - progressstring = "" - # add digit to progressstring - else: - progressstring = progressstring + c - progress(100) - - # retrieve stderr - err = p.stderr.read() - - if "CRC failed" in err and not password and not self.passwordProtected: - raise CRCError - elif "CRC failed" in err: - raise WrongPassword - if err.strip(): #: raise error if anything is on stderr - raise ArchiveError(err.strip()) - if p.returncode: - raise ArchiveError("Process terminated") - - if not self.files: - self.password = password - self.listContent() - - def getDeleteFiles(self): - if ".part" in self.file: - return glob(re.sub("(?<=\.part)([01]+)", "*", self.file, re.IGNORECASE)) - # get files which matches .r* and filter unsuited files out - parts = glob(re.sub(r"(?<=\.r)ar$", "*", self.file, re.IGNORECASE)) - return filter(lambda x: self.re_partfiles.match(x), parts) - - def listContent(self): - command = "vb" if self.fullpath else "lb" - p = self.call_unrar(command, "-v", self.file, password=self.password) - out, err = p.communicate() - - if "Cannot open" in err: - raise ArchiveError("Cannot open file") - - if err.strip(): #: only log error at this point - self.m.logError(err.strip()) - - result = set() - - for f in decode(out).splitlines(): - f = f.strip() - result.add(safe_join(self.out, f)) - - self.files = result - - def call_unrar(self, command, *xargs, **kwargs): - args = [] - # overwrite flag - args.append("-o+") if self.overwrite else args.append("-o-") - - if self.excludefiles: - for word in self.excludefiles.split(';'): - args.append("-x%s" % word) - - # assume yes on all queries - args.append("-y") - - # set a password - if "password" in kwargs and kwargs['password']: - args.append("-p%s" % kwargs['password']) - else: - args.append("-p-") - - # NOTE: return codes are not reliable, some kind of threading, cleanup whatever issue - call = [self.CMD, command] + args + list(xargs) - self.m.logDebug(" ".join(call)) - - p = Popen(call, stdout=PIPE, stderr=PIPE) - - return p - - -def renice(pid, value): - if os.name != "nt" and value: - try: - Popen(["renice", str(value), str(pid)], stdout=PIPE, stderr=PIPE, bufsize=-1) - except: - print "Renice failed" diff --git a/module/plugins/internal/UnZip.py b/module/plugins/internal/UnZip.py deleted file mode 100644 index e339434f9..000000000 --- a/module/plugins/internal/UnZip.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- - -import sys -import zipfile - -from module.plugins.internal.AbstractExtractor import AbtractExtractor - - -class UnZip(AbtractExtractor): - __name__ = "UnZip" - __version__ = "0.1" - - __description__ = """Zip extractor plugin""" - __author_name__ = "RaNaN" - __author_mail__ = "RaNaN@pyload.org" - - - @staticmethod - def checkDeps(): - return sys.version_info[:2] >= (2, 6) - - @staticmethod - def getTargets(files_ids): - result = [] - - for file, id in files_ids: - if file.endswith(".zip"): - result.append((file, id)) - - return result - - def extract(self, progress, password=None): - z = zipfile.ZipFile(self.file) - self.files = z.namelist() - z.extractall(self.out) - - def getDeleteFiles(self): - return [self.file] diff --git a/module/plugins/internal/XFSPAccount.py b/module/plugins/internal/XFSPAccount.py deleted file mode 100644 index 5c0bfc893..000000000 --- a/module/plugins/internal/XFSPAccount.py +++ /dev/null @@ -1,69 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from time import mktime, strptime - -from module.plugins.Account import Account -from module.plugins.internal.SimpleHoster import parseHtmlForm -from module.utils import parseFileSize - - -class XFSPAccount(Account): - __name__ = "XFSPAccount" - __type__ = "account" - __version__ = "0.06" - - __description__ = """XFileSharingPro base account plugin""" - __author_name__ = "zoidberg" - __author_mail__ = "zoidberg@mujmail.cz" - - MAIN_PAGE = None - - VALID_UNTIL_PATTERN = r'>Premium.[Aa]ccount expire:</TD><TD><b>([^<]+)</b>' - TRAFFIC_LEFT_PATTERN = r'>Traffic available today:</TD><TD><b>([^<]+)</b>' - LOGIN_FAIL_PATTERN = r'Incorrect Login or Password|>Error<' - PREMIUM_PATTERN = r'>Renew premium<' - - - def loadAccountInfo(self, user, req): - html = req.load(self.MAIN_PAGE + "?op=my_account", decode=True) - - validuntil = trafficleft = None - premium = True if re.search(self.PREMIUM_PATTERN, html) else False - - m = re.search(self.VALID_UNTIL_PATTERN, html) - if m: - premium = True - trafficleft = -1 - try: - self.logDebug(m.group(1)) - validuntil = mktime(strptime(m.group(1), "%d %B %Y")) - except Exception, e: - self.logError(e) - else: - m = re.search(self.TRAFFIC_LEFT_PATTERN, html) - if m: - trafficleft = m.group(1) - if "Unlimited" in trafficleft: - premium = True - else: - trafficleft = parseFileSize(trafficleft) / 1024 - - return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium} - - def login(self, user, data, req): - html = req.load('%slogin.html' % self.MAIN_PAGE, decode=True) - - action, inputs = parseHtmlForm('name="FL"', html) - if not inputs: - inputs = {"op": "login", - "redirect": self.MAIN_PAGE} - - inputs.update({"login": user, - "password": data['password']}) - - html = req.load(self.MAIN_PAGE, post=inputs, decode=True) - - if re.search(self.LOGIN_FAIL_PATTERN, html): - self.wrongPassword() diff --git a/module/plugins/ocr/GigasizeCom.py b/module/plugins/ocr/GigasizeCom.py deleted file mode 100644 index ba0b805e6..000000000 --- a/module/plugins/ocr/GigasizeCom.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.OCR import OCR - - -class GigasizeCom(OCR): - __name__ = "GigasizeCom" - __type__ = "ocr" - __version__ = "0.1" - - __description__ = """Gigasize.com ocr plugin""" - __author_name__ = "pyLoad Team" - __author_mail__ = "admin@pyload.org" - - - def __init__(self): - OCR.__init__(self) - - def get_captcha(self, image): - self.load_image(image) - self.threshold(2.8) - self.run_tesser(True, False, False, True) - return self.result_captcha diff --git a/module/plugins/ocr/LinksaveIn.py b/module/plugins/ocr/LinksaveIn.py deleted file mode 100644 index 3ae139a4e..000000000 --- a/module/plugins/ocr/LinksaveIn.py +++ /dev/null @@ -1,148 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.OCR import OCR -from PIL import Image -from os import sep -from os.path import abspath, dirname -from glob import glob - - -class LinksaveIn(OCR): - __name__ = "LinksaveIn" - __type__ = "ocr" - __version__ = "0.1" - - __description__ = """Linksave.in ocr plugin""" - __author_name__ = "pyLoad Team" - __author_mail__ = "admin@pyload.org" - - - def __init__(self): - OCR.__init__(self) - self.data_dir = dirname(abspath(__file__)) + sep + "LinksaveIn" + sep - - def load_image(self, image): - im = Image.open(image) - frame_nr = 0 - - lut = im.resize((256, 1)) - lut.putdata(range(256)) - lut = list(lut.convert("RGB").getdata()) - - new = Image.new("RGB", im.size) - npix = new.load() - while True: - try: - im.seek(frame_nr) - except EOFError: - break - frame = im.copy() - pix = frame.load() - for x in xrange(frame.size[0]): - for y in xrange(frame.size[1]): - if lut[pix[x, y]] != (0,0,0): - npix[x, y] = lut[pix[x, y]] - frame_nr += 1 - new.save(self.data_dir+"unblacked.png") - self.image = new.copy() - self.pixels = self.image.load() - self.result_captcha = '' - - def get_bg(self): - stat = {} - cstat = {} - img = self.image.convert("P") - for bgpath in glob(self.data_dir+"bg/*.gif"): - stat[bgpath] = 0 - bg = Image.open(bgpath) - - bglut = bg.resize((256, 1)) - bglut.putdata(range(256)) - bglut = list(bglut.convert("RGB").getdata()) - - lut = img.resize((256, 1)) - lut.putdata(range(256)) - lut = list(lut.convert("RGB").getdata()) - - bgpix = bg.load() - pix = img.load() - for x in xrange(bg.size[0]): - for y in xrange(bg.size[1]): - rgb_bg = bglut[bgpix[x, y]] - rgb_c = lut[pix[x, y]] - try: - cstat[rgb_c] += 1 - except: - cstat[rgb_c] = 1 - if rgb_bg == rgb_c: - stat[bgpath] += 1 - max_p = 0 - bg = "" - for bgpath, value in stat.items(): - if max_p < value: - bg = bgpath - max_p = value - return bg - - def substract_bg(self, bgpath): - bg = Image.open(bgpath) - img = self.image.convert("P") - - bglut = bg.resize((256, 1)) - bglut.putdata(range(256)) - bglut = list(bglut.convert("RGB").getdata()) - - lut = img.resize((256, 1)) - lut.putdata(range(256)) - lut = list(lut.convert("RGB").getdata()) - - bgpix = bg.load() - pix = img.load() - orgpix = self.image.load() - for x in xrange(bg.size[0]): - for y in xrange(bg.size[1]): - rgb_bg = bglut[bgpix[x, y]] - rgb_c = lut[pix[x, y]] - if rgb_c == rgb_bg: - orgpix[x, y] = (255,255,255) - - def eval_black_white(self): - new = Image.new("RGB", (140, 75)) - pix = new.load() - orgpix = self.image.load() - thresh = 4 - for x in xrange(new.size[0]): - for y in xrange(new.size[1]): - rgb = orgpix[x, y] - r, g, b = rgb - pix[x, y] = (255,255,255) - if r > max(b, g)+thresh: - pix[x, y] = (0,0,0) - if g < min(r, b): - pix[x, y] = (0,0,0) - if g > max(r, b)+thresh: - pix[x, y] = (0,0,0) - if b > max(r, g)+thresh: - pix[x, y] = (0,0,0) - self.image = new - self.pixels = self.image.load() - - def get_captcha(self, image): - self.load_image(image) - bg = self.get_bg() - self.substract_bg(bg) - self.eval_black_white() - self.to_greyscale() - self.image.save(self.data_dir+"cleaned_pass1.png") - self.clean(4) - self.clean(4) - self.image.save(self.data_dir+"cleaned_pass2.png") - letters = self.split_captcha_letters() - final = "" - for n, letter in enumerate(letters): - self.image = letter - self.image.save(ocr.data_dir+"letter%d.png" % n) - self.run_tesser(True, True, False, False) - final += self.result_captcha - - return final diff --git a/module/plugins/ocr/NetloadIn.py b/module/plugins/ocr/NetloadIn.py deleted file mode 100644 index 0de88302e..000000000 --- a/module/plugins/ocr/NetloadIn.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.OCR import OCR - -class NetloadIn(OCR): - __name__ = "NetloadIn" - __type__ = "ocr" - __version__ = "0.1" - - __description__ = """Netload.in ocr plugin""" - __author_name__ = "pyLoad Team" - __author_mail__ = "admin@pyload.org" - - - def __init__(self): - OCR.__init__(self) - - def get_captcha(self, image): - self.load_image(image) - self.to_greyscale() - self.clean(3) - self.clean(3) - self.run_tesser(True, True, False, False) - - self.result_captcha = self.result_captcha.replace(" ", "")[:4] # cut to 4 numbers - - return self.result_captcha diff --git a/module/plugins/ocr/ShareonlineBiz.py b/module/plugins/ocr/ShareonlineBiz.py deleted file mode 100644 index 0ad018bf9..000000000 --- a/module/plugins/ocr/ShareonlineBiz.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.plugins.OCR import OCR - - -class ShareonlineBiz(OCR): - __name__ = "ShareonlineBiz" - __type__ = "ocr" - __version__ = "0.1" - - __description__ = """Shareonline.biz ocr plugin""" - __author_name__ = "RaNaN" - __author_mail__ = "RaNaN@pyload.org" - - - def __init__(self): - OCR.__init__(self) - - def get_captcha(self, image): - self.load_image(image) - self.to_greyscale() - self.image = self.image.resize((160, 50)) - self.pixels = self.image.load() - self.threshold(1.85) - #self.eval_black_white(240) - #self.derotate_by_average() - - letters = self.split_captcha_letters() - - final = "" - for letter in letters: - self.image = letter - self.run_tesser(True, True, False, False) - final += self.result_captcha - - return final - - #tesseract at 60% diff --git a/module/remote/RemoteManager.py b/module/remote/RemoteManager.py deleted file mode 100644 index 723bc0c0e..000000000 --- a/module/remote/RemoteManager.py +++ /dev/null @@ -1,91 +0,0 @@ -# -*- coding: utf-8 -*- -""" - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. - - @author: mkaay -""" - -from threading import Thread -from traceback import print_exc - -class BackendBase(Thread): - def __init__(self, manager): - Thread.__init__(self) - self.m = manager - self.core = manager.core - self.enabled = True - self.running = False - - def run(self): - self.running = True - try: - self.serve() - except Exception, e: - self.core.log.error(_("Remote backend error: %s") % e) - if self.core.debug: - print_exc() - finally: - self.running = False - - def setup(self, host, port): - pass - - def checkDeps(self): - return True - - def serve(self): - pass - - def shutdown(self): - pass - - def stop(self): - self.enabled = False# set flag and call shutdowm message, so thread can react - self.shutdown() - - -class RemoteManager: - available = [] - - def __init__(self, core): - self.core = core - self.backends = [] - - if self.core.remote: - self.available.append("ThriftBackend") -# else: -# self.available.append("SocketBackend") - - - def startBackends(self): - host = self.core.config["remote"]["listenaddr"] - port = self.core.config["remote"]["port"] - - for b in self.available: - klass = getattr(__import__("module.remote.%s" % b, globals(), locals(), [b], -1), b) - backend = klass(self) - if not backend.checkDeps(): - continue - try: - backend.setup(host, port) - self.core.log.info(_("Starting %(name)s: %(addr)s:%(port)s") % {"name": b, "addr": host, "port": port}) - except Exception, e: - self.core.log.error(_("Failed loading backend %(name)s | %(error)s") % {"name": b, "error": str(e)}) - if self.core.debug: - print_exc() - else: - backend.start() - self.backends.append(backend) - - port += 1 diff --git a/module/remote/ThriftBackend.py b/module/remote/ThriftBackend.py deleted file mode 100644 index f8edc8dd6..000000000 --- a/module/remote/ThriftBackend.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- -""" - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. - - @author: mkaay, RaNaN -""" -from os.path import exists - -from module.remote.RemoteManager import BackendBase - -from thriftbackend.Processor import Processor -from thriftbackend.Protocol import ProtocolFactory -from thriftbackend.Socket import ServerSocket -from thriftbackend.Transport import TransportFactory -#from thriftbackend.Transport import TransportFactoryCompressed - -from thrift.server import TServer - -class ThriftBackend(BackendBase): - def setup(self, host, port): - processor = Processor(self.core.api) - - key = None - cert = None - - if self.core.config['ssl']['activated']: - if exists(self.core.config['ssl']['cert']) and exists(self.core.config['ssl']['key']): - self.core.log.info(_("Using SSL ThriftBackend")) - key = self.core.config['ssl']['key'] - cert = self.core.config['ssl']['cert'] - - transport = ServerSocket(port, host, key, cert) - - -# tfactory = TransportFactoryCompressed() - tfactory = TransportFactory() - pfactory = ProtocolFactory() - - self.server = TServer.TThreadedServer(processor, transport, tfactory, pfactory) - #self.server = TNonblockingServer.TNonblockingServer(processor, transport, tfactory, pfactory) - - #server = TServer.TThreadPoolServer(processor, transport, tfactory, pfactory) - - def serve(self): - self.server.serve() diff --git a/module/setup.py b/module/setup.py deleted file mode 100644 index d0aee4b28..000000000 --- a/module/setup.py +++ /dev/null @@ -1,538 +0,0 @@ -# -*- coding: utf-8 -*- - -import os -import sys - -import module.common.pylgettext as gettext - -from getpass import getpass -from os import makedirs -from os.path import abspath, dirname, exists, join -from subprocess import PIPE, call - -from module.utils import get_console_encoding, versiontuple - - -class Setup: - """ pyLoads initial setup configuration assistant """ - - def __init__(self, path, config): - self.path = path - self.config = config - self.stdin_encoding = get_console_encoding(sys.stdin.encoding) - - - def start(self): - langs = self.config.getMetaData("general", "language")["type"].split(";") - lang = self.ask(u"Choose setup language", "en", langs) - gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None]) - translation = gettext.translation("setup", join(self.path, "locale"), languages=[lang, "en"], fallback=True) - translation.install(True) - - #Input shorthand for yes - self.yes = _("y") - #Input shorthand for no - self.no = _("n") - - # print - # print _("Would you like to configure pyLoad via Webinterface?") - # print _("You need a Browser and a connection to this PC for it.") - # viaweb = self.ask(_("Start initial webinterface for configuration?"), "y", bool=True) - # if viaweb: - # try: - # from module.threads import ServerThread - # ServerThread.setup = self - # import module.webui as webinterface - # webinterface.run_simple() - # return False - # except Exception, e: - # print "Setup failed with this error: ", e - # print "Falling back to commandline setup." - - print - print - print _("Welcome to the pyLoad Configuration Assistant.") - print _("It will check your system and make a basic setup in order to run pyLoad.") - print - print _("The value in brackets [] always is the default value,") - print _("in case you don't want to change it or you are unsure what to choose, just hit enter.") - print _( - "Don't forget: You can always rerun this assistant with --setup or -s parameter, when you start pyload.py .") - print _("If you have any problems with this assistant hit STRG-C,") - print _("to abort and don't let him start with pyload.py automatically anymore.") - print - print - raw_input(_("When you are ready for system check, hit enter.")) - print - print - - basic, ssl, captcha, web, js = self.system_check() - print - print - - if not basic: - print _("You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad.") - print _("Please correct this and re-run pyLoad.") - print - print _("Setup will now close.") - print - print - raw_input(_("Press Enter to exit.")) - return False - - raw_input(_("System check finished, hit enter to see your status report.")) - print - print - print _("## Status ##") - print - - avail = [] - if self.check_module("Crypto"): - avail.append(_("container decrypting")) - if ssl: - avail.append(_("ssl connection")) - if captcha: - avail.append(_("automatic captcha decryption")) - if web: - avail.append(_("webinterface")) - if js: - avail.append(_("extended Click'N'Load")) - - string = "" - - for av in avail: - string += ", " + av - - print _("AVAILABLE FEATURES:") + string[1:] - print - - if len(avail) < 5: - print _("MISSING FEATURES: ") - - if not self.check_module("Crypto"): - print _("- no py-crypto available") - print _("You need this if you want to decrypt container files.") - print - - if not ssl: - print _("- no SSL available") - print _("This is needed if you want to establish a secure connection to core or webinterface.") - print _("If you only want to access locally to pyLoad ssl is not usefull.") - print - - if not captcha: - print _("- no Captcha Recognition available") - print _("Only needed for some hosters and as freeuser.") - print - - if not js: - print _("- no JavaScript engine found") - print _("You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino") - print - - print - print _("You can abort the setup now and fix some dependicies if you want.") - - print - con = self.ask(_("Continue with setup?"), self.yes, bool=True) - - if not con: - return False - - print - print - print _("CURRENT CONFIG PATH: %s") % abspath("") - print - print _("NOTE: If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it.") - path = self.ask(_("Do you want to change the config path?"), self.no, bool=True) - if path: - print - self.conf_path() - #calls exit when changed - - print - print _("Do you want to configure login data and basic settings?") - print _("This is recommend for first run.") - con = self.ask(_("Make basic setup?"), self.yes, bool=True) - - if con: - print - print - self.conf_basic() - - if ssl: - print - print _("Do you want to configure ssl?") - ssl = self.ask(_("Configure ssl?"), self.no, bool=True) - if ssl: - print - print - self.conf_ssl() - - if web: - print - print _("Do you want to configure webinterface?") - web = self.ask(_("Configure webinterface?"), self.yes, bool=True) - if web: - print - print - self.conf_web() - - print - print - print _("Setup finished successfully!") - print - print - raw_input(_("Hit enter to exit and restart pyLoad.")) - return True - - - def system_check(self): - """ make a systemcheck and return the results""" - - print _("## System Information ##") - print - print _("Platform: %s") % sys.platform - print _("Operating System: %s") % os.name - print _("Python: %s") % sys.version.replace("\n", "") - print - print - - print _("## System Check ##") - print - - if sys.version_info[:2] > (2, 7): - print _("Your python version is to new, Please use Python 2.6/2.7") - python = False - elif sys.version_info[:2] < (2, 5): - print _("Your python version is to old, Please use at least Python 2.5") - python = False - else: - print _("Python Version: OK") - python = True - - curl = self.check_module("pycurl") - self.print_dep("pycurl", curl) - - sqlite = self.check_module("sqlite3") - self.print_dep("sqlite3", sqlite) - - basic = python and curl and sqlite - - print - - crypto = self.check_module("Crypto") - self.print_dep("pycrypto", crypto) - - ssl = self.check_module("OpenSSL") - self.print_dep("py-OpenSSL", ssl) - - print - - pil = self.check_module("PIL.Image") - self.print_dep("PIL/Pillow", pil) - - if os.name == "nt": - tesser = self.check_prog([join(pypath, "tesseract", "tesseract.exe"), "-v"]) - else: - tesser = self.check_prog(["tesseract", "-v"]) - - self.print_dep("tesseract", tesser) - - captcha = pil and tesser - - print - - try: - import jinja2 - - v = jinja2.__version__ - if v and versiontuple(v) < (2, 5, 0): - jinja = False - else: - jinja = True - except: - jinja = False - - jinja = self.print_dep("jinja2", jinja) - - beaker = self.check_module("beaker") - self.print_dep("beaker", beaker) - - bjoern = self.check_module("bjoern") - self.print_dep("bjoern", bjoern) - - web = sqlite and beaker - - from module.common import JsEngine - js = True if JsEngine.ENGINE else False - self.print_dep(_("JS engine"), js) - - if not jinja: - print - print - print _("WARNING: Your installed jinja2 version %s seems too old.") % jinja2.__version__ - print _("You can safely continue but if the webinterface is not working,") - print _("please upgrade or uninstall it, because pyLoad self-includes jinja2 libary.") - - return basic, ssl, captcha, web, js - - - def conf_basic(self): - print _("## Basic Setup ##") - - print - print _("The following logindata is valid for CLI and webinterface.") - - from module.database import DatabaseBackend - - db = DatabaseBackend(None) - db.setup() - print _("NOTE: Consider a password of 10 or more symbols if you expect to access from outside your local network (ex. internet).") - print - username = self.ask(_("Username"), "User") - password = self.ask("", "", password=True) - db.addUser(username, password) - db.shutdown() - - print - print _("External clients (GUI, CLI or other) need remote access to work over the network.") - print _("However, if you only want to use the webinterface you may disable it to save ram.") - self.config["remote"]["activated"] = self.ask(_("Enable remote access"), self.no, bool=True) - - print - langs = self.config.getMetaData("general", "language") - self.config["general"]["language"] = self.ask(_("Choose pyLoad language"), "en", langs["type"].split(";")) - - print - self.config["general"]["download_folder"] = self.ask(_("Download folder"), "Downloads") - print - self.config["download"]["max_downloads"] = self.ask(_("Max parallel downloads"), "3") - print - reconnect = self.ask(_("Use Reconnect?"), self.no, bool=True) - self.config["reconnect"]["activated"] = reconnect - if reconnect: - self.config["reconnect"]["method"] = self.ask(_("Reconnect script location"), "./reconnect.sh") - - - def conf_web(self): - print _("## Webinterface Setup ##") - - print - self.config["webinterface"]["activated"] = self.ask(_("Activate webinterface?"), self.yes, bool=True) - print - print _("Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally.") - self.config["webinterface"]["host"] = self.ask(_("Address"), "0.0.0.0") - self.config["webinterface"]["port"] = self.ask(_("Port"), "8000") - print - print _("pyLoad offers several server backends, now following a short explanation.") - print "- builtin:", _("Default server; best choice if you plan to use pyLoad just for you.") - print "- threaded:", _("Support SSL connection and can serve simultaneously more client flawlessly.") - print "- fastcgi:", _( - "Can be used by apache, lighttpd, etc.; needs to be properly configured before.") - if os.name != "nt": - print "- lightweight:", _("Very fast alternative to builtin; requires libev and bjoern packages.") - - print - print _("NOTE: In some rare cases the builtin server is not working, if you notice problems with the webinterface") - print _("come back here and change the builtin server to the threaded one here.") - - if os.name == "nt": - servers = ["builtin", "threaded", "fastcgi"] - default = "threaded" - else: - servers = ["builtin", "threaded", "fastcgi", "lightweight"] - default = "lightweight" if self.check_module("bjoern") else "builtin" - - self.config["webinterface"]["server"] = self.ask(_("Server"), default, servers) - - - def conf_ssl(self): - print _("## SSL Setup ##") - print - print _("Execute these commands from pyLoad config folder to make ssl certificates:") - print - print "openssl genrsa -out ssl.key 1024" - print "openssl req -new -key ssl.key -out ssl.csr" - print "openssl req -days 36500 -x509 -key ssl.key -in ssl.csr > ssl.crt " - print - print _("If you're done and everything went fine, you can activate ssl now.") - - self.config["ssl"]["activated"] = self.ask(_("Activate SSL?"), self.yes, bool=True) - - - def set_user(self): - gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None]) - translation = gettext.translation("setup", join(self.path, "locale"), - languages=[self.config["general"]["language"], "en"], fallback=True) - translation.install(True) - - from module.database import DatabaseBackend - - db = DatabaseBackend(None) - db.setup() - - noaction = True - try: - while True: - print _("Select action") - print _("1 - Create/Edit user") - print _("2 - List users") - print _("3 - Remove user") - print _("4 - Quit") - action = raw_input("[1]/2/3/4: ") - if not action in ("1", "2", "3", "4"): - continue - elif action == "1": - print - username = self.ask(_("Username"), "User") - password = self.ask("", "", password=True) - db.addUser(username, password) - noaction = False - elif action == "2": - print - print _("Users") - print "-----" - users = db.listUsers() - noaction = False - for user in users: - print user - print "-----" - print - elif action == "3": - print - username = self.ask(_("Username"), "") - if username: - db.removeUser(username) - noaction = False - elif action == "4": - break - finally: - if not noaction: - db.shutdown() - - - def conf_path(self, trans=False): - if trans: - gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None]) - translation = gettext.translation("setup", join(self.path, "locale"), - languages=[self.config["general"]["language"], "en"], fallback=True) - translation.install(True) - - print _("Setting new config path, current configuration will not be transfered!") - path = self.ask(_("CONFIG PATH"), abspath("")) - try: - path = join(pypath, path) - if not exists(path): - makedirs(path) - f = open(join(pypath, "module", "config", "configdir"), "wb") - f.write(path) - f.close() - print - print - print _("pyLoad config path changed, setup will now close!") - print - print - raw_input(_("Press Enter to exit.")) - sys.exit() - except Exception, e: - print _("Setting config path failed: %s") % str(e) - - - def print_dep(self, name, value): - """Print Status of dependency""" - if value: - print _("%s: OK") % name - else: - print _("%s: MISSING") % name - - - def check_module(self, module): - try: - __import__(module) - return True - except: - return False - - - def check_prog(self, command): - pipe = PIPE - try: - call(command, stdout=pipe, stderr=pipe) - return True - except: - return False - - - def ask(self, qst, default, answers=[], bool=False, password=False): - """produce one line to asking for input""" - if answers: - info = "(" - - for i, answer in enumerate(answers): - info += (", " if i != 0 else "") + str((answer == default and "[%s]" % answer) or answer) - - info += ")" - elif bool: - if default == self.yes: - info = "([%s]/%s)" % (self.yes, self.no) - else: - info = "(%s/[%s])" % (self.yes, self.no) - else: - info = "[%s]" % default - - if password: - p1 = True - p2 = False - pwlen = 8 - while p1 != p2: - # getpass(_("Password: ")) will crash on systems with broken locales (Win, NAS) - sys.stdout.write(_("Password: ")) - p1 = getpass("") - - if len(p1) < pwlen: - print _("Password too short! Use at least %s symbols." % pwlen) - continue - elif not p1.isalnum(): - print _("Password must be alphanumeric.") - continue - - sys.stdout.write(_("Password (again): ")) - p2 = getpass("") - - if p1 == p2: - return p1 - else: - print _("Passwords did not match.") - - while True: - try: - input = raw_input(qst + " %s: " % info) - except KeyboardInterrupt: - print "\nSetup interrupted" - sys.exit() - - input = input.decode(self.stdin_encoding) - - if input.strip() == "": - input = default - - if bool: - # yes, true, t are inputs for booleans with value true - if input.lower().strip() in [self.yes, _("yes"), _("true"), _("t"), "yes"]: - return True - # no, false, f are inputs for booleans with value false - elif input.lower().strip() in [self.no, _("no"), _("false"), _("f"), "no"]: - return False - else: - print _("Invalid Input") - continue - - if not answers: - return input - - else: - if input in answers: - return input - else: - print _("Invalid Input") diff --git a/module/threads/PluginThread.py b/module/threads/PluginThread.py deleted file mode 100644 index 03e0bb31b..000000000 --- a/module/threads/PluginThread.py +++ /dev/null @@ -1,675 +0,0 @@ -# -*- coding: utf-8 -*- - -""" - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. - - @author: RaNaN -""" - -from Queue import Queue -from threading import Thread -from os import listdir, stat -from os.path import join -from time import sleep, time, strftime, gmtime -from traceback import print_exc, format_exc -from pprint import pformat -from sys import exc_info, exc_clear -from copy import copy -from types import MethodType - -from pycurl import error - -from module.PyFile import PyFile -from module.plugins.Plugin import Abort, Fail, Reconnect, Retry, SkipDownload -from module.common.packagetools import parseNames -from module.utils import safe_join -from module.Api import OnlineStatus - -class PluginThread(Thread): - """abstract base class for thread types""" - - #-------------------------------------------------------------------------- - def __init__(self, manager): - """Constructor""" - Thread.__init__(self) - self.setDaemon(True) - self.m = manager #thread manager - - - def writeDebugReport(self, pyfile): - """ writes a - :return: - """ - - dump_name = "debug_%s_%s.zip" % (pyfile.pluginname, strftime("%d-%m-%Y_%H-%M-%S")) - dump = self.getDebugDump(pyfile) - - try: - import zipfile - - zip = zipfile.ZipFile(dump_name, "w") - - for f in listdir(join("tmp", pyfile.pluginname)): - try: - # avoid encoding errors - zip.write(join("tmp", pyfile.pluginname, f), safe_join(pyfile.pluginname, f)) - except: - pass - - info = zipfile.ZipInfo(safe_join(pyfile.pluginname, "debug_Report.txt"), gmtime()) - info.external_attr = 0644 << 16L # change permissions - - zip.writestr(info, dump) - zip.close() - - if not stat(dump_name).st_size: - raise Exception("Empty Zipfile") - - except Exception, e: - self.m.log.debug("Error creating zip file: %s" % e) - - dump_name = dump_name.replace(".zip", ".txt") - f = open(dump_name, "wb") - f.write(dump) - f.close() - - self.m.core.log.info("Debug Report written to %s" % dump_name) - - def getDebugDump(self, pyfile): - dump = "pyLoad %s Debug Report of %s %s \n\nTRACEBACK:\n %s \n\nFRAMESTACK:\n" % ( - self.m.core.api.getServerVersion(), pyfile.pluginname, pyfile.plugin.__version__, format_exc()) - - tb = exc_info()[2] - stack = [] - while tb: - stack.append(tb.tb_frame) - tb = tb.tb_next - - for frame in stack[1:]: - dump += "\nFrame %s in %s at line %s\n" % (frame.f_code.co_name, - frame.f_code.co_filename, - frame.f_lineno) - - for key, value in frame.f_locals.items(): - dump += "\t%20s = " % key - try: - dump += pformat(value) + "\n" - except Exception, e: - dump += "<ERROR WHILE PRINTING VALUE> " + str(e) + "\n" - - del frame - - del stack #delete it just to be sure... - - dump += "\n\nPLUGIN OBJECT DUMP: \n\n" - - for name in dir(pyfile.plugin): - attr = getattr(pyfile.plugin, name) - if not name.endswith("__") and type(attr) != MethodType: - dump += "\t%20s = " % name - try: - dump += pformat(attr) + "\n" - except Exception, e: - dump += "<ERROR WHILE PRINTING VALUE> " + str(e) + "\n" - - dump += "\nPYFILE OBJECT DUMP: \n\n" - - for name in dir(pyfile): - attr = getattr(pyfile, name) - if not name.endswith("__") and type(attr) != MethodType: - dump += "\t%20s = " % name - try: - dump += pformat(attr) + "\n" - except Exception, e: - dump += "<ERROR WHILE PRINTING VALUE> " + str(e) + "\n" - - if pyfile.pluginname in self.m.core.config.plugin: - dump += "\n\nCONFIG: \n\n" - dump += pformat(self.m.core.config.plugin[pyfile.pluginname]) + "\n" - - return dump - - def clean(self, pyfile): - """ set thread unactive and release pyfile """ - self.active = False - pyfile.release() - - -class DownloadThread(PluginThread): - """thread for downloading files from 'real' hoster plugins""" - - #-------------------------------------------------------------------------- - def __init__(self, manager): - """Constructor""" - PluginThread.__init__(self, manager) - - self.queue = Queue() # job queue - self.active = False - - self.start() - - #-------------------------------------------------------------------------- - def run(self): - """run method""" - pyfile = None - - while True: - del pyfile - self.active = self.queue.get() - pyfile = self.active - - if self.active == "quit": - self.active = False - self.m.threads.remove(self) - return True - - try: - if not pyfile.hasPlugin(): continue - #this pyfile was deleted while queueing - - pyfile.plugin.checkForSameFiles(starting=True) - self.m.log.info(_("Download starts: %s" % pyfile.name)) - - # start download - self.m.core.hookManager.downloadPreparing(pyfile) - pyfile.plugin.preprocessing(self) - - self.m.log.info(_("Download finished: %s") % pyfile.name) - self.m.core.hookManager.downloadFinished(pyfile) - self.m.core.files.checkPackageFinished(pyfile) - - except NotImplementedError: - self.m.log.error(_("Plugin %s is missing a function.") % pyfile.pluginname) - pyfile.setStatus("failed") - pyfile.error = "Plugin does not work" - self.clean(pyfile) - continue - - except Abort: - try: - self.m.log.info(_("Download aborted: %s") % pyfile.name) - except: - pass - - pyfile.setStatus("aborted") - - self.clean(pyfile) - continue - - except Reconnect: - self.queue.put(pyfile) - #pyfile.req.clearCookies() - - while self.m.reconnecting.isSet(): - sleep(0.5) - - continue - - except Retry, e: - reason = e.args[0] - self.m.log.info(_("Download restarted: %(name)s | %(msg)s") % {"name": pyfile.name, "msg": reason}) - self.queue.put(pyfile) - continue - - except Fail, e: - msg = e.args[0] - - if msg == "offline": - pyfile.setStatus("offline") - self.m.log.warning(_("Download is offline: %s") % pyfile.name) - elif msg == "temp. offline": - pyfile.setStatus("temp. offline") - self.m.log.warning(_("Download is temporary offline: %s") % pyfile.name) - else: - pyfile.setStatus("failed") - self.m.log.warning(_("Download failed: %(name)s | %(msg)s") % {"name": pyfile.name, "msg": msg}) - pyfile.error = msg - - self.m.core.hookManager.downloadFailed(pyfile) - self.clean(pyfile) - continue - - except error, e: - if len(e.args) == 2: - code, msg = e.args - else: - code = 0 - msg = e.args - - self.m.log.debug("pycurl exception %s: %s" % (code, msg)) - - if code in (7, 18, 28, 52, 56): - self.m.log.warning(_("Couldn't connect to host or connection reset, waiting 1 minute and retry.")) - wait = time() + 60 - - pyfile.waitUntil = wait - pyfile.setStatus("waiting") - while time() < wait: - sleep(1) - if pyfile.abort: - break - - if pyfile.abort: - self.m.log.info(_("Download aborted: %s") % pyfile.name) - pyfile.setStatus("aborted") - - self.clean(pyfile) - else: - self.queue.put(pyfile) - - continue - - else: - pyfile.setStatus("failed") - self.m.log.error("pycurl error %s: %s" % (code, msg)) - if self.m.core.debug: - print_exc() - self.writeDebugReport(pyfile) - - self.m.core.hookManager.downloadFailed(pyfile) - - self.clean(pyfile) - continue - - except SkipDownload, e: - pyfile.setStatus("skipped") - - self.m.log.info( - _("Download skipped: %(name)s due to %(plugin)s") % {"name": pyfile.name, "plugin": e.message}) - - self.clean(pyfile) - - self.m.core.files.checkPackageFinished(pyfile) - - self.active = False - self.m.core.files.save() - - continue - - - except Exception, e: - pyfile.setStatus("failed") - self.m.log.warning(_("Download failed: %(name)s | %(msg)s") % {"name": pyfile.name, "msg": str(e)}) - pyfile.error = str(e) - - if self.m.core.debug: - print_exc() - self.writeDebugReport(pyfile) - - self.m.core.hookManager.downloadFailed(pyfile) - self.clean(pyfile) - continue - - finally: - self.m.core.files.save() - pyfile.checkIfProcessed() - exc_clear() - - #pyfile.plugin.req.clean() - - self.active = False - pyfile.finishIfDone() - self.m.core.files.save() - - - def put(self, job): - """assing job to thread""" - self.queue.put(job) - - - def stop(self): - """stops the thread""" - self.put("quit") - - -class DecrypterThread(PluginThread): - """thread for decrypting""" - - def __init__(self, manager, pyfile): - """constructor""" - PluginThread.__init__(self, manager) - - self.active = pyfile - manager.localThreads.append(self) - - pyfile.setStatus("decrypting") - - self.start() - - def getActiveFiles(self): - return [self.active] - - def run(self): - """run method""" - - pyfile = self.active - retry = False - - try: - self.m.log.info(_("Decrypting starts: %s") % self.active.name) - self.active.plugin.preprocessing(self) - - except NotImplementedError: - self.m.log.error(_("Plugin %s is missing a function.") % self.active.pluginname) - return - - except Fail, e: - msg = e.args[0] - - if msg == "offline": - self.active.setStatus("offline") - self.m.log.warning(_("Download is offline: %s") % self.active.name) - else: - self.active.setStatus("failed") - self.m.log.error(_("Decrypting failed: %(name)s | %(msg)s") % {"name": self.active.name, "msg": msg}) - self.active.error = msg - - return - - except Abort: - self.m.log.info(_("Download aborted: %s") % pyfile.name) - pyfile.setStatus("aborted") - - return - - except Retry: - self.m.log.info(_("Retrying %s") % self.active.name) - retry = True - return self.run() - - except Exception, e: - self.active.setStatus("failed") - self.m.log.error(_("Decrypting failed: %(name)s | %(msg)s") % {"name": self.active.name, "msg": str(e)}) - self.active.error = str(e) - - if self.m.core.debug: - print_exc() - self.writeDebugReport(pyfile) - - return - - - finally: - if not retry: - self.active.release() - self.active = False - self.m.core.files.save() - self.m.localThreads.remove(self) - exc_clear() - - - #self.m.core.hookManager.downloadFinished(pyfile) - - - #self.m.localThreads.remove(self) - #self.active.finishIfDone() - if not retry: - pyfile.delete() - - -class HookThread(PluginThread): - """thread for hooks""" - - #-------------------------------------------------------------------------- - def __init__(self, m, function, args, kwargs): - """Constructor""" - PluginThread.__init__(self, m) - - self.f = function - self.args = args - self.kwargs = kwargs - - self.active = [] - - m.localThreads.append(self) - - self.start() - - def getActiveFiles(self): - return self.active - - def addActive(self, pyfile): - """ Adds a pyfile to active list and thus will be displayed on overview""" - if pyfile not in self.active: - self.active.append(pyfile) - - def finishFile(self, pyfile): - if pyfile in self.active: - self.active.remove(pyfile) - - pyfile.finishIfDone() - - def run(self): - try: - try: - self.kwargs["thread"] = self - self.f(*self.args, **self.kwargs) - except TypeError, e: - #dirty method to filter out exceptions - if "unexpected keyword argument 'thread'" not in e.args[0]: - raise - - del self.kwargs["thread"] - self.f(*self.args, **self.kwargs) - finally: - local = copy(self.active) - for x in local: - self.finishFile(x) - - self.m.localThreads.remove(self) - - -class InfoThread(PluginThread): - def __init__(self, manager, data, pid=-1, rid=-1, add=False): - """Constructor""" - PluginThread.__init__(self, manager) - - self.data = data - self.pid = pid # package id - # [ .. (name, plugin) .. ] - - self.rid = rid #result id - self.add = add #add packages instead of return result - - self.cache = [] #accumulated data - - self.start() - - def run(self): - """run method""" - - plugins = {} - container = [] - - for url, plugin in self.data: - if plugin in plugins: - plugins[plugin].append(url) - else: - plugins[plugin] = [url] - - - # filter out container plugins - for name in self.m.core.pluginManager.containerPlugins: - if name in plugins: - container.extend([(name, url) for url in plugins[name]]) - - del plugins[name] - - #directly write to database - if self.pid > -1: - for pluginname, urls in plugins.iteritems(): - plugin = self.m.core.pluginManager.getPlugin(pluginname, True) - if hasattr(plugin, "getInfo"): - self.fetchForPlugin(pluginname, plugin, urls, self.updateDB) - self.m.core.files.save() - - elif self.add: - for pluginname, urls in plugins.iteritems(): - plugin = self.m.core.pluginManager.getPlugin(pluginname, True) - if hasattr(plugin, "getInfo"): - self.fetchForPlugin(pluginname, plugin, urls, self.updateCache, True) - - else: - #generate default result - result = [(url, 0, 3, url) for url in urls] - - self.updateCache(pluginname, result) - - packs = parseNames([(name, url) for name, x, y, url in self.cache]) - - self.m.log.debug("Fetched and generated %d packages" % len(packs)) - - for k, v in packs: - self.m.core.api.addPackage(k, v) - - #empty cache - del self.cache[:] - - else: #post the results - - - for name, url in container: - #attach container content - try: - data = self.decryptContainer(name, url) - except: - print_exc() - self.m.log.error("Could not decrypt container.") - data = [] - - for url, plugin in data: - if plugin in plugins: - plugins[plugin].append(url) - else: - plugins[plugin] = [url] - - self.m.infoResults[self.rid] = {} - - for pluginname, urls in plugins.iteritems(): - plugin = self.m.core.pluginManager.getPlugin(pluginname, True) - if hasattr(plugin, "getInfo"): - self.fetchForPlugin(pluginname, plugin, urls, self.updateResult, True) - - #force to process cache - if self.cache: - self.updateResult(pluginname, [], True) - - else: - #generate default result - result = [(url, 0, 3, url) for url in urls] - - self.updateResult(pluginname, result, True) - - self.m.infoResults[self.rid]["ALL_INFO_FETCHED"] = {} - - self.m.timestamp = time() + 5 * 60 - - - def updateDB(self, plugin, result): - self.m.core.files.updateFileInfo(result, self.pid) - - def updateResult(self, plugin, result, force=False): - #parse package name and generate result - #accumulate results - - self.cache.extend(result) - - if len(self.cache) >= 20 or force: - #used for package generating - tmp = [(name, (url, OnlineStatus(name, plugin, "unknown", status, int(size)))) - for name, size, status, url in self.cache] - - data = parseNames(tmp) - result = {} - for k, v in data.iteritems(): - for url, status in v: - status.packagename = k - result[url] = status - - self.m.setInfoResults(self.rid, result) - - self.cache = [] - - def updateCache(self, plugin, result): - self.cache.extend(result) - - def fetchForPlugin(self, pluginname, plugin, urls, cb, err=None): - try: - result = [] #result loaded from cache - process = [] #urls to process - for url in urls: - if url in self.m.infoCache: - result.append(self.m.infoCache[url]) - else: - process.append(url) - - if result: - self.m.log.debug("Fetched %d values from cache for %s" % (len(result), pluginname)) - cb(pluginname, result) - - if process: - self.m.log.debug("Run Info Fetching for %s" % pluginname) - for result in plugin.getInfo(process): - #result = [ .. (name, size, status, url) .. ] - if not type(result) == list: result = [result] - - for res in result: - self.m.infoCache[res[3]] = res - - cb(pluginname, result) - - self.m.log.debug("Finished Info Fetching for %s" % pluginname) - except Exception, e: - self.m.log.warning(_("Info Fetching for %(name)s failed | %(err)s") % - {"name": pluginname, "err": str(e)}) - if self.m.core.debug: - print_exc() - - # generate default results - if err: - result = [(url, 0, 3, url) for url in urls] - cb(pluginname, result) - - - def decryptContainer(self, plugin, url): - data = [] - # only works on container plugins - - self.m.log.debug("Pre decrypting %s with %s" % (url, plugin)) - - # dummy pyfile - pyfile = PyFile(self.m.core.files, -1, url, url, 0, 0, "", plugin, -1, -1) - - pyfile.initPlugin() - - # little plugin lifecycle - try: - pyfile.plugin.setup() - pyfile.plugin.loadToDisk() - pyfile.plugin.decrypt(pyfile) - pyfile.plugin.deleteTmp() - - for pack in pyfile.plugin.packages: - pyfile.plugin.urls.extend(pack[1]) - - data = self.m.core.pluginManager.parseUrls(pyfile.plugin.urls) - - self.m.log.debug("Got %d links." % len(data)) - - except Exception, e: - self.m.log.debug("Pre decrypting error: %s" % str(e)) - finally: - pyfile.release() - - return data diff --git a/module/threads/ServerThread.py b/module/threads/ServerThread.py deleted file mode 100644 index e9fe14708..000000000 --- a/module/threads/ServerThread.py +++ /dev/null @@ -1,108 +0,0 @@ -from __future__ import with_statement -from os.path import exists - -import os -import threading -import logging - -core = None -setup = None -log = logging.getLogger("log") - -class WebServer(threading.Thread): - def __init__(self, pycore): - global core - threading.Thread.__init__(self) - self.core = pycore - core = pycore - self.running = True - self.server = pycore.config['webinterface']['server'] - self.https = pycore.config['webinterface']['https'] - self.cert = pycore.config["ssl"]["cert"] - self.key = pycore.config["ssl"]["key"] - self.host = pycore.config['webinterface']['host'] - self.port = pycore.config['webinterface']['port'] - - self.setDaemon(True) - - def run(self): - import module.webui as webinterface - global webinterface - - reset = False - - if self.https and (not exists(self.cert) or not exists(self.key)): - log.warning(_("SSL certificates not found.")) - self.https = False - - if self.server in ("lighttpd", "nginx"): - log.warning(_("Sorry, we dropped support for starting %s directly within pyLoad") % self.server) - log.warning(_("You can use the threaded server which offers good performance and ssl,")) - log.warning(_("of course you can still use your existing %s with pyLoads fastcgi server") % self.server) - log.warning(_("sample configs are located in the module/web/servers directory")) - reset = True - elif self.server == "fastcgi": - try: - import flup - except: - log.warning(_("Can't use %(server)s, python-flup is not installed!") % { - "server": self.server}) - reset = True - - if reset or self.server == "lightweight": - if os.name != "nt": - try: - import bjoern - except Exception, e: - log.error(_("Error importing lightweight server: %s") % e) - log.warning(_("You need to download and compile bjoern, https://github.com/jonashaag/bjoern")) - log.warning(_("Copy the boern.so to module/lib folder or use setup.py install")) - log.warning(_("Of course you need to be familiar with linux and know how to compile software")) - self.server = "builtin" - else: - self.core.log.info(_("Server set to threaded, due to known performance problems on windows.")) - self.core.config['webinterface']['server'] = "threaded" - self.server = "threaded" - - if self.server == "threaded": - self.start_threaded() - elif self.server == "fastcgi": - self.start_fcgi() - elif self.server == "lightweight": - self.start_lightweight() - else: - self.start_builtin() - - def start_builtin(self): - - if self.https: - log.warning(_("This server offers no SSL, please consider using threaded instead")) - - self.core.log.info(_("Starting builtin webserver: %(host)s:%(port)d") % {"host": self.host, "port": self.port}) - webinterface.run_simple(host=self.host, port=self.port) - - def start_threaded(self): - if self.https: - self.core.log.info(_("Starting threaded SSL webserver: %(host)s:%(port)d") % {"host": self.host, "port": self.port}) - else: - self.cert = "" - self.key = "" - self.core.log.info(_("Starting threaded webserver: %(host)s:%(port)d") % {"host": self.host, "port": self.port}) - - webinterface.run_threaded(host=self.host, port=self.port, cert=self.cert, key=self.key) - - def start_fcgi(self): - - self.core.log.info(_("Starting fastcgi server: %(host)s:%(port)d") % {"host": self.host, "port": self.port}) - webinterface.run_fcgi(host=self.host, port=self.port) - - - def start_lightweight(self): - if self.https: - log.warning(_("This server offers no SSL, please consider using threaded instead")) - - self.core.log.info(_("Starting lightweight webserver (bjoern): %(host)s:%(port)d") % {"host": self.host, "port": self.port}) - webinterface.run_lightweight(host=self.host, port=self.port) - - def quit(self): - self.running = False diff --git a/module/unescape.py b/module/unescape.py deleted file mode 100644 index 74e7b5c67..000000000 --- a/module/unescape.py +++ /dev/null @@ -1,3 +0,0 @@ -from module.utils import html_unescape -#deprecated -unescape = html_unescape diff --git a/module/webui/__init__.py b/module/webui/__init__.py deleted file mode 100644 index 85fec1b52..000000000 --- a/module/webui/__init__.py +++ /dev/null @@ -1,147 +0,0 @@ -# -*- coding: utf-8 -*- -""" - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. - - @author: RaNaN -""" - -import sys -import module.common.pylgettext as gettext - -import os -from os.path import join, abspath, dirname, exists -from os import makedirs - -THEME_DIR = abspath(join(dirname(__file__), "themes")) -PYLOAD_DIR = abspath(join(THEME_DIR, "..", "..", "..")) - -sys.path.append(PYLOAD_DIR) - -from module import InitHomeDir -from module.utils import decode, formatSize - -import bottle -from bottle import run, app - -from jinja2 import Environment, FileSystemLoader, PrefixLoader, FileSystemBytecodeCache -from middlewares import StripPathMiddleware, GZipMiddleWare, PrefixMiddleware - -SETUP = None -PYLOAD = None - -from module.threads import ServerThread - -if not ServerThread.core: - if ServerThread.setup: - SETUP = ServerThread.setup - config = SETUP.config - else: - raise Exception("Could not access pyLoad Core") -else: - PYLOAD = ServerThread.core.api - config = ServerThread.core.config - -from module.common.JsEngine import JsEngine - -JS = JsEngine() - -THEME = config.get('webinterface', 'theme') -DL_ROOT = config.get('general', 'download_folder') -LOG_ROOT = config.get('log', 'log_folder') -PREFIX = config.get('webinterface', 'prefix') - -if PREFIX: - PREFIX = PREFIX.rstrip("/") - if not PREFIX.startswith("/"): - PREFIX = "/" + PREFIX - -DEBUG = config.get("general", "debug_mode") or "-d" in sys.argv or "--debug" in sys.argv -bottle.debug(DEBUG) - -cache = join("tmp", "jinja_cache") -if not exists(cache): - makedirs(cache) - -bcc = FileSystemBytecodeCache(cache, '%s.cache') - -loader = FileSystemLoader(THEME_DIR) - -env = Environment(loader=loader, extensions=['jinja2.ext.i18n', 'jinja2.ext.autoescape'], trim_blocks=True, auto_reload=False, - bytecode_cache=bcc) - -from filters import quotepath, path_make_relative, path_make_absolute, truncate, date - -env.filters["quotepath"] = quotepath -env.filters["truncate"] = truncate -env.filters["date"] = date -env.filters["path_make_relative"] = path_make_relative -env.filters["path_make_absolute"] = path_make_absolute -env.filters["decode"] = decode -env.filters["type"] = lambda x: str(type(x)) -env.filters["formatsize"] = formatSize -env.filters["getitem"] = lambda x, y: x.__getitem__(y) -if PREFIX: - env.filters["url"] = lambda x: x -else: - env.filters["url"] = lambda x: PREFIX + x if x.startswith("/") else x - -gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None]) -translation = gettext.translation("django", join(PYLOAD_DIR, "locale"), - languages=[config.get("general", "language"), "en"],fallback=True) -translation.install(True) -env.install_gettext_translations(translation) - -from beaker.middleware import SessionMiddleware - -session_opts = { - 'session.type': 'file', - 'session.cookie_expires': False, - 'session.data_dir': './tmp', - 'session.auto': False -} - -web = StripPathMiddleware(SessionMiddleware(app(), session_opts)) -web = GZipMiddleWare(web) - -if PREFIX: - web = PrefixMiddleware(web, prefix=PREFIX) - -import module.webui.app - -def run_simple(host="0.0.0.0", port="8000"): - run(app=web, host=host, port=port, quiet=True) - - -def run_lightweight(host="0.0.0.0", port="8000"): - run(app=web, host=host, port=port, server="bjoern", quiet=True) - - -def run_threaded(host="0.0.0.0", port="8000", theads=3, cert="", key=""): - from wsgiserver import CherryPyWSGIServer - - if cert and key: - CherryPyWSGIServer.ssl_certificate = cert - CherryPyWSGIServer.ssl_private_key = key - - CherryPyWSGIServer.numthreads = theads - - from module.webui.app.utils import CherryPyWSGI - - run(app=web, host=host, port=port, server=CherryPyWSGI, quiet=True) - - -def run_fcgi(host="0.0.0.0", port="8000"): - from bottle import FlupFCGIServer - - run(app=web, host=host, port=port, server=FlupFCGIServer, quiet=True) diff --git a/module/webui/app/__init__.py b/module/webui/app/__init__.py deleted file mode 100644 index e52102840..000000000 --- a/module/webui/app/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# -*- coding: utf-8 -*- - -from module.webui.app import api, cnl, json, pyload diff --git a/module/webui/app/api.py b/module/webui/app/api.py deleted file mode 100644 index ba178682a..000000000 --- a/module/webui/app/api.py +++ /dev/null @@ -1,101 +0,0 @@ -# -*- coding: utf-8 -*- - -from urllib import unquote -from itertools import chain -from traceback import format_exc, print_exc - -from bottle import route, request, response, HTTPError - -from utils import toDict, set_session -from module.webui import PYLOAD - -from module.common.json_layer import json -from module.lib.SafeEval import const_eval as literal_eval -from module.Api import BaseObject - -# json encoder that accepts TBase objects -class TBaseEncoder(json.JSONEncoder): - - def default(self, o): - if isinstance(o, BaseObject): - return toDict(o) - return json.JSONEncoder.default(self, o) - - -# accepting positional arguments, as well as kwargs via post and get - -@route('/api/<func><args:re:[a-zA-Z0-9\-_/\"\'\[\]%{}]*>') -@route('/api/<func><args:re:[a-zA-Z0-9\-_/\"\'\[\]%{}]*>', method='POST') -def call_api(func, args=""): - response.headers.replace("Content-type", "application/json") - response.headers.append("Cache-Control", "no-cache, must-revalidate") - - s = request.environ.get('beaker.session') - if 'session' in request.POST: - s = s.get_by_id(request.POST['session']) - - if not s or not s.get("authenticated", False): - return HTTPError(403, json.dumps("Forbidden")) - - if not PYLOAD.isAuthorized(func, {"role": s["role"], "permission": s["perms"]}): - return HTTPError(401, json.dumps("Unauthorized")) - - args = args.split("/")[1:] - kwargs = {} - - for x, y in chain(request.GET.iteritems(), request.POST.iteritems()): - if x == "session": continue - kwargs[x] = unquote(y) - - try: - return callApi(func, *args, **kwargs) - except Exception, e: - print_exc() - return HTTPError(500, json.dumps({"error": e.message, "traceback": format_exc()})) - - -def callApi(func, *args, **kwargs): - if not hasattr(PYLOAD.EXTERNAL, func) or func.startswith("_"): - print "Invalid API call", func - return HTTPError(404, json.dumps("Not Found")) - - result = getattr(PYLOAD, func)(*[literal_eval(x) for x in args], - **dict([(x, literal_eval(y)) for x, y in kwargs.iteritems()])) - - # null is invalid json response - if result is None: result = True - - return json.dumps(result, cls=TBaseEncoder) - - -#post -> username, password -@route('/api/login', method='POST') -def login(): - response.headers.replace("Content-type", "application/json") - response.headers.append("Cache-Control", "no-cache, must-revalidate") - - user = request.forms.get("username") - password = request.forms.get("password") - - info = PYLOAD.checkAuth(user, password) - - if not info: - return json.dumps(False) - - s = set_session(request, info) - - # get the session id by dirty way, documentations seems wrong - try: - sid = s._headers["cookie_out"].split("=")[1].split(";")[0] - return json.dumps(sid) - except: - return json.dumps(True) - - -@route('/api/logout') -def logout(): - response.headers.replace("Content-type", "application/json") - response.headers.append("Cache-Control", "no-cache, must-revalidate") - - s = request.environ.get('beaker.session') - s.delete() diff --git a/module/webui/app/cnl.py b/module/webui/app/cnl.py deleted file mode 100644 index b29013d82..000000000 --- a/module/webui/app/cnl.py +++ /dev/null @@ -1,168 +0,0 @@ -# -*- coding: utf-8 -*- -from os.path import join -import re -from urllib import unquote -from base64 import standard_b64decode -from binascii import unhexlify - -from bottle import route, request, HTTPError -from module.webui import PYLOAD, DL_ROOT, JS - - -try: - from Crypto.Cipher import AES -except: - pass - - -def local_check(function): - def _view(*args, **kwargs): - if request.environ.get("REMOTE_ADDR", "0") in ("127.0.0.1", "localhost") \ - or request.environ.get("HTTP_HOST", "0") in ("127.0.0.1:9666", "localhost:9666"): - return function(*args, **kwargs) - else: - return HTTPError(403, "Forbidden") - - return _view - - -@route('/flash') -@route('/flash/<id>') -@route('/flash', method='POST') -@local_check -def flash(id="0"): - return "JDownloader\r\n" - - -@route('/flash/add', method='POST') -@local_check -def add(request): - package = request.POST.get('referer', None) - urls = filter(lambda x: x != "", request.POST['urls'].split("\n")) - - if package: - PYLOAD.addPackage(package, urls, 0) - else: - PYLOAD.generateAndAddPackages(urls, 0) - - return "" - - -@route('/flash/addcrypted', method='POST') -@local_check -def addcrypted(): - package = request.forms.get('referer', 'ClickAndLoad Package') - dlc = request.forms['crypted'].replace(" ", "+") - - dlc_path = join(DL_ROOT, package.replace("/", "").replace("\\", "").replace(":", "") + ".dlc") - dlc_file = open(dlc_path, "wb") - dlc_file.write(dlc) - dlc_file.close() - - try: - PYLOAD.addPackage(package, [dlc_path], 0) - except: - return HTTPError() - else: - return "success\r\n" - - -@route('/flash/addcrypted2', method='POST') -@local_check -def addcrypted2(): - package = request.forms.get("source", None) - crypted = request.forms["crypted"] - jk = request.forms["jk"] - - crypted = standard_b64decode(unquote(crypted.replace(" ", "+"))) - if JS: - jk = "%s f()" % jk - jk = JS.eval(jk) - - else: - try: - jk = re.findall(r"return ('|\")(.+)('|\")", jk)[0][1] - except: - ## Test for some known js functions to decode - if jk.find("dec") > -1 and jk.find("org") > -1: - org = re.findall(r"var org = ('|\")([^\"']+)", jk)[0][1] - jk = list(org) - jk.reverse() - jk = "".join(jk) - else: - print "Could not decrypt key, please install py-spidermonkey or ossp-js" - - try: - Key = unhexlify(jk) - except: - print "Could not decrypt key, please install py-spidermonkey or ossp-js" - return "failed" - - IV = Key - - obj = AES.new(Key, AES.MODE_CBC, IV) - result = obj.decrypt(crypted).replace("\x00", "").replace("\r", "").split("\n") - - result = filter(lambda x: x != "", result) - - try: - if package: - PYLOAD.addPackage(package, result, 0) - else: - PYLOAD.generateAndAddPackages(result, 0) - except: - return "failed can't add" - else: - return "success\r\n" - - -@route('/flashgot_pyload') -@route('/flashgot_pyload', method='POST') -@route('/flashgot') -@route('/flashgot', method='POST') -@local_check -def flashgot(): - if request.environ['HTTP_REFERER'] != "http://localhost:9666/flashgot" and \ - request.environ['HTTP_REFERER'] != "http://127.0.0.1:9666/flashgot": - return HTTPError() - - autostart = int(request.forms.get('autostart', 0)) - package = request.forms.get('package', None) - urls = filter(lambda x: x != "", request.forms['urls'].split("\n")) - folder = request.forms.get('dir', None) - - if package: - PYLOAD.addPackage(package, urls, autostart) - else: - PYLOAD.generateAndAddPackages(urls, autostart) - - return "" - - -@route('/crossdomain.xml') -@local_check -def crossdomain(): - rep = "<?xml version=\"1.0\"?>\n" - rep += "<!DOCTYPE cross-domain-policy SYSTEM \"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd\">\n" - rep += "<cross-domain-policy>\n" - rep += "<allow-access-from domain=\"*\" />\n" - rep += "</cross-domain-policy>" - return rep - - -@route('/flash/checkSupportForUrl') -@local_check -def checksupport(): - url = request.GET.get("url") - res = PYLOAD.checkURLs([url]) - supported = (not res[0][1] is None) - - return str(supported).lower() - - -@route('/jdcheck.js') -@local_check -def jdcheck(): - rep = "jdownloader=true;\n" - rep += "var version='9.581;'" - return rep diff --git a/module/webui/app/json.py b/module/webui/app/json.py deleted file mode 100644 index cf9a8f238..000000000 --- a/module/webui/app/json.py +++ /dev/null @@ -1,311 +0,0 @@ -# -*- coding: utf-8 -*- - -from os.path import join -from traceback import print_exc -from shutil import copyfileobj - -from bottle import route, request, HTTPError - -from module.webui import PYLOAD - -from utils import login_required, render_to_response, toDict - -from module.utils import decode, formatSize - - -def format_time(seconds): - seconds = int(seconds) - - hours, seconds = divmod(seconds, 3600) - minutes, seconds = divmod(seconds, 60) - return "%.2i:%.2i:%.2i" % (hours, minutes, seconds) - - -def get_sort_key(item): - return item["order"] - - -@route('/json/status') -@route('/json/status', method='POST') -@login_required('LIST') -def status(): - try: - status = toDict(PYLOAD.statusServer()) - status['captcha'] = PYLOAD.isCaptchaWaiting() - return status - except: - return HTTPError() - - -@route('/json/links') -@route('/json/links', method='POST') -@login_required('LIST') -def links(): - try: - links = [toDict(x) for x in PYLOAD.statusDownloads()] - ids = [] - for link in links: - ids.append(link['fid']) - - if link['status'] == 12: - link['info'] = "%s @ %s/s" % (link['format_eta'], formatSize(link['speed'])) - elif link['status'] == 5: - link['percent'] = 0 - link['size'] = 0 - link['bleft'] = 0 - link['info'] = _("waiting %s") % link['format_wait'] - else: - link['info'] = "" - - data = {'links': links, 'ids': ids} - return data - except Exception, e: - print_exc() - return HTTPError() - - -@route('/json/packages') -@login_required('LIST') -def packages(): - print "/json/packages" - try: - data = PYLOAD.getQueue() - - for package in data: - package['links'] = [] - for file in PYLOAD.get_package_files(package['id']): - package['links'].append(PYLOAD.get_file_info(file)) - - return data - - except: - return HTTPError() - - -@route('/json/package/<id:int>') -@login_required('LIST') -def package(id): - try: - data = toDict(PYLOAD.getPackageData(id)) - data["links"] = [toDict(x) for x in data["links"]] - - for pyfile in data["links"]: - if pyfile["status"] == 0: - pyfile["icon"] = "status_finished.png" - elif pyfile["status"] in (2, 3): - pyfile["icon"] = "status_queue.png" - elif pyfile["status"] in (9, 1): - pyfile["icon"] = "status_offline.png" - elif pyfile["status"] == 5: - pyfile["icon"] = "status_waiting.png" - elif pyfile["status"] == 8: - pyfile["icon"] = "status_failed.png" - elif pyfile["status"] == 4: - pyfile["icon"] = "arrow_right.png" - elif pyfile["status"] in (11, 13): - pyfile["icon"] = "status_proc.png" - else: - pyfile["icon"] = "status_downloading.png" - - tmp = data["links"] - tmp.sort(key=get_sort_key) - data["links"] = tmp - return data - - except: - print_exc() - return HTTPError() - - -@route('/json/package_order/<ids>') -@login_required('ADD') -def package_order(ids): - try: - pid, pos = ids.split("|") - PYLOAD.orderPackage(int(pid), int(pos)) - return {"response": "success"} - except: - return HTTPError() - - -@route('/json/abort_link/<id:int>') -@login_required('DELETE') -def abort_link(id): - try: - PYLOAD.stopDownloads([id]) - return {"response": "success"} - except: - return HTTPError() - - -@route('/json/link_order/<ids>') -@login_required('ADD') -def link_order(ids): - try: - pid, pos = ids.split("|") - PYLOAD.orderFile(int(pid), int(pos)) - return {"response": "success"} - except: - return HTTPError() - - -@route('/json/add_package') -@route('/json/add_package', method='POST') -@login_required('ADD') -def add_package(): - name = request.forms.get("add_name", "New Package").strip() - queue = int(request.forms['add_dest']) - links = decode(request.forms['add_links']) - links = links.split("\n") - pw = request.forms.get("add_password", "").strip("\n\r") - - try: - f = request.files['add_file'] - - if not name or name == "New Package": - name = f.name - - fpath = join(PYLOAD.getConfigValue("general", "download_folder"), "tmp_" + f.filename) - destination = open(fpath, 'wb') - copyfileobj(f.file, destination) - destination.close() - links.insert(0, fpath) - except: - pass - - name = name.decode("utf8", "ignore") - - links = map(lambda x: x.strip(), links) - links = filter(lambda x: x != "", links) - - pack = PYLOAD.addPackage(name, links, queue) - if pw: - pw = pw.decode("utf8", "ignore") - data = {"password": pw} - PYLOAD.setPackageData(pack, data) - - -@route('/json/move_package/<dest:int>/<id:int>') -@login_required('MODIFY') -def move_package(dest, id): - try: - PYLOAD.movePackage(dest, id) - return {"response": "success"} - except: - return HTTPError() - - -@route('/json/edit_package', method='POST') -@login_required('MODIFY') -def edit_package(): - try: - id = int(request.forms.get("pack_id")) - data = {"name": request.forms.get("pack_name").decode("utf8", "ignore"), - "folder": request.forms.get("pack_folder").decode("utf8", "ignore"), - "password": request.forms.get("pack_pws").decode("utf8", "ignore")} - - PYLOAD.setPackageData(id, data) - return {"response": "success"} - - except: - return HTTPError() - - -@route('/json/set_captcha') -@route('/json/set_captcha', method='POST') -@login_required('ADD') -def set_captcha(): - if request.environ.get('REQUEST_METHOD', "GET") == "POST": - try: - PYLOAD.setCaptchaResult(request.forms["cap_id"], request.forms["cap_result"]) - except: - pass - - task = PYLOAD.getCaptchaTask() - - if task.tid >= 0: - src = "data:image/%s;base64,%s" % (task.type, task.data) - - return {'captcha': True, 'id': task.tid, 'src': src, 'result_type' : task.resultType} - else: - return {'captcha': False} - - -@route('/json/load_config/<category>/<section>') -@login_required("SETTINGS") -def load_config(category, section): - conf = None - if category == "general": - conf = PYLOAD.getConfigDict() - elif category == "plugin": - conf = PYLOAD.getPluginConfigDict() - - for key, option in conf[section].iteritems(): - if key in ("desc", "outline"): continue - - if ";" in option["type"]: - option["list"] = option["type"].split(";") - - option["value"] = decode(option["value"]) - - return render_to_response("settings_item.html", {"skey": section, "section": conf[section]}) - - -@route('/json/save_config/<category>', method='POST') -@login_required("SETTINGS") -def save_config(category): - for key, value in request.POST.iteritems(): - try: - section, option = key.split("|") - except: - continue - - if category == "general": category = "core" - - PYLOAD.setConfigValue(section, option, decode(value), category) - - -@route('/json/add_account', method='POST') -@login_required("ACCOUNTS") -def add_account(): - login = request.POST["account_login"] - password = request.POST["account_password"] - type = request.POST["account_type"] - - PYLOAD.updateAccount(type, login, password) - - -@route('/json/update_accounts', method='POST') -@login_required("ACCOUNTS") -def update_accounts(): - deleted = [] #dont update deleted accs or they will be created again - - for name, value in request.POST.iteritems(): - value = value.strip() - if not value: continue - - tmp, user = name.split(";") - plugin, action = tmp.split("|") - - if (plugin, user) in deleted: continue - - if action == "password": - PYLOAD.updateAccount(plugin, user, value) - elif action == "time" and "-" in value: - PYLOAD.updateAccount(plugin, user, options={"time": [value]}) - elif action == "limitdl" and value.isdigit(): - PYLOAD.updateAccount(plugin, user, options={"limitDL": [value]}) - elif action == "delete": - deleted.append((plugin,user)) - PYLOAD.removeAccount(plugin, user) - -@route('/json/change_password', method='POST') -def change_password(): - - user = request.POST["user_login"] - oldpw = request.POST["login_current_password"] - newpw = request.POST["login_new_password"] - - if not PYLOAD.changePassword(user, oldpw, newpw): - print "Wrong password" - return HTTPError() diff --git a/module/webui/app/pyload.py b/module/webui/app/pyload.py deleted file mode 100644 index 8864688f9..000000000 --- a/module/webui/app/pyload.py +++ /dev/null @@ -1,544 +0,0 @@ -# -*- coding: utf-8 -*- -""" - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. - - @author: RaNaN -""" -from datetime import datetime -from operator import itemgetter, attrgetter - -import time -import os -import sys -from os import listdir -from os.path import isdir, isfile, join, abspath -from sys import getfilesystemencoding -from urllib import unquote - -from bottle import route, static_file, request, response, redirect, error - -from module.webui import PYLOAD, PYLOAD_DIR, THEME_DIR, SETUP, env - -from utils import render_to_response, parse_permissions, parse_userdata, \ - login_required, get_permission, set_permission, permlist, toDict, set_session - -from module.webui.filters import relpath, unquotepath - -from module.utils import formatSize, safe_join, fs_encode, fs_decode - -# Helper - -def pre_processor(): - s = request.environ.get('beaker.session') - user = parse_userdata(s) - perms = parse_permissions(s) - status = {} - captcha = False - update = False - plugins = False - if user["is_authenticated"]: - status = PYLOAD.statusServer() - info = PYLOAD.getInfoByPlugin("UpdateManager") - captcha = PYLOAD.isCaptchaWaiting() - - # check if update check is available - if info: - if info["pyload"] == "True": - update = info["version"] - if info["plugins"] == "True": - plugins = True - - - return {"user": user, - 'status': status, - 'captcha': captcha, - 'perms': perms, - 'url': request.url, - 'update': update, - 'plugins': plugins} - - -def base(messages): - return render_to_response('base.html', {'messages': messages}, [pre_processor]) - - -## Views -@error(403) -def error403(code): - return "The parameter you passed has the wrong format" - - -@error(404) -def error404(code): - return "Sorry, this page does not exist" - - -@error(500) -def error500(error): - traceback = error.traceback - if traceback: - print traceback - return base(["An Error occured, please enable debug mode to get more details.", error, - traceback.replace("\n", "<br>") if traceback else "No Traceback"]) - - -@route('/<theme>/<file:re:(.+/)?[^/]+\.min\.[^/]+>') -def server_min(theme, file): - filename = join(THEME_DIR, theme, file) - if not isfile(filename): - file = file.replace(".min.", ".") - if file.endswith(".js"): - return server_js(theme, file) - else: - return server_static(theme, file) - - -@route('/<theme>/<file_static:re:.+\.js>') -def server_js(theme, file): - response.headers['Content-Type'] = "text/javascript; charset=UTF-8" - - if "/render/" in file or ".render." in file: - response.headers['Expires'] = time.strftime("%a, %d %b %Y %H:%M:%S GMT", - time.gmtime(time.time() + 24 * 7 * 60 * 60)) - response.headers['Cache-control'] = "public" - - path = join(theme, file) - return env.get_template(path).render() - else: - return server_static(theme, file) - - -@route('/<theme>/<file:path>') -def server_static(theme, file): - response.headers['Expires'] = time.strftime("%a, %d %b %Y %H:%M:%S GMT", - time.gmtime(time.time() + 24 * 7 * 60 * 60)) - response.headers['Cache-control'] = "public" - - return static_file(file, root=join(THEME_DIR, theme)) - - -@route('/favicon.ico') -def favicon(): - return static_file("icon.ico", root=join(PYLOAD_DIR, "docs", "resources")) - - -@route('/login', method="GET") -def login(): - if not PYLOAD and SETUP: - redirect("/setup") - else: - return render_to_response("login.html", proc=[pre_processor]) - - -@route('/nopermission') -def nopermission(): - return base([_("You dont have permission to access this page.")]) - - -@route('/login', method='POST') -def login_post(): - user = request.forms.get("username") - password = request.forms.get("password") - - info = PYLOAD.checkAuth(user, password) - - if not info: - return render_to_response("login.html", {"errors": True}, [pre_processor]) - - set_session(request, info) - return redirect("/") - - -@route('/logout') -def logout(): - s = request.environ.get('beaker.session') - s.delete() - return render_to_response("logout.html", proc=[pre_processor]) - - -@route('/') -@route('/home') -@login_required("LIST") -def home(): - try: - res = [toDict(x) for x in PYLOAD.statusDownloads()] - except: - s = request.environ.get('beaker.session') - s.delete() - return redirect("/login") - - for link in res: - if link["status"] == 12: - link["information"] = "%s kB @ %s kB/s" % (link["size"] - link["bleft"], link["speed"]) - - return render_to_response("home.html", {"res": res}, [pre_processor]) - - -@route('/queue') -@login_required("LIST") -def queue(): - queue = PYLOAD.getQueue() - - queue.sort(key=attrgetter("order")) - - return render_to_response('queue.html', {'content': queue, 'target': 1}, [pre_processor]) - - -@route('/collector') -@login_required('LIST') -def collector(): - queue = PYLOAD.getCollector() - - queue.sort(key=attrgetter("order")) - - return render_to_response('queue.html', {'content': queue, 'target': 0}, [pre_processor]) - - -@route('/downloads') -@login_required('DOWNLOAD') -def downloads(): - root = PYLOAD.getConfigValue("general", "download_folder") - - if not isdir(root): - return base([_('Download directory not found.')]) - data = { - 'folder': [], - 'files': [] - } - - items = listdir(fs_encode(root)) - - for item in sorted([fs_decode(x) for x in items]): - if isdir(safe_join(root, item)): - folder = { - 'name': item, - 'path': item, - 'files': [] - } - files = listdir(safe_join(root, item)) - for file in sorted([fs_decode(x) for x in files]): - try: - if isfile(safe_join(root, item, file)): - folder['files'].append(file) - except: - pass - - data['folder'].append(folder) - elif isfile(join(root, item)): - data['files'].append(item) - - return render_to_response('downloads.html', {'files': data}, [pre_processor]) - - -@route('/downloads/get/<path:path>') -@login_required("DOWNLOAD") -def get_download(path): - path = unquote(path).decode("utf8") - #@TODO some files can not be downloaded - - root = PYLOAD.getConfigValue("general", "download_folder") - - path = path.replace("..", "") - return static_file(fs_encode(path), fs_encode(root)) - - - -@route('/settings') -@login_required('SETTINGS') -def config(): - conf = PYLOAD.getConfig() - plugin = PYLOAD.getPluginConfig() - - conf_menu = [] - plugin_menu = [] - - for entry in sorted(conf.keys()): - conf_menu.append((entry, conf[entry].description)) - - for entry in sorted(plugin.keys()): - plugin_menu.append((entry, plugin[entry].description)) - - accs = PYLOAD.getAccounts(False) - - for data in accs: - if data.trafficleft == -1: - data.trafficleft = _("unlimited") - elif not data.trafficleft: - data.trafficleft = _("not available") - else: - data.trafficleft = formatSize(data.trafficleft * 1024) - - if data.validuntil == -1: - data.validuntil = _("unlimited") - elif not data.validuntil : - data.validuntil = _("not available") - else: - t = time.localtime(data.validuntil) - data.validuntil = time.strftime("%d.%m.%Y - %H:%M:%S", t) - - try: - data.options["time"] = data.options["time"][0] - except: - data.options["time"] = "0:00-0:00" - - if "limitDL" in data.options: - data.options["limitdl"] = data.options["limitDL"][0] - else: - data.options["limitdl"] = "0" - - return render_to_response('settings.html', - {'conf': {'plugin': plugin_menu, 'general': conf_menu, 'accs': accs}, 'types': PYLOAD.getAccountTypes()}, - [pre_processor]) - - -@route('/filechooser') -@route('/pathchooser') -@route('/filechooser/<file:path>') -@route('/pathchooser/<path:path>') -@login_required('STATUS') -def path(file="", path=""): - if file: - type = "file" - else: - type = "folder" - - path = os.path.normpath(unquotepath(path)) - - if os.path.isfile(path): - oldfile = path - path = os.path.dirname(path) - else: - oldfile = '' - - abs = False - - if os.path.isdir(path): - if os.path.isabs(path): - cwd = os.path.abspath(path) - abs = True - else: - cwd = relpath(path) - else: - cwd = os.getcwd() - - try: - cwd = cwd.encode("utf8") - except: - pass - - cwd = os.path.normpath(os.path.abspath(cwd)) - parentdir = os.path.dirname(cwd) - if not abs: - if os.path.abspath(cwd) == "/": - cwd = relpath(cwd) - else: - cwd = relpath(cwd) + os.path.sep - parentdir = relpath(parentdir) + os.path.sep - - if os.path.abspath(cwd) == "/": - parentdir = "" - - try: - folders = os.listdir(cwd) - except: - folders = [] - - files = [] - - for f in folders: - try: - f = f.decode(getfilesystemencoding()) - data = {'name': f, 'fullpath': join(cwd, f)} - data['sort'] = data['fullpath'].lower() - data['modified'] = datetime.fromtimestamp(int(os.path.getmtime(join(cwd, f)))) - data['ext'] = os.path.splitext(f)[1] - except: - continue - - if os.path.isdir(join(cwd, f)): - data['type'] = 'dir' - else: - data['type'] = 'file' - - if os.path.isfile(join(cwd, f)): - data['size'] = os.path.getsize(join(cwd, f)) - - power = 0 - while (data['size'] / 1024) > 0.3: - power += 1 - data['size'] /= 1024. - units = ('', 'K', 'M', 'G', 'T') - data['unit'] = units[power] + 'Byte' - else: - data['size'] = '' - - files.append(data) - - files = sorted(files, key=itemgetter('type', 'sort')) - - return render_to_response('pathchooser.html', - {'cwd': cwd, 'files': files, 'parentdir': parentdir, 'type': type, 'oldfile': oldfile, - 'absolute': abs}, []) - - -@route('/logs') -@route('/logs', method='POST') -@route('/logs/<item>') -@route('/logs/<item>', method='POST') -@login_required('LOGS') -def logs(item=-1): - s = request.environ.get('beaker.session') - - perpage = s.get('perpage', 34) - reversed = s.get('reversed', False) - - warning = "" - conf = PYLOAD.getConfigValue("log", "file_log") - if not conf: - warning = "Warning: File log is disabled, see settings page." - - perpage_p = ((20, 20), (34, 34), (40, 40), (100, 100), (0, 'all')) - fro = None - - if request.environ.get('REQUEST_METHOD', "GET") == "POST": - try: - fro = datetime.strptime(request.forms['from'], '%d.%m.%Y %H:%M:%S') - except: - pass - try: - perpage = int(request.forms['perpage']) - s['perpage'] = perpage - - reversed = bool(request.forms.get('reversed', False)) - s['reversed'] = reversed - except: - pass - - s.save() - - try: - item = int(item) - except: - pass - - log = PYLOAD.getLog() - if not perpage: - item = 0 - - if item < 1 or type(item) is not int: - item = 1 if len(log) - perpage + 1 < 1 else len(log) - perpage + 1 - - if type(fro) is datetime: # we will search for datetime - item = -1 - - data = [] - counter = 0 - perpagecheck = 0 - for l in log: - counter += 1 - - if counter >= item: - try: - date, time, level, message = l.decode("utf8", "ignore").split(" ", 3) - dtime = datetime.strptime(date + ' ' + time, '%d.%m.%Y %H:%M:%S') - except: - dtime = None - date = '?' - time = ' ' - level = '?' - message = l - if item == -1 and dtime is not None and fro <= dtime: - item = counter #found our datetime - if item >= 0: - data.append({'line': counter, 'date': date + " " + time, 'level': level, 'message': message}) - perpagecheck += 1 - if fro is None and dtime is not None: #if fro not set set it to first showed line - fro = dtime - if perpagecheck >= perpage > 0: - break - - if fro is None: #still not set, empty log? - fro = datetime.now() - if reversed: - data.reverse() - return render_to_response('logs.html', {'warning': warning, 'log': data, 'from': fro.strftime('%d.%m.%Y %H:%M:%S'), - 'reversed': reversed, 'perpage': perpage, 'perpage_p': sorted(perpage_p), - 'iprev': 1 if item - perpage < 1 else item - perpage, - 'inext': (item + perpage) if item + perpage < len(log) else item}, - [pre_processor]) - - -@route('/admin') -@route('/admin', method='POST') -@login_required("ADMIN") -def admin(): - # convert to dict - user = dict([(name, toDict(y)) for name, y in PYLOAD.getAllUserData().iteritems()]) - perms = permlist() - - for data in user.itervalues(): - data["perms"] = {} - get_permission(data["perms"], data["permission"]) - data["perms"]["admin"] = True if data["role"] is 0 else False - - - s = request.environ.get('beaker.session') - if request.environ.get('REQUEST_METHOD', "GET") == "POST": - for name in user: - if request.POST.get("%s|admin" % name, False): - user[name]["role"] = 0 - user[name]["perms"]["admin"] = True - elif name != s["name"]: - user[name]["role"] = 1 - user[name]["perms"]["admin"] = False - - # set all perms to false - for perm in perms: - user[name]["perms"][perm] = False - - for perm in request.POST.getall("%s|perms" % name): - user[name]["perms"][perm] = True - - user[name]["permission"] = set_permission(user[name]["perms"]) - - PYLOAD.setUserPermission(name, user[name]["permission"], user[name]["role"]) - - return render_to_response("admin.html", {"users": user, "permlist": perms}, [pre_processor]) - - -@route('/setup') -def setup(): - return base([_("Run pyload.py -s to access the setup.")]) - - -@route('/info') -def info(): - conf = PYLOAD.getConfigDict() - - if hasattr(os, "uname"): - extra = os.uname() - else: - extra = tuple() - - data = {"python": sys.version, - "os": " ".join((os.name, sys.platform) + extra), - "version": PYLOAD.getServerVersion(), - "folder": abspath(PYLOAD_DIR), "config": abspath(""), - "download": abspath(conf["general"]["download_folder"]["value"]), - "freespace": formatSize(PYLOAD.freeSpace()), - "remote": conf["remote"]["port"]["value"], - "webif": conf["webinterface"]["port"]["value"], - "language": conf["general"]["language"]["value"]} - - return render_to_response("info.html", data, [pre_processor]) diff --git a/module/webui/app/utils.py b/module/webui/app/utils.py deleted file mode 100644 index 1ba08e9a7..000000000 --- a/module/webui/app/utils.py +++ /dev/null @@ -1,138 +0,0 @@ -# -*- coding: utf-8 -*- -""" - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this plrogram; if not, see <http://www.gnu.org/licenses/>. - - @author: RaNaN -""" - -from os.path import join - -from bottle import request, HTTPError, redirect, ServerAdapter - -from module.webui import env, THEME - -from module.Api import has_permission, PERMS, ROLE - -def render_to_response(file, args={}, proc=[]): - for p in proc: - args.update(p()) - path = join(THEME, "tml", file) - return env.get_template(path).render(**args) - - -def parse_permissions(session): - perms = dict([(x, False) for x in dir(PERMS) if not x.startswith("_")]) - perms["ADMIN"] = False - perms["is_admin"] = False - - if not session.get("authenticated", False): - return perms - - if session.get("role") == ROLE.ADMIN: - for k in perms.iterkeys(): - perms[k] = True - - elif session.get("perms"): - p = session.get("perms") - get_permission(perms, p) - - return perms - - -def permlist(): - return [x for x in dir(PERMS) if not x.startswith("_") and x != "ALL"] - - -def get_permission(perms, p): - """Returns a dict with permission key - - :param perms: dictionary - :param p: bits - """ - for name in permlist(): - perms[name] = has_permission(p, getattr(PERMS, name)) - - -def set_permission(perms): - """generates permission bits from dictionary - - :param perms: dict - """ - permission = 0 - for name in dir(PERMS): - if name.startswith("_"): continue - - if name in perms and perms[name]: - permission |= getattr(PERMS, name) - - return permission - - -def set_session(request, info): - s = request.environ.get('beaker.session') - s["authenticated"] = True - s["user_id"] = info["id"] - s["name"] = info["name"] - s["role"] = info["role"] - s["perms"] = info["permission"] - s["template"] = info["template"] - s.save() - - return s - - -def parse_userdata(session): - return {"name": session.get("name", "Anonymous"), - "is_admin": True if session.get("role", 1) == 0 else False, - "is_authenticated": session.get("authenticated", False)} - - -def login_required(perm=None): - def _dec(func): - def _view(*args, **kwargs): - s = request.environ.get('beaker.session') - if s.get("name", None) and s.get("authenticated", False): - if perm: - perms = parse_permissions(s) - if perm not in perms or not perms[perm]: - if request.headers.get('X-Requested-With') == 'XMLHttpRequest': - return HTTPError(403, "Forbidden") - else: - return redirect("/nopermission") - - return func(*args, **kwargs) - else: - if request.headers.get('X-Requested-With') == 'XMLHttpRequest': - return HTTPError(403, "Forbidden") - else: - return redirect("/login") - - return _view - - return _dec - - -def toDict(obj): - ret = {} - for att in obj.__slots__: - ret[att] = getattr(obj, att) - return ret - - -class CherryPyWSGI(ServerAdapter): - def run(self, handler): - from wsgiserver import CherryPyWSGIServer - - server = CherryPyWSGIServer((self.host, self.port), handler) - server.start() diff --git a/module/webui/servers/lighttpd_default.conf b/module/webui/servers/lighttpd_default.conf deleted file mode 100644 index bbeb5f7a7..000000000 --- a/module/webui/servers/lighttpd_default.conf +++ /dev/null @@ -1,153 +0,0 @@ -# lighttpd configuration file -# -# use it as a base for lighttpd 1.0.0 and above -# -# $Id: lighttpd.conf,v 1.7 2004/11/03 22:26:05 weigon Exp $ - -############ Options you really have to take care of #################### - -## modules to load -# at least mod_access and mod_accesslog should be loaded -# all other module should only be loaded if really neccesary -# - saves some time -# - saves memory -server.modules = ( - "mod_rewrite", - "mod_redirect", - "mod_alias", - "mod_access", -# "mod_trigger_b4_dl", -# "mod_auth", -# "mod_status", -# "mod_setenv", - "mod_fastcgi", -# "mod_proxy", -# "mod_simple_vhost", -# "mod_evhost", -# "mod_userdir", -# "mod_cgi", -# "mod_compress", -# "mod_ssi", -# "mod_usertrack", -# "mod_expire", -# "mod_secdownload", -# "mod_rrdtool", -# "mod_accesslog" - ) - -## A static document-root. For virtual hosting take a look at the -## mod_simple_vhost module. -server.document-root = "%(path)" - -## where to send error-messages to -server.errorlog = "%(path)/error.log" - -# files to check for if .../ is requested -index-file.names = ( "index.php", "index.html", - "index.htm", "default.htm" ) - -## set the event-handler (read the performance section in the manual) -# server.event-handler = "freebsd-kqueue" # needed on OS X - -# mimetype mapping -mimetype.assign = ( - ".pdf" => "application/pdf", - ".sig" => "application/pgp-signature", - ".spl" => "application/futuresplash", - ".class" => "application/octet-stream", - ".ps" => "application/postscript", - ".torrent" => "application/x-bittorrent", - ".dvi" => "application/x-dvi", - ".gz" => "application/x-gzip", - ".pac" => "application/x-ns-proxy-autoconfig", - ".swf" => "application/x-shockwave-flash", - ".tar.gz" => "application/x-tgz", - ".tgz" => "application/x-tgz", - ".tar" => "application/x-tar", - ".zip" => "application/zip", - ".mp3" => "audio/mpeg", - ".m3u" => "audio/x-mpegurl", - ".wma" => "audio/x-ms-wma", - ".wax" => "audio/x-ms-wax", - ".ogg" => "application/ogg", - ".wav" => "audio/x-wav", - ".gif" => "image/gif", - ".jar" => "application/x-java-archive", - ".jpg" => "image/jpeg", - ".jpeg" => "image/jpeg", - ".png" => "image/png", - ".xbm" => "image/x-xbitmap", - ".xpm" => "image/x-xpixmap", - ".xwd" => "image/x-xwindowdump", - ".css" => "text/css", - ".html" => "text/html", - ".htm" => "text/html", - ".js" => "text/javascript", - ".asc" => "text/plain", - ".c" => "text/plain", - ".cpp" => "text/plain", - ".log" => "text/plain", - ".conf" => "text/plain", - ".text" => "text/plain", - ".txt" => "text/plain", - ".dtd" => "text/xml", - ".xml" => "text/xml", - ".mpeg" => "video/mpeg", - ".mpg" => "video/mpeg", - ".mov" => "video/quicktime", - ".qt" => "video/quicktime", - ".avi" => "video/x-msvideo", - ".asf" => "video/x-ms-asf", - ".asx" => "video/x-ms-asf", - ".wmv" => "video/x-ms-wmv", - ".bz2" => "application/x-bzip", - ".tbz" => "application/x-bzip-compressed-tar", - ".tar.bz2" => "application/x-bzip-compressed-tar", - # default mime type - "" => "application/octet-stream", - ) - -# Use the "Content-Type" extended attribute to obtain mime type if possible -#mimetype.use-xattr = "enable" - -#### accesslog module -accesslog.filename = "%(path)/access.log" - -url.access-deny = ( "~", ".inc" ) - -$HTTP["url"] =~ "\.pdf$" { - server.range-requests = "disable" -} -static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" ) - -server.pid-file = "%(path)/lighttpd.pid" - -server.bind = "%(host)" -server.port = %(port) - -#server.document-root = "/home/user/public_html" -fastcgi.server = ( - "/pyload.fcgi" => ( - "main" => ( - "host" => "127.0.0.1", - "port" => 9295, - "check-local" => "disable", - "docroot" => "/", - ) - ), -) - -alias.url = ( - "/media/" => "%(media)/", - "/admin/media/" => "/usr/lib/python%(version)/site-packages/django/contrib/admin/media/", -) - -url.rewrite-once = ( - "^(/media.*)$" => "$1", - "^(/admin/media.*)$" => "$1", - "^/favicon\.ico$" => "/media/img/favicon.ico", - "^(/pyload.fcgi.*)$" => "$1", - "^(/.*)$" => "/pyload.fcgi$1", -) - -%(ssl) diff --git a/pyload-cli.py b/pyload-cli.py index c1e2ff617..0ef70368b 100644 --- a/pyload-cli.py +++ b/pyload-cli.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from module.cli.Cli import main +from pyload.cli.Cli import main if __name__ == "__main__": main() @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from module.Core import main +from pyload.Core import main if __name__ == "__main__": main() diff --git a/module/Api.py b/pyload/Api.py index 066d490ec..066d490ec 100644 --- a/module/Api.py +++ b/pyload/Api.py diff --git a/module/CaptchaManager.py b/pyload/CaptchaManager.py index 0ba876ae8..0ba876ae8 100644 --- a/module/CaptchaManager.py +++ b/pyload/CaptchaManager.py diff --git a/pyload/ConfigParser.py b/pyload/ConfigParser.py new file mode 100644 index 000000000..64ce6b10e --- /dev/null +++ b/pyload/ConfigParser.py @@ -0,0 +1,373 @@ +# -*- coding: utf-8 -*- + +from __future__ import with_statement +from time import sleep +from os.path import exists, join +from shutil import copy + +from traceback import print_exc +from utils import chmod + +# ignore these plugin configs, mainly because plugins were wiped out +IGNORE = ( + "FreakshareNet", "SpeedManager", "ArchiveTo", "ShareCx", ('hooks', 'UnRar'), + 'EasyShareCom', 'FlyshareCz' + ) + +CONF_VERSION = 1 + +class ConfigParser: + """ + holds and manage the configuration + + current dict layout: + + { + + section: { + option: { + value: + type: + desc: + } + desc: + + } + + """ + + + def __init__(self): + """Constructor""" + self.config = {} # the config values + self.plugin = {} # the config for plugins + self.oldRemoteData = {} + + self.pluginCB = None # callback when plugin config value is changed + + self.checkVersion() + + self.readConfig() + + self.deleteOldPlugins() + + + def checkVersion(self, n=0): + """determines if config need to be copied""" + try: + if not exists("pyload.conf"): + copy(join(pypath, "pyload", "config", "default.conf"), "pyload.conf") + + if not exists("plugin.conf"): + f = open("plugin.conf", "wb") + f.write("version: " + str(CONF_VERSION)) + f.close() + + f = open("pyload.conf", "rb") + v = f.readline() + f.close() + v = v[v.find(":") + 1:].strip() + + if not v or int(v) < CONF_VERSION: + copy(join(pypath, "pyload", "config", "default.conf"), "pyload.conf") + print "Old version of config was replaced" + + f = open("plugin.conf", "rb") + v = f.readline() + f.close() + v = v[v.find(":") + 1:].strip() + + if not v or int(v) < CONF_VERSION: + f = open("plugin.conf", "wb") + f.write("version: " + str(CONF_VERSION)) + f.close() + print "Old version of plugin-config replaced" + except: + if n < 3: + sleep(0.3) + self.checkVersion(n + 1) + else: + raise + + def readConfig(self): + """reads the config file""" + + self.config = self.parseConfig(join(pypath, "pyload", "config", "default.conf")) + self.plugin = self.parseConfig("plugin.conf") + + try: + homeconf = self.parseConfig("pyload.conf") + if "username" in homeconf["remote"]: + if "password" in homeconf["remote"]: + self.oldRemoteData = {"username": homeconf["remote"]["username"]["value"], + "password": homeconf["remote"]["username"]["value"]} + del homeconf["remote"]["password"] + del homeconf["remote"]["username"] + self.updateValues(homeconf, self.config) + + except Exception, e: + print "Config Warning" + print_exc() + + + def parseConfig(self, config): + """parses a given configfile""" + + f = open(config) + + config = f.read() + + config = config.splitlines()[1:] + + conf = {} + + section, option, value, typ, desc = "", "", "", "", "" + + listmode = False + + for line in config: + comment = line.rfind("#") + if line.find(":", comment) < 0 > line.find("=", comment) and comment > 0 and line[comment - 1].isspace(): + line = line.rpartition("#") # removes comments + if line[1]: + line = line[0] + else: + line = line[2] + + line = line.strip() + + try: + if line == "": + continue + elif line.endswith(":"): + section, none, desc = line[:-1].partition('-') + section = section.strip() + desc = desc.replace('"', "").strip() + conf[section] = {"desc": desc} + else: + if listmode: + if line.endswith("]"): + listmode = False + line = line.replace("]", "") + + value += [self.cast(typ, x.strip()) for x in line.split(",") if x] + + if not listmode: + conf[section][option] = {"desc": desc, + "type": typ, + "value": value} + + + else: + content, none, value = line.partition("=") + + content, none, desc = content.partition(":") + + desc = desc.replace('"', "").strip() + + typ, none, option = content.strip().rpartition(" ") + + value = value.strip() + + if value.startswith("["): + if value.endswith("]"): + listmode = False + value = value[:-1] + else: + listmode = True + + value = [self.cast(typ, x.strip()) for x in value[1:].split(",") if x] + else: + value = self.cast(typ, value) + + if not listmode: + conf[section][option] = {"desc": desc, + "type": typ, + "value": value} + + except Exception, e: + print "Config Warning" + print_exc() + + f.close() + return conf + + + def updateValues(self, config, dest): + """sets the config values from a parsed config file to values in destination""" + + for section in config.iterkeys(): + if section in dest: + for option in config[section].iterkeys(): + if option in ("desc", "outline"): continue + + if option in dest[section]: + dest[section][option]["value"] = config[section][option]["value"] + + #else: + # dest[section][option] = config[section][option] + + + #else: + # dest[section] = config[section] + + def saveConfig(self, config, filename): + """saves config to filename""" + with open(filename, "wb") as f: + chmod(filename, 0600) + f.write("version: %i \n" % CONF_VERSION) + for section in config.iterkeys(): + f.write('\n%s - "%s":\n' % (section, config[section]["desc"])) + + for option, data in config[section].iteritems(): + if option in ("desc", "outline"): continue + + if isinstance(data["value"], list): + value = "[ \n" + for x in data["value"]: + value += "\t\t" + str(x) + ",\n" + value += "\t\t]\n" + else: + if type(data["value"]) in (str, unicode): + value = data["value"] + "\n" + else: + value = str(data["value"]) + "\n" + try: + f.write('\t%s %s : "%s" = %s' % (data["type"], option, data["desc"], value)) + except UnicodeEncodeError: + f.write('\t%s %s : "%s" = %s' % (data["type"], option, data["desc"], value.encode("utf8"))) + + def cast(self, typ, value): + """cast value to given format""" + if type(value) not in (str, unicode): + return value + + elif typ == "int": + return int(value) + elif typ == "bool": + return True if value.lower() in ("1", "true", "on", "an", "yes") else False + elif typ == "time": + if not value: value = "0:00" + if not ":" in value: value += ":00" + return value + elif typ in ("str", "file", "folder"): + try: + return value.encode("utf8") + except: + return value + else: + return value + + + def save(self): + """saves the configs to disk""" + + self.saveConfig(self.config, "pyload.conf") + self.saveConfig(self.plugin, "plugin.conf") + + + def __getitem__(self, section): + """provides dictonary like access: c['section']['option']""" + return Section(self, section) + + + def get(self, section, option): + """get value""" + val = self.config[section][option]["value"] + try: + if type(val) in (str, unicode): + return val.decode("utf8") + else: + return val + except: + return val + + def set(self, section, option, value): + """set value""" + + value = self.cast(self.config[section][option]["type"], value) + + self.config[section][option]["value"] = value + self.save() + + def getPlugin(self, plugin, option): + """gets a value for a plugin""" + val = self.plugin[plugin][option]["value"] + try: + if type(val) in (str, unicode): + return val.decode("utf8") + else: + return val + except: + return val + + def setPlugin(self, plugin, option, value): + """sets a value for a plugin""" + + value = self.cast(self.plugin[plugin][option]["type"], value) + + if self.pluginCB: self.pluginCB(plugin, option, value) + + self.plugin[plugin][option]["value"] = value + self.save() + + def getMetaData(self, section, option): + """ get all config data for an option """ + return self.config[section][option] + + def addPluginConfig(self, name, config, outline=""): + """adds config options with tuples (name, type, desc, default)""" + if name not in self.plugin: + conf = {"desc": name, + "outline": outline} + self.plugin[name] = conf + else: + conf = self.plugin[name] + conf["outline"] = outline + + for item in config: + if item[0] in conf: + conf[item[0]]["type"] = item[1] + conf[item[0]]["desc"] = item[2] + else: + conf[item[0]] = { + "desc": item[2], + "type": item[1], + "value": self.cast(item[1], item[3]) + } + + values = [x[0] for x in config] + ["desc", "outline"] + #delete old values + for item in conf.keys(): + if item not in values: + del conf[item] + + def deleteConfig(self, name): + """Removes a plugin config""" + if name in self.plugin: + del self.plugin[name] + + + def deleteOldPlugins(self): + """ remove old plugins from config """ + + for name in IGNORE: + if name in self.plugin: + del self.plugin[name] + + +class Section: + """provides dictionary like access for configparser""" + + def __init__(self, parser, section): + """Constructor""" + self.parser = parser + self.section = section + + def __getitem__(self, item): + """getitem""" + return self.parser.get(self.section, item) + + def __setitem__(self, item, value): + """setitem""" + self.parser.set(self.section, item, value) diff --git a/pyload/Core.py b/pyload/Core.py new file mode 100644 index 000000000..5f506b980 --- /dev/null +++ b/pyload/Core.py @@ -0,0 +1,663 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: spoob + @author: sebnapi + @author: RaNaN + @author: mkaay + @version: v0.4.10 +""" +CURRENT_VERSION = '0.4.10' + +import __builtin__ + +from getopt import getopt, GetoptError +import pyload.common.pylgettext as gettext +from imp import find_module +import logging +import logging.handlers +import os +from os import _exit, execl, getcwd, makedirs, remove, sep, walk, chdir, close +from os.path import exists, join +import signal +import subprocess +import sys +from sys import argv, executable, exit +from time import time, sleep +from traceback import print_exc + +from pyload import InitHomeDir +from pyload.plugins.AccountManager import AccountManager +from pyload.CaptchaManager import CaptchaManager +from pyload.ConfigParser import ConfigParser +from pyload.plugins.PluginManager import PluginManager +from pyload.PullEvents import PullManager +from pyload.network.RequestFactory import RequestFactory +from pyload.threads.ServerThread import WebServer +from pyload.Scheduler import Scheduler +from pyload.common.JsEngine import JsEngine +from pyload import remote +from pyload.remote.RemoteManager import RemoteManager +from pyload.database import DatabaseBackend, FileHandler + +from pyload.utils import freeSpace, formatSize, get_console_encoding + +from codecs import getwriter + +enc = get_console_encoding(sys.stdout.encoding) +sys.stdout = getwriter(enc)(sys.stdout, errors="replace") + +# TODO List +# - configurable auth system ldap/mysql +# - cron job like sheduler + +class Core(object): + """pyLoad Core, one tool to rule them all... (the filehosters) :D""" + + def __init__(self): + self.doDebug = False + self.running = False + self.daemon = False + self.remote = True + self.arg_links = [] + self.pidfile = "pyload.pid" + self.deleteLinks = False # will delete links on startup + + if len(argv) > 1: + try: + options, args = getopt(argv[1:], 'vchdusqp:', + ["version", "clear", "clean", "help", "debug", "user", + "setup", "configdir=", "changedir", "daemon", + "quit", "status", "no-remote","pidfile="]) + + for option, argument in options: + if option in ("-v", "--version"): + print "pyLoad", CURRENT_VERSION + exit() + elif option in ("-p", "--pidfile"): + self.pidfile = argument + elif option == "--daemon": + self.daemon = True + elif option in ("-c", "--clear"): + self.deleteLinks = True + elif option in ("-h", "--help"): + self.print_help() + exit() + elif option in ("-d", "--debug"): + self.doDebug = True + elif option in ("-u", "--user"): + from pyload.setup import Setup + + self.config = ConfigParser() + s = Setup(pypath, self.config) + s.set_user() + exit() + elif option in ("-s", "--setup"): + from pyload.setup import Setup + + self.config = ConfigParser() + s = Setup(pypath, self.config) + s.start() + exit() + elif option == "--changedir": + from pyload.setup import Setup + + self.config = ConfigParser() + s = Setup(pypath, self.config) + s.conf_path(True) + exit() + elif option in ("-q", "--quit"): + self.quitInstance() + exit() + elif option == "--status": + pid = self.isAlreadyRunning() + if self.isAlreadyRunning(): + print pid + exit(0) + else: + print "false" + exit(1) + elif option == "--clean": + self.cleanTree() + exit() + elif option == "--no-remote": + self.remote = False + + except GetoptError: + print 'Unknown Argument(s) "%s"' % " ".join(argv[1:]) + self.print_help() + exit() + + def print_help(self): + print + print "pyLoad v%s 2008-2014 the pyLoad Team" % CURRENT_VERSION + print + if sys.argv[0].endswith(".py"): + print "Usage: python pyload.py [options]" + else: + print "Usage: pyload [options]" + print + print "<Options>" + print " -v, --version", " " * 10, "Print version to terminal" + print " -c, --clear", " " * 12, "Delete all saved packages/links" + #print " -a, --add=<link/list>", " " * 2, "Add the specified links" + print " -u, --user", " " * 13, "Manages users" + print " -d, --debug", " " * 12, "Enable debug mode" + print " -s, --setup", " " * 12, "Run Setup Assistant" + print " --configdir=<dir>", " " * 6, "Run with <dir> as config directory" + print " -p, --pidfile=<file>", " " * 3, "Set pidfile to <file>" + print " --changedir", " " * 12, "Change config dir permanently" + print " --daemon", " " * 15, "Daemonmize after start" + print " --no-remote", " " * 12, "Disable remote access (saves RAM)" + print " --status", " " * 15, "Display pid if running or False" + print " --clean", " " * 16, "Remove .pyc/.pyo files" + print " -q, --quit", " " * 13, "Quit running pyLoad instance" + print " -h, --help", " " * 13, "Display this help screen" + print + + def toggle_pause(self): + if self.threadManager.pause: + self.threadManager.pause = False + return False + elif not self.threadManager.pause: + self.threadManager.pause = True + return True + + def quit(self, a, b): + self.shutdown() + self.log.info(_("Received Quit signal")) + _exit(1) + + def writePidFile(self): + self.deletePidFile() + pid = os.getpid() + f = open(self.pidfile, "wb") + f.write(str(pid)) + f.close() + + def deletePidFile(self): + if self.checkPidFile(): + self.log.debug("Deleting old pidfile %s" % self.pidfile) + os.remove(self.pidfile) + + def checkPidFile(self): + """ return pid as int or 0""" + if os.path.isfile(self.pidfile): + f = open(self.pidfile, "rb") + pid = f.read().strip() + f.close() + if pid: + pid = int(pid) + return pid + + return 0 + + def isAlreadyRunning(self): + pid = self.checkPidFile() + if not pid or os.name == "nt": return False + try: + os.kill(pid, 0) # 0 - default signal (does nothing) + except: + return 0 + + return pid + + def quitInstance(self): + if os.name == "nt": + print "Not supported on windows." + return + + pid = self.isAlreadyRunning() + if not pid: + print "No pyLoad running." + return + + try: + os.kill(pid, 3) #SIGUIT + + t = time() + print "waiting for pyLoad to quit" + + while exists(self.pidfile) and t + 10 > time(): + sleep(0.25) + + if not exists(self.pidfile): + print "pyLoad successfully stopped" + else: + os.kill(pid, 9) #SIGKILL + print "pyLoad did not respond" + print "Kill signal was send to process with id %s" % pid + + except: + print "Error quitting pyLoad" + + + def cleanTree(self): + for path, dirs, files in walk(self.path("")): + for f in files: + if not f.endswith(".pyo") and not f.endswith(".pyc"): + continue + + if "_25" in f or "_26" in f or "_27" in f: + continue + + print join(path, f) + remove(join(path, f)) + + def start(self, rpc=True, web=True): + """ starts the fun :D """ + + self.version = CURRENT_VERSION + + if not exists("pyload.conf"): + from pyload.setup import Setup + + print "This is your first start, running configuration assistent now." + self.config = ConfigParser() + s = Setup(pypath, self.config) + res = False + try: + res = s.start() + except SystemExit: + pass + except KeyboardInterrupt: + print "\nSetup interrupted" + except: + res = False + print_exc() + print "Setup failed" + if not res: + remove("pyload.conf") + + exit() + + try: signal.signal(signal.SIGQUIT, self.quit) + except: pass + + self.config = ConfigParser() + + gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None]) + translation = gettext.translation("pyLoad", self.path("locale"), + languages=[self.config['general']['language'], "en"], fallback=True) + translation.install(True) + + self.debug = self.doDebug or self.config['general']['debug_mode'] + self.remote &= self.config['remote']['activated'] + + pid = self.isAlreadyRunning() + if pid: + print _("pyLoad already running with pid %s") % pid + exit() + + if os.name != "nt" and self.config["general"]["renice"]: + os.system("renice %d %d" % (self.config["general"]["renice"], os.getpid())) + + if self.config["permission"]["change_group"]: + if os.name != "nt": + try: + from grp import getgrnam + + group = getgrnam(self.config["permission"]["group"]) + os.setgid(group[2]) + except Exception, e: + print _("Failed changing group: %s") % e + + if self.config["permission"]["change_user"]: + if os.name != "nt": + try: + from pwd import getpwnam + + user = getpwnam(self.config["permission"]["user"]) + os.setuid(user[2]) + except Exception, e: + print _("Failed changing user: %s") % e + + self.check_file(self.config['log']['log_folder'], _("folder for logs"), True) + + if self.debug: + self.init_logger(logging.DEBUG) # logging level + else: + self.init_logger(logging.INFO) # logging level + + self.do_kill = False + self.do_restart = False + self.shuttedDown = False + + self.log.info(_("Starting") + " pyLoad %s" % CURRENT_VERSION) + self.log.info(_("Using home directory: %s") % getcwd()) + + self.writePidFile() + + #@TODO refractor + + remote.activated = self.remote + self.log.debug("Remote activated: %s" % self.remote) + + self.check_install("Crypto", _("pycrypto to decode container files")) + #img = self.check_install("Image", _("Python Image Library (PIL) for captcha reading")) + #self.check_install("pycurl", _("pycurl to download any files"), True, True) + self.check_file("tmp", _("folder for temporary files"), True) + #tesser = self.check_install("tesseract", _("tesseract for captcha reading"), False) if os.name != "nt" else True + + self.captcha = True # checks seems to fail, although tesseract is available + + self.check_file(self.config['general']['download_folder'], _("folder for downloads"), True) + + if self.config['ssl']['activated']: + self.check_install("OpenSSL", _("OpenSSL for secure connection")) + + self.setupDB() + if self.config.oldRemoteData: + self.log.info(_("Moving old user config to DB")) + self.db.addUser(self.config.oldRemoteData["username"], self.config.oldRemoteData["password"]) + + self.log.info(_("Please check your logindata with ./pyload.py -u")) + + if self.deleteLinks: + self.log.info(_("All links removed")) + self.db.purgeLinks() + + self.requestFactory = RequestFactory(self) + __builtin__.pyreq = self.requestFactory + + self.lastClientConnected = 0 + + # later imported because they would trigger api import, and remote value not set correctly + from pyload import Api + from pyload.HookManager import HookManager + from pyload.ThreadManager import ThreadManager + + if Api.activated != self.remote: + self.log.warning("Import error: API remote status not correct.") + + self.api = Api.Api(self) + + self.scheduler = Scheduler(self) + + #hell yeah, so many important managers :D + self.pluginManager = PluginManager(self) + self.pullManager = PullManager(self) + self.accountManager = AccountManager(self) + self.threadManager = ThreadManager(self) + self.captchaManager = CaptchaManager(self) + self.hookManager = HookManager(self) + self.remoteManager = RemoteManager(self) + + self.js = JsEngine() + + self.log.info(_("Downloadtime: %s") % self.api.isTimeDownload()) + + if rpc: + self.remoteManager.startBackends() + + if web: + self.init_webserver() + + spaceLeft = freeSpace(self.config["general"]["download_folder"]) + + self.log.info(_("Free space: %s") % formatSize(spaceLeft)) + + self.config.save() #save so config files gets filled + + link_file = join(pypath, "links.txt") + + if exists(link_file): + f = open(link_file, "rb") + if f.read().strip(): + self.api.addPackage("links.txt", [link_file], 1) + f.close() + + link_file = "links.txt" + if exists(link_file): + f = open(link_file, "rb") + if f.read().strip(): + self.api.addPackage("links.txt", [link_file], 1) + f.close() + + #self.scheduler.addJob(0, self.accountManager.getAccountInfos) + self.log.info(_("Activating Accounts...")) + self.accountManager.getAccountInfos() + + self.threadManager.pause = False + self.running = True + + self.log.info(_("Activating Plugins...")) + self.hookManager.coreReady() + + self.log.info(_("pyLoad is up and running")) + + #test api +# from pyload.common.APIExerciser import startApiExerciser +# startApiExerciser(self, 3) + + #some memory stats +# from guppy import hpy +# hp=hpy() +# import objgraph +# objgraph.show_most_common_types(limit=20) +# import memdebug +# memdebug.start(8002) + + locals().clear() + + while True: + sleep(2) + if self.do_restart: + self.log.info(_("restarting pyLoad")) + self.restart() + if self.do_kill: + self.shutdown() + self.log.info(_("pyLoad quits")) + self.removeLogger() + _exit(0) #@TODO thrift blocks shutdown + + self.threadManager.work() + self.scheduler.work() + + def setupDB(self): + self.db = DatabaseBackend(self) # the backend + self.db.setup() + + self.files = FileHandler(self) + self.db.manager = self.files #ugly? + + def init_webserver(self): + if self.config['webinterface']['activated']: + self.webserver = WebServer(self) + self.webserver.start() + + def init_logger(self, level): + console = logging.StreamHandler(sys.stdout) + frm = logging.Formatter("%(asctime)s %(levelname)-8s %(message)s", "%d.%m.%Y %H:%M:%S") + console.setFormatter(frm) + self.log = logging.getLogger("log") # settable in config + + if self.config['log']['file_log']: + if self.config['log']['log_rotate']: + file_handler = logging.handlers.RotatingFileHandler(join(self.config['log']['log_folder'], 'log.txt'), + maxBytes=self.config['log']['log_size'] * 1024, + backupCount=int(self.config['log']['log_count']), + encoding="utf8") + else: + file_handler = logging.FileHandler(join(self.config['log']['log_folder'], 'log.txt'), encoding="utf8") + + file_handler.setFormatter(frm) + self.log.addHandler(file_handler) + + self.log.addHandler(console) #if console logging + self.log.setLevel(level) + + def removeLogger(self): + for h in list(self.log.handlers): + self.log.removeHandler(h) + h.close() + + def check_install(self, check_name, legend, python=True, essential=False): + """check wether needed tools are installed""" + try: + if python: + find_module(check_name) + else: + pipe = subprocess.PIPE + subprocess.Popen(check_name, stdout=pipe, stderr=pipe) + + return True + except: + if essential: + self.log.info(_("Install %s") % legend) + exit() + + return False + + def check_file(self, check_names, description="", folder=False, empty=True, essential=False, quiet=False): + """check wether needed files exists""" + tmp_names = [] + if not type(check_names) == list: + tmp_names.append(check_names) + else: + tmp_names.extend(check_names) + file_created = True + file_exists = True + for tmp_name in tmp_names: + if not exists(tmp_name): + file_exists = False + if empty: + try: + if folder: + tmp_name = tmp_name.replace("/", sep) + makedirs(tmp_name) + else: + open(tmp_name, "w") + except: + file_created = False + else: + file_created = False + + if not file_exists and not quiet: + if file_created: + #self.log.info( _("%s created") % description ) + pass + else: + if not empty: + self.log.warning( + _("could not find %(desc)s: %(name)s") % {"desc": description, "name": tmp_name}) + else: + print _("could not create %(desc)s: %(name)s") % {"desc": description, "name": tmp_name} + if essential: + exit() + + def isClientConnected(self): + return (self.lastClientConnected + 30) > time() + + def restart(self): + self.shutdown() + chdir(owd) + # close some open fds + for i in range(3, 50): + try: + close(i) + except : + pass + + execl(executable, executable, *sys.argv) + _exit(0) + + def shutdown(self): + self.log.info(_("shutting down...")) + try: + if self.config['webinterface']['activated'] and hasattr(self, "webserver"): + self.webserver.quit() + + for thread in self.threadManager.threads: + thread.put("quit") + pyfiles = self.files.cache.values() + + for pyfile in pyfiles: + pyfile.abortDownload() + + self.hookManager.coreExiting() + + except: + if self.debug: + print_exc() + self.log.info(_("error while shutting down")) + + finally: + self.files.syncSave() + self.shuttedDown = True + + self.deletePidFile() + + + def path(self, *args): + return join(pypath, *args) + + +def deamon(): + try: + pid = os.fork() + if pid > 0: + sys.exit(0) + except OSError, e: + print >> sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror) + sys.exit(1) + + # decouple from parent environment + os.setsid() + os.umask(0) + + # do second fork + try: + pid = os.fork() + if pid > 0: + # exit from second parent, print eventual PID before + print "Daemon PID %d" % pid + sys.exit(0) + except OSError, e: + print >> sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror) + sys.exit(1) + + # Iterate through and close some file descriptors. + for fd in range(0, 3): + try: + os.close(fd) + except OSError: # ERROR, fd wasn't open to begin with (ignored) + pass + + os.open(os.devnull, os.O_RDWR) # standard input (0) + os.dup2(0, 1) # standard output (1) + os.dup2(0, 2) + + pyload_core = Core() + pyload_core.start() + + +def main(): + if "--daemon" in sys.argv: + deamon() + else: + pyload_core = Core() + try: + pyload_core.start() + except KeyboardInterrupt: + pyload_core.shutdown() + pyload_core.log.info(_("killed pyLoad from Terminal")) + pyload_core.removeLogger() + _exit(1) + +# And so it begins... +if __name__ == "__main__": + main() diff --git a/pyload/HookManager.py b/pyload/HookManager.py new file mode 100644 index 000000000..7545b4d60 --- /dev/null +++ b/pyload/HookManager.py @@ -0,0 +1,305 @@ +# -*- coding: utf-8 -*- + +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: RaNaN, mkaay + @interface-version: 0.1 +""" +import __builtin__ + +import traceback +from thread import start_new_thread +from threading import RLock + +from types import MethodType + +from pyload.threads.PluginThread import HookThread +from pyload.plugins.PluginManager import literal_eval +from utils import lock + +class HookManager: + """Manages hooks, delegates and handles Events. + + Every plugin can define events, \ + but some very usefull events are called by the Core. + Contrary to overwriting hook methods you can use event listener, + which provides additional entry point in the control flow. + Only do very short tasks or use threads. + + **Known Events:** + Most hook methods exists as events. These are the additional known events. + + ===================== ============== ================================== + Name Arguments Description + ===================== ============== ================================== + downloadPreparing fid A download was just queued and will be prepared now. + downloadStarts fid A plugin will immediately starts the download afterwards. + linksAdded links, pid Someone just added links, you are able to modify the links. + allDownloadsProcessed Every link was handled, pyload would idle afterwards. + allDownloadsFinished Every download in queue is finished. + unrarFinished folder, fname An Unrar job finished + configChanged The config was changed via the api. + pluginConfigChanged The plugin config changed, due to api or internal process. + ===================== ============== ================================== + + | Notes: + | allDownloadsProcessed is *always* called before allDownloadsFinished. + | configChanged is *always* called before pluginConfigChanged. + + + """ + + def __init__(self, core): + self.core = core + self.config = self.core.config + + __builtin__.hookManager = self #needed to let hooks register themself + + self.log = self.core.log + self.plugins = [] + self.pluginMap = {} + self.methods = {} #dict of names and list of methods usable by rpc + + self.events = {} # contains events + + #registering callback for config event + self.config.pluginCB = MethodType(self.dispatchEvent, "pluginConfigChanged", basestring) + + self.addEvent("pluginConfigChanged", self.manageHooks) + + self.lock = RLock() + self.createIndex() + + def try_catch(func): + def new(*args): + try: + return func(*args) + except Exception, e: + args[0].log.error(_("Error executing hooks: %s") % str(e)) + if args[0].core.debug: + traceback.print_exc() + + return new + + + def addRPC(self, plugin, func, doc): + plugin = plugin.rpartition(".")[2] + doc = doc.strip() if doc else "" + + if plugin in self.methods: + self.methods[plugin][func] = doc + else: + self.methods[plugin] = {func: doc} + + def callRPC(self, plugin, func, args, parse): + if not args: args = tuple() + if parse: + args = tuple([literal_eval(x) for x in args]) + + plugin = self.pluginMap[plugin] + f = getattr(plugin, func) + return f(*args) + + + def createIndex(self): + plugins = [] + + active = [] + deactive = [] + + for pluginname in self.core.pluginManager.hookPlugins: + try: + #hookClass = getattr(plugin, plugin.__name__) + + if self.config.getPlugin(pluginname, "activated"): + pluginClass = self.core.pluginManager.loadClass("hooks", pluginname) + if not pluginClass: continue + + plugin = pluginClass(self.core, self) + plugins.append(plugin) + self.pluginMap[pluginClass.__name__] = plugin + if plugin.isActivated(): + active.append(pluginClass.__name__) + else: + deactive.append(pluginname) + + + except: + self.log.warning(_("Failed activating %(name)s") % {"name": pluginname}) + if self.core.debug: + traceback.print_exc() + + self.log.info(_("Activated plugins: %s") % ", ".join(sorted(active))) + self.log.info(_("Deactivate plugins: %s") % ", ".join(sorted(deactive))) + + self.plugins = plugins + + def manageHooks(self, plugin, name, value): + if name == "activated" and value: + self.activateHook(plugin) + elif name == "activated" and not value: + self.deactivateHook(plugin) + + def activateHook(self, plugin): + + #check if already loaded + for inst in self.plugins: + if inst.__name__ == plugin: + return + + pluginClass = self.core.pluginManager.loadClass("hooks", plugin) + + if not pluginClass: return + + self.log.debug("Plugin loaded: %s" % plugin) + + plugin = pluginClass(self.core, self) + self.plugins.append(plugin) + self.pluginMap[pluginClass.__name__] = plugin + + # call core Ready + start_new_thread(plugin.coreReady, tuple()) + + def deactivateHook(self, plugin): + + hook = None + for inst in self.plugins: + if inst.__name__ == plugin: + hook = inst + + if not hook: return + + self.log.debug("Plugin unloaded: %s" % plugin) + + hook.unload() + + #remove periodic call + self.log.debug("Removed callback %s" % self.core.scheduler.removeJob(hook.cb)) + self.plugins.remove(hook) + del self.pluginMap[hook.__name__] + + + @try_catch + def coreReady(self): + for plugin in self.plugins: + if plugin.isActivated(): + plugin.coreReady() + + self.dispatchEvent("coreReady") + + @try_catch + def coreExiting(self): + for plugin in self.plugins: + if plugin.isActivated(): + plugin.coreExiting() + + self.dispatchEvent("coreExiting") + + @lock + def downloadPreparing(self, pyfile): + for plugin in self.plugins: + if plugin.isActivated(): + plugin.downloadPreparing(pyfile) + + self.dispatchEvent("downloadPreparing", pyfile) + + @lock + def downloadFinished(self, pyfile): + for plugin in self.plugins: + if plugin.isActivated(): + plugin.downloadFinished(pyfile) + + self.dispatchEvent("downloadFinished", pyfile) + + @lock + @try_catch + def downloadFailed(self, pyfile): + for plugin in self.plugins: + if plugin.isActivated(): + plugin.downloadFailed(pyfile) + + self.dispatchEvent("downloadFailed", pyfile) + + @lock + def packageFinished(self, package): + for plugin in self.plugins: + if plugin.isActivated(): + plugin.packageFinished(package) + + self.dispatchEvent("packageFinished", package) + + @lock + def beforeReconnecting(self, ip): + for plugin in self.plugins: + plugin.beforeReconnecting(ip) + + self.dispatchEvent("beforeReconnecting", ip) + + @lock + def afterReconnecting(self, ip): + for plugin in self.plugins: + if plugin.isActivated(): + plugin.afterReconnecting(ip) + + self.dispatchEvent("afterReconnecting", ip) + + def startThread(self, function, *args, **kwargs): + t = HookThread(self.core.threadManager, function, args, kwargs) + + def activePlugins(self): + """ returns all active plugins """ + return [x for x in self.plugins if x.isActivated()] + + def getAllInfo(self): + """returns info stored by hook plugins""" + info = {} + for name, plugin in self.pluginMap.iteritems(): + if plugin.info: + #copy and convert so str + info[name] = dict([(x, str(y) if not isinstance(y, basestring) else y) for x, y in plugin.info.iteritems()]) + return info + + + def getInfo(self, plugin): + info = {} + if plugin in self.pluginMap and self.pluginMap[plugin].info: + info = dict([(x, str(y) if not isinstance(y, basestring) else y) + for x, y in self.pluginMap[plugin].info.iteritems()]) + + return info + + def addEvent(self, event, func): + """Adds an event listener for event name""" + if event in self.events: + self.events[event].append(func) + else: + self.events[event] = [func] + + def removeEvent(self, event, func): + """removes previously added event listener""" + if event in self.events: + self.events[event].remove(func) + + def dispatchEvent(self, event, *args): + """dispatches event with args""" + if event in self.events: + for f in self.events[event]: + try: + f(*args) + except Exception, e: + self.log.warning("Error calling event handler %s: %s, %s, %s" + % (event, f, args, str(e))) + if self.core.debug: + traceback.print_exc() diff --git a/pyload/InitHomeDir.py b/pyload/InitHomeDir.py new file mode 100644 index 000000000..ca229fb1e --- /dev/null +++ b/pyload/InitHomeDir.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: RaNaN + + This modules inits working directories and global variables, pydir and homedir +""" + +from os import makedirs, path, chdir +from os.path import join +import sys +from sys import argv, platform + +import __builtin__ + +__builtin__.owd = path.abspath("") # original working directory +__builtin__.pypath = path.abspath(path.join(__file__, "..", "..")) + +sys.path.append(join(pypath, "pyload", "lib")) + +homedir = "" + +if platform == 'nt': + homedir = path.expanduser("~") + if homedir == "~": + import ctypes + + CSIDL_APPDATA = 26 + _SHGetFolderPath = ctypes.windll.shell32.SHGetFolderPathW + _SHGetFolderPath.argtypes = [ctypes.wintypes.HWND, + ctypes.c_int, + ctypes.wintypes.HANDLE, + ctypes.wintypes.DWORD, ctypes.wintypes.LPCWSTR] + + path_buf = ctypes.wintypes.create_unicode_buffer(ctypes.wintypes.MAX_PATH) + result = _SHGetFolderPath(0, CSIDL_APPDATA, 0, 0, path_buf) + homedir = path_buf.value +else: + homedir = path.expanduser("~") + +__builtin__.homedir = homedir + +args = " ".join(argv[1:]) + +# dirty method to set configdir from commandline arguments +if "--configdir=" in args: + for aa in argv: + if aa.startswith("--configdir="): + configdir = aa.replace("--configdir=", "", 1).strip() +elif path.exists(path.join(pypath, "pyload", "config", "configdir")): + f = open(path.join(pypath, "pyload", "config", "configdir"), "rb") + c = f.read().strip() + f.close() + configdir = path.join(pypath, c) +else: + if platform in ("posix", "linux2"): + configdir = path.join(homedir, ".pyload") + else: + configdir = path.join(homedir, "pyload") + +if not path.exists(configdir): + makedirs(configdir, 0700) + +__builtin__.configdir = configdir +chdir(configdir) + +#print "Using %s as working directory." % configdir diff --git a/pyload/PullEvents.py b/pyload/PullEvents.py new file mode 100644 index 000000000..0739b4ec8 --- /dev/null +++ b/pyload/PullEvents.py @@ -0,0 +1,120 @@ +# -*- coding: utf-8 -*- + +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: mkaay +""" + +from time import time +from pyload.utils import uniqify + +class PullManager: + def __init__(self, core): + self.core = core + self.clients = [] + + def newClient(self, uuid): + self.clients.append(Client(uuid)) + + def clean(self): + for n, client in enumerate(self.clients): + if client.lastActive + 30 < time(): + del self.clients[n] + + def getEvents(self, uuid): + events = [] + validUuid = False + for client in self.clients: + if client.uuid == uuid: + client.lastActive = time() + validUuid = True + while client.newEvents(): + events.append(client.popEvent().toList()) + break + if not validUuid: + self.newClient(uuid) + events = [ReloadAllEvent("queue").toList(), ReloadAllEvent("collector").toList()] + return uniqify(events) + + def addEvent(self, event): + for client in self.clients: + client.addEvent(event) + +class Client: + def __init__(self, uuid): + self.uuid = uuid + self.lastActive = time() + self.events = [] + + def newEvents(self): + return len(self.events) > 0 + + def popEvent(self): + if not len(self.events): + return None + return self.events.pop(0) + + def addEvent(self, event): + self.events.append(event) + +class UpdateEvent: + def __init__(self, itype, iid, destination): + assert itype == "pack" or itype == "file" + assert destination == "queue" or destination == "collector" + self.type = itype + self.id = iid + self.destination = destination + + def toList(self): + return ["update", self.destination, self.type, self.id] + +class RemoveEvent: + def __init__(self, itype, iid, destination): + assert itype == "pack" or itype == "file" + assert destination == "queue" or destination == "collector" + self.type = itype + self.id = iid + self.destination = destination + + def toList(self): + return ["remove", self.destination, self.type, self.id] + +class InsertEvent: + def __init__(self, itype, iid, after, destination): + assert itype == "pack" or itype == "file" + assert destination == "queue" or destination == "collector" + self.type = itype + self.id = iid + self.after = after + self.destination = destination + + def toList(self): + return ["insert", self.destination, self.type, self.id, self.after] + +class ReloadAllEvent: + def __init__(self, destination): + assert destination == "queue" or destination == "collector" + self.destination = destination + + def toList(self): + return ["reload", self.destination] + +class AccountUpdateEvent: + def toList(self): + return ["account"] + +class ConfigUpdateEvent: + def toList(self): + return ["config"] diff --git a/pyload/PyFile.py b/pyload/PyFile.py new file mode 100644 index 000000000..c4ce71570 --- /dev/null +++ b/pyload/PyFile.py @@ -0,0 +1,284 @@ +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: RaNaN + @author: mkaay +""" + +from pyload.PullEvents import UpdateEvent +from pyload.utils import formatSize, lock + +from time import sleep, time + +from threading import RLock + +statusMap = { + "finished": 0, + "offline": 1, + "online": 2, + "queued": 3, + "skipped": 4, + "waiting": 5, + "temp. offline": 6, + "starting": 7, + "failed": 8, + "aborted": 9, + "decrypting": 10, + "custom": 11, + "downloading": 12, + "processing": 13, + "unknown": 14, +} + + +def setSize(self, value): + self._size = int(value) + +class PyFile(object): + """ + Represents a file object at runtime + """ + __slots__ = ("m", "id", "url", "name", "size", "_size", "status", "pluginname", "packageid", + "error", "order", "lock", "plugin", "waitUntil", "active", "abort", "statusname", + "reconnected", "progress", "maxprogress", "pluginmodule", "pluginclass") + + def __init__(self, manager, id, url, name, size, status, error, pluginname, package, order): + self.m = manager + + self.id = int(id) + self.url = url + self.name = name + self.size = size + self.status = status + self.pluginname = pluginname + self.packageid = package #should not be used, use package() instead + self.error = error + self.order = order + # database information ends here + + self.lock = RLock() + + self.plugin = None + #self.download = None + + self.waitUntil = 0 # time() + time to wait + + # status attributes + self.active = False #obsolete? + self.abort = False + self.reconnected = False + + self.statusname = None + + self.progress = 0 + self.maxprogress = 100 + + self.m.cache[int(id)] = self + + + # will convert all sizes to ints + size = property(lambda self: self._size, setSize) + + def __repr__(self): + return "PyFile %s: %s@%s" % (self.id, self.name, self.pluginname) + + @lock + def initPlugin(self): + """ inits plugin instance """ + if not self.plugin: + self.pluginmodule = self.m.core.pluginManager.getPlugin(self.pluginname) + self.pluginclass = getattr(self.pluginmodule, self.m.core.pluginManager.getPluginName(self.pluginname)) + self.plugin = self.pluginclass(self) + + @lock + def hasPlugin(self): + """Thread safe way to determine this file has initialized plugin attribute + + :return: + """ + return hasattr(self, "plugin") and self.plugin + + def package(self): + """ return package instance""" + return self.m.getPackage(self.packageid) + + def setStatus(self, status): + self.status = statusMap[status] + self.sync() #@TODO needed aslong no better job approving exists + + def setCustomStatus(self, msg, status="processing"): + self.statusname = msg + self.setStatus(status) + + def getStatusName(self): + if self.status not in (13, 14) or not self.statusname: + return self.m.statusMsg[self.status] + else: + return self.statusname + + def hasStatus(self, status): + return statusMap[status] == self.status + + def sync(self): + """sync PyFile instance with database""" + self.m.updateLink(self) + + @lock + def release(self): + """sync and remove from cache""" + # file has valid package + if self.packageid > 0: + self.sync() + + if hasattr(self, "plugin") and self.plugin: + self.plugin.clean() + del self.plugin + + self.m.releaseLink(self.id) + + def delete(self): + """delete pyfile from database""" + self.m.deleteLink(self.id) + + def toDict(self): + """return dict with all information for interface""" + return self.toDbDict() + + def toDbDict(self): + """return data as dict for databse + + format: + + { + id: {'url': url, 'name': name ... } + } + + """ + return { + self.id: { + 'id': self.id, + 'url': self.url, + 'name': self.name, + 'plugin': self.pluginname, + 'size': self.getSize(), + 'format_size': self.formatSize(), + 'status': self.status, + 'statusmsg': self.getStatusName(), + 'package': self.packageid, + 'error': self.error, + 'order': self.order + } + } + + def abortDownload(self): + """abort pyfile if possible""" + while self.id in self.m.core.threadManager.processingIds(): + self.abort = True + if self.plugin and self.plugin.req: + self.plugin.req.abortDownloads() + sleep(0.1) + + self.abort = False + if self.hasPlugin() and self.plugin.req: + self.plugin.req.abortDownloads() + + self.release() + + def finishIfDone(self): + """set status to finish and release file if every thread is finished with it""" + + if self.id in self.m.core.threadManager.processingIds(): + return False + + self.setStatus("finished") + self.release() + self.m.checkAllLinksFinished() + return True + + def checkIfProcessed(self): + self.m.checkAllLinksProcessed(self.id) + + def formatWait(self): + """ formats and return wait time in humanreadable format """ + seconds = self.waitUntil - time() + + if seconds < 0: return "00:00:00" + + hours, seconds = divmod(seconds, 3600) + minutes, seconds = divmod(seconds, 60) + return "%.2i:%.2i:%.2i" % (hours, minutes, seconds) + + def formatSize(self): + """ formats size to readable format """ + return formatSize(self.getSize()) + + def formatETA(self): + """ formats eta to readable format """ + seconds = self.getETA() + + if seconds < 0: return "00:00:00" + + hours, seconds = divmod(seconds, 3600) + minutes, seconds = divmod(seconds, 60) + return "%.2i:%.2i:%.2i" % (hours, minutes, seconds) + + def getSpeed(self): + """ calculates speed """ + try: + return self.plugin.req.speed + except: + return 0 + + def getETA(self): + """ gets established time of arrival""" + try: + return self.getBytesLeft() / self.getSpeed() + except: + return 0 + + def getBytesLeft(self): + """ gets bytes left """ + try: + return self.getSize() - self.plugin.req.arrived + except: + return 0 + + def getPercent(self): + """ get % of download """ + if self.status == 12: + try: + return self.plugin.req.percent + except: + return 0 + else: + return self.progress + + def getSize(self): + """ get size of download """ + try: + if self.plugin.req.size: + return self.plugin.req.size + else: + return self.size + except: + return self.size + + def notifyChange(self): + e = UpdateEvent("file", self.id, "collector" if not self.package().queue else "queue") + self.m.core.pullManager.addEvent(e) + + def setProgress(self, value): + if not value == self.progress: + self.progress = value + self.notifyChange() diff --git a/pyload/PyPackage.py b/pyload/PyPackage.py new file mode 100644 index 000000000..3961d8a70 --- /dev/null +++ b/pyload/PyPackage.py @@ -0,0 +1,79 @@ +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: RaNaN + @author: mkaay +""" + +from pyload.PullEvents import UpdateEvent +from pyload.utils import safe_filename + +class PyPackage: + """ + Represents a package object at runtime + """ + def __init__(self, manager, id, name, folder, site, password, queue, order): + self.m = manager + self.m.packageCache[int(id)] = self + + self.id = int(id) + self.name = name + self._folder = folder + self.site = site + self.password = password + self.queue = queue + self.order = order + self.setFinished = False + + @property + def folder(self): + return safe_filename(self._folder) + + def toDict(self): + """ Returns a dictionary representation of the data. + + :return: dict: {id: { attr: value }} + """ + return { + self.id: { + 'id': self.id, + 'name': self.name, + 'folder': self.folder, + 'site': self.site, + 'password': self.password, + 'queue': self.queue, + 'order': self.order, + 'links': {} + } + } + + def getChildren(self): + """get information about contained links""" + return self.m.getPackageData(self.id)["links"] + + def sync(self): + """sync with db""" + self.m.updatePackage(self) + + def release(self): + """sync and delete from cache""" + self.sync() + self.m.releasePackage(self.id) + + def delete(self): + self.m.deletePackage(self.id) + + def notifyChange(self): + e = UpdateEvent("pack", self.id, "collector" if not self.queue else "queue") + self.m.core.pullManager.addEvent(e) diff --git a/module/Scheduler.py b/pyload/Scheduler.py index 71b5f96af..71b5f96af 100644 --- a/module/Scheduler.py +++ b/pyload/Scheduler.py diff --git a/pyload/ThreadManager.py b/pyload/ThreadManager.py new file mode 100644 index 000000000..d9a6e1b8c --- /dev/null +++ b/pyload/ThreadManager.py @@ -0,0 +1,317 @@ +# -*- coding: utf-8 -*- + +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: RaNaN +""" + +from os.path import exists, join +import re +from subprocess import Popen +from threading import Event, Lock +from time import sleep, time +from traceback import print_exc +from random import choice + +import pycurl + +from pyload.threads import PluginThread +from pyload.PyFile import PyFile +from pyload.network.RequestFactory import getURL +from pyload.utils import freeSpace, lock + + +class ThreadManager: + """manages the download threads, assign jobs, reconnect etc""" + + + def __init__(self, core): + """Constructor""" + self.core = core + self.log = core.log + + self.threads = [] # thread list + self.localThreads = [] #hook+decrypter threads + + self.pause = True + + self.reconnecting = Event() + self.reconnecting.clear() + self.downloaded = 0 #number of files downloaded since last cleanup + + self.lock = Lock() + + # some operations require to fetch url info from hoster, so we caching them so it wont be done twice + # contains a timestamp and will be purged after timeout + self.infoCache = {} + + # pool of ids for online check + self.resultIDs = 0 + + # threads which are fetching hoster results + self.infoResults = {} + #timeout for cache purge + self.timestamp = 0 + + pycurl.global_init(pycurl.GLOBAL_DEFAULT) + + for i in range(0, self.core.config.get("download", "max_downloads")): + self.createThread() + + + def createThread(self): + """create a download thread""" + + thread = PluginThread.DownloadThread(self) + self.threads.append(thread) + + def createInfoThread(self, data, pid): + """ + start a thread whichs fetches online status and other infos + data = [ .. () .. ] + """ + self.timestamp = time() + 5 * 60 + + PluginThread.InfoThread(self, data, pid) + + @lock + def createResultThread(self, data, add=False): + """ creates a thread to fetch online status, returns result id """ + self.timestamp = time() + 5 * 60 + + rid = self.resultIDs + self.resultIDs += 1 + + PluginThread.InfoThread(self, data, rid=rid, add=add) + + return rid + + + @lock + def getInfoResult(self, rid): + """returns result and clears it""" + self.timestamp = time() + 5 * 60 + + if rid in self.infoResults: + data = self.infoResults[rid] + self.infoResults[rid] = {} + return data + else: + return {} + + @lock + def setInfoResults(self, rid, result): + self.infoResults[rid].update(result) + + def getActiveFiles(self): + active = [x.active for x in self.threads if x.active and isinstance(x.active, PyFile)] + + for t in self.localThreads: + active.extend(t.getActiveFiles()) + + return active + + def processingIds(self): + """get a id list of all pyfiles processed""" + return [x.id for x in self.getActiveFiles()] + + + def work(self): + """run all task which have to be done (this is for repetivive call by core)""" + try: + self.tryReconnect() + except Exception, e: + self.log.error(_("Reconnect Failed: %s") % str(e) ) + self.reconnecting.clear() + if self.core.debug: + print_exc() + self.checkThreadCount() + + try: + self.assignJob() + except Exception, e: + self.log.warning("Assign job error", e) + if self.core.debug: + print_exc() + + sleep(0.5) + self.assignJob() + #it may be failed non critical so we try it again + + if (self.infoCache or self.infoResults) and self.timestamp < time(): + self.infoCache.clear() + self.infoResults.clear() + self.log.debug("Cleared Result cache") + + #-------------------------------------------------------------------------- + def tryReconnect(self): + """checks if reconnect needed""" + + if not (self.core.config["reconnect"]["activated"] and self.core.api.isTimeReconnect()): + return False + + active = [x.active.plugin.wantReconnect and x.active.plugin.waiting for x in self.threads if x.active] + + if not (0 < active.count(True) == len(active)): + return False + + if not exists(self.core.config['reconnect']['method']): + if exists(join(pypath, self.core.config['reconnect']['method'])): + self.core.config['reconnect']['method'] = join(pypath, self.core.config['reconnect']['method']) + else: + self.core.config["reconnect"]["activated"] = False + self.log.warning(_("Reconnect script not found!")) + return + + self.reconnecting.set() + + #Do reconnect + self.log.info(_("Starting reconnect")) + + while [x.active.plugin.waiting for x in self.threads if x.active].count(True) != 0: + sleep(0.25) + + ip = self.getIP() + + self.core.hookManager.beforeReconnecting(ip) + + self.log.debug("Old IP: %s" % ip) + + try: + reconn = Popen(self.core.config['reconnect']['method'], bufsize=-1, shell=True)#, stdout=subprocess.PIPE) + except: + self.log.warning(_("Failed executing reconnect script!")) + self.core.config["reconnect"]["activated"] = False + self.reconnecting.clear() + if self.core.debug: + print_exc() + return + + reconn.wait() + sleep(1) + ip = self.getIP() + self.core.hookManager.afterReconnecting(ip) + + self.log.info(_("Reconnected, new IP: %s") % ip) + + self.reconnecting.clear() + + def getIP(self): + """retrieve current ip""" + services = [("http://automation.whatismyip.com/n09230945.asp", "(\S+)"), + ("http://checkip.dyndns.org/",".*Current IP Address: (\S+)</body>.*")] + + ip = "" + for i in range(10): + try: + sv = choice(services) + ip = getURL(sv[0]) + ip = re.match(sv[1], ip).group(1) + break + except: + ip = "" + sleep(1) + + return ip + + #-------------------------------------------------------------------------- + def checkThreadCount(self): + """checks if there are need for increasing or reducing thread count""" + + if len(self.threads) == self.core.config.get("download", "max_downloads"): + return True + elif len(self.threads) < self.core.config.get("download", "max_downloads"): + self.createThread() + else: + free = [x for x in self.threads if not x.active] + if free: + free[0].put("quit") + + + def cleanPycurl(self): + """ make a global curl cleanup (currently ununused) """ + if self.processingIds(): + return False + pycurl.global_cleanup() + pycurl.global_init(pycurl.GLOBAL_DEFAULT) + self.downloaded = 0 + self.log.debug("Cleaned up pycurl") + return True + + #-------------------------------------------------------------------------- + def assignJob(self): + """assing a job to a thread if possible""" + + if self.pause or not self.core.api.isTimeDownload(): return + + #if self.downloaded > 20: + # if not self.cleanPyCurl(): return + + free = [x for x in self.threads if not x.active] + + inuse = set([(x.active.pluginname, self.getLimit(x)) for x in self.threads if x.active and x.active.hasPlugin() and x.active.plugin.account]) + inuse = map(lambda x: (x[0], x[1], len([y for y in self.threads if y.active and y.active.pluginname == x[0]])) ,inuse) + onlimit = [x[0] for x in inuse if x[1] > 0 and x[2] >= x[1]] + + occ = [x.active.pluginname for x in self.threads if x.active and x.active.hasPlugin() and not x.active.plugin.multiDL] + onlimit + + occ.sort() + occ = tuple(set(occ)) + job = self.core.files.getJob(occ) + if job: + try: + job.initPlugin() + except Exception, e: + self.log.critical(str(e)) + print_exc() + job.setStatus("failed") + job.error = str(e) + job.release() + return + + if job.plugin.__type__ == "hoster": + spaceLeft = freeSpace(self.core.config["general"]["download_folder"]) / 1024 / 1024 + if spaceLeft < self.core.config["general"]["min_free_space"]: + self.log.warning(_("Not enough space left on device")) + self.pause = True + + if free and not self.pause: + thread = free[0] + #self.downloaded += 1 + + thread.put(job) + else: + #put job back + if occ not in self.core.files.jobCache: + self.core.files.jobCache[occ] = [] + self.core.files.jobCache[occ].append(job.id) + + #check for decrypt jobs + job = self.core.files.getDecryptJob() + if job: + job.initPlugin() + thread = PluginThread.DecrypterThread(self, job) + + + else: + thread = PluginThread.DecrypterThread(self, job) + + def getLimit(self, thread): + limit = thread.active.plugin.account.getAccountData(thread.active.plugin.user)["options"].get("limitDL", ["0"])[0] + return int(limit) + + def cleanup(self): + """do global cleanup, should be called when finished with pycurl""" + pycurl.global_cleanup() diff --git a/module/__init__.py b/pyload/__init__.py index e69de29bb..e69de29bb 100644 --- a/module/__init__.py +++ b/pyload/__init__.py diff --git a/module/cli/AddPackage.py b/pyload/cli/AddPackage.py index 16b32b9ee..16b32b9ee 100644 --- a/module/cli/AddPackage.py +++ b/pyload/cli/AddPackage.py diff --git a/pyload/cli/Cli.py b/pyload/cli/Cli.py new file mode 100644 index 000000000..20b82a0f2 --- /dev/null +++ b/pyload/cli/Cli.py @@ -0,0 +1,585 @@ +# -*- coding: utf-8 -*- +# +#Copyright (C) 2008-2014 RaNaN +# +#This program is free software; you can redistribute it and/or modify +#it under the terms of the GNU General Public License as published by +#the Free Software Foundation; either version 3 of the License, +#or (at your option) any later version. +# +#This program is distributed in the hope that it will be useful, +#but WITHOUT ANY WARRANTY; without even the implied warranty of +#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +#See the GNU General Public License for more details. +# +#You should have received a copy of the GNU General Public License +# along with this program; if not, see <http://www.gnu.org/licenses/>. +# +### +from __future__ import with_statement +from getopt import GetoptError, getopt + +import pyload.common.pylgettext as gettext +import os +from os import _exit +from os.path import join, exists, abspath, basename +import sys +from sys import exit +from threading import Thread, Lock +from time import sleep +from traceback import print_exc + +import ConfigParser + +from codecs import getwriter + +if os.name == "nt": + enc = "cp850" +else: + enc = "utf8" + +sys.stdout = getwriter(enc)(sys.stdout, errors="replace") + +from pyload import InitHomeDir +from pyload.cli.printer import * +from pyload.cli import AddPackage, ManageFiles + +from pyload.Api import Destination +from pyload.utils import formatSize, decode +from pyload.remote.thriftbackend.ThriftClient import ThriftClient, NoConnection, NoSSL, WrongLogin, ConnectionClosed +from pyload.lib.Getch import Getch +from pyload.lib.rename_process import renameProcess + +class Cli: + def __init__(self, client, command): + self.client = client + self.command = command + + if not self.command: + renameProcess('pyload-cli') + self.getch = Getch() + self.input = "" + self.inputline = 0 + self.lastLowestLine = 0 + self.menuline = 0 + + self.lock = Lock() + + #processor funcions, these will be changed dynamically depending on control flow + self.headerHandler = self #the download status + self.bodyHandler = self #the menu section + self.inputHandler = self + + os.system("clear") + println(1, blue("py") + yellow("Load") + white(_(" Command Line Interface"))) + println(2, "") + + self.thread = RefreshThread(self) + self.thread.start() + + self.start() + else: + self.processCommand() + + def reset(self): + """ reset to initial main menu """ + self.input = "" + self.headerHandler = self.bodyHandler = self.inputHandler = self + + def start(self): + """ main loop. handle input """ + while True: + #inp = raw_input() + inp = self.getch.impl() + if ord(inp) == 3: + os.system("clear") + sys.exit() # ctrl + c + elif ord(inp) == 13: #enter + try: + self.lock.acquire() + self.inputHandler.onEnter(self.input) + + except Exception, e: + println(2, red(e)) + finally: + self.lock.release() + + elif ord(inp) == 127: + self.input = self.input[:-1] #backspace + try: + self.lock.acquire() + self.inputHandler.onBackSpace() + finally: + self.lock.release() + + elif ord(inp) == 27: #ugly symbol + pass + else: + self.input += inp + try: + self.lock.acquire() + self.inputHandler.onChar(inp) + finally: + self.lock.release() + + self.inputline = self.bodyHandler.renderBody(self.menuline) + self.renderFooter(self.inputline) + + + def refresh(self): + """refresh screen""" + + println(1, blue("py") + yellow("Load") + white(_(" Command Line Interface"))) + println(2, "") + + self.lock.acquire() + + self.menuline = self.headerHandler.renderHeader(3) + 1 + println(self.menuline - 1, "") + self.inputline = self.bodyHandler.renderBody(self.menuline) + self.renderFooter(self.inputline) + + self.lock.release() + + + def setInput(self, string=""): + self.input = string + + def setHandler(self, klass): + #create new handler with reference to cli + self.bodyHandler = self.inputHandler = klass(self) + self.input = "" + + def renderHeader(self, line): + """ prints download status """ + #print updated information + # print "\033[J" #clear screen + # self.println(1, blue("py") + yellow("Load") + white(_(" Command Line Interface"))) + # self.println(2, "") + # self.println(3, white(_("%s Downloads:") % (len(data)))) + + data = self.client.statusDownloads() + speed = 0 + + println(line, white(_("%s Downloads:") % (len(data)))) + line += 1 + + for download in data: + if download.status == 12: # downloading + percent = download.percent + z = percent / 4 + speed += download.speed + println(line, cyan(download.name)) + line += 1 + println(line, + blue("[") + yellow(z * "#" + (25 - z) * " ") + blue("] ") + green(str(percent) + "%") + _( + " Speed: ") + green(formatSize(download.speed) + "/s") + _(" Size: ") + green( + download.format_size) + _(" Finished in: ") + green(download.format_eta) + _( + " ID: ") + green(download.fid)) + line += 1 + if download.status == 5: + println(line, cyan(download.name)) + line += 1 + println(line, _("waiting: ") + green(download.format_wait)) + line += 1 + + println(line, "") + line += 1 + status = self.client.statusServer() + if status.pause: + paused = _("Status:") + " " + red(_("paused")) + else: + paused = _("Status:") + " " + red(_("running")) + + println(line,"%s %s: %s %s: %s %s: %s" % ( + paused, _("total Speed"), red(formatSize(speed) + "/s"), _("Files in queue"), red( + status.queue), _("Total"), red(status.total))) + + return line + 1 + + def renderBody(self, line): + """ prints initial menu """ + println(line, white(_("Menu:"))) + println(line + 1, "") + println(line + 2, mag("1.") + _(" Add Links")) + println(line + 3, mag("2.") + _(" Manage Queue")) + println(line + 4, mag("3.") + _(" Manage Collector")) + println(line + 5, mag("4.") + _(" (Un)Pause Server")) + println(line + 6, mag("5.") + _(" Kill Server")) + println(line + 7, mag("6.") + _(" Quit")) + + return line + 8 + + def renderFooter(self, line): + """ prints out the input line with input """ + println(line, "") + line += 1 + + println(line, white(" Input: ") + decode(self.input)) + + #clear old output + if line < self.lastLowestLine: + for i in range(line + 1, self.lastLowestLine + 1): + println(i, "") + + self.lastLowestLine = line + + #set cursor to position + print "\033[" + str(self.inputline) + ";0H" + + def onChar(self, char): + """ default no special handling for single chars """ + if char == "1": + self.setHandler(AddPackage) + elif char == "2": + self.setHandler(ManageFiles) + elif char == "3": + self.setHandler(ManageFiles) + self.bodyHandler.target = Destination.Collector + elif char == "4": + self.client.togglePause() + self.setInput() + elif char == "5": + self.client.kill() + self.client.close() + sys.exit() + elif char == "6": + os.system('clear') + sys.exit() + + def onEnter(self, inp): + pass + + def onBackSpace(self): + pass + + def processCommand(self): + command = self.command[0] + args = [] + if len(self.command) > 1: + args = self.command[1:] + + if command == "status": + files = self.client.statusDownloads() + + if not files: + print "No downloads running." + + for download in files: + if download.status == 12: # downloading + print print_status(download) + print "\tDownloading: %s @ %s/s\t %s (%s%%)" % ( + download.format_eta, formatSize(download.speed), formatSize(download.size - download.bleft), + download.percent) + elif download.status == 5: + print print_status(download) + print "\tWaiting: %s" % download.format_wait + else: + print print_status(download) + + elif command == "queue": + print_packages(self.client.getQueueData()) + + elif command == "collector": + print_packages(self.client.getCollectorData()) + + elif command == "add": + if len(args) < 2: + print _("Please use this syntax: add <Package name> <link> <link2> ...") + return + + self.client.addPackage(args[0], args[1:], Destination.Queue) + + elif command == "add_coll": + if len(args) < 2: + print _("Please use this syntax: add <Package name> <link> <link2> ...") + return + + self.client.addPackage(args[0], args[1:], Destination.Collector) + + elif command == "del_file": + self.client.deleteFiles([int(x) for x in args]) + print "Files deleted." + + elif command == "del_package": + self.client.deletePackages([int(x) for x in args]) + print "Packages deleted." + + elif command == "move": + for pid in args: + pack = self.client.getPackageInfo(int(pid)) + self.client.movePackage((pack.dest + 1) % 2, pack.pid) + + elif command == "check": + print _("Checking %d links:") % len(args) + print + rid = self.client.checkOnlineStatus(args).rid + self.printOnlineCheck(self.client, rid) + + + elif command == "check_container": + path = args[0] + if not exists(join(owd, path)): + print _("File does not exists.") + return + + f = open(join(owd, path), "rb") + content = f.read() + f.close() + + rid = self.client.checkOnlineStatusContainer([], basename(f.name), content).rid + self.printOnlineCheck(self.client, rid) + + + elif command == "pause": + self.client.pause() + + elif command == "unpause": + self.client.unpause() + + elif command == "toggle": + self.client.togglePause() + + elif command == "kill": + self.client.kill() + elif command == "restart_file": + for x in args: + self.client.restartFile(int(x)) + print "Files restarted." + elif command == "restart_package": + for pid in args: + self.client.restartPackage(int(pid)) + print "Packages restarted." + + else: + print_commands() + + def printOnlineCheck(self, client, rid): + while True: + sleep(1) + result = client.pollResults(rid) + for url, status in result.data.iteritems(): + if status.status == 2: check = "Online" + elif status.status == 1: check = "Offline" + else: check = "Unknown" + + print "%-45s %-12s\t %-15s\t %s" % (status.name, formatSize(status.size), status.plugin, check) + + if result.rid == -1: break + + +class RefreshThread(Thread): + def __init__(self, cli): + Thread.__init__(self) + self.setDaemon(True) + self.cli = cli + + def run(self): + while True: + sleep(1) + try: + self.cli.refresh() + except ConnectionClosed: + os.system("clear") + print _("pyLoad was terminated") + _exit(0) + except Exception, e: + println(2, red(str(e))) + self.cli.reset() + print_exc() + + +def print_help(config): + print + print "pyLoad CLI Copyright (c) 2008-2014 the pyLoad Team" + print + print "Usage: [python] pyload-cli.py [options] [command]" + print + print "<Commands>" + print "See pyload-cli.py -c for a complete listing." + print + print "<Options>" + print " -i, --interactive", " Start in interactive mode" + print + print " -u, --username=", " " * 2, "Specify Username" + print " --pw=<password>", " " * 2, "Password" + print " -a, --address=", " " * 3, "Specify address (current=%s)" % config["addr"] + print " -p, --port", " " * 7, "Specify port (current=%s)" % config["port"] + print + print " -l, --language", " " * 3, "Set user interface language (current=%s)" % config["language"] + print " -h, --help", " " * 7, "Display this help screen" + print " -c, --commands", " " * 3, "List all available commands" + print + + +def print_packages(data): + for pack in data: + print "Package %s (#%s):" % (pack.name, pack.pid) + for download in pack.links: + print "\t" + print_file(download) + print + + +def print_file(download): + return "#%(id)-6d %(name)-30s %(statusmsg)-10s %(plugin)-8s" % { + "id": download.fid, + "name": download.name, + "statusmsg": download.statusmsg, + "plugin": download.plugin + } + + +def print_status(download): + return "#%(id)-6s %(name)-40s Status: %(statusmsg)-10s Size: %(size)s" % { + "id": download.fid, + "name": download.name, + "statusmsg": download.statusmsg, + "size": download.format_size + } + + +def print_commands(): + commands = [("status", _("Prints server status")), + ("queue", _("Prints downloads in queue")), + ("collector", _("Prints downloads in collector")), + ("add <name> <link1> <link2>...", _("Adds package to queue")), + ("add_coll <name> <link1> <link2>...", _("Adds package to collector")), + ("del_file <fid> <fid2>...", _("Delete Files from Queue/Collector")), + ("del_package <pid> <pid2>...", _("Delete Packages from Queue/Collector")), + ("move <pid> <pid2>...", _("Move Packages from Queue to Collector or vice versa")), + ("restart_file <fid> <fid2>...", _("Restart files")), + ("restart_package <pid> <pid2>...", _("Restart packages")), + ("check <container|url> ...", _("Check online status, works with local container")), + ("check_container path", _("Checks online status of a container file")), + ("pause", _("Pause the server")), + ("unpause", _("continue downloads")), + ("toggle", _("Toggle pause/unpause")), + ("kill", _("kill server")), ] + + print _("List of commands:") + print + for c in commands: + print "%-35s %s" % c + + +def writeConfig(opts): + try: + with open(join(homedir, ".pyload-cli"), "w") as cfgfile: + cfgfile.write("[cli]") + for opt in opts: + cfgfile.write("%s=%s\n" % (opt, opts[opt])) + except: + print _("Couldn't write user config file") + + +def main(): + config = {"addr": "127.0.0.1", "port": "7227", "language": "en"} + try: + config["language"] = os.environ["LANG"][0:2] + except: + pass + + if (not exists(join(pypath, "locale", config["language"]))) or config["language"] == "": + config["language"] = "en" + + configFile = ConfigParser.ConfigParser() + configFile.read(join(homedir, ".pyload-cli")) + + if configFile.has_section("cli"): + for opt in configFile.items("cli"): + config[opt[0]] = opt[1] + + gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None]) + translation = gettext.translation("Cli", join(pypath, "locale"), + languages=[config["language"], "en"], fallback=True) + translation.install(unicode=True) + + interactive = False + command = None + username = "" + password = "" + + shortOptions = 'iu:p:a:hcl:' + longOptions = ['interactive', "username=", "pw=", "address=", "port=", "help", "commands", "language="] + + try: + opts, extraparams = getopt(sys.argv[1:], shortOptions, longOptions) + for option, params in opts: + if option in ("-i", "--interactive"): + interactive = True + elif option in ("-u", "--username"): + username = params + elif option in ("-a", "--address"): + config["addr"] = params + elif option in ("-p", "--port"): + config["port"] = params + elif option in ("-l", "--language"): + config["language"] = params + gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None]) + translation = gettext.translation("Cli", join(pypath, "locale"), + languages=[config["language"], "en"], fallback=True) + translation.install(unicode=True) + elif option in ("-h", "--help"): + print_help(config) + exit() + elif option in ("--pw"): + password = params + elif option in ("-c", "--comands"): + print_commands() + exit() + + except GetoptError: + print 'Unknown Argument(s) "%s"' % " ".join(sys.argv[1:]) + print_help(config) + exit() + + if len(extraparams) >= 1: + command = extraparams + + client = False + + if interactive: + try: + client = ThriftClient(config["addr"], int(config["port"]), username, password) + except WrongLogin: + pass + except NoSSL: + print _("You need py-openssl to connect to this pyLoad Core.") + exit() + except NoConnection: + config["addr"] = False + config["port"] = False + + if not client: + if not config["addr"]: config["addr"] = raw_input(_("Address: ")) + if not config["port"]: config["port"] = raw_input(_("Port: ")) + if not username: username = raw_input(_("Username: ")) + if not password: + from getpass import getpass + + password = getpass(_("Password: ")) + + try: + client = ThriftClient(config["addr"], int(config["port"]), username, password) + except WrongLogin: + print _("Login data is wrong.") + except NoConnection: + print _("Could not establish connection to %(addr)s:%(port)s." % {"addr": config["addr"], + "port": config["port"]}) + + else: + try: + client = ThriftClient(config["addr"], int(config["port"]), username, password) + except WrongLogin: + print _("Login data is wrong.") + except NoConnection: + print _("Could not establish connection to %(addr)s:%(port)s." % {"addr": config["addr"], + "port": config["port"]}) + except NoSSL: + print _("You need py-openssl to connect to this pyLoad core.") + + if interactive and command: print _("Interactive mode ignored since you passed some commands.") + + if client: + writeConfig(config) + cli = Cli(client, command) diff --git a/module/cli/Handler.py b/pyload/cli/Handler.py index 37b0d7b99..37b0d7b99 100644 --- a/module/cli/Handler.py +++ b/pyload/cli/Handler.py diff --git a/pyload/cli/ManageFiles.py b/pyload/cli/ManageFiles.py new file mode 100644 index 000000000..fba96b990 --- /dev/null +++ b/pyload/cli/ManageFiles.py @@ -0,0 +1,203 @@ +# -*- coding: utf-8 -*- +# +#Copyright (C) 2011-2014 RaNaN +# +#This program is free software; you can redistribute it and/or modify +#it under the terms of the GNU General Public License as published by +#the Free Software Foundation; either version 3 of the License, +#or (at your option) any later version. +# +#This program is distributed in the hope that it will be useful, +#but WITHOUT ANY WARRANTY; without even the implied warranty of +#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +#See the GNU General Public License for more details. +# +#You should have received a copy of the GNU General Public License +# along with this program; if not, see <http://www.gnu.org/licenses/>. +# +### + +from itertools import islice +from time import time + +from Handler import Handler +from printer import * + +from pyload.Api import Destination, PackageData + +class ManageFiles(Handler): + """ possibility to manage queue/collector """ + + def init(self): + self.target = Destination.Queue + self.pos = 0 #position in queue + self.package = -1 #choosen package + self.mode = "" # move/delete/restart + + self.cache = None + self.links = None + self.time = 0 + + def onChar(self, char): + if char in ("m", "d", "r"): + self.mode = char + self.setInput() + elif char == "p": + self.pos = max(0, self.pos - 5) + self.backspace() + elif char == "n": + self.pos += 5 + self.backspace() + + def onBackSpace(self): + if not self.input and self.mode: + self.mode = "" + if not self.input and self.package > -1: + self.package = -1 + + def onEnter(self, input): + if input == "0": + self.cli.reset() + elif self.package < 0 and self.mode: + #mode select + packs = self.parseInput(input) + if self.mode == "m": + [self.client.movePackage((self.target + 1) % 2, x) for x in packs] + elif self.mode == "d": + self.client.deletePackages(packs) + elif self.mode == "r": + [self.client.restartPackage(x) for x in packs] + + elif self.mode: + #edit links + links = self.parseInput(input, False) + + if self.mode == "d": + self.client.deleteFiles(links) + elif self.mode == "r": + map(self.client.restartFile, links) + + else: + #look into package + try: + self.package = int(input) + except: + pass + + self.cache = None + self.links = None + self.pos = 0 + self.mode = "" + self.setInput() + + + def renderBody(self, line): + if self.package < 0: + println(line, white(_("Manage Packages:"))) + else: + println(line, white((_("Manage Links:")))) + line += 1 + + if self.mode: + if self.mode == "m": + println(line, _("What do you want to move?")) + elif self.mode == "d": + println(line, _("What do you want to delete?")) + elif self.mode == "r": + println(line, _("What do you want to restart?")) + + println(line + 1, "Enter single number, comma seperated numbers or ranges. eg. 1, 2, 3 or 1-3.") + line += 2 + else: + println(line, _("Choose what yout want to do or enter package number.")) + println(line + 1, ("%s - %%s, %s - %%s, %s - %%s" % (mag("d"), mag("m"), mag("r"))) % ( + _("delete"), _("move"), _("restart"))) + line += 2 + + if self.package < 0: + #print package info + pack = self.getPackages() + i = 0 + for value in islice(pack, self.pos, self.pos + 5): + try: + println(line, mag(str(value.pid)) + ": " + value.name) + line += 1 + i += 1 + except Exception, e: + pass + for x in range(5 - i): + println(line, "") + line += 1 + else: + #print links info + pack = self.getLinks() + i = 0 + for value in islice(pack.links, self.pos, self.pos + 5): + try: + println(line, mag(value.fid) + ": %s | %s | %s" % ( + value.name, value.statusmsg, value.plugin)) + line += 1 + i += 1 + except Exception, e: + pass + for x in range(5 - i): + println(line, "") + line += 1 + + println(line, mag("p") + _(" - previous") + " | " + mag("n") + _(" - next")) + println(line + 1, mag("0.") + _(" back to main menu")) + + return line + 2 + + + def getPackages(self): + if self.cache and self.time + 2 < time(): + return self.cache + + if self.target == Destination.Queue: + data = self.client.getQueue() + else: + data = self.client.getCollector() + + + self.cache = data + self.time = time() + + return data + + def getLinks(self): + if self.links and self.time + 1 < time(): + return self.links + + try: + data = self.client.getPackageData(self.package) + except: + data = PackageData(links=[]) + + self.links = data + self.time = time() + + return data + + def parseInput(self, inp, package=True): + inp = inp.strip() + if "-" in inp: + l, n, h = inp.partition("-") + l = int(l) + h = int(h) + r = range(l, h + 1) + + ret = [] + if package: + for p in self.cache: + if p.pid in r: + ret.append(p.pid) + else: + for l in self.links.links: + if l.lid in r: + ret.append(l.lid) + + return ret + + else: + return [int(x) for x in inp.split(",")] diff --git a/module/cli/__init__.py b/pyload/cli/__init__.py index 413c6a638..413c6a638 100644 --- a/module/cli/__init__.py +++ b/pyload/cli/__init__.py diff --git a/module/cli/printer.py b/pyload/cli/printer.py index 0b2f5a0e3..0b2f5a0e3 100644 --- a/module/cli/printer.py +++ b/pyload/cli/printer.py diff --git a/pyload/common/APIExerciser.py b/pyload/common/APIExerciser.py new file mode 100644 index 000000000..886c72a4a --- /dev/null +++ b/pyload/common/APIExerciser.py @@ -0,0 +1,157 @@ +# -*- coding: utf-8 -*- + +import string +from threading import Thread +from random import choice, random, sample, randint +from time import time, sleep +from math import floor +import gc + +from traceback import print_exc, format_exc + +from pyload.remote.thriftbackend.ThriftClient import ThriftClient, Destination + +def createURLs(): + """ create some urls, some may fail """ + urls = [] + for x in range(0, randint(20, 100)): + name = "DEBUG_API" + if randint(0, 5) == 5: + name = "" #this link will fail + + urls.append(name + "".join(sample(string.ascii_letters, randint(10, 20)))) + + return urls + +AVOID = (0, 3, 8) + +idPool = 0 +sumCalled = 0 + + +def startApiExerciser(core, n): + for i in range(n): + APIExerciser(core).start() + +class APIExerciser(Thread): + + + def __init__(self, core, thrift=False, user=None, pw=None): + global idPool + + Thread.__init__(self) + self.setDaemon(True) + self.core = core + self.count = 0 #number of methods + self.time = time() + + if thrift: + self.api = ThriftClient(user=user, password=pw) + else: + self.api = core.api + + + self.id = idPool + + idPool += 1 + + #self.start() + + def run(self): + + self.core.log.info("API Excerciser started %d" % self.id) + + out = open("error.log", "ab") + #core errors are not logged of course + out.write("\n" + "Starting\n") + out.flush() + + while True: + try: + self.testAPI() + except Exception: + self.core.log.error("Excerciser %d throw an execption" % self.id) + print_exc() + out.write(format_exc() + 2 * "\n") + out.flush() + + if not self.count % 100: + self.core.log.info("Exerciser %d tested %d api calls" % (self.id, self.count)) + if not self.count % 1000: + out.flush() + + if not sumCalled % 1000: #not thread safe + self.core.log.info("Exercisers tested %d api calls" % sumCalled) + persec = sumCalled / (time() - self.time) + self.core.log.info("Approx. %.2f calls per second." % persec) + self.core.log.info("Approx. %.2f ms per call." % (1000 / persec)) + self.core.log.info("Collected garbage: %d" % gc.collect()) + + + #sleep(random() / 500) + + def testAPI(self): + global sumCalled + + m = ["statusDownloads", "statusServer", "addPackage", "getPackageData", "getFileData", "deleteFiles", + "deletePackages", "getQueue", "getCollector", "getQueueData", "getCollectorData", "isCaptchaWaiting", + "getCaptchaTask", "stopAllDownloads", "getAllInfo", "getServices" , "getAccounts", "getAllUserData"] + + method = choice(m) + #print "Testing:", method + + if hasattr(self, method): + res = getattr(self, method)() + else: + res = getattr(self.api, method)() + + self.count += 1 + sumCalled += 1 + + #print res + + def addPackage(self): + name = "".join(sample(string.ascii_letters, 10)) + urls = createURLs() + + self.api.addPackage(name, urls, choice([Destination.Queue, Destination.Collector])) + + + def deleteFiles(self): + info = self.api.getQueueData() + if not info: return + + pack = choice(info) + fids = pack.links + + if len(fids): + fids = [f.fid for f in sample(fids, randint(1, max(len(fids) / 2, 1)))] + self.api.deleteFiles(fids) + + + def deletePackages(self): + info = choice([self.api.getQueue(), self.api.getCollector()]) + if not info: return + + pids = [p.pid for p in info] + if len(pids): + pids = sample(pids, randint(1, max(floor(len(pids) / 2.5), 1))) + self.api.deletePackages(pids) + + def getFileData(self): + info = self.api.getQueueData() + if info: + p = choice(info) + if p.links: + self.api.getFileData(choice(p.links).fid) + + def getPackageData(self): + info = self.api.getQueue() + if info: + self.api.getPackageData(choice(info).pid) + + def getAccounts(self): + self.api.getAccounts(False) + + def getCaptchaTask(self): + self.api.getCaptchaTask(False) diff --git a/module/common/ImportDebugger.py b/pyload/common/ImportDebugger.py index ae3aef629..ae3aef629 100644 --- a/module/common/ImportDebugger.py +++ b/pyload/common/ImportDebugger.py diff --git a/module/common/JsEngine.py b/pyload/common/JsEngine.py index 46789f64d..46789f64d 100644 --- a/module/common/JsEngine.py +++ b/pyload/common/JsEngine.py diff --git a/module/common/__init__.py b/pyload/common/__init__.py index e69de29bb..e69de29bb 100644 --- a/module/common/__init__.py +++ b/pyload/common/__init__.py diff --git a/module/common/json_layer.py b/pyload/common/json_layer.py index bb3937cdc..bb3937cdc 100644 --- a/module/common/json_layer.py +++ b/pyload/common/json_layer.py diff --git a/module/common/packagetools.py b/pyload/common/packagetools.py index d5ab4d182..d5ab4d182 100644 --- a/module/common/packagetools.py +++ b/pyload/common/packagetools.py diff --git a/pyload/common/pavement.py b/pyload/common/pavement.py new file mode 100644 index 000000000..9b2dc98b3 --- /dev/null +++ b/pyload/common/pavement.py @@ -0,0 +1,412 @@ +# -*- coding: utf-8 -*- + +from paver.easy import * +from paver.setuputils import setup +from paver.doctools import cog + +import os +import sys +import shutil +import re +from glob import glob +from tempfile import mkdtemp +from urllib import urlretrieve +from subprocess import call, Popen, PIPE +from zipfile import ZipFile + +PROJECT_DIR = path(__file__).dirname() +sys.path.append(PROJECT_DIR) + +options = environment.options +path("pyload").mkdir() + +extradeps = [] +if sys.version_info <= (2, 5): + extradeps += 'simplejson' + +setup( + name="pyload", + version="0.4.10", + description='Fast, lightweight and full featured download manager.', + long_description=open(PROJECT_DIR / "README.md").read(), + keywords = ("pyload", "download-manager", "one-click-hoster", "download"), + url="http://pyload.org", + download_url='http://pyload.org/download', + license='GPL v3', + author="pyLoad Team", + author_email="support@pyload.org", + platforms = ('Any',), + #package_dir={'pyload': "src"}, + packages=["pyload"], + #package_data=find_package_data(), + #data_files=[], + include_package_data=True, + exclude_package_data={'pyload': ["docs*", "scripts*", "tests*"]}, #exluced from build but not from sdist + # 'bottle >= 0.10.0' not in list, because its small and contain little modifications + install_requires=['thrift >= 0.8.0', 'jinja2', 'pycurl', 'Beaker', 'BeautifulSoup >= 3.2, < 3.3'] + extradeps, + extras_require={ + 'SSL': ["pyOpenSSL"], + 'DLC': ['pycrypto'], + 'lightweight webserver': ['bjoern'], + 'RSS plugins': ['feedparser'], + }, + #setup_requires=["setuptools_hg"], + entry_points={ + 'console_scripts': [ + 'pyLoadCore = pyLoadCore:main', + 'pyLoadCli = pyLoadCli:main' + ]}, + zip_safe=False, + classifiers=[ + "Development Status :: 5 - Production/Stable", + "Topic :: Internet :: WWW/HTTP", + "Environment :: Console", + "Environment :: Web Environment", + "Intended Audience :: End Users/Desktop", + "License :: OSI Approved :: GNU General Public License (GPL)", + "Operating System :: OS Independent", + "Programming Language :: Python :: 2" + ] +) + +options( + sphinx=Bunch( + builddir="_build", + sourcedir="" + ), + get_source=Bunch( + src="https://bitbucket.org/spoob/pyload/get/tip.zip", + rev=None, + clean=False + ), + thrift=Bunch( + path="../thrift/trunk/compiler/cpp/thrift", + gen="" + ), + virtualenv=Bunch( + dir="env", + python="python2", + virtual="virtualenv2", + ), + cog=Bunch( + pattern="*.py", + ) +) + +# xgettext args +xargs = ["--language=Python", "--add-comments=L10N", + "--from-code=utf-8", "--copyright-holder=pyLoad Team", "--package-name=pyLoad", + "--package-version=%s" % options.version, "--msgid-bugs-address='bugs@pyload.org'"] + +@task +@needs('cog') +def html(): + """Build html documentation""" + module = path("docs") / "pyload" + pyload.rmtree() + call_task('paver.doctools.html') + + +@task +@cmdopts([ + ('src=', 's', 'Url to source'), + ('rev=', 'r', "HG revision"), + ("clean", 'c', 'Delete old source folder') +]) +def get_source(options): + """ Downloads pyload source from bitbucket tip or given rev""" + if options.rev: options.url = "https://bitbucket.org/spoob/pyload/get/%s.zip" % options.rev + + pyload = path("pyload") + + if len(pyload.listdir()) and not options.clean: + return + elif pyload.exists(): + pyload.rmtree() + + urlretrieve(options.src, "pyload_src.zip") + zip = ZipFile("pyload_src.zip") + zip.extractall() + path("pyload_src.zip").remove() + + folder = [x for x in path(".").dirs() if x.name.startswith("spoob-pyload-")][0] + folder.move(pyload) + + change_mode(pyload, 0644) + change_mode(pyload, 0755, folder=True) + + for file in pyload.files(): + if file.name.endswith(".py"): + file.chmod(0755) + + (pyload / ".hgtags").remove() + (pyload / ".gitignore").remove() + #(pyload / "docs").rmtree() + + f = open(pyload / "__init__.py", "wb") + f.close() + + #options.setup.packages = find_packages() + #options.setup.package_data = find_package_data() + + +@task +@needs('clean', 'generate_setup', 'minilib', 'get_source', 'setuptools.command.sdist') +def sdist(): + """ Build source code package with distutils """ + + +@task +@cmdopts([ + ('path=', 'p', 'Thrift path'), + ('gen=', 'g', "Extra --gen option") +]) +def thrift(options): + """ Generate Thrift stubs """ + + print "add import for TApplicationException manually as long it is not fixed" + + outdir = path("pyload") / "remote" / "thriftbackend" + (outdir / "gen-py").rmtree() + + cmd = [options.thrift.path, "-strict", "-o", outdir, "--gen", "py:slots, dynamic", outdir / "pyload.thrift"] + + if options.gen: + cmd.insert(len(cmd) - 1, "--gen") + cmd.insert(len(cmd) - 1, options.gen) + + print "running", cmd + + p = Popen(cmd) + p.communicate() + + (outdir / "thriftgen").rmtree() + (outdir / "gen-py").move(outdir / "thriftgen") + + #create light ttypes + from pyload.remote.socketbackend.create_ttypes import main + main() + +@task +def compile_js(): + """ Compile .coffee files to javascript""" + + root = path("pyload") / "web" / "media" / "js" + for f in root.glob("*.coffee"): + print "generate", f + coffee = Popen(["coffee", "-cbs"], stdin=open(f, "rb"), stdout=PIPE) + yui = Popen(["yuicompressor", "--type", "js"], stdin=coffee.stdout, stdout=PIPE) + coffee.stdout.close() + content = yui.communicate()[0] + with open(root / f.name.replace(".coffee", ".js"), "wb") as js: + js.write("{% autoescape true %}\n") + js.write(content) + js.write("\n{% endautoescape %}") + + +@task +def generate_locale(): + """ Generates localization files """ + + EXCLUDE = ["BeautifulSoup.py", "pyload/cli", "web/locale", "web/ajax", "web/cnl", "web/pyload", + "setup.py"] + makepot("core", path("pyload"), EXCLUDE, "./pyload.py\n") + + makepot("cli", path("pyload") / "cli", [], includes="./pyload-cli.py\n") + makepot("setup", "", [], includes="./pyload/setup.py\n") + + EXCLUDE = ["ServerThread.py", "web/media/default"] + + # strings from js files + strings = set() + + for fi in path("pyload/web").walkfiles(): + if not fi.name.endswith(".js") and not fi.endswith(".coffee"): continue + with open(fi, "rb") as c: + content = c.read() + + strings.update(re.findall(r"_\s*\(\s*\"([^\"]+)", content)) + strings.update(re.findall(r"_\s*\(\s*\'([^\']+)", content)) + + trans = path("pyload") / "web" / "translations.js" + + with open(trans, "wb") as js: + for s in strings: + js.write('_("%s")\n' % s) + + makepot("django", path("pyload/web"), EXCLUDE, "./%s\n" % trans.relpath(), [".py", ".html"], ["--language=Python"]) + + trans.remove() + + path("includes.txt").remove() + + print "Locale generated" + + +@task +@cmdopts([ + ('key=', 'k', 'api key') +]) +def upload_translations(options): + """ Uploads the locale files to translation server """ + tmp = path(mkdtemp()) + + shutil.copy('locale/crowdin.yaml', tmp) + os.mkdir(tmp / 'pyLoad') + for f in glob('locale/*.pot'): + if os.path.isfile(f): + shutil.copy(f, tmp / 'pyLoad') + + config = tmp / 'crowdin.yaml' + content = open(config, 'rb').read() + content = content.format(key=options.key, tmp=tmp) + f = open(config, 'wb') + f.write(content) + f.close() + + call(['crowdin-cli', '-c', config, 'upload', 'source']) + + shutil.rmtree(tmp) + + print "Translations uploaded" + + +@task +@cmdopts([ + ('key=', 'k', 'api key') +]) +def download_translations(options): + """ Downloads the translated files from translation server """ + tmp = path(mkdtemp()) + + shutil.copy('locale/crowdin.yaml', tmp) + os.mkdir(tmp / 'pyLoad') + for f in glob('locale/*.pot'): + if os.path.isfile(f): + shutil.copy(f, tmp / 'pyLoad') + + config = tmp / 'crowdin.yaml' + content = open(config, 'rb').read() + content = content.format(key=options.key, tmp=tmp) + f = open(config, 'wb') + f.write(content) + f.close() + + call(['crowdin-cli', '-c', config, 'download']) + + for language in (tmp / 'pyLoad').listdir(): + if not language.isdir(): + continue + + target = path('locale') / language.basename() + print "Copy language %s" % target + if target.exists(): + shutil.rmtree(target) + + shutil.copytree(language, target) + + shutil.rmtree(tmp) + + +@task +def compile_translations(): + """ Compile PO files to MO """ + for language in path('locale').listdir(): + if not language.isdir(): + continue + + for f in glob(language / 'LC_MESSAGES' / '*.po'): + print "Compiling %s" % f + call(['msgfmt', '-o', f.replace('.po', '.mo'), f]) + + +@task +def tests(): + call(["nosetests2"]) + +@task +def virtualenv(options): + """Setup virtual environment""" + if path(options.dir).exists(): + return + + call([options.virtual, "--no-site-packages", "--python", options.python, options.dir]) + print "$ source %s/bin/activate" % options.dir + + +@task +def clean_env(): + """Deletes the virtual environment""" + env = path(options.virtualenv.dir) + if env.exists(): + env.rmtree() + + +@task +@needs('generate_setup', 'minilib', 'get_source', 'virtualenv') +def env_install(): + """Install pyLoad into the virtualenv""" + venv = options.virtualenv + call([path(venv.dir) / "bin" / "easy_install", "."]) + + +@task +def clean(): + """Cleans build directories""" + path("build").rmtree() + path("dist").rmtree() + + +#helper functions + +def walk_trans(path, EXCLUDE, endings=[".py"]): + result = "" + + for f in path.walkfiles(): + if [True for x in EXCLUDE if x in f.dirname().relpath()]: continue + if f.name in EXCLUDE: continue + + for e in endings: + if f.name.endswith(e): + result += "./%s\n" % f.relpath() + break + + return result + + +def makepot(domain, p, excludes=[], includes="", endings=[".py"], xxargs=[]): + print "Generate %s.pot" % domain + + f = open("includes.txt", "wb") + if includes: + f.write(includes) + + if p: + f.write(walk_trans(path(p), excludes, endings)) + + f.close() + + call(["xgettext", "--files-from=includes.txt", "--default-domain=%s" % domain] + xargs + xxargs) + + # replace charset und move file + with open("%s.po" % domain, "rb") as f: + content = f.read() + + path("%s.po" % domain).remove() + content = content.replace("charset=CHARSET", "charset=UTF-8") + + with open("locale/%s.pot" % domain, "wb") as f: + f.write(content) + + +def change_owner(dir, uid, gid): + for p in dir.walk(): + p.chown(uid, gid) + + +def change_mode(dir, mode, folder=False): + for p in dir.walk(): + if folder and p.isdir(): + p.chmod(mode) + elif p.isfile() and not folder: + p.chmod(mode) diff --git a/module/common/pylgettext.py b/pyload/common/pylgettext.py index cab631cf4..cab631cf4 100644 --- a/module/common/pylgettext.py +++ b/pyload/common/pylgettext.py diff --git a/pyload/common/test_api.py b/pyload/common/test_api.py new file mode 100644 index 000000000..4efaa35d6 --- /dev/null +++ b/pyload/common/test_api.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- + +from pyload.common import APIExerciser +from nose.tools import nottest + + +class TestApi: + + def __init__(self): + self.api = APIExerciser.APIExerciser(None, True, "TestUser", "pwhere") + + def test_login(self): + assert self.api.api.login("crapp", "wrong pw") is False + + #takes really long, only test when needed + @nottest + def test_random(self): + + for i in range(0, 100): + self.api.testAPI() diff --git a/module/common/test_json.py b/pyload/common/test_json.py index 320a42d4f..320a42d4f 100644 --- a/module/common/test_json.py +++ b/pyload/common/test_json.py diff --git a/module/config/default.conf b/pyload/config/default.conf index 3a513f122..3a513f122 100644 --- a/module/config/default.conf +++ b/pyload/config/default.conf diff --git a/pyload/database/DatabaseBackend.py b/pyload/database/DatabaseBackend.py new file mode 100644 index 000000000..9ebe31701 --- /dev/null +++ b/pyload/database/DatabaseBackend.py @@ -0,0 +1,305 @@ +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: RaNaN + @author: mkaay +""" +from threading import Thread +from threading import Event +from os import remove +from os.path import exists +from shutil import move + +from Queue import Queue +from traceback import print_exc + +from pyload.utils import chmod + +try: + from pysqlite2 import dbapi2 as sqlite3 +except: + import sqlite3 + +DB_VERSION = 4 + +class style: + db = None + + @classmethod + def setDB(cls, db): + cls.db = db + + @classmethod + def inner(cls, f): + @staticmethod + def x(*args, **kwargs): + if cls.db: + return f(cls.db, *args, **kwargs) + return x + + @classmethod + def queue(cls, f): + @staticmethod + def x(*args, **kwargs): + if cls.db: + return cls.db.queue(f, *args, **kwargs) + return x + + @classmethod + def async(cls, f): + @staticmethod + def x(*args, **kwargs): + if cls.db: + return cls.db.async(f, *args, **kwargs) + return x + +class DatabaseJob: + def __init__(self, f, *args, **kwargs): + self.done = Event() + + self.f = f + self.args = args + self.kwargs = kwargs + + self.result = None + self.exception = False + +# import inspect +# self.frame = inspect.currentframe() + + def __repr__(self): + from os.path import basename + frame = self.frame.f_back + output = "" + for i in range(5): + output += "\t%s:%s, %s\n" % (basename(frame.f_code.co_filename), frame.f_lineno, frame.f_code.co_name) + frame = frame.f_back + del frame + del self.frame + + return "DataBase Job %s:%s\n%sResult: %s" % (self.f.__name__, self.args[1:], output, self.result) + + def processJob(self): + try: + self.result = self.f(*self.args, **self.kwargs) + except Exception, e: + print_exc() + try: + print "Database Error @", self.f.__name__, self.args[1:], self.kwargs, e + except: + pass + + self.exception = e + finally: + self.done.set() + + def wait(self): + self.done.wait() + +class DatabaseBackend(Thread): + subs = [] + def __init__(self, core): + Thread.__init__(self) + self.setDaemon(True) + self.core = core + + self.jobs = Queue() + + self.setuplock = Event() + + style.setDB(self) + + def setup(self): + self.start() + self.setuplock.wait() + + def run(self): + """main loop, which executes commands""" + convert = self._checkVersion() #returns None or current version + + self.conn = sqlite3.connect("files.db") + chmod("files.db", 0600) + + self.c = self.conn.cursor() #compatibility + + if convert is not None: + self._convertDB(convert) + + self._createTables() + self._migrateUser() + + self.conn.commit() + + self.setuplock.set() + + while True: + j = self.jobs.get() + if j == "quit": + self.c.close() + self.conn.close() + break + j.processJob() + + @style.queue + def shutdown(self): + self.conn.commit() + self.jobs.put("quit") + + def _checkVersion(self): + """ check db version and delete it if needed""" + if not exists("files.version"): + f = open("files.version", "wb") + f.write(str(DB_VERSION)) + f.close() + return + + f = open("files.version", "rb") + v = int(f.read().strip()) + f.close() + if v < DB_VERSION: + if v < 2: + try: + self.manager.core.log.warning(_("Filedatabase was deleted due to incompatible version.")) + except: + print "Filedatabase was deleted due to incompatible version." + remove("files.version") + move("files.db", "files.backup.db") + f = open("files.version", "wb") + f.write(str(DB_VERSION)) + f.close() + return v + + def _convertDB(self, v): + try: + getattr(self, "_convertV%i" % v)() + except: + try: + self.core.log.error(_("Filedatabase could NOT be converted.")) + except: + print "Filedatabase could NOT be converted." + + #convert scripts start----------------------------------------------------- + + def _convertV2(self): + self.c.execute('CREATE TABLE IF NOT EXISTS "storage" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "identifier" TEXT NOT NULL, "key" TEXT NOT NULL, "value" TEXT DEFAULT "")') + try: + self.manager.core.log.info(_("Database was converted from v2 to v3.")) + except: + print "Database was converted from v2 to v3." + self._convertV3() + + def _convertV3(self): + self.c.execute('CREATE TABLE IF NOT EXISTS "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT NOT NULL, "email" TEXT DEFAULT "" NOT NULL, "password" TEXT NOT NULL, "role" INTEGER DEFAULT 0 NOT NULL, "permission" INTEGER DEFAULT 0 NOT NULL, "template" TEXT DEFAULT "default" NOT NULL)') + try: + self.manager.core.log.info(_("Database was converted from v3 to v4.")) + except: + print "Database was converted from v3 to v4." + + #convert scripts end------------------------------------------------------- + + def _createTables(self): + """create tables for database""" + + self.c.execute('CREATE TABLE IF NOT EXISTS "packages" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT NOT NULL, "folder" TEXT, "password" TEXT DEFAULT "", "site" TEXT DEFAULT "", "queue" INTEGER DEFAULT 0 NOT NULL, "packageorder" INTEGER DEFAULT 0 NOT NULL)') + self.c.execute('CREATE TABLE IF NOT EXISTS "links" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "url" TEXT NOT NULL, "name" TEXT, "size" INTEGER DEFAULT 0 NOT NULL, "status" INTEGER DEFAULT 3 NOT NULL, "plugin" TEXT DEFAULT "BasePlugin" NOT NULL, "error" TEXT DEFAULT "", "linkorder" INTEGER DEFAULT 0 NOT NULL, "package" INTEGER DEFAULT 0 NOT NULL, FOREIGN KEY(package) REFERENCES packages(id))') + self.c.execute('CREATE INDEX IF NOT EXISTS "pIdIndex" ON links(package)') + self.c.execute('CREATE TABLE IF NOT EXISTS "storage" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "identifier" TEXT NOT NULL, "key" TEXT NOT NULL, "value" TEXT DEFAULT "")') + self.c.execute('CREATE TABLE IF NOT EXISTS "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT NOT NULL, "email" TEXT DEFAULT "" NOT NULL, "password" TEXT NOT NULL, "role" INTEGER DEFAULT 0 NOT NULL, "permission" INTEGER DEFAULT 0 NOT NULL, "template" TEXT DEFAULT "default" NOT NULL)') + + self.c.execute('CREATE VIEW IF NOT EXISTS "pstats" AS \ + SELECT p.id AS id, SUM(l.size) AS sizetotal, COUNT(l.id) AS linkstotal, linksdone, sizedone\ + FROM packages p JOIN links l ON p.id = l.package LEFT OUTER JOIN\ + (SELECT p.id AS id, COUNT(*) AS linksdone, SUM(l.size) AS sizedone \ + FROM packages p JOIN links l ON p.id = l.package AND l.status in (0, 4, 13) GROUP BY p.id) s ON s.id = p.id \ + GROUP BY p.id') + + #try to lower ids + self.c.execute('SELECT max(id) FROM LINKS') + fid = self.c.fetchone()[0] + if fid: + fid = int(fid) + else: + fid = 0 + self.c.execute('UPDATE SQLITE_SEQUENCE SET seq=? WHERE name=?', (fid, "links")) + + + self.c.execute('SELECT max(id) FROM packages') + pid = self.c.fetchone()[0] + if pid: + pid = int(pid) + else: + pid = 0 + self.c.execute('UPDATE SQLITE_SEQUENCE SET seq=? WHERE name=?', (pid, "packages")) + + self.c.execute('VACUUM') + + + def _migrateUser(self): + if exists("pyload.db"): + try: + self.core.log.info(_("Converting old Django DB")) + except: + print "Converting old Django DB" + conn = sqlite3.connect('pyload.db') + c = conn.cursor() + c.execute("SELECT username, password, email from auth_user WHERE is_superuser") + users = [] + for r in c: + pw = r[1].split("$") + users.append((r[0], pw[1] + pw[2], r[2])) + c.close() + conn.close() + + self.c.executemany("INSERT INTO users(name, password, email) VALUES (?, ?, ?)", users) + move("pyload.db", "pyload.old.db") + + def createCursor(self): + return self.conn.cursor() + + @style.async + def commit(self): + self.conn.commit() + + @style.queue + def syncSave(self): + self.conn.commit() + + @style.async + def rollback(self): + self.conn.rollback() + + def async(self, f, *args, **kwargs): + args = (self,) + args + job = DatabaseJob(f, *args, **kwargs) + self.jobs.put(job) + + def queue(self, f, *args, **kwargs): + args = (self,) + args + job = DatabaseJob(f, *args, **kwargs) + self.jobs.put(job) + job.wait() + return job.result + + @classmethod + def registerSub(cls, klass): + cls.subs.append(klass) + + @classmethod + def unregisterSub(cls, klass): + cls.subs.remove(klass) + + def __getattr__(self, attr): + for sub in DatabaseBackend.subs: + if hasattr(sub, attr): + return getattr(sub, attr) diff --git a/pyload/database/FileDatabase.py b/pyload/database/FileDatabase.py new file mode 100644 index 000000000..fb30735bb --- /dev/null +++ b/pyload/database/FileDatabase.py @@ -0,0 +1,891 @@ +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: RaNaN + @author: mkaay +""" + + +from threading import RLock +from time import time + +from pyload.utils import formatSize, lock +from pyload.PullEvents import InsertEvent, ReloadAllEvent, RemoveEvent, UpdateEvent +from pyload.PyPackage import PyPackage +from pyload.PyFile import PyFile +from pyload.database import style, DatabaseBackend + +try: + from pysqlite2 import dbapi2 as sqlite3 +except: + import sqlite3 + + +class FileHandler: + """Handles all request made to obtain information, + modify status or other request for links or packages""" + + def __init__(self, core): + """Constructor""" + self.core = core + + # translations + self.statusMsg = [_("finished"), _("offline"), _("online"), _("queued"), _("skipped"), _("waiting"), _("temp. offline"), _("starting"), _("failed"), _("aborted"), _("decrypting"), _("custom"), _("downloading"), _("processing"), _("unknown")] + + self.cache = {} #holds instances for files + self.packageCache = {} # same for packages + #@TODO: purge the cache + + self.jobCache = {} + + self.lock = RLock() #@TODO should be a Lock w/o R + #self.lock._Verbose__verbose = True + + self.filecount = -1 # if an invalid value is set get current value from db + self.queuecount = -1 #number of package to be loaded + self.unchanged = False #determines if any changes was made since last call + + self.db = self.core.db + + def change(func): + def new(*args): + args[0].unchanged = False + args[0].filecount = -1 + args[0].queuecount = -1 + args[0].jobCache = {} + return func(*args) + return new + + #-------------------------------------------------------------------------- + def save(self): + """saves all data to backend""" + self.db.commit() + + #-------------------------------------------------------------------------- + def syncSave(self): + """saves all data to backend and waits until all data are written""" + pyfiles = self.cache.values() + for pyfile in pyfiles: + pyfile.sync() + + pypacks = self.packageCache.values() + for pypack in pypacks: + pypack.sync() + + self.db.syncSave() + + @lock + def getCompleteData(self, queue=1): + """gets a complete data representation""" + + data = self.db.getAllLinks(queue) + packs = self.db.getAllPackages(queue) + + data.update([(x.id, x.toDbDict()[x.id]) for x in self.cache.values()]) + + for x in self.packageCache.itervalues(): + if x.queue != queue or x.id not in packs: continue + packs[x.id].update(x.toDict()[x.id]) + + for key, value in data.iteritems(): + if value["package"] in packs: + packs[value["package"]]["links"][key] = value + + return packs + + @lock + def getInfoData(self, queue=1): + """gets a data representation without links""" + + packs = self.db.getAllPackages(queue) + for x in self.packageCache.itervalues(): + if x.queue != queue or x.id not in packs: continue + packs[x.id].update(x.toDict()[x.id]) + + return packs + + @lock + @change + def addLinks(self, urls, package): + """adds links""" + + self.core.hookManager.dispatchEvent("linksAdded", urls, package) + + data = self.core.pluginManager.parseUrls(urls) + + self.db.addLinks(data, package) + self.core.threadManager.createInfoThread(data, package) + + #@TODO change from reloadAll event to package update event + self.core.pullManager.addEvent(ReloadAllEvent("collector")) + + #-------------------------------------------------------------------------- + @lock + @change + def addPackage(self, name, folder, queue=0): + """adds a package, default to link collector""" + lastID = self.db.addPackage(name, folder, queue) + p = self.db.getPackage(lastID) + e = InsertEvent("pack", lastID, p.order, "collector" if not queue else "queue") + self.core.pullManager.addEvent(e) + return lastID + + #-------------------------------------------------------------------------- + @lock + @change + def deletePackage(self, id): + """delete package and all contained links""" + + p = self.getPackage(id) + if not p: + if id in self.packageCache: del self.packageCache[id] + return + + oldorder = p.order + queue = p.queue + + e = RemoveEvent("pack", id, "collector" if not p.queue else "queue") + + pyfiles = self.cache.values() + + for pyfile in pyfiles: + if pyfile.packageid == id: + pyfile.abortDownload() + pyfile.release() + + self.db.deletePackage(p) + self.core.pullManager.addEvent(e) + self.core.hookManager.dispatchEvent("packageDeleted", id) + + if id in self.packageCache: + del self.packageCache[id] + + packs = self.packageCache.values() + for pack in packs: + if pack.queue == queue and pack.order > oldorder: + pack.order -= 1 + pack.notifyChange() + + #-------------------------------------------------------------------------- + @lock + @change + def deleteLink(self, id): + """deletes links""" + + f = self.getFile(id) + if not f: + return None + + pid = f.packageid + e = RemoveEvent("file", id, "collector" if not f.package().queue else "queue") + + oldorder = f.order + + if id in self.core.threadManager.processingIds(): + self.cache[id].abortDownload() + + if id in self.cache: + del self.cache[id] + + self.db.deleteLink(f) + + self.core.pullManager.addEvent(e) + + p = self.getPackage(pid) + if not len(p.getChildren()): + p.delete() + + pyfiles = self.cache.values() + for pyfile in pyfiles: + if pyfile.packageid == pid and pyfile.order > oldorder: + pyfile.order -= 1 + pyfile.notifyChange() + + #-------------------------------------------------------------------------- + def releaseLink(self, id): + """removes pyfile from cache""" + if id in self.cache: + del self.cache[id] + + #-------------------------------------------------------------------------- + def releasePackage(self, id): + """removes package from cache""" + if id in self.packageCache: + del self.packageCache[id] + + #-------------------------------------------------------------------------- + def updateLink(self, pyfile): + """updates link""" + self.db.updateLink(pyfile) + + e = UpdateEvent("file", pyfile.id, "collector" if not pyfile.package().queue else "queue") + self.core.pullManager.addEvent(e) + + #-------------------------------------------------------------------------- + def updatePackage(self, pypack): + """updates a package""" + self.db.updatePackage(pypack) + + e = UpdateEvent("pack", pypack.id, "collector" if not pypack.queue else "queue") + self.core.pullManager.addEvent(e) + + #-------------------------------------------------------------------------- + def getPackage(self, id): + """return package instance""" + + if id in self.packageCache: + return self.packageCache[id] + else: + return self.db.getPackage(id) + + #-------------------------------------------------------------------------- + def getPackageData(self, id): + """returns dict with package information""" + pack = self.getPackage(id) + + if not pack: + return None + + pack = pack.toDict()[id] + + data = self.db.getPackageData(id) + + tmplist = [] + + cache = self.cache.values() + for x in cache: + if int(x.toDbDict()[x.id]["package"]) == int(id): + tmplist.append((x.id, x.toDbDict()[x.id])) + data.update(tmplist) + + pack["links"] = data + + return pack + + #-------------------------------------------------------------------------- + def getFileData(self, id): + """returns dict with file information""" + if id in self.cache: + return self.cache[id].toDbDict() + + return self.db.getLinkData(id) + + #-------------------------------------------------------------------------- + def getFile(self, id): + """returns pyfile instance""" + if id in self.cache: + return self.cache[id] + else: + return self.db.getFile(id) + + #-------------------------------------------------------------------------- + @lock + def getJob(self, occ): + """get suitable job""" + + #@TODO clean mess + #@TODO improve selection of valid jobs + + if occ in self.jobCache: + if self.jobCache[occ]: + id = self.jobCache[occ].pop() + if id == "empty": + pyfile = None + self.jobCache[occ].append("empty") + else: + pyfile = self.getFile(id) + else: + jobs = self.db.getJob(occ) + jobs.reverse() + if not jobs: + self.jobCache[occ].append("empty") + pyfile = None + else: + self.jobCache[occ].extend(jobs) + pyfile = self.getFile(self.jobCache[occ].pop()) + + else: + self.jobCache = {} #better not caching to much + jobs = self.db.getJob(occ) + jobs.reverse() + self.jobCache[occ] = jobs + + if not jobs: + self.jobCache[occ].append("empty") + pyfile = None + else: + pyfile = self.getFile(self.jobCache[occ].pop()) + + #@TODO: maybe the new job has to be approved... + + + #pyfile = self.getFile(self.jobCache[occ].pop()) + return pyfile + + @lock + def getDecryptJob(self): + """return job for decrypting""" + if "decrypt" in self.jobCache: + return None + + plugins = self.core.pluginManager.crypterPlugins.keys() + self.core.pluginManager.containerPlugins.keys() + plugins = str(tuple(plugins)) + + jobs = self.db.getPluginJob(plugins) + if jobs: + return self.getFile(jobs[0]) + else: + self.jobCache["decrypt"] = "empty" + return None + + def getFileCount(self): + """returns number of files""" + + if self.filecount == -1: + self.filecount = self.db.filecount(1) + + return self.filecount + + def getQueueCount(self, force=False): + """number of files that have to be processed""" + if self.queuecount == -1 or force: + self.queuecount = self.db.queuecount(1) + + return self.queuecount + + def checkAllLinksFinished(self): + """checks if all files are finished and dispatch event""" + + if not self.getQueueCount(True): + self.core.hookManager.dispatchEvent("allDownloadsFinished") + self.core.log.debug("All downloads finished") + return True + + return False + + def checkAllLinksProcessed(self, fid): + """checks if all files was processed and pyload would idle now, needs fid which will be ignored when counting""" + + # reset count so statistic will update (this is called when dl was processed) + self.resetCount() + + if not self.db.processcount(1, fid): + self.core.hookManager.dispatchEvent("allDownloadsProcessed") + self.core.log.debug("All downloads processed") + return True + + return False + + def resetCount(self): + self.queuecount = -1 + + @lock + @change + def restartPackage(self, id): + """restart package""" + pyfiles = self.cache.values() + for pyfile in pyfiles: + if pyfile.packageid == id: + self.restartFile(pyfile.id) + + self.db.restartPackage(id) + + if id in self.packageCache: + self.packageCache[id].setFinished = False + + e = UpdateEvent("pack", id, "collector" if not self.getPackage(id).queue else "queue") + self.core.pullManager.addEvent(e) + + @lock + @change + def restartFile(self, id): + """ restart file""" + if id in self.cache: + self.cache[id].status = 3 + self.cache[id].name = self.cache[id].url + self.cache[id].error = "" + self.cache[id].abortDownload() + + + self.db.restartFile(id) + + e = UpdateEvent("file", id, "collector" if not self.getFile(id).package().queue else "queue") + self.core.pullManager.addEvent(e) + + @lock + @change + def setPackageLocation(self, id, queue): + """push package to queue""" + + p = self.db.getPackage(id) + oldorder = p.order + + e = RemoveEvent("pack", id, "collector" if not p.queue else "queue") + self.core.pullManager.addEvent(e) + + self.db.clearPackageOrder(p) + + p = self.db.getPackage(id) + + p.queue = queue + self.db.updatePackage(p) + + self.db.reorderPackage(p, -1, True) + + packs = self.packageCache.values() + for pack in packs: + if pack.queue != queue and pack.order > oldorder: + pack.order -= 1 + pack.notifyChange() + + self.db.commit() + self.releasePackage(id) + p = self.getPackage(id) + + e = InsertEvent("pack", id, p.order, "collector" if not p.queue else "queue") + self.core.pullManager.addEvent(e) + + @lock + @change + def reorderPackage(self, id, position): + p = self.getPackage(id) + + e = RemoveEvent("pack", id, "collector" if not p.queue else "queue") + self.core.pullManager.addEvent(e) + self.db.reorderPackage(p, position) + + packs = self.packageCache.values() + for pack in packs: + if pack.queue != p.queue or pack.order < 0 or pack == p: continue + if p.order > position: + if pack.order >= position and pack.order < p.order: + pack.order += 1 + pack.notifyChange() + elif p.order < position: + if pack.order <= position and pack.order > p.order: + pack.order -= 1 + pack.notifyChange() + + p.order = position + self.db.commit() + + e = InsertEvent("pack", id, position, "collector" if not p.queue else "queue") + self.core.pullManager.addEvent(e) + + @lock + @change + def reorderFile(self, id, position): + f = self.getFileData(id) + f = f[id] + + e = RemoveEvent("file", id, "collector" if not self.getPackage(f["package"]).queue else "queue") + self.core.pullManager.addEvent(e) + + self.db.reorderLink(f, position) + + pyfiles = self.cache.values() + for pyfile in pyfiles: + if pyfile.packageid != f["package"] or pyfile.order < 0: continue + if f["order"] > position: + if pyfile.order >= position and pyfile.order < f["order"]: + pyfile.order += 1 + pyfile.notifyChange() + elif f["order"] < position: + if pyfile.order <= position and pyfile.order > f["order"]: + pyfile.order -= 1 + pyfile.notifyChange() + + if id in self.cache: + self.cache[id].order = position + + self.db.commit() + + e = InsertEvent("file", id, position, "collector" if not self.getPackage(f["package"]).queue else "queue") + self.core.pullManager.addEvent(e) + + @change + def updateFileInfo(self, data, pid): + """ updates file info (name, size, status, url)""" + ids = self.db.updateLinkInfo(data) + e = UpdateEvent("pack", pid, "collector" if not self.getPackage(pid).queue else "queue") + self.core.pullManager.addEvent(e) + + def checkPackageFinished(self, pyfile): + """ checks if package is finished and calls hookmanager """ + + ids = self.db.getUnfinished(pyfile.packageid) + if not ids or (pyfile.id in ids and len(ids) == 1): + if not pyfile.package().setFinished: + self.core.log.info(_("Package finished: %s") % pyfile.package().name) + self.core.hookManager.packageFinished(pyfile.package()) + pyfile.package().setFinished = True + + + def reCheckPackage(self, pid): + """ recheck links in package """ + data = self.db.getPackageData(pid) + + urls = [] + + for pyfile in data.itervalues(): + if pyfile["status"] not in (0, 12, 13): + urls.append((pyfile["url"], pyfile["plugin"])) + + self.core.threadManager.createInfoThread(urls, pid) + + @lock + @change + def deleteFinishedLinks(self): + """ deletes finished links and packages, return deleted packages """ + + old_packs = self.getInfoData(0) + old_packs.update(self.getInfoData(1)) + + self.db.deleteFinished() + + new_packs = self.db.getAllPackages(0) + new_packs.update(self.db.getAllPackages(1)) + #get new packages only from db + + deleted = [] + for id in old_packs.iterkeys(): + if id not in new_packs: + deleted.append(id) + self.deletePackage(int(id)) + + return deleted + + @lock + @change + def restartFailed(self): + """ restart all failed links """ + self.db.restartFailed() + +class FileMethods: + @style.queue + def filecount(self, queue): + """returns number of files in queue""" + self.c.execute("SELECT COUNT(*) FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE p.queue=?", (queue,)) + return self.c.fetchone()[0] + + @style.queue + def queuecount(self, queue): + """ number of files in queue not finished yet""" + self.c.execute("SELECT COUNT(*) FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE p.queue=? AND l.status NOT IN (0, 4)", (queue,)) + return self.c.fetchone()[0] + + @style.queue + def processcount(self, queue, fid): + """ number of files which have to be proccessed """ + self.c.execute("SELECT COUNT(*) FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE p.queue=? AND l.status IN (2, 3, 5, 7, 12) AND l.id != ?", (queue, str(fid))) + return self.c.fetchone()[0] + + @style.inner + def _nextPackageOrder(self, queue=0): + self.c.execute('SELECT MAX(packageorder) FROM packages WHERE queue=?', (queue,)) + max = self.c.fetchone()[0] + if max is not None: + return max + 1 + else: + return 0 + + @style.inner + def _nextFileOrder(self, package): + self.c.execute('SELECT MAX(linkorder) FROM links WHERE package=?', (package,)) + max = self.c.fetchone()[0] + if max is not None: + return max + 1 + else: + return 0 + + @style.queue + def addLink(self, url, name, plugin, package): + order = self._nextFileOrder(package) + self.c.execute('INSERT INTO links(url, name, plugin, package, linkorder) VALUES(?,?,?,?,?)', (url, name, plugin, package, order)) + return self.c.lastrowid + + @style.queue + def addLinks(self, links, package): + """ links is a list of tupels (url, plugin)""" + order = self._nextFileOrder(package) + orders = [order + x for x in range(len(links))] + links = [(x[0], x[0], x[1], package, o) for x, o in zip(links, orders)] + self.c.executemany('INSERT INTO links(url, name, plugin, package, linkorder) VALUES(?,?,?,?,?)', links) + + @style.queue + def addPackage(self, name, folder, queue): + order = self._nextPackageOrder(queue) + self.c.execute('INSERT INTO packages(name, folder, queue, packageorder) VALUES(?,?,?,?)', (name, folder, queue, order)) + return self.c.lastrowid + + @style.queue + def deletePackage(self, p): + + self.c.execute('DELETE FROM links WHERE package=?', (str(p.id),)) + self.c.execute('DELETE FROM packages WHERE id=?', (str(p.id),)) + self.c.execute('UPDATE packages SET packageorder=packageorder-1 WHERE packageorder > ? AND queue=?', (p.order, p.queue)) + + @style.queue + def deleteLink(self, f): + + self.c.execute('DELETE FROM links WHERE id=?', (str(f.id),)) + self.c.execute('UPDATE links SET linkorder=linkorder-1 WHERE linkorder > ? AND package=?', (f.order, str(f.packageid))) + + + @style.queue + def getAllLinks(self, q): + """return information about all links in queue q + + q0 queue + q1 collector + + format: + + { + id: {'name': name, ... 'package': id }, ... + } + + """ + self.c.execute('SELECT l.id, l.url, l.name, l.size, l.status, l.error, l.plugin, l.package, l.linkorder FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE p.queue=? ORDER BY l.linkorder', (q,)) + data = {} + for r in self.c: + data[r[0]] = { + 'id': r[0], + 'url': r[1], + 'name': r[2], + 'size': r[3], + 'format_size': formatSize(r[3]), + 'status': r[4], + 'statusmsg': self.manager.statusMsg[r[4]], + 'error': r[5], + 'plugin': r[6], + 'package': r[7], + 'order': r[8], + } + + return data + + @style.queue + def getAllPackages(self, q): + """return information about packages in queue q + (only useful in get all data) + + q0 queue + q1 collector + + format: + + { + id: {'name': name ... 'links': {}}, ... + } + """ + self.c.execute('SELECT p.id, p.name, p.folder, p.site, p.password, p.queue, p.packageorder, s.sizetotal, s.sizedone, s.linksdone, s.linkstotal \ + FROM packages p JOIN pstats s ON p.id = s.id \ + WHERE p.queue=? ORDER BY p.packageorder', str(q)) + + data = {} + for r in self.c: + data[r[0]] = { + 'id': r[0], + 'name': r[1], + 'folder': r[2], + 'site': r[3], + 'password': r[4], + 'queue': r[5], + 'order': r[6], + 'sizetotal': int(r[7]), + 'sizedone': r[8] if r[8] else 0, #these can be None + 'linksdone': r[9] if r[9] else 0, + 'linkstotal': r[10], + 'links': {} + } + + return data + + @style.queue + def getLinkData(self, id): + """get link information as dict""" + self.c.execute('SELECT id, url, name, size, status, error, plugin, package, linkorder FROM links WHERE id=?', (str(id),)) + data = {} + r = self.c.fetchone() + if not r: + return None + data[r[0]] = { + 'id': r[0], + 'url': r[1], + 'name': r[2], + 'size': r[3], + 'format_size': formatSize(r[3]), + 'status': r[4], + 'statusmsg': self.manager.statusMsg[r[4]], + 'error': r[5], + 'plugin': r[6], + 'package': r[7], + 'order': r[8], + } + + return data + + @style.queue + def getPackageData(self, id): + """get data about links for a package""" + self.c.execute('SELECT id, url, name, size, status, error, plugin, package, linkorder FROM links WHERE package=? ORDER BY linkorder', (str(id),)) + + data = {} + for r in self.c: + data[r[0]] = { + 'id': r[0], + 'url': r[1], + 'name': r[2], + 'size': r[3], + 'format_size': formatSize(r[3]), + 'status': r[4], + 'statusmsg': self.manager.statusMsg[r[4]], + 'error': r[5], + 'plugin': r[6], + 'package': r[7], + 'order': r[8], + } + + return data + + + @style.async + def updateLink(self, f): + self.c.execute('UPDATE links SET url=?, name=?, size=?, status=?, error=?, package=? WHERE id=?', (f.url, f.name, f.size, f.status, f.error, str(f.packageid), str(f.id))) + + @style.queue + def updatePackage(self, p): + self.c.execute('UPDATE packages SET name=?, folder=?, site=?, password=?, queue=? WHERE id=?', (p.name, p.folder, p.site, p.password, p.queue, str(p.id))) + + @style.queue + def updateLinkInfo(self, data): + """ data is list of tupels (name, size, status, url) """ + self.c.executemany('UPDATE links SET name=?, size=?, status=? WHERE url=? AND status IN (1, 2, 3, 14)', data) + ids = [] + self.c.execute('SELECT id FROM links WHERE url IN (\'%s\')' % "','".join([x[3] for x in data])) + for r in self.c: + ids.append(int(r[0])) + return ids + + @style.queue + def reorderPackage(self, p, position, noMove=False): + if position == -1: + position = self._nextPackageOrder(p.queue) + if not noMove: + if p.order > position: + self.c.execute('UPDATE packages SET packageorder=packageorder+1 WHERE packageorder >= ? AND packageorder < ? AND queue=? AND packageorder >= 0', (position, p.order, p.queue)) + elif p.order < position: + self.c.execute('UPDATE packages SET packageorder=packageorder-1 WHERE packageorder <= ? AND packageorder > ? AND queue=? AND packageorder >= 0', (position, p.order, p.queue)) + + self.c.execute('UPDATE packages SET packageorder=? WHERE id=?', (position, str(p.id))) + + @style.queue + def reorderLink(self, f, position): + """ reorder link with f as dict for pyfile """ + if f["order"] > position: + self.c.execute('UPDATE links SET linkorder=linkorder+1 WHERE linkorder >= ? AND linkorder < ? AND package=?', (position, f["order"], f["package"])) + elif f["order"] < position: + self.c.execute('UPDATE links SET linkorder=linkorder-1 WHERE linkorder <= ? AND linkorder > ? AND package=?', (position, f["order"], f["package"])) + + self.c.execute('UPDATE links SET linkorder=? WHERE id=?', (position, f["id"])) + + @style.queue + def clearPackageOrder(self, p): + self.c.execute('UPDATE packages SET packageorder=? WHERE id=?', (-1, str(p.id))) + self.c.execute('UPDATE packages SET packageorder=packageorder-1 WHERE packageorder > ? AND queue=? AND id != ?', (p.order, p.queue, str(p.id))) + + @style.async + def restartFile(self, id): + self.c.execute('UPDATE links SET status=3, error="" WHERE id=?', (str(id),)) + + @style.async + def restartPackage(self, id): + self.c.execute('UPDATE links SET status=3 WHERE package=?', (str(id),)) + + @style.queue + def getPackage(self, id): + """return package instance from id""" + self.c.execute("SELECT name, folder, site, password, queue, packageorder FROM packages WHERE id=?", (str(id),)) + r = self.c.fetchone() + if not r: return None + return PyPackage(self.manager, id, * r) + + #-------------------------------------------------------------------------- + @style.queue + def getFile(self, id): + """return link instance from id""" + self.c.execute("SELECT url, name, size, status, error, plugin, package, linkorder FROM links WHERE id=?", (str(id),)) + r = self.c.fetchone() + if not r: return None + return PyFile(self.manager, id, * r) + + + @style.queue + def getJob(self, occ): + """return pyfile ids, which are suitable for download and dont use a occupied plugin""" + + #@TODO improve this hardcoded method + pre = "('DLC', 'LinkList', 'SerienjunkiesOrg', 'CCF', 'RSDF')" #plugins which are processed in collector + + cmd = "(" + for i, item in enumerate(occ): + if i: cmd += ", " + cmd += "'%s'" % item + + cmd += ")" + + cmd = "SELECT l.id FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE ((p.queue=1 AND l.plugin NOT IN %s) OR l.plugin IN %s) AND l.status IN (2, 3, 14) ORDER BY p.packageorder ASC, l.linkorder ASC LIMIT 5" % (cmd, pre) + + self.c.execute(cmd) # very bad! + + return [x[0] for x in self.c] + + @style.queue + def getPluginJob(self, plugins): + """returns pyfile ids with suited plugins""" + cmd = "SELECT l.id FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE l.plugin IN %s AND l.status IN (2, 3, 14) ORDER BY p.packageorder ASC, l.linkorder ASC LIMIT 5" % plugins + + self.c.execute(cmd) # very bad! + + return [x[0] for x in self.c] + + @style.queue + def getUnfinished(self, pid): + """return list of max length 3 ids with pyfiles in package not finished or processed""" + + self.c.execute("SELECT id FROM links WHERE package=? AND status NOT IN (0, 4, 13) LIMIT 3", (str(pid),)) + return [r[0] for r in self.c] + + @style.queue + def deleteFinished(self): + self.c.execute("DELETE FROM links WHERE status IN (0, 4)") + self.c.execute("DELETE FROM packages WHERE NOT EXISTS(SELECT 1 FROM links WHERE packages.id=links.package)") + + @style.queue + def restartFailed(self): + self.c.execute("UPDATE links SET status=3, error='' WHERE status IN (6, 8, 9)") + + @style.queue + def findDuplicates(self, id, folder, filename): + """ checks if filename exists with different id and same package """ + self.c.execute("SELECT l.plugin FROM links as l INNER JOIN packages as p ON l.package=p.id AND p.folder=? WHERE l.id!=? AND l.status=0 AND l.name=?", (folder, id, filename)) + return self.c.fetchone() + + @style.queue + def purgeLinks(self): + self.c.execute("DELETE FROM links;") + self.c.execute("DELETE FROM packages;") + +DatabaseBackend.registerSub(FileMethods) diff --git a/pyload/database/StorageDatabase.py b/pyload/database/StorageDatabase.py new file mode 100644 index 000000000..c2473e7b7 --- /dev/null +++ b/pyload/database/StorageDatabase.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: mkaay +""" + +from pyload.database import style +from pyload.database import DatabaseBackend + +class StorageMethods: + @style.queue + def setStorage(db, identifier, key, value): + db.c.execute("SELECT id FROM storage WHERE identifier=? AND key=?", (identifier, key)) + if db.c.fetchone() is not None: + db.c.execute("UPDATE storage SET value=? WHERE identifier=? AND key=?", (value, identifier, key)) + else: + db.c.execute("INSERT INTO storage (identifier, key, value) VALUES (?, ?, ?)", (identifier, key, value)) + + @style.queue + def getStorage(db, identifier, key=None): + if key is not None: + db.c.execute("SELECT value FROM storage WHERE identifier=? AND key=?", (identifier, key)) + row = db.c.fetchone() + if row is not None: + return row[0] + else: + db.c.execute("SELECT key, value FROM storage WHERE identifier=?", (identifier,)) + d = {} + for row in db.c: + d[row[0]] = row[1] + return d + + @style.queue + def delStorage(db, identifier, key): + db.c.execute("DELETE FROM storage WHERE identifier=? AND key=?", (identifier, key)) + +DatabaseBackend.registerSub(StorageMethods) diff --git a/module/database/UserDatabase.py b/pyload/database/UserDatabase.py index 59b0f6dbf..59b0f6dbf 100644 --- a/module/database/UserDatabase.py +++ b/pyload/database/UserDatabase.py diff --git a/module/database/__init__.py b/pyload/database/__init__.py index 5f287a47f..5f287a47f 100644 --- a/module/database/__init__.py +++ b/pyload/database/__init__.py diff --git a/module/debug.py b/pyload/debug.py index 54a159e78..54a159e78 100644 --- a/module/debug.py +++ b/pyload/debug.py diff --git a/module/forwarder.py b/pyload/forwarder.py index 3cb3a7748..3cb3a7748 100644 --- a/module/forwarder.py +++ b/pyload/forwarder.py diff --git a/module/lib/BeautifulSoup.py b/pyload/lib/BeautifulSoup.py index 7278215ca..7278215ca 100644 --- a/module/lib/BeautifulSoup.py +++ b/pyload/lib/BeautifulSoup.py diff --git a/module/lib/Getch.py b/pyload/lib/Getch.py index 22b7ea7f8..22b7ea7f8 100644 --- a/module/lib/Getch.py +++ b/pyload/lib/Getch.py diff --git a/module/lib/MultipartPostHandler.py b/pyload/lib/MultipartPostHandler.py index 94aee0193..94aee0193 100644 --- a/module/lib/MultipartPostHandler.py +++ b/pyload/lib/MultipartPostHandler.py diff --git a/module/lib/SafeEval.py b/pyload/lib/SafeEval.py index 8fc57f261..8fc57f261 100644 --- a/module/lib/SafeEval.py +++ b/pyload/lib/SafeEval.py diff --git a/module/lib/__init__.py b/pyload/lib/__init__.py index e69de29bb..e69de29bb 100644 --- a/module/lib/__init__.py +++ b/pyload/lib/__init__.py diff --git a/module/lib/beaker/__init__.py b/pyload/lib/beaker/__init__.py index d07785c52..d07785c52 100644 --- a/module/lib/beaker/__init__.py +++ b/pyload/lib/beaker/__init__.py diff --git a/module/lib/beaker/cache.py b/pyload/lib/beaker/cache.py index 0ae96e020..0ae96e020 100644 --- a/module/lib/beaker/cache.py +++ b/pyload/lib/beaker/cache.py diff --git a/module/lib/beaker/container.py b/pyload/lib/beaker/container.py index 5a2e8e75c..5a2e8e75c 100644 --- a/module/lib/beaker/container.py +++ b/pyload/lib/beaker/container.py diff --git a/module/lib/beaker/converters.py b/pyload/lib/beaker/converters.py index 3fb80692f..3fb80692f 100644 --- a/module/lib/beaker/converters.py +++ b/pyload/lib/beaker/converters.py diff --git a/module/lib/beaker/crypto/__init__.py b/pyload/lib/beaker/crypto/__init__.py index ac13da527..ac13da527 100644 --- a/module/lib/beaker/crypto/__init__.py +++ b/pyload/lib/beaker/crypto/__init__.py diff --git a/module/lib/beaker/crypto/jcecrypto.py b/pyload/lib/beaker/crypto/jcecrypto.py index ce313d6e1..ce313d6e1 100644 --- a/module/lib/beaker/crypto/jcecrypto.py +++ b/pyload/lib/beaker/crypto/jcecrypto.py diff --git a/module/lib/beaker/crypto/nsscrypto.py b/pyload/lib/beaker/crypto/nsscrypto.py index 3a7797877..3a7797877 100644 --- a/module/lib/beaker/crypto/nsscrypto.py +++ b/pyload/lib/beaker/crypto/nsscrypto.py diff --git a/module/lib/beaker/crypto/pbkdf2.py b/pyload/lib/beaker/crypto/pbkdf2.py index 71df22198..71df22198 100644 --- a/module/lib/beaker/crypto/pbkdf2.py +++ b/pyload/lib/beaker/crypto/pbkdf2.py diff --git a/module/lib/beaker/crypto/pycrypto.py b/pyload/lib/beaker/crypto/pycrypto.py index 6657bff56..6657bff56 100644 --- a/module/lib/beaker/crypto/pycrypto.py +++ b/pyload/lib/beaker/crypto/pycrypto.py diff --git a/module/lib/beaker/crypto/util.py b/pyload/lib/beaker/crypto/util.py index 7f96ac856..7f96ac856 100644 --- a/module/lib/beaker/crypto/util.py +++ b/pyload/lib/beaker/crypto/util.py diff --git a/module/lib/beaker/exceptions.py b/pyload/lib/beaker/exceptions.py index 4f81e456d..4f81e456d 100644 --- a/module/lib/beaker/exceptions.py +++ b/pyload/lib/beaker/exceptions.py diff --git a/module/lib/beaker/ext/__init__.py b/pyload/lib/beaker/ext/__init__.py index e69de29bb..e69de29bb 100644 --- a/module/lib/beaker/ext/__init__.py +++ b/pyload/lib/beaker/ext/__init__.py diff --git a/module/lib/beaker/ext/database.py b/pyload/lib/beaker/ext/database.py index 462fb8de4..462fb8de4 100644 --- a/module/lib/beaker/ext/database.py +++ b/pyload/lib/beaker/ext/database.py diff --git a/module/lib/beaker/ext/google.py b/pyload/lib/beaker/ext/google.py index d0a6205f4..d0a6205f4 100644 --- a/module/lib/beaker/ext/google.py +++ b/pyload/lib/beaker/ext/google.py diff --git a/module/lib/beaker/ext/memcached.py b/pyload/lib/beaker/ext/memcached.py index 94e3da3c9..94e3da3c9 100644 --- a/module/lib/beaker/ext/memcached.py +++ b/pyload/lib/beaker/ext/memcached.py diff --git a/module/lib/beaker/ext/sqla.py b/pyload/lib/beaker/ext/sqla.py index 6405c2919..6405c2919 100644 --- a/module/lib/beaker/ext/sqla.py +++ b/pyload/lib/beaker/ext/sqla.py diff --git a/module/lib/beaker/middleware.py b/pyload/lib/beaker/middleware.py index 803398584..803398584 100644 --- a/module/lib/beaker/middleware.py +++ b/pyload/lib/beaker/middleware.py diff --git a/module/lib/beaker/session.py b/pyload/lib/beaker/session.py index d70a670eb..d70a670eb 100644 --- a/module/lib/beaker/session.py +++ b/pyload/lib/beaker/session.py diff --git a/module/lib/beaker/synchronization.py b/pyload/lib/beaker/synchronization.py index f236b8cfe..f236b8cfe 100644 --- a/module/lib/beaker/synchronization.py +++ b/pyload/lib/beaker/synchronization.py diff --git a/module/lib/beaker/util.py b/pyload/lib/beaker/util.py index c7002cd92..c7002cd92 100644 --- a/module/lib/beaker/util.py +++ b/pyload/lib/beaker/util.py diff --git a/module/lib/bottle.py b/pyload/lib/bottle.py index bcc284c1d..bcc284c1d 100644 --- a/module/lib/bottle.py +++ b/pyload/lib/bottle.py diff --git a/module/lib/feedparser.py b/pyload/lib/feedparser.py index c78e6a39b..c78e6a39b 100644 --- a/module/lib/feedparser.py +++ b/pyload/lib/feedparser.py diff --git a/module/lib/jinja2/__init__.py b/pyload/lib/jinja2/__init__.py index a4f7e9c4e..a4f7e9c4e 100644 --- a/module/lib/jinja2/__init__.py +++ b/pyload/lib/jinja2/__init__.py diff --git a/module/lib/jinja2/_compat.py b/pyload/lib/jinja2/_compat.py index 8fa8a49a0..8fa8a49a0 100644 --- a/module/lib/jinja2/_compat.py +++ b/pyload/lib/jinja2/_compat.py diff --git a/module/lib/jinja2/_stringdefs.py b/pyload/lib/jinja2/_stringdefs.py index da5830e9f..da5830e9f 100644 --- a/module/lib/jinja2/_stringdefs.py +++ b/pyload/lib/jinja2/_stringdefs.py diff --git a/module/lib/jinja2/bccache.py b/pyload/lib/jinja2/bccache.py index 2d28ab8b2..2d28ab8b2 100644 --- a/module/lib/jinja2/bccache.py +++ b/pyload/lib/jinja2/bccache.py diff --git a/module/lib/jinja2/compiler.py b/pyload/lib/jinja2/compiler.py index 75a60b8d2..75a60b8d2 100644 --- a/module/lib/jinja2/compiler.py +++ b/pyload/lib/jinja2/compiler.py diff --git a/module/lib/jinja2/constants.py b/pyload/lib/jinja2/constants.py index cab203cc7..cab203cc7 100644 --- a/module/lib/jinja2/constants.py +++ b/pyload/lib/jinja2/constants.py diff --git a/module/lib/jinja2/debug.py b/pyload/lib/jinja2/debug.py index 815cc18a4..815cc18a4 100644 --- a/module/lib/jinja2/debug.py +++ b/pyload/lib/jinja2/debug.py diff --git a/module/lib/jinja2/defaults.py b/pyload/lib/jinja2/defaults.py index a27cb80cb..a27cb80cb 100644 --- a/module/lib/jinja2/defaults.py +++ b/pyload/lib/jinja2/defaults.py diff --git a/module/lib/jinja2/environment.py b/pyload/lib/jinja2/environment.py index 45fabada2..45fabada2 100644 --- a/module/lib/jinja2/environment.py +++ b/pyload/lib/jinja2/environment.py diff --git a/module/lib/jinja2/exceptions.py b/pyload/lib/jinja2/exceptions.py index c9df6dc7c..c9df6dc7c 100644 --- a/module/lib/jinja2/exceptions.py +++ b/pyload/lib/jinja2/exceptions.py diff --git a/module/lib/jinja2/ext.py b/pyload/lib/jinja2/ext.py index c2df12d55..c2df12d55 100644 --- a/module/lib/jinja2/ext.py +++ b/pyload/lib/jinja2/ext.py diff --git a/module/lib/jinja2/filters.py b/pyload/lib/jinja2/filters.py index fd0db04aa..fd0db04aa 100644 --- a/module/lib/jinja2/filters.py +++ b/pyload/lib/jinja2/filters.py diff --git a/module/lib/jinja2/lexer.py b/pyload/lib/jinja2/lexer.py index a50128507..a50128507 100644 --- a/module/lib/jinja2/lexer.py +++ b/pyload/lib/jinja2/lexer.py diff --git a/module/lib/jinja2/loaders.py b/pyload/lib/jinja2/loaders.py index cc9c6836e..cc9c6836e 100644 --- a/module/lib/jinja2/loaders.py +++ b/pyload/lib/jinja2/loaders.py diff --git a/module/lib/jinja2/meta.py b/pyload/lib/jinja2/meta.py index 3110cff60..3110cff60 100644 --- a/module/lib/jinja2/meta.py +++ b/pyload/lib/jinja2/meta.py diff --git a/module/lib/jinja2/nodes.py b/pyload/lib/jinja2/nodes.py index c5697e6b5..c5697e6b5 100644 --- a/module/lib/jinja2/nodes.py +++ b/pyload/lib/jinja2/nodes.py diff --git a/module/lib/jinja2/optimizer.py b/pyload/lib/jinja2/optimizer.py index 00eab115e..00eab115e 100644 --- a/module/lib/jinja2/optimizer.py +++ b/pyload/lib/jinja2/optimizer.py diff --git a/module/lib/jinja2/parser.py b/pyload/lib/jinja2/parser.py index f60cd018c..f60cd018c 100644 --- a/module/lib/jinja2/parser.py +++ b/pyload/lib/jinja2/parser.py diff --git a/module/lib/jinja2/runtime.py b/pyload/lib/jinja2/runtime.py index 7791c645a..7791c645a 100644 --- a/module/lib/jinja2/runtime.py +++ b/pyload/lib/jinja2/runtime.py diff --git a/module/lib/jinja2/sandbox.py b/pyload/lib/jinja2/sandbox.py index da479c1ba..da479c1ba 100644 --- a/module/lib/jinja2/sandbox.py +++ b/pyload/lib/jinja2/sandbox.py diff --git a/module/lib/jinja2/tests.py b/pyload/lib/jinja2/tests.py index 48a3e0618..48a3e0618 100644 --- a/module/lib/jinja2/tests.py +++ b/pyload/lib/jinja2/tests.py diff --git a/module/lib/jinja2/testsuite/__init__.py b/pyload/lib/jinja2/testsuite/__init__.py index 635c83e5d..635c83e5d 100644 --- a/module/lib/jinja2/testsuite/__init__.py +++ b/pyload/lib/jinja2/testsuite/__init__.py diff --git a/module/lib/jinja2/testsuite/api.py b/pyload/lib/jinja2/testsuite/api.py index 1b68bf8b3..1b68bf8b3 100644 --- a/module/lib/jinja2/testsuite/api.py +++ b/pyload/lib/jinja2/testsuite/api.py diff --git a/module/lib/jinja2/testsuite/bytecode_cache.py b/pyload/lib/jinja2/testsuite/bytecode_cache.py index 9f5c635b8..9f5c635b8 100644 --- a/module/lib/jinja2/testsuite/bytecode_cache.py +++ b/pyload/lib/jinja2/testsuite/bytecode_cache.py diff --git a/module/lib/jinja2/testsuite/core_tags.py b/pyload/lib/jinja2/testsuite/core_tags.py index f1a20fd44..f1a20fd44 100644 --- a/module/lib/jinja2/testsuite/core_tags.py +++ b/pyload/lib/jinja2/testsuite/core_tags.py diff --git a/module/lib/jinja2/testsuite/debug.py b/pyload/lib/jinja2/testsuite/debug.py index 2588a83ea..2588a83ea 100644 --- a/module/lib/jinja2/testsuite/debug.py +++ b/pyload/lib/jinja2/testsuite/debug.py diff --git a/module/lib/jinja2/testsuite/doctests.py b/pyload/lib/jinja2/testsuite/doctests.py index 616d3b6ee..616d3b6ee 100644 --- a/module/lib/jinja2/testsuite/doctests.py +++ b/pyload/lib/jinja2/testsuite/doctests.py diff --git a/module/lib/jinja2/testsuite/ext.py b/pyload/lib/jinja2/testsuite/ext.py index 0f93be945..0f93be945 100644 --- a/module/lib/jinja2/testsuite/ext.py +++ b/pyload/lib/jinja2/testsuite/ext.py diff --git a/module/lib/jinja2/testsuite/filters.py b/pyload/lib/jinja2/testsuite/filters.py index 282dd2d85..282dd2d85 100644 --- a/module/lib/jinja2/testsuite/filters.py +++ b/pyload/lib/jinja2/testsuite/filters.py diff --git a/module/lib/jinja2/testsuite/imports.py b/pyload/lib/jinja2/testsuite/imports.py index 3db9008de..3db9008de 100644 --- a/module/lib/jinja2/testsuite/imports.py +++ b/pyload/lib/jinja2/testsuite/imports.py diff --git a/module/lib/jinja2/testsuite/inheritance.py b/pyload/lib/jinja2/testsuite/inheritance.py index e0f51cda9..e0f51cda9 100644 --- a/module/lib/jinja2/testsuite/inheritance.py +++ b/pyload/lib/jinja2/testsuite/inheritance.py diff --git a/module/lib/jinja2/testsuite/lexnparse.py b/pyload/lib/jinja2/testsuite/lexnparse.py index bd1c94cd3..bd1c94cd3 100644 --- a/module/lib/jinja2/testsuite/lexnparse.py +++ b/pyload/lib/jinja2/testsuite/lexnparse.py diff --git a/module/lib/jinja2/testsuite/loader.py b/pyload/lib/jinja2/testsuite/loader.py index a7350aab9..a7350aab9 100644 --- a/module/lib/jinja2/testsuite/loader.py +++ b/pyload/lib/jinja2/testsuite/loader.py diff --git a/module/lib/jinja2/testsuite/regression.py b/pyload/lib/jinja2/testsuite/regression.py index c5f7d5c65..c5f7d5c65 100644 --- a/module/lib/jinja2/testsuite/regression.py +++ b/pyload/lib/jinja2/testsuite/regression.py diff --git a/module/lib/jinja2/testsuite/res/__init__.py b/pyload/lib/jinja2/testsuite/res/__init__.py index e69de29bb..e69de29bb 100644 --- a/module/lib/jinja2/testsuite/res/__init__.py +++ b/pyload/lib/jinja2/testsuite/res/__init__.py diff --git a/module/lib/jinja2/testsuite/res/templates/broken.html b/pyload/lib/jinja2/testsuite/res/templates/broken.html index 77669fae5..77669fae5 100644 --- a/module/lib/jinja2/testsuite/res/templates/broken.html +++ b/pyload/lib/jinja2/testsuite/res/templates/broken.html diff --git a/module/lib/jinja2/testsuite/res/templates/foo/test.html b/pyload/lib/jinja2/testsuite/res/templates/foo/test.html index b7d6715e2..b7d6715e2 100644 --- a/module/lib/jinja2/testsuite/res/templates/foo/test.html +++ b/pyload/lib/jinja2/testsuite/res/templates/foo/test.html diff --git a/module/lib/jinja2/testsuite/res/templates/syntaxerror.html b/pyload/lib/jinja2/testsuite/res/templates/syntaxerror.html index f21b81793..f21b81793 100644 --- a/module/lib/jinja2/testsuite/res/templates/syntaxerror.html +++ b/pyload/lib/jinja2/testsuite/res/templates/syntaxerror.html diff --git a/module/lib/jinja2/testsuite/res/templates/test.html b/pyload/lib/jinja2/testsuite/res/templates/test.html index ba578e48b..ba578e48b 100644 --- a/module/lib/jinja2/testsuite/res/templates/test.html +++ b/pyload/lib/jinja2/testsuite/res/templates/test.html diff --git a/module/lib/jinja2/testsuite/security.py b/pyload/lib/jinja2/testsuite/security.py index 246d0f073..246d0f073 100644 --- a/module/lib/jinja2/testsuite/security.py +++ b/pyload/lib/jinja2/testsuite/security.py diff --git a/module/lib/jinja2/testsuite/tests.py b/pyload/lib/jinja2/testsuite/tests.py index 3ece7a8ff..3ece7a8ff 100644 --- a/module/lib/jinja2/testsuite/tests.py +++ b/pyload/lib/jinja2/testsuite/tests.py diff --git a/module/lib/jinja2/testsuite/utils.py b/pyload/lib/jinja2/testsuite/utils.py index cab9b09a9..cab9b09a9 100644 --- a/module/lib/jinja2/testsuite/utils.py +++ b/pyload/lib/jinja2/testsuite/utils.py diff --git a/module/lib/jinja2/utils.py b/pyload/lib/jinja2/utils.py index ddc47da0a..ddc47da0a 100644 --- a/module/lib/jinja2/utils.py +++ b/pyload/lib/jinja2/utils.py diff --git a/module/lib/jinja2/visitor.py b/pyload/lib/jinja2/visitor.py index 413e7c309..413e7c309 100644 --- a/module/lib/jinja2/visitor.py +++ b/pyload/lib/jinja2/visitor.py diff --git a/module/lib/markupsafe/__init__.py b/pyload/lib/markupsafe/__init__.py index 275540154..275540154 100644 --- a/module/lib/markupsafe/__init__.py +++ b/pyload/lib/markupsafe/__init__.py diff --git a/module/lib/markupsafe/_compat.py b/pyload/lib/markupsafe/_compat.py index 62e5632ad..62e5632ad 100644 --- a/module/lib/markupsafe/_compat.py +++ b/pyload/lib/markupsafe/_compat.py diff --git a/module/lib/markupsafe/_constants.py b/pyload/lib/markupsafe/_constants.py index 919bf03c5..919bf03c5 100644 --- a/module/lib/markupsafe/_constants.py +++ b/pyload/lib/markupsafe/_constants.py diff --git a/module/lib/markupsafe/_native.py b/pyload/lib/markupsafe/_native.py index 5e83f10a1..5e83f10a1 100644 --- a/module/lib/markupsafe/_native.py +++ b/pyload/lib/markupsafe/_native.py diff --git a/module/lib/markupsafe/_speedups.c b/pyload/lib/markupsafe/_speedups.c index f349febf2..f349febf2 100644 --- a/module/lib/markupsafe/_speedups.c +++ b/pyload/lib/markupsafe/_speedups.c diff --git a/module/lib/markupsafe/tests.py b/pyload/lib/markupsafe/tests.py index 636993629..636993629 100644 --- a/module/lib/markupsafe/tests.py +++ b/pyload/lib/markupsafe/tests.py diff --git a/module/lib/rename_process.py b/pyload/lib/rename_process.py index 2527cef39..2527cef39 100644 --- a/module/lib/rename_process.py +++ b/pyload/lib/rename_process.py diff --git a/module/lib/simplejson/__init__.py b/pyload/lib/simplejson/__init__.py index a5c01379a..a5c01379a 100644 --- a/module/lib/simplejson/__init__.py +++ b/pyload/lib/simplejson/__init__.py diff --git a/module/lib/simplejson/compat.py b/pyload/lib/simplejson/compat.py index a0af4a1cb..a0af4a1cb 100644 --- a/module/lib/simplejson/compat.py +++ b/pyload/lib/simplejson/compat.py diff --git a/module/lib/simplejson/decoder.py b/pyload/lib/simplejson/decoder.py index 1a6c5d938..1a6c5d938 100644 --- a/module/lib/simplejson/decoder.py +++ b/pyload/lib/simplejson/decoder.py diff --git a/module/lib/simplejson/encoder.py b/pyload/lib/simplejson/encoder.py index db18244ec..db18244ec 100644 --- a/module/lib/simplejson/encoder.py +++ b/pyload/lib/simplejson/encoder.py diff --git a/module/lib/simplejson/ordered_dict.py b/pyload/lib/simplejson/ordered_dict.py index 87ad88824..87ad88824 100644 --- a/module/lib/simplejson/ordered_dict.py +++ b/pyload/lib/simplejson/ordered_dict.py diff --git a/module/lib/simplejson/scanner.py b/pyload/lib/simplejson/scanner.py index 5abed357b..5abed357b 100644 --- a/module/lib/simplejson/scanner.py +++ b/pyload/lib/simplejson/scanner.py diff --git a/module/lib/simplejson/tool.py b/pyload/lib/simplejson/tool.py index 062e8e2c1..062e8e2c1 100644 --- a/module/lib/simplejson/tool.py +++ b/pyload/lib/simplejson/tool.py diff --git a/module/lib/thrift/TSCons.py b/pyload/lib/thrift/TSCons.py index da8d2833b..da8d2833b 100644 --- a/module/lib/thrift/TSCons.py +++ b/pyload/lib/thrift/TSCons.py diff --git a/module/lib/thrift/TSerialization.py b/pyload/lib/thrift/TSerialization.py index 8a58d89df..8a58d89df 100644 --- a/module/lib/thrift/TSerialization.py +++ b/pyload/lib/thrift/TSerialization.py diff --git a/module/lib/thrift/TTornado.py b/pyload/lib/thrift/TTornado.py index af309c3d9..af309c3d9 100644 --- a/module/lib/thrift/TTornado.py +++ b/pyload/lib/thrift/TTornado.py diff --git a/module/lib/thrift/Thrift.py b/pyload/lib/thrift/Thrift.py index 9890af7e1..9890af7e1 100644 --- a/module/lib/thrift/Thrift.py +++ b/pyload/lib/thrift/Thrift.py diff --git a/module/lib/thrift/__init__.py b/pyload/lib/thrift/__init__.py index 48d659c40..48d659c40 100644 --- a/module/lib/thrift/__init__.py +++ b/pyload/lib/thrift/__init__.py diff --git a/module/lib/thrift/protocol/TBase.py b/pyload/lib/thrift/protocol/TBase.py index 6cbd5f39a..6cbd5f39a 100644 --- a/module/lib/thrift/protocol/TBase.py +++ b/pyload/lib/thrift/protocol/TBase.py diff --git a/module/lib/thrift/protocol/TBinaryProtocol.py b/pyload/lib/thrift/protocol/TBinaryProtocol.py index 6fdd08c26..6fdd08c26 100644 --- a/module/lib/thrift/protocol/TBinaryProtocol.py +++ b/pyload/lib/thrift/protocol/TBinaryProtocol.py diff --git a/module/lib/thrift/protocol/TCompactProtocol.py b/pyload/lib/thrift/protocol/TCompactProtocol.py index cdec60773..cdec60773 100644 --- a/module/lib/thrift/protocol/TCompactProtocol.py +++ b/pyload/lib/thrift/protocol/TCompactProtocol.py diff --git a/module/lib/thrift/protocol/TJSONProtocol.py b/pyload/lib/thrift/protocol/TJSONProtocol.py index 3048197d4..3048197d4 100644 --- a/module/lib/thrift/protocol/TJSONProtocol.py +++ b/pyload/lib/thrift/protocol/TJSONProtocol.py diff --git a/module/lib/thrift/protocol/TProtocol.py b/pyload/lib/thrift/protocol/TProtocol.py index dc2b095de..dc2b095de 100644 --- a/module/lib/thrift/protocol/TProtocol.py +++ b/pyload/lib/thrift/protocol/TProtocol.py diff --git a/module/lib/thrift/protocol/__init__.py b/pyload/lib/thrift/protocol/__init__.py index 7eefb458a..7eefb458a 100644 --- a/module/lib/thrift/protocol/__init__.py +++ b/pyload/lib/thrift/protocol/__init__.py diff --git a/module/lib/thrift/protocol/fastbinary.c b/pyload/lib/thrift/protocol/fastbinary.c index 2ce56603c..2ce56603c 100644 --- a/module/lib/thrift/protocol/fastbinary.c +++ b/pyload/lib/thrift/protocol/fastbinary.c diff --git a/module/lib/thrift/server/THttpServer.py b/pyload/lib/thrift/server/THttpServer.py index be54bab94..be54bab94 100644 --- a/module/lib/thrift/server/THttpServer.py +++ b/pyload/lib/thrift/server/THttpServer.py diff --git a/module/lib/thrift/server/TNonblockingServer.py b/pyload/lib/thrift/server/TNonblockingServer.py index fa478d01f..fa478d01f 100644 --- a/module/lib/thrift/server/TNonblockingServer.py +++ b/pyload/lib/thrift/server/TNonblockingServer.py diff --git a/module/lib/thrift/server/TProcessPoolServer.py b/pyload/lib/thrift/server/TProcessPoolServer.py index 7a695a883..7a695a883 100644 --- a/module/lib/thrift/server/TProcessPoolServer.py +++ b/pyload/lib/thrift/server/TProcessPoolServer.py diff --git a/module/lib/thrift/server/TServer.py b/pyload/lib/thrift/server/TServer.py index 2f24842c4..2f24842c4 100644 --- a/module/lib/thrift/server/TServer.py +++ b/pyload/lib/thrift/server/TServer.py diff --git a/module/lib/thrift/server/__init__.py b/pyload/lib/thrift/server/__init__.py index 1bf6e254e..1bf6e254e 100644 --- a/module/lib/thrift/server/__init__.py +++ b/pyload/lib/thrift/server/__init__.py diff --git a/module/lib/thrift/transport/THttpClient.py b/pyload/lib/thrift/transport/THttpClient.py index ea80a1ae8..ea80a1ae8 100644 --- a/module/lib/thrift/transport/THttpClient.py +++ b/pyload/lib/thrift/transport/THttpClient.py diff --git a/module/lib/thrift/transport/TSSLSocket.py b/pyload/lib/thrift/transport/TSSLSocket.py index 81e098426..81e098426 100644 --- a/module/lib/thrift/transport/TSSLSocket.py +++ b/pyload/lib/thrift/transport/TSSLSocket.py diff --git a/module/lib/thrift/transport/TSocket.py b/pyload/lib/thrift/transport/TSocket.py index 9e2b3849b..9e2b3849b 100644 --- a/module/lib/thrift/transport/TSocket.py +++ b/pyload/lib/thrift/transport/TSocket.py diff --git a/module/lib/thrift/transport/TTransport.py b/pyload/lib/thrift/transport/TTransport.py index 4481371a6..4481371a6 100644 --- a/module/lib/thrift/transport/TTransport.py +++ b/pyload/lib/thrift/transport/TTransport.py diff --git a/module/lib/thrift/transport/TTwisted.py b/pyload/lib/thrift/transport/TTwisted.py index 3ce3eb220..3ce3eb220 100644 --- a/module/lib/thrift/transport/TTwisted.py +++ b/pyload/lib/thrift/transport/TTwisted.py diff --git a/module/lib/thrift/transport/TZlibTransport.py b/pyload/lib/thrift/transport/TZlibTransport.py index a2f42a5d2..a2f42a5d2 100644 --- a/module/lib/thrift/transport/TZlibTransport.py +++ b/pyload/lib/thrift/transport/TZlibTransport.py diff --git a/module/lib/thrift/transport/__init__.py b/pyload/lib/thrift/transport/__init__.py index c9596d9a6..c9596d9a6 100644 --- a/module/lib/thrift/transport/__init__.py +++ b/pyload/lib/thrift/transport/__init__.py diff --git a/module/lib/wsgiserver/LICENSE.txt b/pyload/lib/wsgiserver/LICENSE.txt index a15165ee2..a15165ee2 100644 --- a/module/lib/wsgiserver/LICENSE.txt +++ b/pyload/lib/wsgiserver/LICENSE.txt diff --git a/module/lib/wsgiserver/__init__.py b/pyload/lib/wsgiserver/__init__.py index 1058b19ff..1058b19ff 100644 --- a/module/lib/wsgiserver/__init__.py +++ b/pyload/lib/wsgiserver/__init__.py diff --git a/module/network/Browser.py b/pyload/network/Browser.py index e78d24688..e78d24688 100644 --- a/module/network/Browser.py +++ b/pyload/network/Browser.py diff --git a/module/network/Bucket.py b/pyload/network/Bucket.py index a096d644a..a096d644a 100644 --- a/module/network/Bucket.py +++ b/pyload/network/Bucket.py diff --git a/module/network/CookieJar.py b/pyload/network/CookieJar.py index a6ae090bc..a6ae090bc 100644 --- a/module/network/CookieJar.py +++ b/pyload/network/CookieJar.py diff --git a/pyload/network/HTTPChunk.py b/pyload/network/HTTPChunk.py new file mode 100644 index 000000000..b9d2a5379 --- /dev/null +++ b/pyload/network/HTTPChunk.py @@ -0,0 +1,292 @@ +# -*- coding: utf-8 -*- +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: RaNaN +""" +from os import remove, stat, fsync +from os.path import exists +from time import sleep +from re import search +from pyload.utils import fs_encode +import codecs +import pycurl + +from HTTPRequest import HTTPRequest + +class WrongFormat(Exception): + pass + + +class ChunkInfo: + def __init__(self, name): + self.name = unicode(name) + self.size = 0 + self.resume = False + self.chunks = [] + + def __repr__(self): + ret = "ChunkInfo: %s, %s\n" % (self.name, self.size) + for i, c in enumerate(self.chunks): + ret += "%s# %s\n" % (i, c[1]) + + return ret + + def setSize(self, size): + self.size = int(size) + + def addChunk(self, name, range): + self.chunks.append((name, range)) + + def clear(self): + self.chunks = [] + + def createChunks(self, chunks): + self.clear() + chunk_size = self.size / chunks + + current = 0 + for i in range(chunks): + end = self.size - 1 if (i == chunks - 1) else current + chunk_size + self.addChunk("%s.chunk%s" % (self.name, i), (current, end)) + current += chunk_size + 1 + + + def save(self): + fs_name = fs_encode("%s.chunks" % self.name) + fh = codecs.open(fs_name, "w", "utf_8") + fh.write("name:%s\n" % self.name) + fh.write("size:%s\n" % self.size) + for i, c in enumerate(self.chunks): + fh.write("#%d:\n" % i) + fh.write("\tname:%s\n" % c[0]) + fh.write("\trange:%i-%i\n" % c[1]) + fh.close() + + @staticmethod + def load(name): + fs_name = fs_encode("%s.chunks" % name) + if not exists(fs_name): + raise IOError() + fh = codecs.open(fs_name, "r", "utf_8") + name = fh.readline()[:-1] + size = fh.readline()[:-1] + if name.startswith("name:") and size.startswith("size:"): + name = name[5:] + size = size[5:] + else: + fh.close() + raise WrongFormat() + ci = ChunkInfo(name) + ci.loaded = True + ci.setSize(size) + while True: + if not fh.readline(): #skip line + break + name = fh.readline()[1:-1] + range = fh.readline()[1:-1] + if name.startswith("name:") and range.startswith("range:"): + name = name[5:] + range = range[6:].split("-") + else: + raise WrongFormat() + + ci.addChunk(name, (long(range[0]), long(range[1]))) + fh.close() + return ci + + def remove(self): + fs_name = fs_encode("%s.chunks" % self.name) + if exists(fs_name): remove(fs_name) + + def getCount(self): + return len(self.chunks) + + def getChunkName(self, index): + return self.chunks[index][0] + + def getChunkRange(self, index): + return self.chunks[index][1] + + +class HTTPChunk(HTTPRequest): + def __init__(self, id, parent, range=None, resume=False): + self.id = id + self.p = parent # HTTPDownload instance + self.range = range # tuple (start, end) + self.resume = resume + self.log = parent.log + + self.size = range[1] - range[0] if range else -1 + self.arrived = 0 + self.lastURL = self.p.referer + + self.c = pycurl.Curl() + + self.header = "" + self.headerParsed = False #indicates if the header has been processed + + self.fp = None #file handle + + self.initHandle() + self.setInterface(self.p.options) + + self.BOMChecked = False # check and remove byte order mark + + self.rep = None + + self.sleep = 0.000 + self.lastSize = 0 + + def __repr__(self): + return "<HTTPChunk id=%d, size=%d, arrived=%d>" % (self.id, self.size, self.arrived) + + @property + def cj(self): + return self.p.cj + + def getHandle(self): + """ returns a Curl handle ready to use for perform/multiperform """ + + self.setRequestContext(self.p.url, self.p.get, self.p.post, self.p.referer, self.p.cj) + self.c.setopt(pycurl.WRITEFUNCTION, self.writeBody) + self.c.setopt(pycurl.HEADERFUNCTION, self.writeHeader) + + # request all bytes, since some servers in russia seems to have a defect arihmetic unit + + fs_name = fs_encode(self.p.info.getChunkName(self.id)) + if self.resume: + self.fp = open(fs_name, "ab") + self.arrived = self.fp.tell() + if not self.arrived: + self.arrived = stat(fs_name).st_size + + if self.range: + #do nothing if chunk already finished + if self.arrived + self.range[0] >= self.range[1]: return None + + if self.id == len(self.p.info.chunks) - 1: #as last chunk dont set end range, so we get everything + range = "%i-" % (self.arrived + self.range[0]) + else: + range = "%i-%i" % (self.arrived + self.range[0], min(self.range[1] + 1, self.p.size - 1)) + + self.log.debug("Chunked resume with range %s" % range) + self.c.setopt(pycurl.RANGE, range) + else: + self.log.debug("Resume File from %i" % self.arrived) + self.c.setopt(pycurl.RESUME_FROM, self.arrived) + + else: + if self.range: + if self.id == len(self.p.info.chunks) - 1: # see above + range = "%i-" % self.range[0] + else: + range = "%i-%i" % (self.range[0], min(self.range[1] + 1, self.p.size - 1)) + + self.log.debug("Chunked with range %s" % range) + self.c.setopt(pycurl.RANGE, range) + + self.fp = open(fs_name, "wb") + + return self.c + + def writeHeader(self, buf): + self.header += buf + #@TODO forward headers?, this is possibly unneeeded, when we just parse valid 200 headers + # as first chunk, we will parse the headers + if not self.range and self.header.endswith("\r\n\r\n"): + self.parseHeader() + elif not self.range and buf.startswith("150") and "data connection" in buf.lower(): #: ftp file size parsing + size = search(r"(\d+) bytes", buf) + if size: + self.p.size = int(size.group(1)) + self.p.chunkSupport = True + + self.headerParsed = True + + def writeBody(self, buf): + #ignore BOM, it confuses unrar + if not self.BOMChecked: + if [ord(b) for b in buf[:3]] == [239, 187, 191]: + buf = buf[3:] + self.BOMChecked = True + + size = len(buf) + + self.arrived += size + + self.fp.write(buf) + + if self.p.bucket: + sleep(self.p.bucket.consumed(size)) + else: + # Avoid small buffers, increasing sleep time slowly if buffer size gets smaller + # otherwise reduce sleep time percentual (values are based on tests) + # So in general cpu time is saved without reducing bandwith too much + + if size < self.lastSize: + self.sleep += 0.002 + else: + self.sleep *= 0.7 + + self.lastSize = size + + sleep(self.sleep) + + if self.range and self.arrived > self.size: + return 0 #close if we have enough data + + + def parseHeader(self): + """parse data from recieved header""" + for orgline in self.decodeResponse(self.header).splitlines(): + line = orgline.strip().lower() + if line.startswith("accept-ranges") and "bytes" in line: + self.p.chunkSupport = True + + if line.startswith("content-disposition") and "filename=" in line: + name = orgline.partition("filename=")[2] + name = name.replace('"', "").replace("'", "").replace(";", "").strip() + self.p.nameDisposition = name + self.log.debug("Content-Disposition: %s" % name) + + if not self.resume and line.startswith("content-length"): + self.p.size = int(line.split(":")[1]) + + self.headerParsed = True + + def stop(self): + """The download will not proceed after next call of writeBody""" + self.range = [0, 0] + self.size = 0 + + def resetRange(self): + """ Reset the range, so the download will load all data available """ + self.range = None + + def setRange(self, range): + self.range = range + self.size = range[1] - range[0] + + def flushFile(self): + """ flush and close file """ + self.fp.flush() + fsync(self.fp.fileno()) #make sure everything was written to disk + self.fp.close() #needs to be closed, or merging chunks will fail + + def close(self): + """ closes everything, unusable after this """ + if self.fp: self.fp.close() + self.c.close() + if hasattr(self, "p"): del self.p diff --git a/pyload/network/HTTPDownload.py b/pyload/network/HTTPDownload.py new file mode 100644 index 000000000..50c6b4bdf --- /dev/null +++ b/pyload/network/HTTPDownload.py @@ -0,0 +1,325 @@ +# -*- coding: utf-8 -*- +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: RaNaN +""" + +from os import remove, fsync +from os.path import dirname +from time import sleep, time +from shutil import move +from logging import getLogger + +import pycurl + +from HTTPChunk import ChunkInfo, HTTPChunk +from HTTPRequest import BadHeader + +from pyload.plugins.Plugin import Abort +from pyload.utils import safe_join, fs_encode + +class HTTPDownload: + """ loads a url http + ftp """ + + def __init__(self, url, filename, get={}, post={}, referer=None, cj=None, bucket=None, + options={}, progressNotify=None, disposition=False): + self.url = url + self.filename = filename #complete file destination, not only name + self.get = get + self.post = post + self.referer = referer + self.cj = cj #cookiejar if cookies are needed + self.bucket = bucket + self.options = options + self.disposition = disposition + # all arguments + + self.abort = False + self.size = 0 + self.nameDisposition = None #will be parsed from content disposition + + self.chunks = [] + + self.log = getLogger("log") + + try: + self.info = ChunkInfo.load(filename) + self.info.resume = True #resume is only possible with valid info file + self.size = self.info.size + self.infoSaved = True + except IOError: + self.info = ChunkInfo(filename) + + self.chunkSupport = None + self.m = pycurl.CurlMulti() + + #needed for speed calculation + self.lastArrived = [] + self.speeds = [] + self.lastSpeeds = [0, 0] + + self.progressNotify = progressNotify + + @property + def speed(self): + last = [sum(x) for x in self.lastSpeeds if x] + return (sum(self.speeds) + sum(last)) / (1 + len(last)) + + @property + def arrived(self): + return sum([c.arrived for c in self.chunks]) + + @property + def percent(self): + if not self.size: return 0 + return (self.arrived * 100) / self.size + + def _copyChunks(self): + init = fs_encode(self.info.getChunkName(0)) #initial chunk name + + if self.info.getCount() > 1: + fo = open(init, "rb+") #first chunkfile + for i in range(1, self.info.getCount()): + #input file + fo.seek( + self.info.getChunkRange(i - 1)[1] + 1) #seek to beginning of chunk, to get rid of overlapping chunks + fname = fs_encode("%s.chunk%d" % (self.filename, i)) + fi = open(fname, "rb") + buf = 32 * 1024 + while True: #copy in chunks, consumes less memory + data = fi.read(buf) + if not data: + break + fo.write(data) + fi.close() + if fo.tell() < self.info.getChunkRange(i)[1]: + fo.close() + remove(init) + self.info.remove() #there are probably invalid chunks + raise Exception("Downloaded content was smaller than expected. Try to reduce download connections.") + remove(fname) #remove chunk + fo.close() + + if self.nameDisposition and self.disposition: + self.filename = safe_join(dirname(self.filename), self.nameDisposition) + + move(init, fs_encode(self.filename)) + self.info.remove() #remove info file + + def download(self, chunks=1, resume=False): + """ returns new filename or None """ + + chunks = max(1, chunks) + resume = self.info.resume and resume + + try: + self._download(chunks, resume) + except pycurl.error, e: + #code 33 - no resume + code = e.args[0] + if code == 33: + # try again without resume + self.log.debug("Errno 33 -> Restart without resume") + + #remove old handles + for chunk in self.chunks: + self.closeChunk(chunk) + + return self._download(chunks, False) + else: + raise + finally: + self.close() + + if self.nameDisposition and self.disposition: return self.nameDisposition + return None + + def _download(self, chunks, resume): + if not resume: + self.info.clear() + self.info.addChunk("%s.chunk0" % self.filename, (0, 0)) #create an initial entry + + self.chunks = [] + + init = HTTPChunk(0, self, None, resume) #initial chunk that will load complete file (if needed) + + self.chunks.append(init) + self.m.add_handle(init.getHandle()) + + lastFinishCheck = 0 + lastTimeCheck = 0 + chunksDone = set() # list of curl handles that are finished + chunksCreated = False + done = False + if self.info.getCount() > 1: # This is a resume, if we were chunked originally assume still can + self.chunkSupport = True + + while 1: + #need to create chunks + if not chunksCreated and self.chunkSupport and self.size: #will be setted later by first chunk + + if not resume: + self.info.setSize(self.size) + self.info.createChunks(chunks) + self.info.save() + + chunks = self.info.getCount() + + init.setRange(self.info.getChunkRange(0)) + + for i in range(1, chunks): + c = HTTPChunk(i, self, self.info.getChunkRange(i), resume) + + handle = c.getHandle() + if handle: + self.chunks.append(c) + self.m.add_handle(handle) + else: + #close immediatly + self.log.debug("Invalid curl handle -> closed") + c.close() + + chunksCreated = True + + while 1: + ret, num_handles = self.m.perform() + if ret != pycurl.E_CALL_MULTI_PERFORM: + break + + t = time() + + # reduce these calls + while lastFinishCheck + 0.5 < t: + # list of failed curl handles + failed = [] + ex = None # save only last exception, we can only raise one anyway + + num_q, ok_list, err_list = self.m.info_read() + for c in ok_list: + chunk = self.findChunk(c) + try: # check if the header implies success, else add it to failed list + chunk.verifyHeader() + except BadHeader, e: + self.log.debug("Chunk %d failed: %s" % (chunk.id + 1, str(e))) + failed.append(chunk) + ex = e + else: + chunksDone.add(c) + + for c in err_list: + curl, errno, msg = c + chunk = self.findChunk(curl) + #test if chunk was finished + if errno != 23 or "0 !=" not in msg: + failed.append(chunk) + ex = pycurl.error(errno, msg) + self.log.debug("Chunk %d failed: %s" % (chunk.id + 1, str(ex))) + continue + + try: # check if the header implies success, else add it to failed list + chunk.verifyHeader() + except BadHeader, e: + self.log.debug("Chunk %d failed: %s" % (chunk.id + 1, str(e))) + failed.append(chunk) + ex = e + else: + chunksDone.add(curl) + if not num_q: # no more infos to get + + # check if init is not finished so we reset download connections + # note that other chunks are closed and downloaded with init too + if failed and init not in failed and init.c not in chunksDone: + self.log.error(_("Download chunks failed, fallback to single connection | %s" % (str(ex)))) + + #list of chunks to clean and remove + to_clean = filter(lambda x: x is not init, self.chunks) + for chunk in to_clean: + self.closeChunk(chunk) + self.chunks.remove(chunk) + remove(fs_encode(self.info.getChunkName(chunk.id))) + + #let first chunk load the rest and update the info file + init.resetRange() + self.info.clear() + self.info.addChunk("%s.chunk0" % self.filename, (0, self.size)) + self.info.save() + elif failed: + raise ex + + lastFinishCheck = t + + if len(chunksDone) >= len(self.chunks): + if len(chunksDone) > len(self.chunks): + self.log.warning("Finished download chunks size incorrect, please report bug.") + done = True #all chunks loaded + + break + + if done: + break #all chunks loaded + + # calc speed once per second, averaging over 3 seconds + if lastTimeCheck + 1 < t: + diff = [c.arrived - (self.lastArrived[i] if len(self.lastArrived) > i else 0) for i, c in + enumerate(self.chunks)] + + self.lastSpeeds[1] = self.lastSpeeds[0] + self.lastSpeeds[0] = self.speeds + self.speeds = [float(a) / (t - lastTimeCheck) for a in diff] + self.lastArrived = [c.arrived for c in self.chunks] + lastTimeCheck = t + self.updateProgress() + + if self.abort: + raise Abort() + + #sleep(0.003) #supress busy waiting - limits dl speed to (1 / x) * buffersize + self.m.select(1) + + for chunk in self.chunks: + chunk.flushFile() #make sure downloads are written to disk + + self._copyChunks() + + def updateProgress(self): + if self.progressNotify: + self.progressNotify(self.percent) + + def findChunk(self, handle): + """ linear search to find a chunk (should be ok since chunk size is usually low) """ + for chunk in self.chunks: + if chunk.c == handle: return chunk + + def closeChunk(self, chunk): + try: + self.m.remove_handle(chunk.c) + except pycurl.error, e: + self.log.debug("Error removing chunk: %s" % str(e)) + finally: + chunk.close() + + def close(self): + """ cleanup """ + for chunk in self.chunks: + self.closeChunk(chunk) + + self.chunks = [] + if hasattr(self, "m"): + self.m.close() + del self.m + if hasattr(self, "cj"): + del self.cj + if hasattr(self, "info"): + del self.info diff --git a/pyload/network/HTTPRequest.py b/pyload/network/HTTPRequest.py new file mode 100644 index 000000000..66e355b77 --- /dev/null +++ b/pyload/network/HTTPRequest.py @@ -0,0 +1,303 @@ +# -*- coding: utf-8 -*- +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: RaNaN +""" + +import pycurl + +from codecs import getincrementaldecoder, lookup, BOM_UTF8 +from urllib import quote, urlencode +from httplib import responses +from logging import getLogger +from cStringIO import StringIO + +from pyload.plugins.Plugin import Abort + +def myquote(url): + return quote(url.encode('utf_8') if isinstance(url, unicode) else url, safe="%/:=&?~#+!$,;'@()*[]") + +def myurlencode(data): + data = dict(data) + return urlencode(dict((x.encode('utf_8') if isinstance(x, unicode) else x, \ + y.encode('utf_8') if isinstance(y, unicode) else y ) for x, y in data.iteritems())) + +bad_headers = range(400, 404) + range(405, 418) + range(500, 506) + +class BadHeader(Exception): + def __init__(self, code, content=""): + Exception.__init__(self, "Bad server response: %s %s" % (code, responses[int(code)])) + self.code = code + self.content = content + + +class HTTPRequest: + def __init__(self, cookies=None, options=None): + self.c = pycurl.Curl() + self.rep = StringIO() + + self.cj = cookies #cookiejar + + self.lastURL = None + self.lastEffectiveURL = None + self.abort = False + self.code = 0 # last http code + + self.header = "" + + self.headers = [] #temporary request header + + self.initHandle() + self.setInterface(options) + + self.c.setopt(pycurl.WRITEFUNCTION, self.write) + self.c.setopt(pycurl.HEADERFUNCTION, self.writeHeader) + + self.log = getLogger("log") + + + def initHandle(self): + """ sets common options to curl handle """ + self.c.setopt(pycurl.FOLLOWLOCATION, 1) + self.c.setopt(pycurl.MAXREDIRS, 5) + self.c.setopt(pycurl.CONNECTTIMEOUT, 30) + self.c.setopt(pycurl.NOSIGNAL, 1) + self.c.setopt(pycurl.NOPROGRESS, 1) + if hasattr(pycurl, "AUTOREFERER"): + self.c.setopt(pycurl.AUTOREFERER, 1) + self.c.setopt(pycurl.SSL_VERIFYPEER, 0) + self.c.setopt(pycurl.LOW_SPEED_TIME, 30) + self.c.setopt(pycurl.LOW_SPEED_LIMIT, 5) + + #self.c.setopt(pycurl.VERBOSE, 1) + + self.c.setopt(pycurl.USERAGENT, + "Mozilla/5.0 (Windows NT 6.1; Win64; x64;en; rv:5.0) Gecko/20110619 Firefox/5.0") + if pycurl.version_info()[7]: + self.c.setopt(pycurl.ENCODING, "gzip, deflate") + self.c.setopt(pycurl.HTTPHEADER, ["Accept: */*", + "Accept-Language: en-US, en", + "Accept-Charset: ISO-8859-1, utf-8;q=0.7,*;q=0.7", + "Connection: keep-alive", + "Keep-Alive: 300", + "Expect:"]) + + def setInterface(self, options): + + interface, proxy, ipv6 = options["interface"], options["proxies"], options["ipv6"] + + if interface and interface.lower() != "none": + self.c.setopt(pycurl.INTERFACE, str(interface)) + + if proxy: + if proxy["type"] == "socks4": + self.c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS4) + elif proxy["type"] == "socks5": + self.c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5) + else: + self.c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_HTTP) + + self.c.setopt(pycurl.PROXY, str(proxy["address"])) + self.c.setopt(pycurl.PROXYPORT, proxy["port"]) + + if proxy["username"]: + self.c.setopt(pycurl.PROXYUSERPWD, str("%s:%s" % (proxy["username"], proxy["password"]))) + + if ipv6: + self.c.setopt(pycurl.IPRESOLVE, pycurl.IPRESOLVE_WHATEVER) + else: + self.c.setopt(pycurl.IPRESOLVE, pycurl.IPRESOLVE_V4) + + if "auth" in options: + self.c.setopt(pycurl.USERPWD, str(options["auth"])) + + if "timeout" in options: + self.c.setopt(pycurl.LOW_SPEED_TIME, options["timeout"]) + + + def addCookies(self): + """ put cookies from curl handle to cj """ + if self.cj: + self.cj.addCookies(self.c.getinfo(pycurl.INFO_COOKIELIST)) + + def getCookies(self): + """ add cookies from cj to curl handle """ + if self.cj: + for c in self.cj.getCookies(): + self.c.setopt(pycurl.COOKIELIST, c) + return + + def clearCookies(self): + self.c.setopt(pycurl.COOKIELIST, "") + + def setRequestContext(self, url, get, post, referer, cookies, multipart=False): + """ sets everything needed for the request """ + + url = myquote(url) + + if get: + get = urlencode(get) + url = "%s?%s" % (url, get) + + self.c.setopt(pycurl.URL, url) + self.c.lastUrl = url + + if post: + self.c.setopt(pycurl.POST, 1) + if not multipart: + if type(post) == unicode: + post = str(post) #unicode not allowed + elif type(post) == str: + pass + else: + post = myurlencode(post) + + self.c.setopt(pycurl.POSTFIELDS, post) + else: + post = [(x, y.encode('utf8') if type(y) == unicode else y ) for x, y in post.iteritems()] + self.c.setopt(pycurl.HTTPPOST, post) + else: + self.c.setopt(pycurl.POST, 0) + + if referer and self.lastURL: + self.c.setopt(pycurl.REFERER, str(self.lastURL)) + + if cookies: + self.c.setopt(pycurl.COOKIEFILE, "") + self.c.setopt(pycurl.COOKIEJAR, "") + self.getCookies() + + + def load(self, url, get={}, post={}, referer=True, cookies=True, just_header=False, multipart=False, decode=False): + """ load and returns a given page """ + + self.setRequestContext(url, get, post, referer, cookies, multipart) + + self.header = "" + + self.c.setopt(pycurl.HTTPHEADER, self.headers) + + if just_header: + self.c.setopt(pycurl.FOLLOWLOCATION, 0) + self.c.setopt(pycurl.NOBODY, 1) + if post: + self.c.setopt(pycurl.POST, 1) + else: + self.c.setopt(pycurl.HTTPGET, 1) + self.c.perform() + rep = self.header + + self.c.setopt(pycurl.FOLLOWLOCATION, 1) + self.c.setopt(pycurl.NOBODY, 0) + + else: + self.c.perform() + rep = self.getResponse() + + self.c.setopt(pycurl.POSTFIELDS, "") + self.lastEffectiveURL = self.c.getinfo(pycurl.EFFECTIVE_URL) + self.code = self.verifyHeader() + + self.addCookies() + + if decode: + rep = self.decodeResponse(rep) + + return rep + + def verifyHeader(self): + """ raise an exceptions on bad headers """ + code = int(self.c.getinfo(pycurl.RESPONSE_CODE)) + if code in bad_headers: + #404 will NOT raise an exception + raise BadHeader(code, self.getResponse()) + return code + + def checkHeader(self): + """ check if header indicates failure""" + return int(self.c.getinfo(pycurl.RESPONSE_CODE)) not in bad_headers + + def getResponse(self): + """ retrieve response from string io """ + if self.rep is None: return "" + value = self.rep.getvalue() + self.rep.close() + self.rep = StringIO() + return value + + def decodeResponse(self, rep): + """ decode with correct encoding, relies on header """ + header = self.header.splitlines() + encoding = "utf8" # default encoding + + for line in header: + line = line.lower().replace(" ", "") + if not line.startswith("content-type:") or\ + ("text" not in line and "application" not in line): + continue + + none, delemiter, charset = line.rpartition("charset=") + if delemiter: + charset = charset.split(";") + if charset: + encoding = charset[0] + + try: + #self.log.debug("Decoded %s" % encoding ) + if lookup(encoding).name == 'utf-8' and rep.startswith(BOM_UTF8): + encoding = 'utf-8-sig' + + decoder = getincrementaldecoder(encoding)("replace") + rep = decoder.decode(rep, True) + + #TODO: html_unescape as default + + except LookupError: + self.log.debug("No Decoder foung for %s" % encoding) + except Exception: + self.log.debug("Error when decoding string from %s." % encoding) + + return rep + + def write(self, buf): + """ writes response """ + if self.rep.tell() > 1000000 or self.abort: + rep = self.getResponse() + if self.abort: raise Abort() + f = open("response.dump", "wb") + f.write(rep) + f.close() + raise Exception("Loaded Url exceeded limit") + + self.rep.write(buf) + + def writeHeader(self, buf): + """ writes header """ + self.header += buf + + def putHeader(self, name, value): + self.headers.append("%s: %s" % (name, value)) + + def clearHeaders(self): + self.headers = [] + + def close(self): + """ cleanup, unusable after this """ + self.rep.close() + if hasattr(self, "cj"): + del self.cj + if hasattr(self, "c"): + self.c.close() + del self.c diff --git a/module/network/RequestFactory.py b/pyload/network/RequestFactory.py index 6811b11d8..6811b11d8 100644 --- a/module/network/RequestFactory.py +++ b/pyload/network/RequestFactory.py diff --git a/pyload/network/XDCCRequest.py b/pyload/network/XDCCRequest.py new file mode 100644 index 000000000..9ae52f72b --- /dev/null +++ b/pyload/network/XDCCRequest.py @@ -0,0 +1,159 @@ +# -*- coding: utf-8 -*- +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: jeix +""" + +import socket +import re + +from os import remove +from os.path import exists + +from time import time + +import struct +from select import select + +from pyload.plugins.Plugin import Abort + + +class XDCCRequest: + def __init__(self, timeout=30, proxies={}): + + self.proxies = proxies + self.timeout = timeout + + self.filesize = 0 + self.recv = 0 + self.speed = 0 + + self.abort = False + + def createSocket(self): + # proxytype = None + # proxy = None + # if self.proxies.has_key("socks5"): + # proxytype = socks.PROXY_TYPE_SOCKS5 + # proxy = self.proxies["socks5"] + # elif self.proxies.has_key("socks4"): + # proxytype = socks.PROXY_TYPE_SOCKS4 + # proxy = self.proxies["socks4"] + # if proxytype: + # sock = socks.socksocket() + # t = _parse_proxy(proxy) + # sock.setproxy(proxytype, addr=t[3].split(":")[0], port=int(t[3].split(":")[1]), username=t[1], password=t[2]) + # else: + # sock = socket.socket() + # return sock + + return socket.socket() + + def download(self, ip, port, filename, irc, progressNotify=None): + + ircbuffer = "" + lastUpdate = time() + cumRecvLen = 0 + + dccsock = self.createSocket() + + dccsock.settimeout(self.timeout) + dccsock.connect((ip, port)) + + if exists(filename): + i = 0 + nameParts = filename.rpartition(".") + while True: + newfilename = "%s-%d%s%s" % (nameParts[0], i, nameParts[1], nameParts[2]) + i += 1 + + if not exists(newfilename): + filename = newfilename + break + + fh = open(filename, "wb") + + # recv loop for dcc socket + while True: + if self.abort: + dccsock.close() + fh.close() + remove(filename) + raise Abort() + + self._keepAlive(irc, ircbuffer) + + data = dccsock.recv(4096) + dataLen = len(data) + self.recv += dataLen + + cumRecvLen += dataLen + + now = time() + timespan = now - lastUpdate + if timespan > 1: + self.speed = cumRecvLen / timespan + cumRecvLen = 0 + lastUpdate = now + + if progressNotify: + progressNotify(self.percent) + + if not data: + break + + fh.write(data) + + # acknowledge data by sending number of recceived bytes + dccsock.send(struct.pack('!I', self.recv)) + + dccsock.close() + fh.close() + + return filename + + def _keepAlive(self, sock, readbuffer): + fdset = select([sock], [], [], 0) + if sock not in fdset[0]: + return + + readbuffer += sock.recv(1024) + temp = readbuffer.split("\n") + readbuffer = temp.pop() + + for line in temp: + line = line.rstrip() + first = line.split() + if first[0] == "PING": + sock.send("PONG %s\r\n" % first[1]) + + def abortDownloads(self): + self.abort = True + + @property + def size(self): + return self.filesize + + @property + def arrived(self): + return self.recv + + @property + def percent(self): + if not self.filesize: return 0 + return (self.recv * 100) / self.filesize + + def close(self): + pass diff --git a/module/network/__init__.py b/pyload/network/__init__.py index 8b1378917..8b1378917 100644 --- a/module/network/__init__.py +++ b/pyload/network/__init__.py diff --git a/pyload/plugins/Account.py b/pyload/plugins/Account.py new file mode 100644 index 000000000..12ea494a0 --- /dev/null +++ b/pyload/plugins/Account.py @@ -0,0 +1,281 @@ +# -*- coding: utf-8 -*- + +from random import choice +from time import time +from traceback import print_exc +from threading import RLock + +from pyload.plugins.Plugin import Base +from pyload.utils import compare_time, parseFileSize, lock + + +class WrongPassword(Exception): + pass + + +class Account(Base): + """ + Base class for every Account plugin. + Just overwrite `login` and cookies will be stored and account becomes accessible in\ + associated hoster plugin. Plugin should also provide `loadAccountInfo` + """ + __name__ = "Account" + __type__ = "account" + __version__ = "0.3" + + __description__ = """Base account plugin""" + __author_name__ = "mkaay" + __author_mail__ = "mkaay@mkaay.de" + + #: after that time (in minutes) pyload will relogin the account + login_timeout = 10 * 60 + #: after that time (in minutes) account data will be reloaded + info_threshold = 10 * 60 + + + def __init__(self, manager, accounts): + Base.__init__(self, manager.core) + + self.manager = manager + self.accounts = {} + self.infos = {} # cache for account information + self.lock = RLock() + + self.timestamps = {} + self.setAccounts(accounts) + self.init() + + def init(self): + pass + + def login(self, user, data, req): + """login into account, the cookies will be saved so user can be recognized + + :param user: loginname + :param data: data dictionary + :param req: `Request` instance + """ + pass + + @lock + def _login(self, user, data): + # set timestamp for login + self.timestamps[user] = time() + + req = self.getAccountRequest(user) + try: + self.login(user, data, req) + except WrongPassword: + self.logWarning( + _("Could not login with account %(user)s | %(msg)s") % {"user": user + , "msg": _("Wrong Password")}) + success = data['valid'] = False + except Exception, e: + self.logWarning( + _("Could not login with account %(user)s | %(msg)s") % {"user": user + , "msg": e}) + success = data['valid'] = False + if self.core.debug: + print_exc() + else: + success = True + finally: + if req: + req.close() + return success + + def relogin(self, user): + req = self.getAccountRequest(user) + if req: + req.cj.clear() + req.close() + if user in self.infos: + del self.infos[user] #delete old information + + return self._login(user, self.accounts[user]) + + def setAccounts(self, accounts): + self.accounts = accounts + for user, data in self.accounts.iteritems(): + self._login(user, data) + self.infos[user] = {} + + def updateAccounts(self, user, password=None, options={}): + """ updates account and return true if anything changed """ + + if user in self.accounts: + self.accounts[user]['valid'] = True #do not remove or accounts will not login + if password: + self.accounts[user]['password'] = password + self.relogin(user) + return True + if options: + before = self.accounts[user]['options'] + self.accounts[user]['options'].update(options) + return self.accounts[user]['options'] != before + else: + self.accounts[user] = {"password": password, "options": options, "valid": True} + self._login(user, self.accounts[user]) + return True + + def removeAccount(self, user): + if user in self.accounts: + del self.accounts[user] + if user in self.infos: + del self.infos[user] + if user in self.timestamps: + del self.timestamps[user] + + @lock + def getAccountInfo(self, name, force=False): + """retrieve account infos for an user, do **not** overwrite this method!\\ + just use it to retrieve infos in hoster plugins. see `loadAccountInfo` + + :param name: username + :param force: reloads cached account information + :return: dictionary with information + """ + data = Account.loadAccountInfo(self, name) + + if force or name not in self.infos: + self.logDebug("Get Account Info for %s" % name) + req = self.getAccountRequest(name) + + try: + infos = self.loadAccountInfo(name, req) + if not type(infos) == dict: + raise Exception("Wrong return format") + except Exception, e: + infos = {"error": str(e)} + + if req: req.close() + + self.logDebug("Account Info: %s" % str(infos)) + + infos['timestamp'] = time() + self.infos[name] = infos + elif "timestamp" in self.infos[name] and self.infos[name][ + "timestamp"] + self.info_threshold * 60 < time(): + self.logDebug("Reached timeout for account data") + self.scheduleRefresh(name) + + data.update(self.infos[name]) + return data + + def isPremium(self, user): + info = self.getAccountInfo(user) + return info['premium'] + + def loadAccountInfo(self, name, req=None): + """this should be overwritten in account plugin,\ + and retrieving account information for user + + :param name: + :param req: `Request` instance + :return: + """ + return { + "validuntil": None, # -1 for unlimited + "login": name, + #"password": self.accounts[name]['password'], #@XXX: security + "options": self.accounts[name]['options'], + "valid": self.accounts[name]['valid'], + "trafficleft": None, # in kb, -1 for unlimited + "maxtraffic": None, + "premium": True, #useful for free accounts + "timestamp": 0, #time this info was retrieved + "type": self.__name__, + } + + def getAllAccounts(self, force=False): + return [self.getAccountInfo(user, force) for user, data in self.accounts.iteritems()] + + def getAccountRequest(self, user=None): + if not user: + user, data = self.selectAccount() + if not user: + return None + + req = self.core.requestFactory.getRequest(self.__name__, user) + return req + + def getAccountCookies(self, user=None): + if not user: + user, data = self.selectAccount() + if not user: + return None + + cj = self.core.requestFactory.getCookieJar(self.__name__, user) + return cj + + def getAccountData(self, user): + return self.accounts[user] + + def selectAccount(self): + """ returns an valid account name and data""" + usable = [] + for user, data in self.accounts.iteritems(): + if not data['valid']: continue + + if "time" in data['options'] and data['options']['time']: + time_data = "" + try: + time_data = data['options']['time'][0] + start, end = time_data.split("-") + if not compare_time(start.split(":"), end.split(":")): + continue + except: + self.logWarning(_("Your Time %s has wrong format, use: 1:22-3:44") % time_data) + + if user in self.infos: + if "validuntil" in self.infos[user]: + if self.infos[user]['validuntil'] > 0 and time() > self.infos[user]['validuntil']: + continue + if "trafficleft" in self.infos[user]: + if self.infos[user]['trafficleft'] == 0: + continue + + usable.append((user, data)) + + if not usable: return None, None + return choice(usable) + + def canUse(self): + return False if self.selectAccount() == (None, None) else True + + def parseTraffic(self, string): #returns kbyte + return parseFileSize(string) / 1024 + + def wrongPassword(self): + raise WrongPassword + + def empty(self, user): + if user in self.infos: + self.logWarning(_("Account %s has not enough traffic, checking again in 30min") % user) + + self.infos[user].update({"trafficleft": 0}) + self.scheduleRefresh(user, 30 * 60) + + def expired(self, user): + if user in self.infos: + self.logWarning(_("Account %s is expired, checking again in 1h") % user) + + self.infos[user].update({"validuntil": time() - 1}) + self.scheduleRefresh(user, 60 * 60) + + def scheduleRefresh(self, user, time=0, force=True): + """ add task to refresh account info to sheduler """ + self.logDebug("Scheduled Account refresh for %s in %s seconds." % (user, time)) + self.core.scheduler.addJob(time, self.getAccountInfo, [user, force]) + + @lock + def checkLogin(self, user): + """ checks if user is still logged in """ + if user in self.timestamps: + if self.login_timeout > 0 and self.timestamps[user] + self.login_timeout * 60 < time(): + self.logDebug("Reached login timeout for %s" % user) + return self.relogin(user) + else: + return True + else: + return False diff --git a/pyload/plugins/AccountManager.py b/pyload/plugins/AccountManager.py new file mode 100644 index 000000000..67909072f --- /dev/null +++ b/pyload/plugins/AccountManager.py @@ -0,0 +1,173 @@ +# -*- coding: utf-8 -*- + +from os.path import exists +from shutil import copy + +from threading import Lock + +from pyload.PullEvents import AccountUpdateEvent +from pyload.utils import chmod, lock + +ACC_VERSION = 1 + + +class AccountManager: + """manages all accounts""" + + #-------------------------------------------------------------------------- + def __init__(self, core): + """Constructor""" + + self.core = core + self.lock = Lock() + + self.initPlugins() + self.saveAccounts() # save to add categories to conf + + def initPlugins(self): + self.accounts = {} # key = ( plugin ) + self.plugins = {} + + self.initAccountPlugins() + self.loadAccounts() + + def getAccountPlugin(self, plugin): + """get account instance for plugin or None if anonymous""" + if plugin in self.accounts: + if plugin not in self.plugins: + try: + self.plugins[plugin] = self.core.pluginManager.loadClass("accounts", plugin)(self, self.accounts[plugin]) + except TypeError: # The account class no longer exists (blacklisted plugin). Skipping the account to avoid crash + return None + + return self.plugins[plugin] + else: + return None + + def getAccountPlugins(self): + """ get all account instances""" + + plugins = [] + for plugin in self.accounts.keys(): + plugins.append(self.getAccountPlugin(plugin)) + + return plugins + + #-------------------------------------------------------------------------- + def loadAccounts(self): + """loads all accounts available""" + + if not exists("accounts.conf"): + f = open("accounts.conf", "wb") + f.write("version: " + str(ACC_VERSION)) + f.close() + + f = open("accounts.conf", "rb") + content = f.readlines() + version = content[0].split(":")[1].strip() if content else "" + f.close() + + if not version or int(version) < ACC_VERSION: + copy("accounts.conf", "accounts.backup") + f = open("accounts.conf", "wb") + f.write("version: " + str(ACC_VERSION)) + f.close() + self.core.log.warning(_("Account settings deleted, due to new config format.")) + return + + plugin = "" + name = "" + + for line in content[1:]: + line = line.strip() + + if not line: continue + if line.startswith("#"): continue + if line.startswith("version"): continue + + if line.endswith(":") and line.count(":") == 1: + plugin = line[:-1] + self.accounts[plugin] = {} + + elif line.startswith("@"): + try: + option = line[1:].split() + self.accounts[plugin][name]['options'][option[0]] = [] if len(option) < 2 else ([option[1]] if len(option) < 3 else option[1:]) + except: + pass + + elif ":" in line: + name, sep, pw = line.partition(":") + self.accounts[plugin][name] = {"password": pw, "options": {}, "valid": True} + + #-------------------------------------------------------------------------- + def saveAccounts(self): + """save all account information""" + + f = open("accounts.conf", "wb") + f.write("version: " + str(ACC_VERSION) + "\n") + + for plugin, accounts in self.accounts.iteritems(): + f.write("\n") + f.write(plugin+":\n") + + for name,data in accounts.iteritems(): + f.write("\n\t%s:%s\n" % (name,data['password']) ) + if data['options']: + for option, values in data['options'].iteritems(): + f.write("\t@%s %s\n" % (option, " ".join(values))) + + f.close() + chmod(f.name, 0600) + + #-------------------------------------------------------------------------- + def initAccountPlugins(self): + """init names""" + for name in self.core.pluginManager.getAccountPlugins(): + self.accounts[name] = {} + + @lock + def updateAccount(self, plugin , user, password=None, options={}): + """add or update account""" + if plugin in self.accounts: + p = self.getAccountPlugin(plugin) + updated = p.updateAccounts(user, password, options) + #since accounts is a ref in plugin self.accounts doesnt need to be updated here + + self.saveAccounts() + if updated: p.scheduleRefresh(user, force=False) + + @lock + def removeAccount(self, plugin, user): + """remove account""" + + if plugin in self.accounts: + p = self.getAccountPlugin(plugin) + p.removeAccount(user) + + self.saveAccounts() + + @lock + def getAccountInfos(self, force=True, refresh=False): + data = {} + + if refresh: + self.core.scheduler.addJob(0, self.core.accountManager.getAccountInfos) + force = False + + for p in self.accounts.keys(): + if self.accounts[p]: + p = self.getAccountPlugin(p) + if p: + data[p.__name__] = p.getAllAccounts(force) + else: # When an account has been skipped, p is None + data[p] = [] + else: + data[p] = [] + e = AccountUpdateEvent() + self.core.pullManager.addEvent(e) + return data + + def sendChange(self): + e = AccountUpdateEvent() + self.core.pullManager.addEvent(e) diff --git a/pyload/plugins/Container.py b/pyload/plugins/Container.py new file mode 100644 index 000000000..747232c18 --- /dev/null +++ b/pyload/plugins/Container.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- + +import re + +from os import remove +from os.path import basename, exists + +from pyload.plugins.Crypter import Crypter +from pyload.utils import safe_join + + +class Container(Crypter): + __name__ = "Container" + __type__ = "container" + __version__ = "0.1" + + __pattern__ = None + + __description__ = """Base container decrypter plugin""" + __author_name__ = "mkaay" + __author_mail__ = "mkaay@mkaay.de" + + + def preprocessing(self, thread): + """prepare""" + + self.setup() + self.thread = thread + + self.loadToDisk() + + self.decrypt(self.pyfile) + self.deleteTmp() + + self.createPackages() + + + def loadToDisk(self): + """loads container to disk if its stored remotely and overwrite url, + or check existent on several places at disk""" + + if self.pyfile.url.startswith("http"): + self.pyfile.name = re.findall("([^\/=]+)", self.pyfile.url)[-1] + content = self.load(self.pyfile.url) + self.pyfile.url = safe_join(self.config['general']['download_folder'], self.pyfile.name) + f = open(self.pyfile.url, "wb" ) + f.write(content) + f.close() + + else: + self.pyfile.name = basename(self.pyfile.url) + if not exists(self.pyfile.url): + if exists(safe_join(pypath, self.pyfile.url)): + self.pyfile.url = safe_join(pypath, self.pyfile.url) + else: + self.fail(_("File not exists.")) + + + def deleteTmp(self): + if self.pyfile.name.startswith("tmp_"): + remove(self.pyfile.url) diff --git a/pyload/plugins/Crypter.py b/pyload/plugins/Crypter.py new file mode 100644 index 000000000..ed72c57c1 --- /dev/null +++ b/pyload/plugins/Crypter.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Plugin import Plugin + + +class Crypter(Plugin): + __name__ = "Crypter" + __type__ = "crypter" + __version__ = "0.1" + + __pattern__ = None + + __description__ = """Base decrypter plugin""" + __author_name__ = "mkaay" + __author_mail__ = "mkaay@mkaay.de" + + + def __init__(self, pyfile): + Plugin.__init__(self, pyfile) + + #: Put all packages here. It's a list of tuples like: ( name, [list of links], folder ) + self.packages = [] + + #: List of urls, pyLoad will generate packagenames + self.urls = [] + + self.multiDL = True + self.limitDL = 0 + + + def preprocessing(self, thread): + """prepare""" + self.setup() + self.thread = thread + + self.decrypt(self.pyfile) + + self.createPackages() + + + def decrypt(self, pyfile): + raise NotImplementedError + + def createPackages(self): + """ create new packages from self.packages """ + for pack in self.packages: + + name, links, folder = pack + + self.logDebug("Parsed package %(name)s with %(len)d links" % {"name": name, "len": len(links)}) + + links = [x.decode("utf-8") for x in links] + + pid = self.api.addPackage(name, links, self.pyfile.package().queue) + + if name != folder is not None: + self.api.setPackageData(pid, {"folder": folder}) #: Due to not break API addPackage method right now + self.logDebug("Set package %(name)s folder to %(folder)s" % {"name": name, "folder": folder}) + + if self.pyfile.package().password: + self.api.setPackageData(pid, {"password": self.pyfile.package().password}) + + if self.urls: + self.api.generateAndAddPackages(self.urls) diff --git a/pyload/plugins/Hook.py b/pyload/plugins/Hook.py new file mode 100644 index 000000000..b9ffbc647 --- /dev/null +++ b/pyload/plugins/Hook.py @@ -0,0 +1,149 @@ +# -*- coding: utf-8 -*- + +from traceback import print_exc + +from pyload.plugins.Plugin import Base + + +class Expose(object): + """ used for decoration to declare rpc services """ + + def __new__(cls, f, *args, **kwargs): + hookManager.addRPC(f.__module__, f.func_name, f.func_doc) + return f + + +def threaded(f): + + def run(*args,**kwargs): + hookManager.startThread(f, *args, **kwargs) + return run + + +class Hook(Base): + """ + Base class for hook plugins. + """ + __name__ = "Hook" + __type__ = "hook" + __version__ = "0.2" + + __config__ = [("name", "type", "desc", "default")] + + __description__ = """Interface for hook""" + __author_name__ = ("mkaay", "RaNaN") + __author_mail__ = ("mkaay@mkaay.de", "RaNaN@pyload.org") + + #: automatically register event listeners for functions, attribute will be deleted dont use it yourself + event_map = None + + # Alternative to event_map + #: List of events the plugin can handle, name the functions exactly like eventname. + event_list = None # dont make duplicate entries in event_map + + #: periodic call interval in secondc + interval = 60 + + + def __init__(self, core, manager): + Base.__init__(self, core) + + #: Provide information in dict here, usable by API `getInfo` + self.info = None + + #: Callback of periodical job task, used by hookmanager + self.cb = None + + #: `HookManager` + self.manager = manager + + #register events + if self.event_map: + for event, funcs in self.event_map.iteritems(): + if type(funcs) in (list, tuple): + for f in funcs: + self.manager.addEvent(event, getattr(self,f)) + else: + self.manager.addEvent(event, getattr(self,funcs)) + + #delete for various reasons + self.event_map = None + + if self.event_list: + for f in self.event_list: + self.manager.addEvent(f, getattr(self,f)) + + self.event_list = None + + self.setup() + self.initPeriodical() + + + def initPeriodical(self): + if self.interval >=1: + self.cb = self.core.scheduler.addJob(0, self._periodical, threaded=False) + + def _periodical(self): + try: + if self.isActivated(): self.periodical() + except Exception, e: + self.logError(_("Error executing hooks: %s") % str(e)) + if self.core.debug: + print_exc() + + self.cb = self.core.scheduler.addJob(self.interval, self._periodical, threaded=False) + + + def __repr__(self): + return "<Hook %s>" % self.__name__ + + def setup(self): + """ more init stuff if needed """ + pass + + def unload(self): + """ called when hook was deactivated """ + pass + + def isActivated(self): + """ checks if hook is activated""" + return self.config.getPlugin(self.__name__, "activated") + + + #event methods - overwrite these if needed + def coreReady(self): + pass + + def coreExiting(self): + pass + + def downloadPreparing(self, pyfile): + pass + + def downloadFinished(self, pyfile): + pass + + def downloadFailed(self, pyfile): + pass + + def packageFinished(self, pypack): + pass + + def beforeReconnecting(self, ip): + pass + + def afterReconnecting(self, ip): + pass + + def periodical(self): + pass + + def newCaptchaTask(self, task): + """ new captcha task for the plugin, it MUST set the handler and timeout or will be ignored """ + pass + + def captchaCorrect(self, task): + pass + + def captchaInvalid(self, task): + pass diff --git a/pyload/plugins/Hoster.py b/pyload/plugins/Hoster.py new file mode 100644 index 000000000..23369deec --- /dev/null +++ b/pyload/plugins/Hoster.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Plugin import Plugin + + +def getInfo(self): + #result = [ .. (name, size, status, url) .. ] + return + + +class Hoster(Plugin): + __name__ = "Hoster" + __type__ = "hoster" + __version__ = "0.1" + + __pattern__ = None + + __description__ = """Base hoster plugin""" + __author_name__ = "mkaay" + __author_mail__ = "mkaay@mkaay.de" diff --git a/module/plugins/OCR.py b/pyload/plugins/OCR.py index 0991184f3..0991184f3 100644 --- a/module/plugins/OCR.py +++ b/pyload/plugins/OCR.py diff --git a/pyload/plugins/Plugin.py b/pyload/plugins/Plugin.py new file mode 100644 index 000000000..31cbfca57 --- /dev/null +++ b/pyload/plugins/Plugin.py @@ -0,0 +1,629 @@ +# -*- coding: utf-8 -*- + +from time import time, sleep +from random import randint + +import os +from os import remove, makedirs, chmod, stat +from os.path import exists, join + +if os.name != "nt": + from os import chown + from pwd import getpwnam + from grp import getgrnam + +from itertools import islice + +from pyload.utils import safe_join, safe_filename, fs_encode, fs_decode + +def chunks(iterable, size): + it = iter(iterable) + item = list(islice(it, size)) + while item: + yield item + item = list(islice(it, size)) + + +class Abort(Exception): + """ raised when aborted """ + + +class Fail(Exception): + """ raised when failed """ + + +class Reconnect(Exception): + """ raised when reconnected """ + + +class Retry(Exception): + """ raised when start again from beginning """ + + +class SkipDownload(Exception): + """ raised when download should be skipped """ + + +class Base(object): + """ + A Base class with log/config/db methods *all* plugin types can use + """ + + def __init__(self, core): + #: Core instance + self.core = core + #: logging instance + self.log = core.log + #: core config + self.config = core.config + + #log functions + def logInfo(self, *args): + self.log.info("%s: %s" % (self.__name__, " | ".join([a if isinstance(a, basestring) else str(a) for a in args]))) + + def logWarning(self, *args): + self.log.warning("%s: %s" % (self.__name__, " | ".join([a if isinstance(a, basestring) else str(a) for a in args]))) + + def logError(self, *args): + self.log.error("%s: %s" % (self.__name__, " | ".join([a if isinstance(a, basestring) else str(a) for a in args]))) + + def logDebug(self, *args): + self.log.debug("%s: %s" % (self.__name__, " | ".join([a if isinstance(a, basestring) else str(a) for a in args]))) + + + def setConf(self, option, value): + """ see `setConfig` """ + self.config.setPlugin(self.__name__, option, value) + + def setConfig(self, option, value): + """ Set config value for current plugin + + :param option: + :param value: + :return: + """ + self.setConf(option, value) + + #: Deprecated method + def getConf(self, option): + """ see `getConfig` """ + return self.getConfig(option) + + def getConfig(self, option): + """ Returns config value for current plugin + + :param option: + :return: + """ + return self.config.getPlugin(self.__name__, option) + + def setStorage(self, key, value): + """ Saves a value persistently to the database """ + self.core.db.setStorage(self.__name__, key, value) + + def store(self, key, value): + """ same as `setStorage` """ + self.core.db.setStorage(self.__name__, key, value) + + def getStorage(self, key=None, default=None): + """ Retrieves saved value or dict of all saved entries if key is None """ + if key is not None: + return self.core.db.getStorage(self.__name__, key) or default + return self.core.db.getStorage(self.__name__, key) + + def retrieve(self, *args, **kwargs): + """ same as `getStorage` """ + return self.getStorage(*args, **kwargs) + + def delStorage(self, key): + """ Delete entry in db """ + self.core.db.delStorage(self.__name__, key) + + +class Plugin(Base): + """ + Base plugin for hoster/crypter. + Overwrite `process` / `decrypt` in your subclassed plugin. + """ + __name__ = "Plugin" + __type__ = "hoster" + __version__ = "0.5" + + __pattern__ = None + __config__ = [("name", "type", "desc", "default")] + + __description__ = """Base plugin""" + __author_name__ = ("RaNaN", "spoob", "mkaay") + __author_mail__ = ("RaNaN@pyload.org", "spoob@pyload.org", "mkaay@mkaay.de") + + + def __init__(self, pyfile): + Base.__init__(self, pyfile.m.core) + + #: engage wan reconnection + self.wantReconnect = False + + #: enable simultaneous processing of multiple downloads + self.multiDL = True + self.limitDL = 0 + + #: chunk limit + self.chunkLimit = 1 + self.resumeDownload = False + + #: time() + wait in seconds + self.waitUntil = 0 + self.waiting = False + + #: captcha reader instance + self.ocr = None + + #: account handler instance, see :py:class:`Account` + self.account = pyfile.m.core.accountManager.getAccountPlugin(self.__name__) + + #: premium status + self.premium = False + #: username/login + self.user = None + + if self.account and not self.account.canUse(): + self.account = None + + if self.account: + self.user, data = self.account.selectAccount() + #: Browser instance, see `network.Browser` + self.req = self.account.getAccountRequest(self.user) + self.chunkLimit = -1 # chunk limit, -1 for unlimited + #: enables resume (will be ignored if server dont accept chunks) + self.resumeDownload = True + self.multiDL = True #every hoster with account should provide multiple downloads + #: premium status + self.premium = self.account.isPremium(self.user) + else: + self.req = pyfile.m.core.requestFactory.getRequest(self.__name__) + + #: associated pyfile instance, see `PyFile` + self.pyfile = pyfile + + self.thread = None # holds thread in future + + #: location where the last call to download was saved + self.lastDownload = "" + #: re match of the last call to `checkDownload` + self.lastCheck = None + + #: js engine, see `JsEngine` + self.js = self.core.js + + #: captcha task + self.cTask = None + + #: amount of retries already made + self.retries = 0 + + #: some plugins store html code here + self.html = None + + #: quick caller for API + self.api = self.core.api + + self.init() + + def getChunkCount(self): + if self.chunkLimit <= 0: + return self.config['download']['chunks'] + return min(self.config['download']['chunks'], self.chunkLimit) + + def __call__(self): + return self.__name__ + + def init(self): + """initialize the plugin (in addition to `__init__`)""" + pass + + def setup(self): + """ setup for enviroment and other things, called before downloading (possibly more than one time)""" + pass + + def preprocessing(self, thread): + """ handles important things to do before starting """ + self.thread = thread + + if self.account: + self.account.checkLogin(self.user) + else: + self.req.clearCookies() + + self.setup() + + self.pyfile.setStatus("starting") + + return self.process(self.pyfile) + + + def process(self, pyfile): + """the 'main' method of every plugin, you **have to** overwrite it""" + raise NotImplementedError + + def resetAccount(self): + """ dont use account and retry download """ + self.account = None + self.req = self.core.requestFactory.getRequest(self.__name__) + self.retry() + + def checksum(self, local_file=None): + """ + return codes: + 0 - checksum ok + 1 - checksum wrong + 5 - can't get checksum + 10 - not implemented + 20 - unknown error + """ + #@TODO checksum check hook + + return True, 10 + + + def setWait(self, seconds, reconnect=None): + """Set a specific wait time later used with `wait` + + :param seconds: wait time in seconds + :param reconnect: True if a reconnect would avoid wait time + """ + if reconnect: + self.wantReconnect = True + self.pyfile.waitUntil = time() + int(seconds) + + def wait(self, seconds=None, reconnect=None): + """ Waits the time previously set or use these from arguments. See `setWait` + """ + if seconds: + self.setWait(seconds, reconnect) + + self._wait() + + def _wait(self): + self.waiting = True + self.pyfile.setStatus("waiting") + + while self.pyfile.waitUntil > time(): + self.thread.m.reconnecting.wait(2) + + if self.pyfile.abort: + raise Abort + if self.thread.m.reconnecting.isSet(): + self.waiting = False + self.wantReconnect = False + raise Reconnect + + self.waiting = False + self.pyfile.setStatus("starting") + + def fail(self, reason): + """ fail and give reason """ + raise Fail(reason) + + def offline(self): + """ fail and indicate file is offline """ + raise Fail("offline") + + def tempOffline(self): + """ fail and indicates file ist temporary offline, the core may take consequences """ + raise Fail("temp. offline") + + def retry(self, max_tries=3, wait_time=1, reason=""): + """Retries and begin again from the beginning + + :param max_tries: number of maximum retries + :param wait_time: time to wait in seconds + :param reason: reason for retrying, will be passed to fail if max_tries reached + """ + if 0 < max_tries <= self.retries: + if not reason: reason = "Max retries reached" + raise Fail(reason) + + self.wantReconnect = False + self.setWait(wait_time) + self.wait() + + self.retries += 1 + raise Retry(reason) + + def invalidCaptcha(self): + if self.cTask: + self.cTask.invalid() + + def correctCaptcha(self): + if self.cTask: + self.cTask.correct() + + def decryptCaptcha(self, url, get={}, post={}, cookies=False, forceUser=False, imgtype='jpg', + result_type='textual'): + """ Loads a captcha and decrypts it with ocr, plugin, user input + + :param url: url of captcha image + :param get: get part for request + :param post: post part for request + :param cookies: True if cookies should be enabled + :param forceUser: if True, ocr is not used + :param imgtype: Type of the Image + :param result_type: 'textual' if text is written on the captcha\ + or 'positional' for captcha where the user have to click\ + on a specific region on the captcha + + :return: result of decrypting + """ + + img = self.load(url, get=get, post=post, cookies=cookies) + + id = ("%.2f" % time())[-6:].replace(".", "") + temp_file = open(join("tmp", "tmpCaptcha_%s_%s.%s" % (self.__name__, id, imgtype)), "wb") + temp_file.write(img) + temp_file.close() + + has_plugin = self.__name__ in self.core.pluginManager.captchaPlugins + + if self.core.captcha: + Ocr = self.core.pluginManager.loadClass("captcha", self.__name__) + else: + Ocr = None + + if Ocr and not forceUser: + sleep(randint(3000, 5000) / 1000.0) + if self.pyfile.abort: raise Abort + + ocr = Ocr() + result = ocr.get_captcha(temp_file.name) + else: + captchaManager = self.core.captchaManager + task = captchaManager.newTask(img, imgtype, temp_file.name, result_type) + self.cTask = task + captchaManager.handleCaptcha(task) + + while task.isWaiting(): + if self.pyfile.abort: + captchaManager.removeTask(task) + raise Abort + sleep(1) + + captchaManager.removeTask(task) + + if task.error and has_plugin: #ignore default error message since the user could use OCR + self.fail(_("Pil and tesseract not installed and no Client connected for captcha decrypting")) + elif task.error: + self.fail(task.error) + elif not task.result: + self.fail(_("No captcha result obtained in appropiate time by any of the plugins.")) + + result = task.result + self.logDebug("Received captcha result: %s" % str(result)) + + if not self.core.debug: + try: + remove(temp_file.name) + except: + pass + + return result + + + def load(self, url, get={}, post={}, ref=True, cookies=True, just_header=False, decode=False): + """Load content at url and returns it + + :param url: + :param get: + :param post: + :param ref: + :param cookies: + :param just_header: if True only the header will be retrieved and returned as dict + :param decode: Wether to decode the output according to http header, should be True in most cases + :return: Loaded content + """ + if self.pyfile.abort: raise Abort + #utf8 vs decode -> please use decode attribute in all future plugins + if type(url) == unicode: url = str(url) + + res = self.req.load(url, get, post, ref, cookies, just_header, decode=decode) + + if self.core.debug: + from inspect import currentframe + + frame = currentframe() + if not exists(join("tmp", self.__name__)): + makedirs(join("tmp", self.__name__)) + + f = open( + join("tmp", self.__name__, "%s_line%s.dump.html" % (frame.f_back.f_code.co_name, frame.f_back.f_lineno)) + , "wb") + del frame # delete the frame or it wont be cleaned + + try: + tmp = res.encode("utf8") + except: + tmp = res + + f.write(tmp) + f.close() + + if just_header: + #parse header + header = {"code": self.req.code} + for line in res.splitlines(): + line = line.strip() + if not line or ":" not in line: continue + + key, none, value = line.partition(":") + key = key.lower().strip() + value = value.strip() + + if key in header: + if type(header[key]) == list: + header[key].append(value) + else: + header[key] = [header[key], value] + else: + header[key] = value + res = header + + return res + + def download(self, url, get={}, post={}, ref=True, cookies=True, disposition=False): + """Downloads the content at url to download folder + + :param url: + :param get: + :param post: + :param ref: + :param cookies: + :param disposition: if True and server provides content-disposition header\ + the filename will be changed if needed + :return: The location where the file was saved + """ + + self.checkForSameFiles() + + self.pyfile.setStatus("downloading") + + download_folder = self.config['general']['download_folder'] + + location = safe_join(download_folder, self.pyfile.package().folder) + + if not exists(location): + makedirs(location, int(self.config['permission']['folder'], 8)) + + if self.config['permission']['change_dl'] and os.name != "nt": + try: + uid = getpwnam(self.config['permission']['user'])[2] + gid = getgrnam(self.config['permission']['group'])[2] + + chown(location, uid, gid) + except Exception, e: + self.logWarning(_("Setting User and Group failed: %s") % str(e)) + + # convert back to unicode + location = fs_decode(location) + name = safe_filename(self.pyfile.name) + + filename = join(location, name) + + self.core.hookManager.dispatchEvent("downloadStarts", self.pyfile, url, filename) + + try: + newname = self.req.httpDownload(url, filename, get=get, post=post, ref=ref, cookies=cookies, + chunks=self.getChunkCount(), resume=self.resumeDownload, + progressNotify=self.pyfile.setProgress, disposition=disposition) + finally: + self.pyfile.size = self.req.size + + if disposition and newname and newname != name: #triple check, just to be sure + self.logInfo("%(name)s saved as %(newname)s" % {"name": name, "newname": newname}) + self.pyfile.name = newname + filename = join(location, newname) + + fs_filename = fs_encode(filename) + + if self.config['permission']['change_file']: + chmod(fs_filename, int(self.config['permission']['file'], 8)) + + if self.config['permission']['change_dl'] and os.name != "nt": + try: + uid = getpwnam(self.config['permission']['user'])[2] + gid = getgrnam(self.config['permission']['group'])[2] + + chown(fs_filename, uid, gid) + except Exception, e: + self.logWarning(_("Setting User and Group failed: %s") % str(e)) + + self.lastDownload = filename + return self.lastDownload + + def checkDownload(self, rules, api_size=0, max_size=50000, delete=True, read_size=0): + """ checks the content of the last downloaded file, re match is saved to `lastCheck` + + :param rules: dict with names and rules to match (compiled regexp or strings) + :param api_size: expected file size + :param max_size: if the file is larger then it wont be checked + :param delete: delete if matched + :param read_size: amount of bytes to read from files larger then max_size + :return: dictionary key of the first rule that matched + """ + lastDownload = fs_encode(self.lastDownload) + if not exists(lastDownload): return None + + size = stat(lastDownload) + size = size.st_size + + if api_size and api_size <= size: return None + elif size > max_size and not read_size: return None + self.logDebug("Download Check triggered") + f = open(lastDownload, "rb") + content = f.read(read_size if read_size else -1) + f.close() + #produces encoding errors, better log to other file in the future? + #self.logDebug("Content: %s" % content) + for name, rule in rules.iteritems(): + if type(rule) in (str, unicode): + if rule in content: + if delete: + remove(lastDownload) + return name + elif hasattr(rule, "search"): + m = rule.search(content) + if m: + if delete: + remove(lastDownload) + self.lastCheck = m + return name + + + def getPassword(self): + """ get the password the user provided in the package""" + password = self.pyfile.package().password + if not password: return "" + return password + + + def checkForSameFiles(self, starting=False): + """ checks if same file was/is downloaded within same package + + :param starting: indicates that the current download is going to start + :raises SkipDownload: + """ + + pack = self.pyfile.package() + + for pyfile in self.core.files.cache.values(): + if pyfile != self.pyfile and pyfile.name == self.pyfile.name and pyfile.package().folder == pack.folder: + if pyfile.status in (0, 12): #finished or downloading + raise SkipDownload(pyfile.pluginname) + elif pyfile.status in ( + 5, 7) and starting: #a download is waiting/starting and was appenrently started before + raise SkipDownload(pyfile.pluginname) + + download_folder = self.config['general']['download_folder'] + location = safe_join(download_folder, pack.folder, self.pyfile.name) + + if starting and self.config['download']['skip_existing'] and exists(location): + size = os.stat(location).st_size + if size >= self.pyfile.size: + raise SkipDownload("File exists.") + + pyfile = self.core.db.findDuplicates(self.pyfile.id, self.pyfile.package().folder, self.pyfile.name) + if pyfile: + if exists(location): + raise SkipDownload(pyfile[0]) + + self.logDebug("File %s not skipped, because it does not exists." % self.pyfile.name) + + def clean(self): + """ clean everything and remove references """ + if hasattr(self, "pyfile"): + del self.pyfile + if hasattr(self, "req"): + self.req.close() + del self.req + if hasattr(self, "thread"): + del self.thread + if hasattr(self, "html"): + del self.html diff --git a/pyload/plugins/PluginManager.py b/pyload/plugins/PluginManager.py new file mode 100644 index 000000000..1edc0f819 --- /dev/null +++ b/pyload/plugins/PluginManager.py @@ -0,0 +1,356 @@ +# -*- coding: utf-8 -*- + +import re +import sys + +from itertools import chain +from os import listdir, makedirs +from os.path import isfile, join, exists, abspath +from sys import version_info +from traceback import print_exc + +from pyload.lib.SafeEval import const_eval as literal_eval + +from pyload.ConfigParser import IGNORE + + +class PluginManager: + ROOT = "pyload.plugins." + USERROOT = "userplugins." + TYPES = ("accounts", "container", "crypter", "hooks", "hoster", "internal", "ocr") + + PATTERN = re.compile(r'__pattern__.*=.*r("|\')([^"\']+)') + VERSION = re.compile(r'__version__.*=.*("|\')([0-9.]+)') + CONFIG = re.compile(r'__config__.*=.*\[([^\]]+)', re.MULTILINE) + DESC = re.compile(r'__description__.?=.?("|"""|\')([^"\']+)') + + + def __init__(self, core): + self.core = core + + self.config = core.config + self.log = core.log + + self.plugins = {} + self.createIndex() + + #register for import hook + sys.meta_path.append(self) + + + def createIndex(self): + """create information for all plugins available""" + + sys.path.append(abspath("")) + + if not exists("userplugins"): + makedirs("userplugins") + if not exists(join("userplugins", "__init__.py")): + f = open(join("userplugins", "__init__.py"), "wb") + f.close() + + self.plugins['crypter'] = self.crypterPlugins = self.parse("crypter", pattern=True) + self.plugins['container'] = self.containerPlugins = self.parse("container", pattern=True) + self.plugins['hoster'] = self.hosterPlugins = self.parse("hoster", pattern=True) + + self.plugins['ocr'] = self.captchaPlugins = self.parse("ocr") + self.plugins['accounts'] = self.accountPlugins = self.parse("accounts") + self.plugins['hooks'] = self.hookPlugins = self.parse("hooks") + self.plugins['internal'] = self.internalPlugins = self.parse("internal") + + self.log.debug("created index of plugins") + + def parse(self, folder, pattern=False, home={}): + """ + returns dict with information + home contains parsed plugins from pyload. + + { + name : {path, version, config, (pattern, re), (plugin, class)} + } + + """ + plugins = {} + if home: + pfolder = join("userplugins", folder) + if not exists(pfolder): + makedirs(pfolder) + if not exists(join(pfolder, "__init__.py")): + f = open(join(pfolder, "__init__.py"), "wb") + f.close() + + else: + pfolder = join(pypath, "pyload", "plugins", folder) + + for f in listdir(pfolder): + if (isfile(join(pfolder, f)) and f.endswith(".py") or f.endswith("_25.pyc") or f.endswith( + "_26.pyc") or f.endswith("_27.pyc")) and not f.startswith("_"): + data = open(join(pfolder, f)) + content = data.read() + data.close() + + if f.endswith("_25.pyc") and version_info[0:2] != (2, 5): + continue + elif f.endswith("_26.pyc") and version_info[0:2] != (2, 6): + continue + elif f.endswith("_27.pyc") and version_info[0:2] != (2, 7): + continue + + name = f[:-3] + if name[-1] == ".": name = name[:-4] + + version = self.VERSION.findall(content) + if version: + version = float(version[0][1]) + else: + version = 0 + + # home contains plugins from pyload root + if home and name in home: + if home[name]['v'] >= version: + continue + + if name in IGNORE or (folder, name) in IGNORE: + continue + + plugins[name] = {} + plugins[name]['v'] = version + + module = f.replace(".pyc", "").replace(".py", "") + + # the plugin is loaded from user directory + plugins[name]['user'] = True if home else False + plugins[name]['name'] = module + + if pattern: + pattern = self.PATTERN.findall(content) + + if pattern: + pattern = pattern[0][1] + else: + pattern = "^unmachtable$" + + plugins[name]['pattern'] = pattern + + try: + plugins[name]['re'] = re.compile(pattern) + except: + self.log.error(_("%s has a invalid pattern.") % name) + + + # internals have no config + if folder == "internal": + self.config.deleteConfig(name) + continue + + config = self.CONFIG.findall(content) + if config: + config = literal_eval(config[0].strip().replace("\n", "").replace("\r", "")) + desc = self.DESC.findall(content) + desc = desc[0][1] if desc else "" + + if type(config[0]) == tuple: + config = [list(x) for x in config] + else: + config = [list(config)] + + if folder == "hooks": + append = True + for item in config: + if item[0] == "activated": append = False + + # activated flag missing + if append: config.append(["activated", "bool", "Activated", False]) + + try: + self.config.addPluginConfig(name, config, desc) + except: + self.log.error("Invalid config in %s: %s" % (name, config)) + + elif folder == "hooks": #force config creation + desc = self.DESC.findall(content) + desc = desc[0][1] if desc else "" + config = (["activated", "bool", "Activated", False],) + + try: + self.config.addPluginConfig(name, config, desc) + except: + self.log.error("Invalid config in %s: %s" % (name, config)) + + if not home: + temp = self.parse(folder, pattern, plugins) + plugins.update(temp) + + return plugins + + + def parseUrls(self, urls): + """parse plugins for given list of urls""" + + last = None + res = [] # tupels of (url, plugin) + + for url in urls: + if type(url) not in (str, unicode, buffer): continue + found = False + + if last and last[1]['re'].match(url): + res.append((url, last[0])) + continue + + for name, value in chain(self.crypterPlugins.iteritems(), self.hosterPlugins.iteritems(), + self.containerPlugins.iteritems()): + if value['re'].match(url): + res.append((url, name)) + last = (name, value) + found = True + break + + if not found: + res.append((url, "BasePlugin")) + + return res + + def findPlugin(self, name, pluginlist=("hoster", "crypter", "container")): + for ptype in pluginlist: + if name in self.plugins[ptype]: + return self.plugins[ptype][name], ptype + return None, None + + def getPlugin(self, name, original=False): + """return plugin module from hoster|decrypter|container""" + plugin, type = self.findPlugin(name) + + if not plugin: + self.log.warning("Plugin %s not found." % name) + plugin = self.hosterPlugins['BasePlugin'] + + if "new_module" in plugin and not original: + return plugin['new_module'] + + return self.loadModule(type, name) + + def getPluginName(self, name): + """ used to obtain new name if other plugin was injected""" + plugin, type = self.findPlugin(name) + + if "new_name" in plugin: + return plugin['new_name'] + + return name + + def loadModule(self, type, name): + """ Returns loaded module for plugin + + :param type: plugin type, subfolder of pyload.plugins + :param name: + """ + plugins = self.plugins[type] + if name in plugins: + if "module" in plugins[name]: return plugins[name]['module'] + try: + module = __import__(self.ROOT + "%s.%s" % (type, plugins[name]['name']), globals(), locals(), + plugins[name]['name']) + plugins[name]['module'] = module #cache import, maybe unneeded + return module + except Exception, e: + self.log.error(_("Error importing %(name)s: %(msg)s") % {"name": name, "msg": str(e)}) + if self.core.debug: + print_exc() + + def loadClass(self, type, name): + """Returns the class of a plugin with the same name""" + module = self.loadModule(type, name) + if module: return getattr(module, name) + + def getAccountPlugins(self): + """return list of account plugin names""" + return self.accountPlugins.keys() + + def find_module(self, fullname, path=None): + #redirecting imports if necesarry + if fullname.startswith(self.ROOT) or fullname.startswith(self.USERROOT): #seperate pyload plugins + if fullname.startswith(self.USERROOT): user = 1 + else: user = 0 #used as bool and int + + split = fullname.split(".") + if len(split) != 4 - user: return + type, name = split[2 - user:4 - user] + + if type in self.plugins and name in self.plugins[type]: + #userplugin is a newer version + if not user and self.plugins[type][name]['user']: + return self + #imported from userdir, but pyloads is newer + if user and not self.plugins[type][name]['user']: + return self + + + def load_module(self, name, replace=True): + if name not in sys.modules: #could be already in modules + if replace: + if self.ROOT in name: + newname = name.replace(self.ROOT, self.USERROOT) + else: + newname = name.replace(self.USERROOT, self.ROOT) + else: newname = name + + base, plugin = newname.rsplit(".", 1) + + self.log.debug("Redirected import %s -> %s" % (name, newname)) + + module = __import__(newname, globals(), locals(), [plugin]) + #inject under new an old name + sys.modules[name] = module + sys.modules[newname] = module + + return sys.modules[name] + + + def reloadPlugins(self, type_plugins): + """ reload and reindex plugins """ + if not type_plugins: + return None + + self.log.debug("Request reload of plugins: %s" % type_plugins) + + reloaded = [] + + as_dict = {} + for t,n in type_plugins: + if t in ("hooks", "internal"): #: do not reload hooks or internals, because would cause to much side effects + continue + elif t in as_dict: + as_dict[t].append(n) + else: + as_dict[t] = [n] + + for type in as_dict.iterkeys(): + for plugin in as_dict[type]: + if plugin in self.plugins[type] and "module" in self.plugins[type][plugin]: + self.log.debug("Reloading %s" % plugin) + id = (type, plugin) + try: + reload(self.plugins[type][plugin]['module']) + except Exception, e: + self.log.error("Error when reloading %s" % id, str(e)) + continue + else: + reloaded.append(id) + + #index creation + self.plugins['crypter'] = self.crypterPlugins = self.parse("crypter", pattern=True) + self.plugins['container'] = self.containerPlugins = self.parse("container", pattern=True) + self.plugins['hoster'] = self.hosterPlugins = self.parse("hoster", pattern=True) + self.plugins['ocr'] = self.captchaPlugins = self.parse("ocr") + self.plugins['accounts'] = self.accountPlugins = self.parse("accounts") + + if "accounts" in as_dict: #: accounts needs to be reloaded + self.core.accountManager.initPlugins() + self.core.scheduler.addJob(0, self.core.accountManager.getAccountInfos) + + return reloaded #: return a list of the plugins successfully reloaded + + def reloadPlugin(self, type_plugin): + """ reload and reindex ONE plugin """ + return True if self.reloadPlugins(type_plugin) else False diff --git a/module/plugins/README.md b/pyload/plugins/README.md index fa2a4c5b2..fa2a4c5b2 100644 --- a/module/plugins/README.md +++ b/pyload/plugins/README.md diff --git a/module/plugins/__init__.py b/pyload/plugins/__init__.py index e69de29bb..e69de29bb 100644 --- a/module/plugins/__init__.py +++ b/pyload/plugins/__init__.py diff --git a/pyload/plugins/accounts/AlldebridCom.py b/pyload/plugins/accounts/AlldebridCom.py new file mode 100644 index 000000000..928e81fe5 --- /dev/null +++ b/pyload/plugins/accounts/AlldebridCom.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- + +import re +import xml.dom.minidom as dom + +from time import time +from urllib import urlencode + +from BeautifulSoup import BeautifulSoup + +from pyload.plugins.Account import Account + + +class AlldebridCom(Account): + __name__ = "AlldebridCom" + __type__ = "account" + __version__ = "0.22" + + __description__ = """AllDebrid.com account plugin""" + __author_name__ = "Andy Voigt" + __author_mail__ = "spamsales@online.de" + + + def loadAccountInfo(self, user, req): + data = self.getAccountData(user) + page = req.load("http://www.alldebrid.com/account/") + soup = BeautifulSoup(page) + #Try to parse expiration date directly from the control panel page (better accuracy) + try: + time_text = soup.find('div', attrs={'class': 'remaining_time_text'}).strong.string + self.logDebug("Account expires in: %s" % time_text) + p = re.compile('\d+') + exp_data = p.findall(time_text) + exp_time = time() + int(exp_data[0]) * 24 * 60 * 60 + int( + exp_data[1]) * 60 * 60 + (int(exp_data[2]) - 1) * 60 + #Get expiration date from API + except: + data = self.getAccountData(user) + page = req.load("http://www.alldebrid.com/api.php?action=info_user&login=%s&pw=%s" % (user, + data['password'])) + self.logDebug(page) + xml = dom.parseString(page) + exp_time = time() + int(xml.getElementsByTagName("date")[0].childNodes[0].nodeValue) * 24 * 60 * 60 + account_info = {"validuntil": exp_time, "trafficleft": -1} + return account_info + + def login(self, user, data, req): + urlparams = urlencode({'action': 'login', 'login_login': user, 'login_password': data['password']}) + page = req.load("http://www.alldebrid.com/register/?%s" % urlparams) + + if "This login doesn't exist" in page: + self.wrongPassword() + + if "The password is not valid" in page: + self.wrongPassword() + + if "Invalid captcha" in page: + self.wrongPassword() diff --git a/pyload/plugins/accounts/BayfilesCom.py b/pyload/plugins/accounts/BayfilesCom.py new file mode 100644 index 000000000..a42ac6457 --- /dev/null +++ b/pyload/plugins/accounts/BayfilesCom.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- + +from time import time + +from pyload.plugins.Account import Account +from pyload.common.json_layer import json_loads + + +class BayfilesCom(Account): + __name__ = "BayfilesCom" + __type__ = "account" + __version__ = "0.03" + + __description__ = """Bayfiles.com account plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + + def loadAccountInfo(self, user, req): + for _ in xrange(2): + response = json_loads(req.load("http://api.bayfiles.com/v1/account/info")) + self.logDebug(response) + if not response['error']: + break + self.logWarning(response['error']) + self.relogin(user) + + return {"premium": bool(response['premium']), "trafficleft": -1, + "validuntil": response['expires'] if response['expires'] >= int(time()) else -1} + + def login(self, user, data, req): + response = json_loads(req.load("http://api.bayfiles.com/v1/account/login/%s/%s" % (user, data['password']))) + self.logDebug(response) + if response['error']: + self.logError(response['error']) + self.wrongPassword() diff --git a/pyload/plugins/accounts/BitshareCom.py b/pyload/plugins/accounts/BitshareCom.py new file mode 100644 index 000000000..7a982aea5 --- /dev/null +++ b/pyload/plugins/accounts/BitshareCom.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Account import Account + + +class BitshareCom(Account): + __name__ = "BitshareCom" + __type__ = "account" + __version__ = "0.12" + + __description__ = """Bitshare account plugin""" + __author_name__ = "Paul King" + __author_mail__ = None + + + def loadAccountInfo(self, user, req): + page = req.load("http://bitshare.com/mysettings.html") + + if "\"http://bitshare.com/myupgrade.html\">Free" in page: + return {"validuntil": -1, "trafficleft": -1, "premium": False} + + if not '<input type="checkbox" name="directdownload" checked="checked" />' in page: + self.logWarning(_("Activate direct Download in your Bitshare Account")) + + return {"validuntil": -1, "trafficleft": -1, "premium": True} + + def login(self, user, data, req): + page = req.load("http://bitshare.com/login.html", + post={"user": user, "password": data['password'], "submit": "Login"}, cookies=True) + if "login" in req.lastEffectiveURL: + self.wrongPassword() diff --git a/pyload/plugins/accounts/CramitIn.py b/pyload/plugins/accounts/CramitIn.py new file mode 100644 index 000000000..5bf7a3141 --- /dev/null +++ b/pyload/plugins/accounts/CramitIn.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.XFSPAccount import XFSPAccount + + +class CramitIn(XFSPAccount): + __name__ = "CramitIn" + __type__ = "account" + __version__ = "0.01" + + __description__ = """Cramit.in account plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + MAIN_PAGE = "http://cramit.in/" diff --git a/pyload/plugins/accounts/CyberlockerCh.py b/pyload/plugins/accounts/CyberlockerCh.py new file mode 100644 index 000000000..94cc0d8c4 --- /dev/null +++ b/pyload/plugins/accounts/CyberlockerCh.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.XFSPAccount import XFSPAccount +from pyload.plugins.internal.SimpleHoster import parseHtmlForm + + +class CyberlockerCh(XFSPAccount): + __name__ = "CyberlockerCh" + __type__ = "account" + __version__ = "0.01" + + __description__ = """Cyberlocker.ch account plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + MAIN_PAGE = "http://cyberlocker.ch/" + + + def login(self, user, data, req): + html = req.load(self.MAIN_PAGE + 'login.html', decode=True) + + action, inputs = parseHtmlForm('name="FL"', html) + if not inputs: + inputs = {"op": "login", + "redirect": self.MAIN_PAGE} + + inputs.update({"login": user, + "password": data['password']}) + + # Without this a 403 Forbidden is returned + req.http.lastURL = self.MAIN_PAGE + 'login.html' + html = req.load(self.MAIN_PAGE, post=inputs, decode=True) + + if 'Incorrect Login or Password' in html or '>Error<' in html: + self.wrongPassword() diff --git a/pyload/plugins/accounts/CzshareCom.py b/pyload/plugins/accounts/CzshareCom.py new file mode 100644 index 000000000..584b9a3a2 --- /dev/null +++ b/pyload/plugins/accounts/CzshareCom.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- + +from time import mktime, strptime +import re + +from pyload.plugins.Account import Account + + +class CzshareCom(Account): + __name__ = "CzshareCom" + __type__ = "account" + __version__ = "0.14" + + __description__ = """Czshare.com account plugin, now Sdilej.cz""" + __author_name__ = ("zoidberg", "stickell") + __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") + + CREDIT_LEFT_PATTERN = r'<tr class="active">\s*<td>([0-9 ,]+) (KiB|MiB|GiB)</td>\s*<td>([^<]*)</td>\s*</tr>' + + + def loadAccountInfo(self, user, req): + html = req.load("http://sdilej.cz/prehled_kreditu/") + + m = re.search(self.CREDIT_LEFT_PATTERN, html) + if m is None: + return {"validuntil": 0, "trafficleft": 0} + else: + credits = float(m.group(1).replace(' ', '').replace(',', '.')) + credits = credits * 1024 ** {'KiB': 0, 'MiB': 1, 'GiB': 2}[m.group(2)] + validuntil = mktime(strptime(m.group(3), '%d.%m.%y %H:%M')) + return {"validuntil": validuntil, "trafficleft": credits} + + def login(self, user, data, req): + html = req.load('https://sdilej.cz/index.php', post={ + "Prihlasit": "Prihlasit", + "login-password": data['password'], + "login-name": user + }) + + if '<div class="login' in html: + self.wrongPassword() diff --git a/pyload/plugins/accounts/DebridItaliaCom.py b/pyload/plugins/accounts/DebridItaliaCom.py new file mode 100644 index 000000000..cff0be018 --- /dev/null +++ b/pyload/plugins/accounts/DebridItaliaCom.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- + +import re +import time + +from pyload.plugins.Account import Account + + +class DebridItaliaCom(Account): + __name__ = "DebridItaliaCom" + __type__ = "account" + __version__ = "0.1" + + __description__ = """Debriditalia.com account plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + WALID_UNTIL_PATTERN = r"Premium valid till: (?P<D>[^|]+) \|" + + + def loadAccountInfo(self, user, req): + if 'Account premium not activated' in self.html: + return {"premium": False, "validuntil": None, "trafficleft": None} + + m = re.search(self.WALID_UNTIL_PATTERN, self.html) + if m: + validuntil = int(time.mktime(time.strptime(m.group('D'), "%d/%m/%Y %H:%M"))) + return {"premium": True, "validuntil": validuntil, "trafficleft": -1} + else: + self.logError('Unable to retrieve account information - Plugin may be out of date') + + def login(self, user, data, req): + self.html = req.load("http://debriditalia.com/login.php", + get={"u": user, "p": data['password']}) + if 'NO' in self.html: + self.wrongPassword() diff --git a/pyload/plugins/accounts/DepositfilesCom.py b/pyload/plugins/accounts/DepositfilesCom.py new file mode 100644 index 000000000..a17493cc1 --- /dev/null +++ b/pyload/plugins/accounts/DepositfilesCom.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- + +import re + +from time import strptime, mktime + +from pyload.plugins.Account import Account + + +class DepositfilesCom(Account): + __name__ = "DepositfilesCom" + __type__ = "account" + __version__ = "0.3" + + __description__ = """Depositfiles.com account plugin""" + __author_name__ = ("mkaay", "stickell", "Walter Purcaro") + __author_mail__ = ("mkaay@mkaay.de", "l.stickell@yahoo.it", "vuolter@gmail.com") + + + def loadAccountInfo(self, user, req): + src = req.load("https://dfiles.eu/de/gold/") + validuntil = re.search(r"Sie haben Gold Zugang bis: <b>(.*?)</b></div>", src).group(1) + + validuntil = int(mktime(strptime(validuntil, "%Y-%m-%d %H:%M:%S"))) + + return {"validuntil": validuntil, "trafficleft": -1} + + def login(self, user, data, req): + src = req.load("https://dfiles.eu/de/login.php", get={"return": "/de/gold/payment.php"}, + post={"login": user, "password": data['password']}) + if r'<div class="error_message">Sie haben eine falsche Benutzername-Passwort-Kombination verwendet.</div>' in src: + self.wrongPassword() diff --git a/pyload/plugins/accounts/EasybytezCom.py b/pyload/plugins/accounts/EasybytezCom.py new file mode 100644 index 000000000..595e95ec4 --- /dev/null +++ b/pyload/plugins/accounts/EasybytezCom.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- + +import re +from time import mktime, strptime, gmtime + +from pyload.plugins.Account import Account +from pyload.plugins.internal.SimpleHoster import parseHtmlForm +from pyload.utils import parseFileSize + + +class EasybytezCom(Account): + __name__ = "EasybytezCom" + __type__ = "account" + __version__ = "0.04" + + __description__ = """EasyBytez.com account plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + VALID_UNTIL_PATTERN = r'Premium account expire:</TD><TD><b>([^<]+)</b>' + TRAFFIC_LEFT_PATTERN = r'<TR><TD>Traffic available today:</TD><TD><b>(?P<S>[^<]+)</b>' + + + def loadAccountInfo(self, user, req): + html = req.load("http://www.easybytez.com/?op=my_account", decode=True) + + validuntil = trafficleft = None + premium = False + + m = re.search(self.VALID_UNTIL_PATTERN, html) + if m: + try: + self.logDebug("Expire date: " + m.group(1)) + validuntil = mktime(strptime(m.group(1), "%d %B %Y")) + except Exception, e: + self.logError(e) + if validuntil > mktime(gmtime()): + premium = True + trafficleft = -1 + else: + m = re.search(self.TRAFFIC_LEFT_PATTERN, html) + if m: + trafficleft = m.group(1) + if "Unlimited" in trafficleft: + trafficleft = -1 + else: + trafficleft = parseFileSize(trafficleft) / 1024 + + return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium} + + def login(self, user, data, req): + html = req.load('http://www.easybytez.com/login.html', decode=True) + action, inputs = parseHtmlForm('name="FL"', html) + inputs.update({"login": user, + "password": data['password'], + "redirect": "http://www.easybytez.com/"}) + + html = req.load(action, post=inputs, decode=True) + + if 'Incorrect Login or Password' in html or '>Error<' in html: + self.wrongPassword() diff --git a/pyload/plugins/accounts/EgoFilesCom.py b/pyload/plugins/accounts/EgoFilesCom.py new file mode 100644 index 000000000..3886d053a --- /dev/null +++ b/pyload/plugins/accounts/EgoFilesCom.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- + +import re +import time + +from pyload.plugins.Account import Account +from pyload.utils import parseFileSize + + +class EgoFilesCom(Account): + __name__ = "EgoFilesCom" + __type__ = "account" + __version__ = "0.2" + + __description__ = """Egofiles.com account plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + PREMIUM_ACCOUNT_PATTERN = '<br/>\s*Premium: (?P<P>[^/]*) / Traffic left: (?P<T>[\d.]*) (?P<U>\w*)\s*\\n\s*<br/>' + + + def loadAccountInfo(self, user, req): + html = req.load("http://egofiles.com") + if 'You are logged as a Free User' in html: + return {"premium": False, "validuntil": None, "trafficleft": None} + + m = re.search(self.PREMIUM_ACCOUNT_PATTERN, html) + if m: + validuntil = int(time.mktime(time.strptime(m.group('P'), "%Y-%m-%d %H:%M:%S"))) + trafficleft = parseFileSize(m.group('T'), m.group('U')) / 1024 + return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft} + else: + self.logError('Unable to retrieve account information - Plugin may be out of date') + + def login(self, user, data, req): + # Set English language + req.load("https://egofiles.com/ajax/lang.php?lang=en", just_header=True) + + html = req.load("http://egofiles.com/ajax/register.php", + post={"log": 1, + "loginV": user, + "passV": data['password']}) + if 'Login successful' not in html: + self.wrongPassword() diff --git a/pyload/plugins/accounts/EuroshareEu.py b/pyload/plugins/accounts/EuroshareEu.py new file mode 100644 index 000000000..d74d4526b --- /dev/null +++ b/pyload/plugins/accounts/EuroshareEu.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- + +from time import mktime, strptime +import re + +from pyload.plugins.Account import Account + + +class EuroshareEu(Account): + __name__ = "EuroshareEu" + __type__ = "account" + __version__ = "0.01" + + __description__ = """Euroshare.eu account plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + + def loadAccountInfo(self, user, req): + self.relogin(user) + html = req.load("http://euroshare.eu/customer-zone/settings/") + + m = re.search('id="input_expire_date" value="(\d+\.\d+\.\d+ \d+:\d+)"', html) + if m is None: + premium, validuntil = False, -1 + else: + premium = True + validuntil = mktime(strptime(m.group(1), "%d.%m.%Y %H:%M")) + + return {"validuntil": validuntil, "trafficleft": -1, "premium": premium} + + def login(self, user, data, req): + + html = req.load('http://euroshare.eu/customer-zone/login/', post={ + "trvale": "1", + "login": user, + "password": data['password'] + }, decode=True) + + if u">Nesprávne prihlasovacie meno alebo heslo" in html: + self.wrongPassword() diff --git a/pyload/plugins/accounts/FastixRu.py b/pyload/plugins/accounts/FastixRu.py new file mode 100644 index 000000000..a7b939a2c --- /dev/null +++ b/pyload/plugins/accounts/FastixRu.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Account import Account +from pyload.common.json_layer import json_loads + + +class FastixRu(Account): + __name__ = "FastixRu" + __type__ = "account" + __version__ = "0.02" + + __description__ = """Fastix account plugin""" + __author_name__ = "Massimo Rosamilia" + __author_mail__ = "max@spiritix.eu" + + + def loadAccountInfo(self, user, req): + data = self.getAccountData(user) + page = req.load("http://fastix.ru/api_v2/?apikey=%s&sub=getaccountdetails" % (data['api'])) + page = json_loads(page) + points = page['points'] + kb = float(points) + kb = kb * 1024 ** 2 / 1000 + if points > 0: + account_info = {"validuntil": -1, "trafficleft": kb} + else: + account_info = {"validuntil": None, "trafficleft": None, "premium": False} + return account_info + + def login(self, user, data, req): + page = req.load("http://fastix.ru/api_v2/?sub=get_apikey&email=%s&password=%s" % (user, data['password'])) + api = json_loads(page) + api = api['apikey'] + data['api'] = api + if "error_code" in page: + self.wrongPassword() diff --git a/pyload/plugins/accounts/FastshareCz.py b/pyload/plugins/accounts/FastshareCz.py new file mode 100644 index 000000000..6e86f60fa --- /dev/null +++ b/pyload/plugins/accounts/FastshareCz.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- + +import re +from pyload.plugins.Account import Account +from pyload.utils import parseFileSize + + +class FastshareCz(Account): + __name__ = "FastshareCz" + __type__ = "account" + __version__ = "0.03" + + __description__ = """Fastshare.cz account plugin""" + __author_name__ = ("zoidberg", "stickell") + __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") + + CREDIT_PATTERN = r'(?:Kredit|Credit)\s*</td>\s*<td[^>]*>([\d. \w]+) ' + + + def loadAccountInfo(self, user, req): + html = req.load("http://www.fastshare.cz/user", decode=True) + + m = re.search(self.CREDIT_PATTERN, html) + if m: + trafficleft = parseFileSize(m.group(1)) / 1024 + premium = True if trafficleft else False + else: + trafficleft = None + premium = False + + return {"validuntil": -1, "trafficleft": trafficleft, "premium": premium} + + def login(self, user, data, req): + req.load('http://www.fastshare.cz/login') # Do not remove or it will not login + html = req.load('http://www.fastshare.cz/sql.php', post={ + "heslo": data['password'], + "login": user + }, decode=True) + + if u'>Å patné uÅŸivatelské jméno nebo heslo.<' in html: + self.wrongPassword() diff --git a/pyload/plugins/accounts/File4safeCom.py b/pyload/plugins/accounts/File4safeCom.py new file mode 100644 index 000000000..4da721193 --- /dev/null +++ b/pyload/plugins/accounts/File4safeCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.XFSPAccount import XFSPAccount + + +class File4safeCom(XFSPAccount): + __name__ = "File4safeCom" + __type__ = "account" + __version__ = "0.01" + + __description__ = """File4safe.com account plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + MAIN_PAGE = "http://file4safe.com/" + + LOGIN_FAIL_PATTERN = r'input_login' + PREMIUM_PATTERN = r'Extend Premium' diff --git a/pyload/plugins/accounts/FilecloudIo.py b/pyload/plugins/accounts/FilecloudIo.py new file mode 100644 index 000000000..5e6b001e8 --- /dev/null +++ b/pyload/plugins/accounts/FilecloudIo.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Account import Account +from pyload.common.json_layer import json_loads + + +class FilecloudIo(Account): + __name__ = "FilecloudIo" + __type__ = "account" + __version__ = "0.02" + + __description__ = """FilecloudIo account plugin""" + __author_name__ = ("zoidberg", "stickell") + __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") + + + def loadAccountInfo(self, user, req): + # It looks like the first API request always fails, so we retry 5 times, it should work on the second try + for _ in xrange(5): + rep = req.load("https://secure.filecloud.io/api-fetch_apikey.api", + post={"username": user, "password": self.accounts[user]['password']}) + rep = json_loads(rep) + if rep['status'] == 'ok': + break + elif rep['status'] == 'error' and rep['message'] == 'no such user or wrong password': + self.logError("Wrong username or password") + return {"valid": False, "premium": False} + else: + return {"premium": False} + + akey = rep['akey'] + self.accounts[user]['akey'] = akey # Saved for hoster plugin + rep = req.load("http://api.filecloud.io/api-fetch_account_details.api", + post={"akey": akey}) + rep = json_loads(rep) + + if rep['is_premium'] == 1: + return {"validuntil": int(rep['premium_until']), "trafficleft": -1} + else: + return {"premium": False} + + def login(self, user, data, req): + req.cj.setCookie("secure.filecloud.io", "lang", "en") + html = req.load('https://secure.filecloud.io/user-login.html') + + if not hasattr(self, "form_data"): + self.form_data = {} + + self.form_data['username'] = user + self.form_data['password'] = data['password'] + + html = req.load('https://secure.filecloud.io/user-login_p.html', + post=self.form_data, + multipart=True) + + self.logged_in = True if "you have successfully logged in - filecloud.io" in html else False + self.form_data = {} diff --git a/pyload/plugins/accounts/FilefactoryCom.py b/pyload/plugins/accounts/FilefactoryCom.py new file mode 100644 index 000000000..1e2115ac3 --- /dev/null +++ b/pyload/plugins/accounts/FilefactoryCom.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- + +import re +from time import mktime, strptime + +from pycurl import REFERER + +from pyload.plugins.Account import Account + + +class FilefactoryCom(Account): + __name__ = "FilefactoryCom" + __type__ = "account" + __version__ = "0.14" + + __description__ = """Filefactory.com account plugin""" + __author_name__ = ("zoidberg", "stickell") + __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") + + VALID_UNTIL_PATTERN = r'Premium valid until: <strong>(?P<d>\d{1,2})\w{1,2} (?P<m>\w{3}), (?P<y>\d{4})</strong>' + + + def loadAccountInfo(self, user, req): + html = req.load("http://www.filefactory.com/account/") + + m = re.search(self.VALID_UNTIL_PATTERN, html) + if m: + premium = True + validuntil = re.sub(self.VALID_UNTIL_PATTERN, '\g<d> \g<m> \g<y>', m.group(0)) + validuntil = mktime(strptime(validuntil, "%d %b %Y")) + else: + premium = False + validuntil = -1 + + return {"premium": premium, "trafficleft": -1, "validuntil": validuntil} + + def login(self, user, data, req): + req.http.c.setopt(REFERER, "http://www.filefactory.com/member/login.php") + + html = req.load("http://www.filefactory.com/member/signin.php", post={ + "loginEmail": user, + "loginPassword": data['password'], + "Submit": "Sign In"}) + + if req.lastEffectiveURL != "http://www.filefactory.com/account/": + self.wrongPassword() diff --git a/pyload/plugins/accounts/FilejungleCom.py b/pyload/plugins/accounts/FilejungleCom.py new file mode 100644 index 000000000..ab52ffc04 --- /dev/null +++ b/pyload/plugins/accounts/FilejungleCom.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- + +import re +from time import mktime, strptime + +from pyload.plugins.Account import Account + + +class FilejungleCom(Account): + __name__ = "FilejungleCom" + __type__ = "account" + __version__ = "0.11" + + __description__ = """Filejungle.com account plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + login_timeout = 60 + + URL = "http://filejungle.com/" + TRAFFIC_LEFT_PATTERN = r'"/extend_premium\.php">Until (\d+ [A-Za-z]+ \d+)<br' + LOGIN_FAILED_PATTERN = r'<span htmlfor="loginUser(Name|Password)" generated="true" class="fail_info">' + + + def loadAccountInfo(self, user, req): + html = req.load(self.URL + "dashboard.php") + m = re.search(self.TRAFFIC_LEFT_PATTERN, html) + if m: + premium = True + validuntil = mktime(strptime(m.group(1), "%d %b %Y")) + else: + premium = False + validuntil = -1 + + return {"premium": premium, "trafficleft": -1, "validuntil": validuntil} + + def login(self, user, data, req): + html = req.load(self.URL + "login.php", post={ + "loginUserName": user, + "loginUserPassword": data['password'], + "loginFormSubmit": "Login", + "recaptcha_challenge_field": "", + "recaptcha_response_field": "", + "recaptcha_shortencode_field": ""}) + + if re.search(self.LOGIN_FAILED_PATTERN, html): + self.wrongPassword() diff --git a/pyload/plugins/accounts/FilerNet.py b/pyload/plugins/accounts/FilerNet.py new file mode 100644 index 000000000..51c2e5d75 --- /dev/null +++ b/pyload/plugins/accounts/FilerNet.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- + +import re +import time + +from pyload.plugins.Account import Account +from pyload.utils import parseFileSize + + +class FilerNet(Account): + __name__ = "FilerNet" + __type__ = "account" + __version__ = "0.01" + + __description__ = """Filer.net account plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + TOKEN_PATTERN = r'_csrf_token" value="([^"]+)" />' + WALID_UNTIL_PATTERN = r"Der Premium-Zugang ist gÃŒltig bis (.+)\.\s*</td>" + TRAFFIC_PATTERN = r'Traffic</th>\s*<td>([^<]+)</td>' + FREE_PATTERN = r'Account Status</th>\s*<td>\s*Free' + + + def loadAccountInfo(self, user, req): + html = req.load("https://filer.net/profile") + + # Free user + if re.search(self.FREE_PATTERN, html): + return {"premium": False, "validuntil": None, "trafficleft": None} + + until = re.search(self.WALID_UNTIL_PATTERN, html) + traffic = re.search(self.TRAFFIC_PATTERN, html) + if until and traffic: + validuntil = int(time.mktime(time.strptime(until.group(1), "%d.%m.%Y %H:%M:%S"))) + trafficleft = parseFileSize(traffic.group(1)) / 1024 + return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft} + else: + self.logError('Unable to retrieve account information - Plugin may be out of date') + return {"premium": False, "validuntil": None, "trafficleft": None} + + def login(self, user, data, req): + html = req.load("https://filer.net/login") + token = re.search(self.TOKEN_PATTERN, html).group(1) + html = req.load("https://filer.net/login_check", + post={"_username": user, "_password": data['password'], + "_remember_me": "on", "_csrf_token": token, "_target_path": "https://filer.net/"}) + if 'Logout' not in html: + self.wrongPassword() diff --git a/pyload/plugins/accounts/FilerioCom.py b/pyload/plugins/accounts/FilerioCom.py new file mode 100644 index 000000000..0a8bc10cd --- /dev/null +++ b/pyload/plugins/accounts/FilerioCom.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.XFSPAccount import XFSPAccount + + +class FilerioCom(XFSPAccount): + __name__ = "FilerioCom" + __type__ = "account" + __version__ = "0.01" + + __description__ = """FileRio.in account plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + MAIN_PAGE = "http://filerio.in/" diff --git a/pyload/plugins/accounts/FilesMailRu.py b/pyload/plugins/accounts/FilesMailRu.py new file mode 100644 index 000000000..a3ef4b348 --- /dev/null +++ b/pyload/plugins/accounts/FilesMailRu.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Account import Account + + +class FilesMailRu(Account): + __name__ = "FilesMailRu" + __type__ = "account" + __version__ = "0.1" + + __description__ = """Filesmail.ru account plugin""" + __author_name__ = "RaNaN" + __author_mail__ = "RaNaN@pyload.org" + + + def loadAccountInfo(self, user, req): + return {"validuntil": None, "trafficleft": None} + + def login(self, user, data, req): + user, domain = user.split("@") + + page = req.load("http://swa.mail.ru/cgi-bin/auth", None, + {"Domain": domain, "Login": user, "Password": data['password'], + "Page": "http://files.mail.ru/"}, cookies=True) + + if "ÐевеÑМПе ÐžÐŒÑ Ð¿ÐŸÐ»ÑзПваÑÐµÐ»Ñ ÐžÐ»Ðž паÑПлÑ" in page: # @TODO seems not to work + self.wrongPassword() diff --git a/pyload/plugins/accounts/FileserveCom.py b/pyload/plugins/accounts/FileserveCom.py new file mode 100644 index 000000000..211023991 --- /dev/null +++ b/pyload/plugins/accounts/FileserveCom.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- + +from time import mktime, strptime + +from pyload.plugins.Account import Account +from pyload.common.json_layer import json_loads + + +class FileserveCom(Account): + __name__ = "FileserveCom" + __type__ = "account" + __version__ = "0.2" + + __description__ = """Fileserve.com account plugin""" + __author_name__ = "mkaay" + __author_mail__ = "mkaay@mkaay.de" + + + def loadAccountInfo(self, user, req): + data = self.getAccountData(user) + + page = req.load("http://app.fileserve.com/api/login/", post={"username": user, "password": data['password'], + "submit": "Submit+Query"}) + res = json_loads(page) + + if res['type'] == "premium": + validuntil = mktime(strptime(res['expireTime'], "%Y-%m-%d %H:%M:%S")) + return {"trafficleft": res['traffic'], "validuntil": validuntil} + else: + return {"premium": False, "trafficleft": None, "validuntil": None} + + def login(self, user, data, req): + page = req.load("http://app.fileserve.com/api/login/", post={"username": user, "password": data['password'], + "submit": "Submit+Query"}) + res = json_loads(page) + + if not res['type']: + self.wrongPassword() + + #login at fileserv page + req.load("http://www.fileserve.com/login.php", + post={"loginUserName": user, "loginUserPassword": data['password'], "autoLogin": "checked", + "loginFormSubmit": "Login"}) diff --git a/pyload/plugins/accounts/FourSharedCom.py b/pyload/plugins/accounts/FourSharedCom.py new file mode 100644 index 000000000..a62749c43 --- /dev/null +++ b/pyload/plugins/accounts/FourSharedCom.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Account import Account +from pyload.common.json_layer import json_loads + + +class FourSharedCom(Account): + __name__ = "FourSharedCom" + __type__ = "account" + __version__ = "0.01" + + __description__ = """FourShared.com account plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + + def loadAccountInfo(self, user, req): + #fixme + return {"validuntil": -1, "trafficleft": -1, "premium": False} + + def login(self, user, data, req): + req.cj.setCookie("www.4shared.com", "4langcookie", "en") + response = req.load('http://www.4shared.com/login', + post={"login": user, + "password": data['password'], + "remember": "false", + "doNotRedirect": "true"}) + self.logDebug(response) + response = json_loads(response) + + if not "ok" in response or response['ok'] != True: + if "rejectReason" in response and response['rejectReason'] != True: + self.logError(response['rejectReason']) + self.wrongPassword() diff --git a/pyload/plugins/accounts/FreakshareCom.py b/pyload/plugins/accounts/FreakshareCom.py new file mode 100644 index 000000000..2484a2da1 --- /dev/null +++ b/pyload/plugins/accounts/FreakshareCom.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- + +import re +from time import strptime, mktime + +from pyload.plugins.Account import Account + + +class FreakshareCom(Account): + __name__ = "FreakshareCom" + __type__ = "account" + __version__ = "0.1" + + __description__ = """Freakshare.com account plugin""" + __author_name__ = "RaNaN" + __author_mail__ = "RaNaN@pyload.org" + + + def loadAccountInfo(self, user, req): + page = req.load("http://freakshare.com/") + + validuntil = r"ltig bis:</td>\s*<td><b>([0-9 \-:.]+)</b></td>" + validuntil = re.search(validuntil, page, re.MULTILINE) + validuntil = validuntil.group(1).strip() + validuntil = mktime(strptime(validuntil, "%d.%m.%Y - %H:%M")) + + traffic = r"Traffic verbleibend:</td>\s*<td>([^<]+)" + traffic = re.search(traffic, page, re.MULTILINE) + traffic = traffic.group(1).strip() + traffic = self.parseTraffic(traffic) + + return {"validuntil": validuntil, "trafficleft": traffic} + + def login(self, user, data, req): + page = req.load("http://freakshare.com/login.html", None, + {"submit": "Login", "user": user, "pass": data['password']}, cookies=True) + + if "Falsche Logindaten!" in page or "Wrong Username or Password!" in page: + self.wrongPassword() diff --git a/pyload/plugins/accounts/FreeWayMe.py b/pyload/plugins/accounts/FreeWayMe.py new file mode 100644 index 000000000..baca53cd4 --- /dev/null +++ b/pyload/plugins/accounts/FreeWayMe.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Account import Account +from pyload.common.json_layer import json_loads + + +class FreeWayMe(Account): + __name__ = "FreeWayMe" + __type__ = "account" + __version__ = "0.11" + + __description__ = """FreeWayMe account plugin""" + __author_name__ = "Nicolas Giese" + __author_mail__ = "james@free-way.me" + + + def loadAccountInfo(self, user, req): + status = self.getAccountStatus(user, req) + if not status: + return False + self.logDebug(status) + + account_info = {"validuntil": -1, "premium": False} + if status['premium'] == "Free": + account_info['trafficleft'] = int(status['guthaben']) * 1024 + elif status['premium'] == "Spender": + account_info['trafficleft'] = -1 + elif status['premium'] == "Flatrate": + account_info = {"validuntil": int(status['Flatrate']), + "trafficleft": -1, + "premium": True} + + return account_info + + def getpw(self, user): + return self.accounts[user]['password'] + + def login(self, user, data, req): + status = self.getAccountStatus(user, req) + + # Check if user and password are valid + if not status: + self.wrongPassword() + + def getAccountStatus(self, user, req): + answer = req.load("https://www.free-way.me/ajax/jd.php", + get={"id": 4, "user": user, "pass": self.accounts[user]['password']}) + self.logDebug("login: %s" % answer) + if answer == "Invalid login": + self.wrongPassword() + return False + return json_loads(answer) diff --git a/pyload/plugins/accounts/FshareVn.py b/pyload/plugins/accounts/FshareVn.py new file mode 100644 index 000000000..3d664629b --- /dev/null +++ b/pyload/plugins/accounts/FshareVn.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- + +from time import mktime, strptime +from pycurl import REFERER +import re + +from pyload.plugins.Account import Account + + +class FshareVn(Account): + __name__ = "FshareVn" + __type__ = "account" + __version__ = "0.07" + + __description__ = """Fshare.vn account plugin""" + __author_name__ = ("zoidberg", "stickell") + __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") + + VALID_UNTIL_PATTERN = ur'<dt>Thá»i hạn dùng:</dt>\s*<dd>([^<]+)</dd>' + LIFETIME_PATTERN = ur'<dt>Lần ÄÄng nháºp trưá»c:</dt>\s*<dd>[^<]+</dd>' + TRAFFIC_LEFT_PATTERN = ur'<dt>Tá»ng Dung Lượng Tà i Khoản</dt>\s*<dd[^>]*>([0-9.]+) ([kKMG])B</dd>' + DIRECT_DOWNLOAD_PATTERN = ur'<input type="checkbox"\s*([^=>]*)[^>]*/>KÃch hoạt download trá»±c tiếp</dt>' + + + def loadAccountInfo(self, user, req): + html = req.load("http://www.fshare.vn/account_info.php", decode=True) + + if re.search(self.LIFETIME_PATTERN, html): + self.logDebug("Lifetime membership detected") + trafficleft = self.getTrafficLeft() + return {"validuntil": -1, "trafficleft": trafficleft, "premium": True} + + m = re.search(self.VALID_UNTIL_PATTERN, html) + if m: + premium = True + validuntil = mktime(strptime(m.group(1), '%I:%M:%S %p %d-%m-%Y')) + trafficleft = self.getTrafficLeft() + else: + premium = False + validuntil = None + trafficleft = None + + return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium} + + def login(self, user, data, req): + req.http.c.setopt(REFERER, "https://www.fshare.vn/login.php") + + html = req.load('https://www.fshare.vn/login.php', post={ + "login_password": data['password'], + "login_useremail": user, + "url_refe": "http://www.fshare.vn/index.php" + }, referer=True, decode=True) + + if not re.search(r'<img\s+alt="VIP"', html): + self.wrongPassword() + + def getTrafficLeft(self): + m = re.search(self.TRAFFIC_LEFT_PATTERN, html) + return float(m.group(1)) * 1024 ** {'k': 0, 'K': 0, 'M': 1, 'G': 2}[m.group(2)] if m else 0 diff --git a/pyload/plugins/accounts/Ftp.py b/pyload/plugins/accounts/Ftp.py new file mode 100644 index 000000000..23b637050 --- /dev/null +++ b/pyload/plugins/accounts/Ftp.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Account import Account + + +class Ftp(Account): + __name__ = "Ftp" + __type__ = "account" + __version__ = "0.01" + + __description__ = """Ftp dummy account plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + + login_timeout = info_threshold = -1 #: Unlimited diff --git a/pyload/plugins/accounts/HellshareCz.py b/pyload/plugins/accounts/HellshareCz.py new file mode 100644 index 000000000..ae3f974a1 --- /dev/null +++ b/pyload/plugins/accounts/HellshareCz.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- + +import re +import time + +from pyload.plugins.Account import Account + + +class HellshareCz(Account): + __name__ = "HellshareCz" + __type__ = "account" + __version__ = "0.14" + + __description__ = """Hellshare.cz account plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + CREDIT_LEFT_PATTERN = r'<div class="credit-link">\s*<table>\s*<tr>\s*<th>(\d+|\d\d\.\d\d\.)</th>' + + + def loadAccountInfo(self, user, req): + self.relogin(user) + html = req.load("http://www.hellshare.com/") + + m = re.search(self.CREDIT_LEFT_PATTERN, html) + if m is None: + trafficleft = None + validuntil = None + premium = False + else: + credit = m.group(1) + premium = True + try: + if "." in credit: + #Time-based account + vt = [int(x) for x in credit.split('.')[:2]] + lt = time.localtime() + year = lt.tm_year + int(vt[1] < lt.tm_mon or (vt[1] == lt.tm_mon and vt[0] < lt.tm_mday)) + validuntil = time.mktime(time.strptime("%s%d 23:59:59" % (credit, year), "%d.%m.%Y %H:%M:%S")) + trafficleft = -1 + else: + #Traffic-based account + trafficleft = int(credit) * 1024 + validuntil = -1 + except Exception, e: + self.logError('Unable to parse credit info', e) + validuntil = -1 + trafficleft = -1 + + return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium} + + def login(self, user, data, req): + html = req.load('http://www.hellshare.com/') + if req.lastEffectiveURL != 'http://www.hellshare.com/': + #Switch to English + self.logDebug('Switch lang - URL: %s' % req.lastEffectiveURL) + json = req.load("%s?do=locRouter-show" % req.lastEffectiveURL) + hash = re.search(r"(--[0-9a-f]+-)", json).group(1) + self.logDebug('Switch lang - HASH: %s' % hash) + html = req.load('http://www.hellshare.com/%s/' % hash) + + if re.search(self.CREDIT_LEFT_PATTERN, html): + self.logDebug('Already logged in') + return + + html = req.load('http://www.hellshare.com/login?do=loginForm-submit', post={ + "login": "Log in", + "password": data['password'], + "username": user, + "perm_login": "on" + }) + + if "<p>You input a wrong user name or wrong password</p>" in html: + self.wrongPassword() diff --git a/pyload/plugins/accounts/HotfileCom.py b/pyload/plugins/accounts/HotfileCom.py new file mode 100644 index 000000000..ec164d14f --- /dev/null +++ b/pyload/plugins/accounts/HotfileCom.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- + +from time import strptime, mktime +import hashlib + +from pyload.plugins.Account import Account + + +class HotfileCom(Account): + __name__ = "HotfileCom" + __type__ = "account" + __version__ = "0.2" + + __description__ = """Hotfile.com account plugin""" + __author_name__ = ("mkaay", "JoKoT3") + __author_mail__ = ("mkaay@mkaay.de", "jokot3@gmail.com") + + + def loadAccountInfo(self, user, req): + resp = self.apiCall("getuserinfo", user=user) + if resp.startswith("."): + self.core.debug("HotfileCom API Error: %s" % resp) + raise Exception + info = {} + for p in resp.split("&"): + key, value = p.split("=") + info[key] = value + + if info['is_premium'] == '1': + info['premium_until'] = info['premium_until'].replace("T", " ") + zone = info['premium_until'][19:] + info['premium_until'] = info['premium_until'][:19] + zone = int(zone[:3]) + + validuntil = int(mktime(strptime(info['premium_until'], "%Y-%m-%d %H:%M:%S"))) + (zone * 60 * 60) + tmp = {"validuntil": validuntil, "trafficleft": -1, "premium": True} + + elif info['is_premium'] == '0': + tmp = {"premium": False} + + return tmp + + def apiCall(self, method, post={}, user=None): + if user: + data = self.getAccountData(user) + else: + user, data = self.selectAccount() + + req = self.getAccountRequest(user) + + digest = req.load("http://api.hotfile.com/", post={"action": "getdigest"}) + h = hashlib.md5() + h.update(data['password']) + hp = h.hexdigest() + h = hashlib.md5() + h.update(hp) + h.update(digest) + pwhash = h.hexdigest() + + post.update({"action": method}) + post.update({"username": user, "passwordmd5dig": pwhash, "digest": digest}) + resp = req.load("http://api.hotfile.com/", post=post) + req.close() + return resp + + def login(self, user, data, req): + cj = self.getAccountCookies(user) + cj.setCookie("hotfile.com", "lang", "en") + req.load("http://hotfile.com/", cookies=True) + page = req.load("http://hotfile.com/login.php", post={"returnto": "/", "user": user, "pass": data['password']}, + cookies=True) + + if "Bad username/password" in page: + self.wrongPassword() diff --git a/pyload/plugins/accounts/Http.py b/pyload/plugins/accounts/Http.py new file mode 100644 index 000000000..eda087c91 --- /dev/null +++ b/pyload/plugins/accounts/Http.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Account import Account + + +class Http(Account): + __name__ = "Http" + __type__ = "account" + __version__ = "0.01" + + __description__ = """Http dummy account plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + + login_timeout = info_threshold = -1 #: Unlimited diff --git a/pyload/plugins/accounts/LetitbitNet.py b/pyload/plugins/accounts/LetitbitNet.py new file mode 100644 index 000000000..88e679f8e --- /dev/null +++ b/pyload/plugins/accounts/LetitbitNet.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Account import Account +# from pyload.common.json_layer import json_loads, json_dumps + + +class LetitbitNet(Account): + __name__ = "LetitbitNet" + __type__ = "account" + __version__ = "0.01" + + __description__ = """Letitbit.net account plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + + def loadAccountInfo(self, user, req): + ## DISABLED BECAUSE IT GET 'key exausted' EVEN IF VALID ## + # api_key = self.accounts[user]['password'] + # json_data = [api_key, ['key/info']] + # api_rep = req.load('http://api.letitbit.net/json', post={'r': json_dumps(json_data)}) + # self.logDebug('API Key Info: ' + api_rep) + # api_rep = json_loads(api_rep) + # + # if api_rep['status'] == 'FAIL': + # self.logWarning(api_rep['data']) + # return {'valid': False, 'premium': False} + + return {"premium": True} + + def login(self, user, data, req): + # API_KEY is the username and the PREMIUM_KEY is the password + self.logInfo('You must use your API KEY as username and the PREMIUM KEY as password.') diff --git a/pyload/plugins/accounts/LinksnappyCom.py b/pyload/plugins/accounts/LinksnappyCom.py new file mode 100644 index 000000000..4ac046988 --- /dev/null +++ b/pyload/plugins/accounts/LinksnappyCom.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- + +from hashlib import md5 + +from pyload.plugins.Account import Account +from pyload.common.json_layer import json_loads + + +class LinksnappyCom(Account): + __name__ = "LinksnappyCom" + __type__ = "account" + __version__ = "0.02" + + __description__ = """Linksnappy.com account plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + + def loadAccountInfo(self, user, req): + data = self.getAccountData(user) + r = req.load('http://gen.linksnappy.com/lseAPI.php', + get={'act': 'USERDETAILS', 'username': user, 'password': md5(data['password']).hexdigest()}) + self.logDebug("JSON data: " + r) + j = json_loads(r) + + if j['error']: + return {"premium": False} + + validuntil = j['return']['expire'] + if validuntil == 'lifetime': + validuntil = -1 + elif validuntil == 'expired': + return {"premium": False} + else: + validuntil = float(validuntil) + + if 'trafficleft' not in j['return'] or isinstance(j['return']['trafficleft'], str): + trafficleft = -1 + else: + trafficleft = int(j['return']['trafficleft']) * 1024 + + return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft} + + def login(self, user, data, req): + r = req.load('http://gen.linksnappy.com/lseAPI.php', + get={'act': 'USERDETAILS', 'username': user, 'password': md5(data['password']).hexdigest()}) + + if 'Invalid Account Details' in r: + self.wrongPassword() diff --git a/pyload/plugins/accounts/MegaDebridEu.py b/pyload/plugins/accounts/MegaDebridEu.py new file mode 100644 index 000000000..b449d7246 --- /dev/null +++ b/pyload/plugins/accounts/MegaDebridEu.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Account import Account +from pyload.common.json_layer import json_loads + + +class MegaDebridEu(Account): + __name__ = "MegaDebridEu" + __type__ = "account" + __version__ = "0.2" + + __description__ = """mega-debrid.eu account plugin""" + __author_name__ = "D.Ducatel" + __author_mail__ = "dducatel@je-geek.fr" + + # Define the base URL of MegaDebrid api + API_URL = "https://www.mega-debrid.eu/api.php" + + + def loadAccountInfo(self, user, req): + data = self.getAccountData(user) + jsonResponse = req.load(self.API_URL, + get={'action': 'connectUser', 'login': user, 'password': data['password']}) + response = json_loads(jsonResponse) + + if response['response_code'] == "ok": + return {"premium": True, "validuntil": float(response['vip_end']), "status": True} + else: + self.logError(response) + return {"status": False, "premium": False} + + def login(self, user, data, req): + jsonResponse = req.load(self.API_URL, + get={'action': 'connectUser', 'login': user, 'password': data['password']}) + response = json_loads(jsonResponse) + if response['response_code'] != "ok": + self.wrongPassword() diff --git a/pyload/plugins/accounts/MegasharesCom.py b/pyload/plugins/accounts/MegasharesCom.py new file mode 100644 index 000000000..2032d0578 --- /dev/null +++ b/pyload/plugins/accounts/MegasharesCom.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- + +import re +from time import mktime, strptime + +from pyload.plugins.Account import Account + + +class MegasharesCom(Account): + __name__ = "MegasharesCom" + __type__ = "account" + __version__ = "0.02" + + __description__ = """Megashares.com account plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + VALID_UNTIL_PATTERN = r'<p class="premium_info_box">Period Ends: (\w{3} \d{1,2}, \d{4})</p>' + + + def loadAccountInfo(self, user, req): + #self.relogin(user) + html = req.load("http://d01.megashares.com/myms.php", decode=True) + + premium = False if '>Premium Upgrade<' in html else True + + validuntil = trafficleft = -1 + try: + timestr = re.search(self.VALID_UNTIL_PATTERN, html).group(1) + self.logDebug(timestr) + validuntil = mktime(strptime(timestr, "%b %d, %Y")) + except Exception, e: + self.logError(e) + + return {"validuntil": validuntil, "trafficleft": -1, "premium": premium} + + def login(self, user, data, req): + html = req.load('http://d01.megashares.com/myms_login.php', post={ + "httpref": "", + "myms_login": "Login", + "mymslogin_name": user, + "mymspassword": data['password'] + }, decode=True) + + if not '<span class="b ml">%s</span>' % user in html: + self.wrongPassword() diff --git a/pyload/plugins/accounts/MovReelCom.py b/pyload/plugins/accounts/MovReelCom.py new file mode 100644 index 000000000..0f80b1aa8 --- /dev/null +++ b/pyload/plugins/accounts/MovReelCom.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.XFSPAccount import XFSPAccount + + +class MovReelCom(XFSPAccount): + __name__ = "MovReelCom" + __type__ = "account" + __version__ = "0.01" + + __description__ = """Movreel.com account plugin""" + __author_name__ = "t4skforce" + __author_mail__ = "t4skforce1337[AT]gmail[DOT]com" + + login_timeout = 60 + info_threshold = 30 + + MAIN_PAGE = "http://movreel.com/" + + TRAFFIC_LEFT_PATTERN = r'Traffic.*?<b>([^<]+)</b>' + LOGIN_FAIL_PATTERN = r'<b[^>]*>Incorrect Login or Password</b><br>' diff --git a/pyload/plugins/accounts/MultiDebridCom.py b/pyload/plugins/accounts/MultiDebridCom.py new file mode 100644 index 000000000..fa10c92cc --- /dev/null +++ b/pyload/plugins/accounts/MultiDebridCom.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- + +from time import time + +from pyload.plugins.Account import Account +from pyload.common.json_layer import json_loads + + +class MultiDebridCom(Account): + __name__ = "MultiDebridCom" + __type__ = "account" + __version__ = "0.01" + + __description__ = """Multi-debrid.com account plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + + def loadAccountInfo(self, user, req): + if 'days_left' in self.json_data: + validuntil = int(time() + self.json_data['days_left'] * 24 * 60 * 60) + return {"premium": True, "validuntil": validuntil, "trafficleft": -1} + else: + self.logError('Unable to get account information') + + def login(self, user, data, req): + # Password to use is the API-Password written in http://multi-debrid.com/myaccount + html = req.load("http://multi-debrid.com/api.php", + get={"user": user, "pass": data['password']}) + self.logDebug('JSON data: ' + html) + self.json_data = json_loads(html) + if self.json_data['status'] != 'ok': + self.logError('Invalid login. The password to use is the API-Password you find in your "My Account" page') + self.wrongPassword() diff --git a/pyload/plugins/accounts/MultishareCz.py b/pyload/plugins/accounts/MultishareCz.py new file mode 100644 index 000000000..7e72ff513 --- /dev/null +++ b/pyload/plugins/accounts/MultishareCz.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Account import Account +#from time import mktime, strptime +#from pycurl import REFERER +import re +from pyload.utils import parseFileSize + + +class MultishareCz(Account): + __name__ = "MultishareCz" + __type__ = "account" + __version__ = "0.02" + + __description__ = """Multishare.cz account plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + TRAFFIC_LEFT_PATTERN = r'<span class="profil-zvyrazneni">Kredit:</span>\s*<strong>(?P<S>[0-9,]+) (?P<U>\w+)</strong>' + ACCOUNT_INFO_PATTERN = r'<input type="hidden" id="(u_ID|u_hash)" name="[^"]*" value="([^"]+)">' + + + def loadAccountInfo(self, user, req): + #self.relogin(user) + html = req.load("http://www.multishare.cz/profil/", decode=True) + + m = re.search(self.TRAFFIC_LEFT_PATTERN, html) + trafficleft = parseFileSize(m.group('S'), m.group('U')) / 1024 if m else 0 + self.premium = True if trafficleft else False + + html = req.load("http://www.multishare.cz/", decode=True) + mms_info = dict(re.findall(self.ACCOUNT_INFO_PATTERN, html)) + + return dict(mms_info, **{"validuntil": -1, "trafficleft": trafficleft}) + + def login(self, user, data, req): + html = req.load('http://www.multishare.cz/html/prihlaseni_process.php', post={ + "akce": "PÅihlásit", + "heslo": data['password'], + "jmeno": user + }, decode=True) + + if '<div class="akce-chyba akce">' in html: + self.wrongPassword() diff --git a/pyload/plugins/accounts/NetloadIn.py b/pyload/plugins/accounts/NetloadIn.py new file mode 100644 index 000000000..988affb51 --- /dev/null +++ b/pyload/plugins/accounts/NetloadIn.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- + +import re +from time import time + +from pyload.plugins.Account import Account + + +class NetloadIn(Account): + __name__ = "NetloadIn" + __type__ = "account" + __version__ = "0.22" + + __description__ = """Netload.in account plugin""" + __author_name__ = ("RaNaN", "CryNickSystems") + __author_mail__ = ("RaNaN@pyload.org", "webmaster@pcProfil.de") + + + def loadAccountInfo(self, user, req): + page = req.load("http://netload.in/index.php?id=2&lang=de") + left = r">(\d+) (Tag|Tage), (\d+) Stunden<" + left = re.search(left, page) + if left: + validuntil = time() + int(left.group(1)) * 24 * 60 * 60 + int(left.group(3)) * 60 * 60 + trafficleft = -1 + premium = True + else: + validuntil = None + premium = False + trafficleft = None + return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium} + + def login(self, user, data, req): + page = req.load("http://netload.in/index.php", None, + {"txtuser": user, "txtpass": data['password'], "txtcheck": "login", "txtlogin": "Login"}, + cookies=True) + if "password or it might be invalid!" in page: + self.wrongPassword() diff --git a/pyload/plugins/accounts/OboomCom.py b/pyload/plugins/accounts/OboomCom.py new file mode 100644 index 000000000..5d30c5955 --- /dev/null +++ b/pyload/plugins/accounts/OboomCom.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- + +import time + +from pyload.lib.beaker.crypto.pbkdf2 import PBKDF2 + +from pyload.common.json_layer import json_loads +from pyload.plugins.Account import Account + + +class OboomCom(Account): + __name__ = "OboomCom" + __type__ = "account" + __version__ = "0.1" + + __description__ = """Oboom.com account plugin""" + __author_name__ = "stanley" + __author_mail__ = "stanley.foerster@gmail.com" + + + def loadAccountData(self, user, req): + passwd = self.getAccountData(user)['password'] + salt = passwd[::-1] + pbkdf2 = PBKDF2(passwd, salt, 1000).hexread(16) + result = json_loads(req.load("https://www.oboom.com/1.0/login", get={"auth": user, "pass": pbkdf2})) + if not result[0] == 200: + self.logWarning("Failed to log in: %s" % result[1]) + self.wrongPassword() + return result[1] + + def loadAccountInfo(self, name, req): + accountData = self.loadAccountData(name, req) + userData = accountData['user'] + + if "premium_unix" in userData: + validUntilUtc = int(userData['premium_unix']) + if validUntilUtc > int(time.time()): + premium = True + validUntil = validUntilUtc + traffic = userData['traffic'] + trafficLeft = traffic['current'] + maxTraffic = traffic['max'] + session = accountData['session'] + return {"premium": premium, + "validuntil": validUntil, + "trafficleft": trafficLeft / 1024, + "maxtraffic": maxTraffic / 1024, + "session": session + } + return {"premium": False, "validuntil": -1} + + def login(self, user, data, req): + self.loadAccountData(user, req) diff --git a/pyload/plugins/accounts/OneFichierCom.py b/pyload/plugins/accounts/OneFichierCom.py new file mode 100644 index 000000000..36899e2a5 --- /dev/null +++ b/pyload/plugins/accounts/OneFichierCom.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- + +import re +from time import strptime, mktime +from pycurl import REFERER + +from pyload.plugins.Account import Account + + +class OneFichierCom(Account): + __name__ = "OneFichierCom" + __type__ = "account" + __version__ = "0.1" + + __description__ = """1fichier.com account plugin""" + __author_name__ = "Elrick69" + __author_mail__ = "elrick69[AT]rocketmail[DOT]com" + + VALID_UNTIL_PATTERN = r'You are a premium user until (?P<d>\d{2})/(?P<m>\d{2})/(?P<y>\d{4})' + + + def loadAccountInfo(self, user, req): + + html = req.load("http://1fichier.com/console/abo.pl") + + m = re.search(self.VALID_UNTIL_PATTERN, html) + + if m: + premium = True + validuntil = re.sub(self.VALID_UNTIL_PATTERN, '\g<d>/\g<m>/\g<y>', m.group(0)) + validuntil = int(mktime(strptime(validuntil, "%d/%m/%Y"))) + else: + premium = False + validuntil = -1 + + return {"premium": premium, "trafficleft": -1, "validuntil": validuntil} + + def login(self, user, data, req): + + req.http.c.setopt(REFERER, "http://1fichier.com/login.pl?lg=en") + + html = req.load("http://1fichier.com/login.pl?lg=en", post={ + "mail": user, + "pass": data['password'], + "Login": "Login"}) + + if r'<div class="error_message">Invalid username or password.</div>' in html: + self.wrongPassword() diff --git a/pyload/plugins/accounts/OverLoadMe.py b/pyload/plugins/accounts/OverLoadMe.py new file mode 100644 index 000000000..ba5a58158 --- /dev/null +++ b/pyload/plugins/accounts/OverLoadMe.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Account import Account +from pyload.common.json_layer import json_loads + + +class OverLoadMe(Account): + __name__ = "OverLoadMe" + __type__ = "account" + __version__ = "0.01" + + __description__ = """Over-Load.me account plugin""" + __author_name__ = "marley" + __author_mail__ = "marley@over-load.me" + + + def loadAccountInfo(self, user, req): + data = self.getAccountData(user) + page = req.load("https://api.over-load.me/account.php", get={"user": user, "auth": data['password']}).strip() + data = json_loads(page) + + # Check for premium + if data['membership'] == "Free": + return {"premium": False} + + account_info = {"validuntil": data['expirationunix'], "trafficleft": -1} + return account_info + + def login(self, user, data, req): + jsondata = req.load("https://api.over-load.me/account.php", + get={"user": user, "auth": data['password']}).strip() + data = json_loads(jsondata) + + if data['err'] == 1: + self.wrongPassword() diff --git a/pyload/plugins/accounts/Premium4Me.py b/pyload/plugins/accounts/Premium4Me.py new file mode 100644 index 000000000..01b4b834e --- /dev/null +++ b/pyload/plugins/accounts/Premium4Me.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Account import Account + + +class Premium4Me(Account): + __name__ = "Premium4Me" + __type__ = "account" + __version__ = "0.03" + + __description__ = """Premium.to account plugin""" + __author_name__ = ("RaNaN", "zoidberg", "stickell") + __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz", "l.stickell@yahoo.it") + + + def loadAccountInfo(self, user, req): + traffic = req.load("http://premium.to/api/traffic.php?authcode=%s" % self.authcode) + + account_info = {"trafficleft": int(traffic) / 1024, + "validuntil": -1} + + return account_info + + def login(self, user, data, req): + self.authcode = req.load("http://premium.to/api/getauthcode.php?username=%s&password=%s" % ( + user, data['password'])).strip() + + if "wrong username" in self.authcode: + self.wrongPassword() diff --git a/pyload/plugins/accounts/PremiumizeMe.py b/pyload/plugins/accounts/PremiumizeMe.py new file mode 100644 index 000000000..822ca8db9 --- /dev/null +++ b/pyload/plugins/accounts/PremiumizeMe.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Account import Account + +from pyload.common.json_layer import json_loads + + +class PremiumizeMe(Account): + __name__ = "PremiumizeMe" + __type__ = "account" + __version__ = "0.11" + + __description__ = """Premiumize.me account plugin""" + __author_name__ = "Florian Franzen" + __author_mail__ = "FlorianFranzen@gmail.com" + + + def loadAccountInfo(self, user, req): + # Get user data from premiumize.me + status = self.getAccountStatus(user, req) + self.logDebug(status) + + # Parse account info + account_info = {"validuntil": float(status['result']['expires']), + "trafficleft": max(0, status['result']['trafficleft_bytes'] / 1024)} + + if status['result']['type'] == 'free': + account_info['premium'] = False + + return account_info + + def login(self, user, data, req): + # Get user data from premiumize.me + status = self.getAccountStatus(user, req) + + # Check if user and password are valid + if status['status'] != 200: + self.wrongPassword() + + def getAccountStatus(self, user, req): + # Use premiumize.me API v1 (see https://secure.premiumize.me/?show=api) + # to retrieve account info and return the parsed json answer + answer = req.load( + "https://api.premiumize.me/pm-api/v1.php?method=accountstatus¶ms[login]=%s¶ms[pass]=%s" % ( + user, self.accounts[user]['password'])) + return json_loads(answer) diff --git a/pyload/plugins/accounts/QuickshareCz.py b/pyload/plugins/accounts/QuickshareCz.py new file mode 100644 index 000000000..6abc02b1c --- /dev/null +++ b/pyload/plugins/accounts/QuickshareCz.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- + +import re +from pyload.plugins.Account import Account +from pyload.utils import parseFileSize + + +class QuickshareCz(Account): + __name__ = "QuickshareCz" + __type__ = "account" + __version__ = "0.01" + + __description__ = """Quickshare.cz account plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + + def loadAccountInfo(self, user, req): + html = req.load("http://www.quickshare.cz/premium", decode=True) + + m = re.search(r'Stav kreditu: <strong>(.+?)</strong>', html) + if m: + trafficleft = parseFileSize(m.group(1)) / 1024 + premium = True if trafficleft else False + else: + trafficleft = None + premium = False + + return {"validuntil": -1, "trafficleft": trafficleft, "premium": premium} + + def login(self, user, data, req): + html = req.load('http://www.quickshare.cz/html/prihlaseni_process.php', post={ + "akce": u'PÅihlásit', + "heslo": data['password'], + "jmeno": user + }, decode=True) + + if u'>TakovÜ uÅŸivatel neexistuje.<' in html or u'>Å patné heslo.<' in html: + self.wrongPassword() diff --git a/pyload/plugins/accounts/RPNetBiz.py b/pyload/plugins/accounts/RPNetBiz.py new file mode 100644 index 000000000..0e600b4e3 --- /dev/null +++ b/pyload/plugins/accounts/RPNetBiz.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Account import Account +from pyload.common.json_layer import json_loads + + +class RPNetBiz(Account): + __name__ = "RPNetBiz" + __type__ = "account" + __version__ = "0.1" + + __description__ = """RPNet.biz account plugin""" + __author_name__ = "Dman" + __author_mail__ = "dmanugm@gmail.com" + + + def loadAccountInfo(self, user, req): + # Get account information from rpnet.biz + response = self.getAccountStatus(user, req) + try: + if response['accountInfo']['isPremium']: + # Parse account info. Change the trafficleft later to support per host info. + account_info = {"validuntil": int(response['accountInfo']['premiumExpiry']), + "trafficleft": -1, "premium": True} + else: + account_info = {"validuntil": None, "trafficleft": None, "premium": False} + + except KeyError: + #handle wrong password exception + account_info = {"validuntil": None, "trafficleft": None, "premium": False} + + return account_info + + def login(self, user, data, req): + # Get account information from rpnet.biz + response = self.getAccountStatus(user, req) + + # If we have an error in the response, we have wrong login information + if 'error' in response: + self.wrongPassword() + + def getAccountStatus(self, user, req): + # Using the rpnet API, check if valid premium account + response = req.load("https://premium.rpnet.biz/client_api.php", + get={"username": user, "password": self.accounts[user]['password'], + "action": "showAccountInformation"}) + self.logDebug("JSON data: %s" % response) + + return json_loads(response) diff --git a/pyload/plugins/accounts/RapidgatorNet.py b/pyload/plugins/accounts/RapidgatorNet.py new file mode 100644 index 000000000..391d7ffcb --- /dev/null +++ b/pyload/plugins/accounts/RapidgatorNet.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Account import Account +from pyload.common.json_layer import json_loads + + +class RapidgatorNet(Account): + __name__ = "RapidgatorNet" + __type__ = "account" + __version__ = "0.04" + + __description__ = """Rapidgator.net account plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + API_URL = 'http://rapidgator.net/api/user' + + + def loadAccountInfo(self, user, req): + try: + sid = self.getAccountData(user).get('SID') + assert sid + + json = req.load("%s/info?sid=%s" % (self.API_URL, sid)) + self.logDebug("API:USERINFO", json) + json = json_loads(json) + + if json['response_status'] == 200: + if "reset_in" in json['response']: + self.scheduleRefresh(user, json['response']['reset_in']) + + return {"validuntil": json['response']['expire_date'], + "trafficleft": int(json['response']['traffic_left']) / 1024, + "premium": True} + else: + self.logError(json['response_details']) + except Exception, e: + self.logError(e) + + return {"validuntil": None, "trafficleft": None, "premium": False} + + def login(self, user, data, req): + try: + json = req.load('%s/login' % self.API_URL, post={"username": user, "password": data['password']}) + self.logDebug("API:LOGIN", json) + json = json_loads(json) + + if json['response_status'] == 200: + data['SID'] = str(json['response']['session_id']) + return + else: + self.logError(json['response_details']) + except Exception, e: + self.logError(e) + + self.wrongPassword() diff --git a/pyload/plugins/accounts/RapidshareCom.py b/pyload/plugins/accounts/RapidshareCom.py new file mode 100644 index 000000000..38db62200 --- /dev/null +++ b/pyload/plugins/accounts/RapidshareCom.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Account import Account + + +class RapidshareCom(Account): + __name__ = "RapidshareCom" + __type__ = "account" + __version__ = "0.22" + + __description__ = """Rapidshare.com account plugin""" + __author_name__ = "mkaay" + __author_mail__ = "mkaay@mkaay.de" + + + def loadAccountInfo(self, user, req): + data = self.getAccountData(user) + api_url_base = "http://api.rapidshare.com/cgi-bin/rsapi.cgi" + api_param_prem = {"sub": "getaccountdetails", "type": "prem", "login": user, + "password": data['password'], "withcookie": 1} + src = req.load(api_url_base, cookies=False, get=api_param_prem) + if src.startswith("ERROR"): + raise Exception(src) + fields = src.split("\n") + info = {} + for t in fields: + if not t.strip(): + continue + k, v = t.split("=") + info[k] = v + + validuntil = int(info['billeduntil']) + premium = True if validuntil else False + + tmp = {"premium": premium, "validuntil": validuntil, "trafficleft": -1, "maxtraffic": -1} + + return tmp + + def login(self, user, data, req): + api_url_base = "http://api.rapidshare.com/cgi-bin/rsapi.cgi" + api_param_prem = {"sub": "getaccountdetails", "type": "prem", "login": user, + "password": data['password'], "withcookie": 1} + src = req.load(api_url_base, cookies=False, get=api_param_prem) + if src.startswith("ERROR"): + raise Exception(src + "### Note you have to use your account number for login, instead of name.") + fields = src.split("\n") + info = {} + for t in fields: + if not t.strip(): + continue + k, v = t.split("=") + info[k] = v + cj = self.getAccountCookies(user) + cj.setCookie("rapidshare.com", "enc", info['cookie']) diff --git a/pyload/plugins/accounts/RarefileNet.py b/pyload/plugins/accounts/RarefileNet.py new file mode 100644 index 000000000..68e2595e2 --- /dev/null +++ b/pyload/plugins/accounts/RarefileNet.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.XFSPAccount import XFSPAccount + + +class RarefileNet(XFSPAccount): + __name__ = "RarefileNet" + __type__ = "account" + __version__ = "0.02" + + __description__ = """RareFile.net account plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + MAIN_PAGE = "http://rarefile.net/" diff --git a/pyload/plugins/accounts/RealdebridCom.py b/pyload/plugins/accounts/RealdebridCom.py new file mode 100644 index 000000000..8ab0234a9 --- /dev/null +++ b/pyload/plugins/accounts/RealdebridCom.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- + +import xml.dom.minidom as dom + +from pyload.plugins.Account import Account + + +class RealdebridCom(Account): + __name__ = "RealdebridCom" + __type__ = "account" + __version__ = "0.43" + + __description__ = """Real-Debrid.com account plugin""" + __author_name__ = "Devirex Hazzard" + __author_mail__ = "naibaf_11@yahoo.de" + + + def loadAccountInfo(self, user, req): + if self.pin_code: + return {"premium": False} + page = req.load("https://real-debrid.com/api/account.php") + xml = dom.parseString(page) + account_info = {"validuntil": int(xml.getElementsByTagName("expiration")[0].childNodes[0].nodeValue), + "trafficleft": -1} + + return account_info + + def login(self, user, data, req): + self.pin_code = False + page = req.load("https://real-debrid.com/ajax/login.php", get={"user": user, "pass": data['password']}) + if "Your login informations are incorrect" in page: + self.wrongPassword() + elif "PIN Code required" in page: + self.logWarning('PIN code required. Please login to https://real-debrid.com using the PIN or disable the double authentication in your control panel on https://real-debrid.com.') + self.pin_code = True diff --git a/pyload/plugins/accounts/RehostTo.py b/pyload/plugins/accounts/RehostTo.py new file mode 100644 index 000000000..3bda118f4 --- /dev/null +++ b/pyload/plugins/accounts/RehostTo.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Account import Account + + +class RehostTo(Account): + __name__ = "RehostTo" + __type__ = "account" + __version__ = "0.1" + + __description__ = """Rehost.to account plugin""" + __author_name__ = "RaNaN" + __author_mail__ = "RaNaN@pyload.org" + + + def loadAccountInfo(self, user, req): + data = self.getAccountData(user) + page = req.load("http://rehost.to/api.php?cmd=login&user=%s&pass=%s" % (user, data['password'])) + data = [x.split("=") for x in page.split(",")] + ses = data[0][1] + long_ses = data[1][1] + + page = req.load("http://rehost.to/api.php?cmd=get_premium_credits&long_ses=%s" % long_ses) + traffic, valid = page.split(",") + + account_info = {"trafficleft": int(traffic) * 1024, + "validuntil": int(valid), + "long_ses": long_ses, + "ses": ses} + + return account_info + + def login(self, user, data, req): + page = req.load("http://rehost.to/api.php?cmd=login&user=%s&pass=%s" % (user, data['password'])) + + if "Login failed." in page: + self.wrongPassword() diff --git a/pyload/plugins/accounts/RyushareCom.py b/pyload/plugins/accounts/RyushareCom.py new file mode 100644 index 000000000..74258e984 --- /dev/null +++ b/pyload/plugins/accounts/RyushareCom.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.XFSPAccount import XFSPAccount + + +class RyushareCom(XFSPAccount): + __name__ = "RyushareCom" + __type__ = "account" + __version__ = "0.03" + + __description__ = """Ryushare.com account plugin""" + __author_name__ = ("zoidberg", "trance4us") + __author_mail__ = ("zoidberg@mujmail.cz", "") + + MAIN_PAGE = "http://ryushare.com/" + + + def login(self, user, data, req): + req.lastURL = "http://ryushare.com/login.python" + html = req.load("http://ryushare.com/login.python", + post={"login": user, "password": data['password'], "op": "login"}) + if 'Incorrect Login or Password' in html or '>Error<' in html: + self.wrongPassword() diff --git a/pyload/plugins/accounts/ShareRapidCom.py b/pyload/plugins/accounts/ShareRapidCom.py new file mode 100644 index 000000000..92e6c7988 --- /dev/null +++ b/pyload/plugins/accounts/ShareRapidCom.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- + +import re + +from time import mktime, strptime +from pyload.plugins.Account import Account + + +class ShareRapidCom(Account): + __name__ = "ShareRapidCom" + __type__ = "account" + __version__ = "0.34" + + __description__ = """MegaRapid.cz account plugin""" + __author_name__ = ("MikyWoW", "zoidberg") + __author_mail__ = ("mikywow@seznam.cz", "zoidberg@mujmail.cz") + + login_timeout = 60 + + + def loadAccountInfo(self, user, req): + src = req.load("http://megarapid.cz/mujucet/", decode=True) + + m = re.search(ur'<td>Max. poÄet paralelnÃch stahovánÃ: </td><td>(\d+)', src) + if m: + data = self.getAccountData(user) + data['options']['limitDL'] = [int(m.group(1))] + + m = re.search(ur'<td>Paušálnà stahovánà aktivnÃ. Vypršà </td><td><strong>(.*?)</strong>', src) + if m: + validuntil = mktime(strptime(m.group(1), "%d.%m.%Y - %H:%M")) + return {"premium": True, "trafficleft": -1, "validuntil": validuntil} + + m = re.search(r'<tr><td>Kredit</td><td>(.*?) GiB', src) + if m: + trafficleft = float(m.group(1)) * (1 << 20) + return {"premium": True, "trafficleft": trafficleft, "validuntil": -1} + + return {"premium": False, "trafficleft": None, "validuntil": None} + + def login(self, user, data, req): + htm = req.load("http://megarapid.cz/prihlaseni/", cookies=True) + if "Heslo:" in htm: + start = htm.index('id="inp_hash" name="hash" value="') + htm = htm[start + 33:] + hashes = htm[0:32] + htm = req.load("http://megarapid.cz/prihlaseni/", + post={"hash": hashes, + "login": user, + "pass1": data['password'], + "remember": 0, + "sbmt": u"PÅihlásit"}, cookies=True) diff --git a/pyload/plugins/accounts/ShareonlineBiz.py b/pyload/plugins/accounts/ShareonlineBiz.py new file mode 100644 index 000000000..0f6e61fab --- /dev/null +++ b/pyload/plugins/accounts/ShareonlineBiz.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Account import Account + + +class ShareonlineBiz(Account): + __name__ = "ShareonlineBiz" + __type__ = "account" + __version__ = "0.24" + + __description__ = """Share-online.biz account plugin""" + __author_name__ = ("mkaay", "zoidberg") + __author_mail__ = ("mkaay@mkaay.de", "zoidberg@mujmail.cz") + + + def getUserAPI(self, user, req): + return req.load("http://api.share-online.biz/account.php", + {"username": user, "password": self.accounts[user]['password'], "act": "userDetails"}) + + def loadAccountInfo(self, user, req): + src = self.getUserAPI(user, req) + + info = {} + for line in src.splitlines(): + if "=" in line: + key, value = line.split("=") + info[key] = value + self.logDebug(info) + + if "dl" in info and info['dl'].lower() != "not_available": + req.cj.setCookie("share-online.biz", "dl", info['dl']) + if "a" in info and info['a'].lower() != "not_available": + req.cj.setCookie("share-online.biz", "a", info['a']) + + return {"validuntil": int(info['expire_date']) if "expire_date" in info else -1, + "trafficleft": -1, + "premium": True if ("dl" in info or "a" in info) and (info['group'] != "Sammler") else False} + + def login(self, user, data, req): + src = self.getUserAPI(user, req) + if "EXCEPTION" in src: + self.wrongPassword() diff --git a/pyload/plugins/accounts/SimplyPremiumCom.py b/pyload/plugins/accounts/SimplyPremiumCom.py new file mode 100644 index 000000000..5958c1f34 --- /dev/null +++ b/pyload/plugins/accounts/SimplyPremiumCom.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- + +from pyload.common.json_layer import json_loads +from pyload.plugins.Account import Account + + +class SimplyPremiumCom(Account): + __name__ = "SimplyPremiumCom" + __type__ = "account" + __version__ = "0.01" + + __description__ = """Simply-Premium.com account plugin""" + __author_name__ = "EvolutionClip" + __author_mail__ = "evolutionclip@live.de" + + + def loadAccountInfo(self, user, req): + json_data = req.load('http://www.simply-premium.com/api/user.php?format=json') + self.logDebug("JSON data: " + json_data) + json_data = json_loads(json_data) + + if 'vip' in json_data['result'] and json_data['result']['vip'] == 0: + return {"premium": False} + + #Time package + validuntil = float(json_data['result']['timeend']) + #Traffic package + # {"trafficleft": int(traffic) / 1024, "validuntil": -1} + #trafficleft = int(json_data['result']['traffic'] / 1024) + + #return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft} + return {"premium": True, "validuntil": validuntil} + + def login(self, user, data, req): + req.cj.setCookie("simply-premium.com", "lang", "EN") + + if data['password'] == '' or data['password'] == '0': + post_data = {"key": user} + else: + post_data = {"login_name": user, "login_pass": data['password']} + + html = req.load("http://www.simply-premium.com/login.php", post=post_data) + + if 'logout' not in html: + self.wrongPassword() diff --git a/pyload/plugins/accounts/SimplydebridCom.py b/pyload/plugins/accounts/SimplydebridCom.py new file mode 100644 index 000000000..169b27e0b --- /dev/null +++ b/pyload/plugins/accounts/SimplydebridCom.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- + +from time import mktime, strptime + +from pyload.plugins.Account import Account + + +class SimplydebridCom(Account): + __name__ = "SimplydebridCom" + __type__ = "account" + __version__ = "0.1" + + __description__ = """Simply-Debrid.com account plugin""" + __author_name__ = "Kagenoshin" + __author_mail__ = "kagenoshin@gmx.ch" + + + def loadAccountInfo(self, user, req): + get_data = {'login': 2, 'u': self.loginname, 'p': self.password} + response = req.load("http://simply-debrid.com/api.php", get=get_data, decode=True) + data = [x.strip() for x in response.split(";")] + if str(data[0]) != "1": + return {"premium": False} + else: + return {"trafficleft": -1, "validuntil": mktime(strptime(str(data[2]), "%d/%m/%Y"))} + + def login(self, user, data, req): + self.loginname = user + self.password = data['password'] + get_data = {'login': 1, 'u': self.loginname, 'p': self.password} + response = req.load("http://simply-debrid.com/api.php", get=get_data, decode=True) + if response != "02: loggin success": + self.wrongPassword() diff --git a/pyload/plugins/accounts/StahnuTo.py b/pyload/plugins/accounts/StahnuTo.py new file mode 100644 index 000000000..9d4cc6994 --- /dev/null +++ b/pyload/plugins/accounts/StahnuTo.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.Account import Account +from pyload.utils import parseFileSize + + +class StahnuTo(Account): + __name__ = "StahnuTo" + __type__ = "account" + __version__ = "0.02" + + __description__ = """StahnuTo account plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + + def loadAccountInfo(self, user, req): + html = req.load("http://www.stahnu.to/") + + m = re.search(r'>VIP: (\d+.*)<', html) + trafficleft = parseFileSize(m.group(1)) * 1024 if m else 0 + + return {"premium": trafficleft > (512 * 1024), "trafficleft": trafficleft, "validuntil": -1} + + def login(self, user, data, req): + html = req.load("http://www.stahnu.to/login.php", post={ + "username": user, + "password": data['password'], + "submit": "Login"}) + + if not '<a href="logout.php">' in html: + self.wrongPassword() diff --git a/pyload/plugins/accounts/TurbobitNet.py b/pyload/plugins/accounts/TurbobitNet.py new file mode 100644 index 000000000..d4221a97a --- /dev/null +++ b/pyload/plugins/accounts/TurbobitNet.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- + +import re +from time import mktime, strptime + +from pyload.plugins.Account import Account + + +class TurbobitNet(Account): + __name__ = "TurbobitNet" + __type__ = "account" + __version__ = "0.01" + + __description__ = """TurbobitNet account plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + + def loadAccountInfo(self, user, req): + html = req.load("http://turbobit.net") + + m = re.search(r'<u>Turbo Access</u> to ([0-9.]+)', html) + if m: + premium = True + validuntil = mktime(strptime(m.group(1), "%d.%m.%Y")) + else: + premium = False + validuntil = -1 + + return {"premium": premium, "trafficleft": -1, "validuntil": validuntil} + + def login(self, user, data, req): + req.cj.setCookie("turbobit.net", "user_lang", "en") + + html = req.load("http://turbobit.net/user/login", post={ + "user[login]": user, + "user[pass]": data['password'], + "user[submit]": "Login"}) + + if not '<div class="menu-item user-name">' in html: + self.wrongPassword() diff --git a/pyload/plugins/accounts/UlozTo.py b/pyload/plugins/accounts/UlozTo.py new file mode 100644 index 000000000..01fb134e8 --- /dev/null +++ b/pyload/plugins/accounts/UlozTo.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.Account import Account + + +class UlozTo(Account): + __name__ = "UlozTo" + __type__ = "account" + __version__ = "0.06" + + __description__ = """Uloz.to account plugin""" + __author_name__ = ("zoidberg", "pulpe") + __author_mail__ = "zoidberg@mujmail.cz" + + TRAFFIC_LEFT_PATTERN = r'<li class="menu-kredit"><a href="/kredit" title="[^"]*?GB = ([0-9.]+) MB"' + + + def loadAccountInfo(self, user, req): + #this cookie gets lost somehow after each request + self.phpsessid = req.cj.getCookie("ULOSESSID") + html = req.load("http://www.ulozto.net/", decode=True) + req.cj.setCookie("www.ulozto.net", "ULOSESSID", self.phpsessid) + + m = re.search(self.TRAFFIC_LEFT_PATTERN, html) + trafficleft = int(float(m.group(1).replace(' ', '').replace(',', '.')) * 1000 * 1.048) if m else 0 + self.premium = True if trafficleft else False + + return {"validuntil": -1, "trafficleft": trafficleft} + + def login(self, user, data, req): + login_page = req.load('http://www.ulozto.net/?do=web-login', decode=True) + action = re.findall('<form action="(.+?)"', login_page)[1].replace('&', '&') + token = re.search('_token_" value="(.+?)"', login_page).group(1) + + html = req.load('http://www.ulozto.net'+action, post={ + "_token_": token, + "login": "Submit", + "password": data['password'], + "username": user + }, decode=True) + + if '<div class="flash error">' in html: + self.wrongPassword() diff --git a/pyload/plugins/accounts/UnrestrictLi.py b/pyload/plugins/accounts/UnrestrictLi.py new file mode 100644 index 000000000..39a75f959 --- /dev/null +++ b/pyload/plugins/accounts/UnrestrictLi.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Account import Account +from pyload.common.json_layer import json_loads + + +class UnrestrictLi(Account): + __name__ = "UnrestrictLi" + __type__ = "account" + __version__ = "0.03" + + __description__ = """Unrestrict.li account plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + + def loadAccountInfo(self, user, req): + json_data = req.load('http://unrestrict.li/api/jdownloader/user.php?format=json') + self.logDebug("JSON data: " + json_data) + json_data = json_loads(json_data) + + if 'vip' in json_data['result'] and json_data['result']['vip'] == 0: + return {"premium": False} + + validuntil = json_data['result']['expires'] + trafficleft = int(json_data['result']['traffic'] / 1024) + + return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft} + + def login(self, user, data, req): + req.cj.setCookie("unrestrict.li", "lang", "EN") + html = req.load("https://unrestrict.li/sign_in") + + if 'solvemedia' in html: + self.logError("A Captcha is required. Go to http://unrestrict.li/sign_in and login, then retry") + return + + post_data = {"username": user, "password": data['password'], + "remember_me": "remember", "signin": "Sign in"} + html = req.load("https://unrestrict.li/sign_in", post=post_data) + + if 'sign_out' not in html: + self.wrongPassword() diff --git a/pyload/plugins/accounts/UploadedTo.py b/pyload/plugins/accounts/UploadedTo.py new file mode 100644 index 000000000..64bbeac6e --- /dev/null +++ b/pyload/plugins/accounts/UploadedTo.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- + +import re +from time import time + +from pyload.plugins.Account import Account + + +class UploadedTo(Account): + __name__ = "UploadedTo" + __type__ = "account" + __version__ = "0.26" + + __description__ = """Uploaded.to account plugin""" + __author_name__ = "mkaay" + __author_mail__ = "mkaay@mkaay.de" + + + def loadAccountInfo(self, user, req): + + req.load("http://uploaded.net/language/en") + html = req.load("http://uploaded.net/me") + + premium = '<a href="register"><em>Premium</em>' in html or '<em>Premium</em></th>' in html + + if premium: + raw_traffic = re.search(r'<th colspan="2"><b class="cB">([^<]+)', html).group(1).replace('.', '') + raw_valid = re.search(r"<td>Duration:</td>\s*<th>([^<]+)", html, re.MULTILINE).group(1).strip() + + traffic = int(self.parseTraffic(raw_traffic)) + + if raw_valid == "unlimited": + validuntil = -1 + else: + raw_valid = re.findall(r"(\d+) (Week|weeks|days|day|hours|hour)", raw_valid) + validuntil = time() + for n, u in raw_valid: + validuntil += int(n) * 60 * 60 * {"Week": 168, "weeks": 168, "days": 24, + "day": 24, "hours": 1, "hour": 1}[u] + + return {"validuntil": validuntil, "trafficleft": traffic, "maxtraffic": 50 * 1024 * 1024} + else: + return {"premium": False, "validuntil": -1} + + def login(self, user, data, req): + + req.load("http://uploaded.net/language/en") + req.cj.setCookie("uploaded.net", "lang", "en") + + page = req.load("http://uploaded.net/io/login", post={"id": user, "pw": data['password'], "_": ""}) + + if "User and password do not match!" in page: + self.wrongPassword() diff --git a/pyload/plugins/accounts/UploadheroCom.py b/pyload/plugins/accounts/UploadheroCom.py new file mode 100644 index 000000000..1cb0ab698 --- /dev/null +++ b/pyload/plugins/accounts/UploadheroCom.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- + +import re +import datetime +import time + +from pyload.plugins.Account import Account + + +class UploadheroCom(Account): + __name__ = "UploadheroCom" + __type__ = "account" + __version__ = "0.2" + + __description__ = """Uploadhero.co account plugin""" + __author_name__ = "mcmyst" + __author_mail__ = "mcmyst@hotmail.fr" + + + def loadAccountInfo(self, user, req): + premium_pattern = re.compile('Il vous reste <span class="bleu">([0-9]+)</span> jours premium.') + + data = self.getAccountData(user) + page = req.load("http://uploadhero.co/my-account") + + if premium_pattern.search(page): + end_date = datetime.date.today() + datetime.timedelta(days=int(premium_pattern.search(page).group(1))) + end_date = time.mktime(future.timetuple()) + account_info = {"validuntil": end_date, "trafficleft": -1, "premium": True} + else: + account_info = {"validuntil": -1, "trafficleft": -1, "premium": False} + + return account_info + + def login(self, user, data, req): + page = req.load("http://uploadhero.co/lib/connexion.php", + post={"pseudo_login": user, "password_login": data['password']}) + + if "mot de passe invalide" in page: + self.wrongPassword() diff --git a/pyload/plugins/accounts/UploadingCom.py b/pyload/plugins/accounts/UploadingCom.py new file mode 100644 index 000000000..9ac674b71 --- /dev/null +++ b/pyload/plugins/accounts/UploadingCom.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- + +from time import time, strptime, mktime +import re + +from pyload.plugins.Account import Account + + +class UploadingCom(Account): + __name__ = "UploadingCom" + __type__ = "account" + __version__ = "0.1" + + __description__ = """Uploading.com account plugin""" + __author_name__ = "mkaay" + __author_mail__ = "mkaay@mkaay.de" + + + def loadAccountInfo(self, user, req): + src = req.load("http://uploading.com/") + premium = True + if "UPGRADE TO PREMIUM" in src: + return {"validuntil": -1, "trafficleft": -1, "premium": False} + + m = re.search("Valid Until:(.*?)<", src) + if m: + validuntil = int(mktime(strptime(m.group(1).strip(), "%b %d, %Y"))) + else: + validuntil = -1 + + return {"validuntil": validuntil, "trafficleft": -1, "premium": True} + + def login(self, user, data, req): + req.cj.setCookie("uploading.com", "lang", "1") + req.cj.setCookie("uploading.com", "language", "1") + req.cj.setCookie("uploading.com", "setlang", "en") + req.cj.setCookie("uploading.com", "_lang", "en") + req.load("http://uploading.com/") + req.load("http://uploading.com/general/login_form/?JsHttpRequest=%s-xml" % long(time() * 1000), + post={"email": user, "password": data['password'], "remember": "on"}) diff --git a/pyload/plugins/accounts/UptoboxCom.py b/pyload/plugins/accounts/UptoboxCom.py new file mode 100644 index 000000000..7f9618da8 --- /dev/null +++ b/pyload/plugins/accounts/UptoboxCom.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.XFSPAccount import XFSPAccount + + +class UptoboxCom(XFSPAccount): + __name__ = "UptoboxCom" + __type__ = "account" + __version__ = "0.02" + + __description__ = """DDLStorage.com account plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + MAIN_PAGE = "http://uptobox.com/" + + VALID_UNTIL_PATTERN = r'>Premium.[Aa]ccount expire: ([^<]+)</strong>' diff --git a/pyload/plugins/accounts/YibaishiwuCom.py b/pyload/plugins/accounts/YibaishiwuCom.py new file mode 100644 index 000000000..3898c3cef --- /dev/null +++ b/pyload/plugins/accounts/YibaishiwuCom.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.Account import Account + + +class YibaishiwuCom(Account): + __name__ = "YibaishiwuCom" + __type__ = "account" + __version__ = "0.01" + + __description__ = """115.com account plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + ACCOUNT_INFO_PATTERN = r'var USER_PERMISSION = {(.*?)}' + + + def loadAccountInfo(self, user, req): + #self.relogin(user) + html = req.load("http://115.com/", decode=True) + + m = re.search(self.ACCOUNT_INFO_PATTERN, html, re.S) + premium = True if (m and 'is_vip: 1' in m.group(1)) else False + validuntil = trafficleft = (-1 if m else 0) + return dict({"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium}) + + def login(self, user, data, req): + html = req.load('http://passport.115.com/?ac=login', post={ + "back": "http://www.115.com/", + "goto": "http://115.com/", + "login[account]": user, + "login[passwd]": data['password'] + }, decode=True) + + if not 'var USER_PERMISSION = {' in html: + self.wrongPassword() diff --git a/pyload/plugins/accounts/ZeveraCom.py b/pyload/plugins/accounts/ZeveraCom.py new file mode 100644 index 000000000..d84000359 --- /dev/null +++ b/pyload/plugins/accounts/ZeveraCom.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- + +from time import mktime, strptime + +from pyload.plugins.Account import Account + + +class ZeveraCom(Account): + __name__ = "ZeveraCom" + __type__ = "account" + __version__ = "0.21" + + __description__ = """Zevera.com account plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + + def loadAccountInfo(self, user, req): + data = self.getAPIData(req) + if data == "No traffic": + account_info = {"trafficleft": 0, "validuntil": 0, "premium": False} + else: + account_info = { + "trafficleft": int(data['availabletodaytraffic']) * 1024, + "validuntil": mktime(strptime(data['endsubscriptiondate'], "%Y/%m/%d %H:%M:%S")), + "premium": True + } + return account_info + + def login(self, user, data, req): + self.loginname = user + self.password = data['password'] + if self.getAPIData(req) == "No traffic": + self.wrongPassword() + + def getAPIData(self, req, just_header=False, **kwargs): + get_data = { + 'cmd': 'accountinfo', + 'login': self.loginname, + 'pass': self.password + } + get_data.update(kwargs) + + response = req.load("http://www.zevera.com/jDownloader.ashx", get=get_data, + decode=True, just_header=just_header) + self.logDebug(response) + + if ':' in response: + if not just_header: + response = response.replace(',', '\n') + return dict((y.strip().lower(), z.strip()) for (y, z) in + [x.split(':', 1) for x in response.splitlines() if ':' in x]) + else: + return response diff --git a/module/plugins/accounts/__init__.py b/pyload/plugins/accounts/__init__.py index e69de29bb..e69de29bb 100644 --- a/module/plugins/accounts/__init__.py +++ b/pyload/plugins/accounts/__init__.py diff --git a/pyload/plugins/container/CCF.py b/pyload/plugins/container/CCF.py new file mode 100644 index 000000000..89ac90097 --- /dev/null +++ b/pyload/plugins/container/CCF.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- + +import re + +from os import makedirs +from os.path import exists +from urllib2 import build_opener + +from pyload.lib.MultipartPostHandler import MultipartPostHandler + +from pyload.plugins.Container import Container +from pyload.utils import safe_join + + +class CCF(Container): + __name__ = "CCF" + __version__ = "0.2" + + __pattern__ = r'.+\.ccf' + + __description__ = """CCF container decrypter plugin""" + __author_name__ = "Willnix" + __author_mail__ = "Willnix@pyload.org" + + + def decrypt(self, pyfile): + + infile = pyfile.url.replace("\n", "") + + opener = build_opener(MultipartPostHandler) + params = {"src": "ccf", + "filename": "test.ccf", + "upload": open(infile, "rb")} + tempdlc_content = opener.open('http://service.jdownloader.net/dlcrypt/getDLC.php', params).read() + + download_folder = self.config['general']['download_folder'] + + tempdlc_name = safe_join(download_folder, "tmp_%s.dlc" % pyfile.name) + tempdlc = open(tempdlc_name, "w") + tempdlc.write(re.search(r'<dlc>(.*)</dlc>', tempdlc_content, re.DOTALL).group(1)) + tempdlc.close() + + self.urls = [tempdlc_name] diff --git a/module/plugins/container/DLC_25.pyc b/pyload/plugins/container/DLC_25.pyc Binary files differindex b8fde0051..b8fde0051 100644 --- a/module/plugins/container/DLC_25.pyc +++ b/pyload/plugins/container/DLC_25.pyc diff --git a/module/plugins/container/DLC_26.pyc b/pyload/plugins/container/DLC_26.pyc Binary files differindex 41a4e0cb8..41a4e0cb8 100644 --- a/module/plugins/container/DLC_26.pyc +++ b/pyload/plugins/container/DLC_26.pyc diff --git a/module/plugins/container/DLC_27.pyc b/pyload/plugins/container/DLC_27.pyc Binary files differindex a6bffaf74..a6bffaf74 100644 --- a/module/plugins/container/DLC_27.pyc +++ b/pyload/plugins/container/DLC_27.pyc diff --git a/pyload/plugins/container/LinkList.py b/pyload/plugins/container/LinkList.py new file mode 100644 index 000000000..b8941ee29 --- /dev/null +++ b/pyload/plugins/container/LinkList.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- + +import codecs + +from pyload.plugins.Container import Container +from pyload.utils import fs_encode + + +class LinkList(Container): + __name__ = "LinkList" + __version__ = "0.12" + + __pattern__ = r'.+\.txt' + __config__ = [("clear", "bool", "Clear Linklist after adding", False), + ("encoding", "string", "File encoding (default utf-8)", "")] + + __description__ = """Read link lists in txt format""" + __author_name__ = ("spoob", "jeix") + __author_mail__ = ("spoob@pyload.org", "jeix@hasnomail.com") + + + def decrypt(self, pyfile): + try: + file_enc = codecs.lookup(self.getConfig("encoding")).name + except: + file_enc = "utf-8" + + print repr(pyfile.url) + print pyfile.url + + file_name = fs_encode(pyfile.url) + + txt = codecs.open(file_name, 'r', file_enc) + links = txt.readlines() + curPack = "Parsed links from %s" % pyfile.name + + packages = {curPack:[],} + + for link in links: + link = link.strip() + if not link: + continue + + if link.startswith(";"): + continue + if link.startswith("[") and link.endswith("]"): + # new package + curPack = link[1:-1] + packages[curPack] = [] + continue + packages[curPack].append(link) + txt.close() + + # empty packages fix + + delete = [] + + for key,value in packages.iteritems(): + if not value: + delete.append(key) + + for key in delete: + del packages[key] + + if self.getConfig("clear"): + try: + txt = open(file_name, 'wb') + txt.close() + except: + self.logWarning(_("LinkList could not be cleared.")) + + for name, links in packages.iteritems(): + self.packages.append((name, links, name)) diff --git a/pyload/plugins/container/RSDF.py b/pyload/plugins/container/RSDF.py new file mode 100644 index 000000000..2b4d4c686 --- /dev/null +++ b/pyload/plugins/container/RSDF.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- + +import base64 +import binascii +import re + +from pyload.plugins.Container import Container + + +class RSDF(Container): + __name__ = "RSDF" + __version__ = "0.22" + + __pattern__ = r'.+\.rsdf' + + __description__ = """RSDF container decrypter plugin""" + __author_name__ = ("RaNaN", "spoob") + __author_mail__ = ("RaNaN@pyload.org", "spoob@pyload.org") + + + def decrypt(self, pyfile): + + from Crypto.Cipher import AES + + infile = pyfile.url.replace("\n", "") + Key = binascii.unhexlify('8C35192D964DC3182C6F84F3252239EB4A320D2500000000') + + IV = binascii.unhexlify('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF') + IV_Cipher = AES.new(Key, AES.MODE_ECB) + IV = IV_Cipher.encrypt(IV) + + obj = AES.new(Key, AES.MODE_CFB, IV) + + rsdf = open(infile, 'r') + + data = rsdf.read() + rsdf.close() + + if re.search(r"<title>404 - Not Found</title>", data) is None: + data = binascii.unhexlify(''.join(data.split())) + data = data.splitlines() + + for link in data: + if not link: + continue + link = base64.b64decode(link) + link = obj.decrypt(link) + decryptedUrl = link.replace('CCF: ', '') + self.urls.append(decryptedUrl) + + self.log.debug("%s: adding package %s with %d links" % (self.__name__,pyfile.package().name,len(links))) diff --git a/module/plugins/container/__init__.py b/pyload/plugins/container/__init__.py index e69de29bb..e69de29bb 100644 --- a/module/plugins/container/__init__.py +++ b/pyload/plugins/container/__init__.py diff --git a/pyload/plugins/crypter/BitshareComFolder.py b/pyload/plugins/crypter/BitshareComFolder.py new file mode 100644 index 000000000..cfb6fc1a0 --- /dev/null +++ b/pyload/plugins/crypter/BitshareComFolder.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class BitshareComFolder(SimpleCrypter): + __name__ = "BitshareComFolder" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?bitshare\.com/\?d=\w+' + + __description__ = """Bitshare.com folder decrypter plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + LINK_PATTERN = r'<a href="(http://bitshare.com/files/.+)">.+</a></td>' + TITLE_PATTERN = r'View public folder "(?P<title>.+)"</h1>' diff --git a/pyload/plugins/crypter/C1neonCom.py b/pyload/plugins/crypter/C1neonCom.py new file mode 100644 index 000000000..2d1e91ef6 --- /dev/null +++ b/pyload/plugins/crypter/C1neonCom.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class C1neonCom(DeadCrypter): + __name__ = "C1neonCom" + __type__ = "crypter" + __version__ = "0.05" + + __pattern__ = r'http://(?:www\.)?c1neon.com/.*?' + + __description__ = """C1neon.com decrypter plugin""" + __author_name__ = "godofdream" + __author_mail__ = "soilfiction@gmail.com" diff --git a/pyload/plugins/crypter/ChipDe.py b/pyload/plugins/crypter/ChipDe.py new file mode 100644 index 000000000..29a248693 --- /dev/null +++ b/pyload/plugins/crypter/ChipDe.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- + +import re +from pyload.plugins.Crypter import Crypter + + +class ChipDe(Crypter): + __name__ = "ChipDe" + __type__ = "crypter" + __version__ = "0.1" + + __pattern__ = r'http://(?:www\.)?chip.de/video/.*\.html' + + __description__ = """Chip.de decrypter plugin""" + __author_name__ = "4Christopher" + __author_mail__ = "4Christopher@gmx.de" + + + def decrypt(self, pyfile): + self.html = self.load(pyfile.url) + try: + f = re.search(r'"(http://video.chip.de/\d+?/.*)"', self.html) + except: + self.fail('Failed to find the URL') + else: + self.urls = [f.group(1)] + self.logDebug('The file URL is %s' % self.urls[0]) diff --git a/pyload/plugins/crypter/CrockoComFolder.py b/pyload/plugins/crypter/CrockoComFolder.py new file mode 100644 index 000000000..200b3333e --- /dev/null +++ b/pyload/plugins/crypter/CrockoComFolder.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class CrockoComFolder(SimpleCrypter): + __name__ = "CrockoComFolder" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?crocko.com/f/.*' + + __description__ = """Crocko.com folder decrypter plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + LINK_PATTERN = r'<td class="last"><a href="([^"]+)">download</a>' diff --git a/pyload/plugins/crypter/CryptItCom.py b/pyload/plugins/crypter/CryptItCom.py new file mode 100644 index 000000000..3de00847e --- /dev/null +++ b/pyload/plugins/crypter/CryptItCom.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class CryptItCom(DeadCrypter): + __name__ = "CryptItCom" + __type__ = "crypter" + __version__ = "0.11" + + __pattern__ = r'http://(?:www\.)?crypt-it\.com/(s|e|d|c)/[\w]+' + + __description__ = """Crypt-it.com decrypter plugin""" + __author_name__ = "jeix" + __author_mail__ = "jeix@hasnomail.de" diff --git a/pyload/plugins/crypter/CzshareComFolder.py b/pyload/plugins/crypter/CzshareComFolder.py new file mode 100644 index 000000000..94e4f07b3 --- /dev/null +++ b/pyload/plugins/crypter/CzshareComFolder.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- + +import re +from pyload.plugins.Crypter import Crypter + + +class CzshareComFolder(Crypter): + __name__ = "CzshareComFolder" + __type__ = "crypter" + __version__ = "0.2" + + __pattern__ = r'http://(?:www\.)?(czshare|sdilej)\.(com|cz)/folders/.*' + + __description__ = """Czshare.com folder decrypter plugin, now Sdilej.cz""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FOLDER_PATTERN = r'<tr class="subdirectory">\s*<td>\s*<table>(.*?)</table>' + LINK_PATTERN = r'<td class="col2"><a href="([^"]+)">info</a></td>' + + + def decrypt(self, pyfile): + html = self.load(pyfile.url) + + m = re.search(self.FOLDER_PATTERN, html, re.DOTALL) + if m is None: + self.fail("Parse error (FOLDER)") + + self.urls.extend(re.findall(self.LINK_PATTERN, m.group(1))) + if not self.urls: + self.fail('Could not extract any links') diff --git a/pyload/plugins/crypter/DDLMusicOrg.py b/pyload/plugins/crypter/DDLMusicOrg.py new file mode 100644 index 000000000..be4a92617 --- /dev/null +++ b/pyload/plugins/crypter/DDLMusicOrg.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- + +import re + +from time import sleep + +from pyload.plugins.Crypter import Crypter + + +class DDLMusicOrg(Crypter): + __name__ = "DDLMusicOrg" + __type__ = "crypter" + __version__ = "0.3" + + __pattern__ = r'http://(?:www\.)?ddl-music\.org/captcha/ddlm_cr\d\.php\?\d+\?\d+' + + __description__ = """Ddl-music.org decrypter plugin""" + __author_name__ = "mkaay" + __author_mail__ = "mkaay@mkaay.de" + + + def setup(self): + self.multiDL = False + + def decrypt(self, pyfile): + html = self.req.load(pyfile.url, cookies=True) + + if re.search(r"Wer dies nicht rechnen kann", html) is not None: + self.offline() + + math = re.search(r"(\d+) ([\+-]) (\d+) =\s+<inp", self.html) + id = re.search(r"name=\"id\" value=\"(\d+)\"", self.html).group(1) + linknr = re.search(r"name=\"linknr\" value=\"(\d+)\"", self.html).group(1) + + solve = "" + if math.group(2) == "+": + solve = int(math.group(1)) + int(math.group(3)) + else: + solve = int(math.group(1)) - int(math.group(3)) + sleep(3) + htmlwithlink = self.req.load(pyfile.url, cookies=True, + post={"calc%s" % linknr: solve, "send%s" % linknr: "Send", "id": id, + "linknr": linknr}) + m = re.search(r"<form id=\"ff\" action=\"(.*?)\" method=\"post\">", htmlwithlink) + if m: + self.urls = [m.group(1)] + else: + self.retry() diff --git a/pyload/plugins/crypter/DailymotionBatch.py b/pyload/plugins/crypter/DailymotionBatch.py new file mode 100644 index 000000000..d44350c6b --- /dev/null +++ b/pyload/plugins/crypter/DailymotionBatch.py @@ -0,0 +1,98 @@ +# -*- coding: utf-8 -*- + +import re + +from urlparse import urljoin + +from pyload.common.json_layer import json_loads +from pyload.plugins.Crypter import Crypter +from pyload.utils import safe_join + + +class DailymotionBatch(Crypter): + __name__ = "DailymotionBatch" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'https?://(?:www\.)?dailymotion\.com/((playlists/)?(?P<TYPE>playlist|user)/)?(?P<ID>[\w^_]+)(?(TYPE)|#)' + + __description__ = """Dailymotion.com channel & playlist decrypter""" + __author_name__ = "Walter Purcaro" + __author_mail__ = "vuolter@gmail.com" + + + def api_response(self, ref, req=None): + url = urljoin("https://api.dailymotion.com/", ref) + page = self.load(url, get=req) + return json_loads(page) + + def getPlaylistInfo(self, id): + ref = "playlist/" + id + req = {"fields": "name,owner.screenname"} + playlist = self.api_response(ref, req) + + if "error" in playlist: + return + + name = playlist['name'] + owner = playlist['owner.screenname'] + return name, owner + + def _getPlaylists(self, user_id, page=1): + ref = "user/%s/playlists" % user_id + req = {"fields": "id", "page": page, "limit": 100} + user = self.api_response(ref, req) + + if "error" in user: + return + + for playlist in user['list']: + yield playlist['id'] + + if user['has_more']: + for item in self._getPlaylists(user_id, page + 1): + yield item + + def getPlaylists(self, user_id): + return [(id,) + self.getPlaylistInfo(id) for id in self._getPlaylists(user_id)] + + def _getVideos(self, id, page=1): + ref = "playlist/%s/videos" % id + req = {"fields": "url", "page": page, "limit": 100} + playlist = self.api_response(ref, req) + + if "error" in playlist: + return + + for video in playlist['list']: + yield video['url'] + + if playlist['has_more']: + for item in self._getVideos(id, page + 1): + yield item + + def getVideos(self, playlist_id): + return list(self._getVideos(playlist_id))[::-1] + + def decrypt(self, pyfile): + m = re.match(self.__pattern__, pyfile.url) + m_id = m.group("ID") + m_type = m.group("TYPE") + + if m_type == "playlist": + self.logDebug("Url recognized as Playlist") + p_info = self.getPlaylistInfo(m_id) + playlists = [(m_id,) + p_info] if p_info else None + else: + self.logDebug("Url recognized as Channel") + playlists = self.getPlaylists(m_id) + self.logDebug("%s playlist\s found on channel \"%s\"" % (len(playlists), m_id)) + + if not playlists: + self.fail("No playlist available") + + for p_id, p_name, p_owner in playlists: + p_videos = self.getVideos(p_id) + p_folder = safe_join(self.config['general']['download_folder'], p_owner, p_name) + self.logDebug("%s video\s found on playlist \"%s\"" % (len(p_videos), p_name)) + self.packages.append((p_name, p_videos, p_folder)) #: folder is NOT recognized by pyload 0.4.9! diff --git a/pyload/plugins/crypter/DataHuFolder.py b/pyload/plugins/crypter/DataHuFolder.py new file mode 100644 index 000000000..49dab9159 --- /dev/null +++ b/pyload/plugins/crypter/DataHuFolder.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class DataHuFolder(SimpleCrypter): + __name__ = "DataHuFolder" + __type__ = "crypter" + __version__ = "0.03" + + __pattern__ = r'http://(?:www\.)?data.hu/dir/\w+' + + __description__ = """Data.hu folder decrypter plugin""" + __author_name__ = ("crash", "stickell") + __author_mail__ = "l.stickell@yahoo.it" + + LINK_PATTERN = r"<a href='(http://data\.hu/get/.+)' target='_blank'>\1</a>" + TITLE_PATTERN = ur'<title>(?P<title>.+) Let\xf6lt\xe9se</title>' + + + def decrypt(self, pyfile): + self.html = self.load(pyfile.url, decode=True) + + if u'K\xe9rlek add meg a jelsz\xf3t' in self.html: # Password protected + password = self.getPassword() + if password is '': + self.fail("No password specified, please set right password on Add package form and retry") + self.logDebug('The folder is password protected', 'Using password: ' + password) + self.html = self.load(pyfile.url, post={'mappa_pass': password}, decode=True) + if u'Hib\xe1s jelsz\xf3' in self.html: # Wrong password + self.fail("Incorrect password, please set right password on Add package form and retry") + + package_name, folder_name = self.getPackageNameAndFolder() + + package_links = re.findall(self.LINK_PATTERN, self.html) + self.logDebug('Package has %d links' % len(package_links)) + + if package_links: + self.packages = [(package_name, package_links, folder_name)] + else: + self.fail('Could not extract any links') diff --git a/pyload/plugins/crypter/DdlstorageComFolder.py b/pyload/plugins/crypter/DdlstorageComFolder.py new file mode 100644 index 000000000..7469610f1 --- /dev/null +++ b/pyload/plugins/crypter/DdlstorageComFolder.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter, create_getInfo + + +class DdlstorageComFolder(DeadCrypter): + __name__ = "DdlstorageComFolder" + __type__ = "crypter" + __version__ = "0.03" + + __pattern__ = r'https?://(?:www\.)?ddlstorage\.com/folder/\w+' + + __description__ = """DDLStorage.com folder decrypter plugin""" + __author_name__ = ("godofdream", "stickell") + __author_mail__ = ("soilfiction@gmail.com", "l.stickell@yahoo.it") + + +getInfo = create_getInfo(SpeedLoadOrg) diff --git a/pyload/plugins/crypter/DepositfilesComFolder.py b/pyload/plugins/crypter/DepositfilesComFolder.py new file mode 100644 index 000000000..e308305ae --- /dev/null +++ b/pyload/plugins/crypter/DepositfilesComFolder.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class DepositfilesComFolder(SimpleCrypter): + __name__ = "DepositfilesComFolder" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?depositfiles.com/folders/\w+' + + __description__ = """Depositfiles.com folder decrypter plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + LINK_PATTERN = r'<div class="progressName"[^>]*>\s*<a href="([^"]+)" title="[^"]*" target="_blank">' diff --git a/pyload/plugins/crypter/Dereferer.py b/pyload/plugins/crypter/Dereferer.py new file mode 100644 index 000000000..6a7ac8c67 --- /dev/null +++ b/pyload/plugins/crypter/Dereferer.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- + +import re + +from urllib import unquote + +from pyload.plugins.Crypter import Crypter + + +class Dereferer(Crypter): + __name__ = "Dereferer" + __type__ = "crypter" + __version__ = "0.1" + + __pattern__ = r'https?://([^/]+)/.*?(?P<url>(ht|f)tps?(://|%3A%2F%2F).*)' + + __description__ = """Crypter for dereferers""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + + def decrypt(self, pyfile): + link = re.match(self.__pattern__, pyfile.url).group('url') + self.urls = [unquote(link).rstrip('+')] diff --git a/pyload/plugins/crypter/DlProtectCom.py b/pyload/plugins/crypter/DlProtectCom.py new file mode 100644 index 000000000..2c9e282be --- /dev/null +++ b/pyload/plugins/crypter/DlProtectCom.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- + +import re + +from base64 import urlsafe_b64encode +from time import time + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class DlProtectCom(SimpleCrypter): + __name__ = "DlProtectCom" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?dl-protect\.com/((en|fr)/)?(?P<ID>\w+)' + + __description__ = """Dl-protect.com decrypter plugin""" + __author_name__ = "Walter Purcaro" + __author_mail__ = "vuolter@gmail.com" + + OFFLINE_PATTERN = r'>Unfortunately, the link you are looking for is not found' + + + def getLinks(self): + # Direct link with redirect + if not re.match(r"http://(?:www\.)?dl-protect\.com", self.req.http.lastEffectiveURL): + return [self.req.http.lastEffectiveURL] + + #id = re.match(self.__pattern__, self.pyfile.url).group("ID") + key = re.search(r'name="id_key" value="(.+?)"', self.html).group(1) + + post_req = {"id_key": key, "submitform": ""} + + if self.OFFLINE_PATTERN in self.html: + self.offline() + elif ">Please click on continue to see the content" in self.html: + post_req.update({"submitform": "Continue"}) + else: + mstime = int(round(time() * 1000)) + b64time = "_" + urlsafe_b64encode(str(mstime)).replace("=", "%3D") + + post_req.update({"i": b64time, "submitform": "Decrypt+link"}) + + if ">Password :" in self.html: + post_req['pwd'] = self.getPassword() + + if ">Security Code" in self.html: + captcha_id = re.search(r'/captcha\.php\?uid=(.+?)"', self.html).group(1) + captcha_url = "http://www.dl-protect.com/captcha.php?uid=" + captcha_id + captcha_code = self.decryptCaptcha(captcha_url, imgtype="gif") + + post_req['secure'] = captcha_code + + self.html = self.load(self.pyfile.url, post=post_req) + + for errmsg in (">The password is incorrect", ">The security code is incorrect"): + if errmsg in self.html: + self.fail(errmsg[1:]) + + pattern = r'<a href="([^/].+?)" target="_blank">' + return re.findall(pattern, self.html) diff --git a/pyload/plugins/crypter/DontKnowMe.py b/pyload/plugins/crypter/DontKnowMe.py new file mode 100644 index 000000000..b16992b27 --- /dev/null +++ b/pyload/plugins/crypter/DontKnowMe.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- + +import re + +from urllib import unquote + +from pyload.plugins.Crypter import Crypter + + +class DontKnowMe(Crypter): + __name__ = "DontKnowMe" + __type__ = "crypter" + __version__ = "0.1" + + __pattern__ = r'http://(?:www\.)?dontknow.me/at/\?.+$' + + __description__ = """DontKnow.me decrypter plugin""" + __author_name__ = "selaux" + __author_mail__ = None + + LINK_PATTERN = r'http://dontknow.me/at/\?(.+)$' + + + def decrypt(self, pyfile): + link = re.findall(self.LINK_PATTERN, pyfile.url)[0] + self.urls = [unquote(link)] diff --git a/pyload/plugins/crypter/DuckCryptInfo.py b/pyload/plugins/crypter/DuckCryptInfo.py new file mode 100644 index 000000000..a7afa2d22 --- /dev/null +++ b/pyload/plugins/crypter/DuckCryptInfo.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.lib.BeautifulSoup import BeautifulSoup + +from pyload.plugins.Crypter import Crypter + + +class DuckCryptInfo(Crypter): + __name__ = "DuckCryptInfo" + __type__ = "crypter" + __version__ = "0.02" + + __pattern__ = r'http://(?:www\.)?duckcrypt.info/(folder|wait|link)/(\w+)/?(\w*)' + + __description__ = """DuckCrypt.info decrypter plugin""" + __author_name__ = "godofdream" + __author_mail__ = "soilfiction@gmail.com" + + TIMER_PATTERN = r'<span id="timer">(.*)</span>' + + + def decrypt(self, pyfile): + url = pyfile.url + # seems we don't need to wait + #src = self.req.load(str(url)) + #m = re.search(self.TIMER_PATTERN, src) + #if m: + # self.logDebug("Sleeping for" % m.group(1)) + # self.setWait(int(m.group(1)) ,False) + m = re.match(self.__pattern__, url) + if m is None: + self.fail('Weird error in link') + if str(m.group(1)) == "link": + self.handleLink(url) + else: + self.handleFolder(m) + + def handleFolder(self, m): + src = self.load("http://duckcrypt.info/ajax/auth.php?hash=" + str(m.group(2))) + m = re.match(self.__pattern__, src) + self.logDebug("Redirectet to " + str(m.group(0))) + src = self.load(str(m.group(0))) + soup = BeautifulSoup(src) + cryptlinks = soup.findAll("div", attrs={"class": "folderbox"}) + self.logDebug("Redirectet to " + str(cryptlinks)) + if not cryptlinks: + self.fail('no links m - (Plugin out of date?)') + for clink in cryptlinks: + if clink.find("a"): + self.handleLink(clink.find("a")['href']) + + def handleLink(self, url): + src = self.load(url) + soup = BeautifulSoup(src) + self.urls = [soup.find("iframe")['src']] + if not self.urls: + self.logDebug('no links m - (Plugin out of date?)') diff --git a/pyload/plugins/crypter/DuploadOrgFolder.py b/pyload/plugins/crypter/DuploadOrgFolder.py new file mode 100644 index 000000000..ca76cff75 --- /dev/null +++ b/pyload/plugins/crypter/DuploadOrgFolder.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class DuploadOrgFolder(SimpleCrypter): + __name__ = "DuploadOrgFolder" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?dupload\.org/folder/\d+/' + + __description__ = """Dupload.org folder decrypter plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + LINK_PATTERN = r'<td style="[^"]+"><a href="(http://[^"]+)" target="_blank">[^<]+</a></td>' diff --git a/pyload/plugins/crypter/EasybytezComFolder.py b/pyload/plugins/crypter/EasybytezComFolder.py new file mode 100644 index 000000000..163f2bdf3 --- /dev/null +++ b/pyload/plugins/crypter/EasybytezComFolder.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class EasybytezComFolder(SimpleCrypter): + __name__ = "EasybytezComFolder" + __type__ = "crypter" + __version__ = "0.06" + + __pattern__ = r'http://(?:www\.)?easybytez\.com/users/(?P<ID>\d+/\d+)' + + __description__ = """Easybytez.com decrypter plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + URL_REPLACEMENTS = [(__pattern__, r"http://www.easybytez.com/users/\g<ID>?per_page=10000")] + + LINK_PATTERN = r'<td><a href="(http://www\.easybytez\.com/\w+)" target="_blank">.+(?:</a>)?</td>' + TITLE_PATTERN = r'<Title>Files of \d+: (?P<title>.+) folder</Title>' diff --git a/pyload/plugins/crypter/EmbeduploadCom.py b/pyload/plugins/crypter/EmbeduploadCom.py new file mode 100644 index 000000000..476767f94 --- /dev/null +++ b/pyload/plugins/crypter/EmbeduploadCom.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- + +import re +from pyload.plugins.Crypter import Crypter +from pyload.network.HTTPRequest import BadHeader + + +class EmbeduploadCom(Crypter): + __name__ = "EmbeduploadCom" + __type__ = "crypter" + __version__ = "0.02" + + __pattern__ = r'http://(?:www\.)?embedupload.com/\?d=.*' + __config__ = [("preferedHoster", "str", "Prefered hoster list (bar-separated) ", "embedupload"), + ("ignoredHoster", "str", "Ignored hoster list (bar-separated) ", "")] + + __description__ = """EmbedUpload.com decrypter plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + LINK_PATTERN = r'<div id="([^"]+)"[^>]*>\s*<a href="([^"]+)" target="_blank" (?:class="DownloadNow"|style="color:red")>' + + + def decrypt(self, pyfile): + self.html = self.load(pyfile.url, decode=True) + tmp_links = [] + + m = re.findall(self.LINK_PATTERN, self.html) + if m: + prefered_set = set(self.getConfig("preferedHoster").split('|')) + prefered_set = map(lambda s: s.lower().split('.')[0], prefered_set) + print "PF", prefered_set + tmp_links.extend([x[1] for x in m if x[0] in prefered_set]) + self.urls = self.getLocation(tmp_links) + + if not self.urls: + ignored_set = set(self.getConfig("ignoredHoster").split('|')) + ignored_set = map(lambda s: s.lower().split('.')[0], ignored_set) + print "IG", ignored_set + tmp_links.extend([x[1] for x in m if x[0] not in ignored_set]) + self.urls = self.getLocation(tmp_links) + + if not self.urls: + self.fail('Could not extract any links') + + def getLocation(self, tmp_links): + new_links = [] + for link in tmp_links: + try: + header = self.load(link, just_header=True) + if "location" in header: + new_links.append(header['location']) + except BadHeader: + pass + return new_links diff --git a/pyload/plugins/crypter/FilebeerInfoFolder.py b/pyload/plugins/crypter/FilebeerInfoFolder.py new file mode 100644 index 000000000..ee577a865 --- /dev/null +++ b/pyload/plugins/crypter/FilebeerInfoFolder.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class FilebeerInfoFolder(DeadCrypter): + __name__ = "FilebeerInfoFolder" + __type__ = "crypter" + __version__ = "0.02" + + __pattern__ = r'http://(?:www\.)?filebeer\.info/(\d+~f).*' + + __description__ = """Filebeer.info folder decrypter plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" diff --git a/pyload/plugins/crypter/FilecloudIoFolder.py b/pyload/plugins/crypter/FilecloudIoFolder.py new file mode 100644 index 000000000..577dd43a3 --- /dev/null +++ b/pyload/plugins/crypter/FilecloudIoFolder.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class FilecloudIoFolder(SimpleCrypter): + __name__ = "FilecloudIoFolder" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'https?://(?:www\.)?(filecloud\.io|ifile\.it)/_\w+' + + __description__ = """Filecloud.io folder decrypter plugin""" + __author_name__ = "Walter Purcaro" + __author_mail__ = "vuolter@gmail.com" + + LINK_PATTERN = r'href="(http://filecloud.io/\w+)" title' + TITLE_PATTERN = r'>(?P<title>.+?) - filecloud.io<' diff --git a/pyload/plugins/crypter/FilefactoryComFolder.py b/pyload/plugins/crypter/FilefactoryComFolder.py new file mode 100644 index 000000000..6886fa5b1 --- /dev/null +++ b/pyload/plugins/crypter/FilefactoryComFolder.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class FilefactoryComFolder(SimpleCrypter): + __name__ = "FilefactoryComFolder" + __type__ = "crypter" + __version__ = "0.2" + + __pattern__ = r'https?://(?:www\.)?filefactory\.com/(?:f|folder)/\w+' + + __description__ = """Filefactory.com folder decrypter plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + LINK_PATTERN = r'<td><a href="([^"]+)">' + TITLE_PATTERN = r'<h1>Files in <span>(?P<title>.+)</span></h1>' + PAGES_PATTERN = r'data-paginator-totalPages="(?P<pages>\d+)"' + + SH_COOKIES = [('.filefactory.com', 'locale', 'en_US.utf8')] + + + def loadPage(self, page_n): + return self.load(self.pyfile.url, get={'page': page_n}) diff --git a/pyload/plugins/crypter/FilerNetFolder.py b/pyload/plugins/crypter/FilerNetFolder.py new file mode 100644 index 000000000..4acb7e165 --- /dev/null +++ b/pyload/plugins/crypter/FilerNetFolder.py @@ -0,0 +1,22 @@ +import re + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class FilerNetFolder(SimpleCrypter): + __name__ = "FilerNetFolder" + __type__ = "crypter" + __version__ = "0.3" + + __pattern__ = r'https?://filer\.net/folder/\w{16}' + + __description__ = """Filer.net decrypter plugin""" + __author_name_ = ("nath_schwarz", "stickell") + __author_mail_ = ("nathan.notwhite@gmail.com", "l.stickell@yahoo.it") + + LINK_PATTERN = r'href="(/get/\w{16})">(?!<)' + TITLE_PATTERN = r'<h3>(?P<title>.+) - <small' + + + def getLinks(self): + return ['http://filer.net%s' % link for link in re.findall(self.LINK_PATTERN, self.html)] diff --git a/pyload/plugins/crypter/FileserveComFolder.py b/pyload/plugins/crypter/FileserveComFolder.py new file mode 100644 index 000000000..52e1df6b4 --- /dev/null +++ b/pyload/plugins/crypter/FileserveComFolder.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.Crypter import Crypter + + +class FileserveComFolder(Crypter): + __name__ = "FileserveComFolder" + __type__ = "crypter" + __version__ = "0.11" + + __pattern__ = r'http://(?:www\.)?fileserve.com/list/\w+' + + __description__ = """FileServe.com folder decrypter plugin""" + __author_name__ = "fionnc" + __author_mail__ = "fionnc@gmail.com" + + FOLDER_PATTERN = r'<table class="file_list">(.*?)</table>' + LINK_PATTERN = r'<a href="([^"]+)" class="sheet_icon wbold">' + + + def decrypt(self, pyfile): + html = self.load(pyfile.url) + + new_links = [] + + folder = re.search(self.FOLDER_PATTERN, html, re.DOTALL) + if folder is None: + self.fail("Parse error (FOLDER)") + + new_links.extend(re.findall(self.LINK_PATTERN, folder.group(1))) + + if new_links: + self.urls = [map(lambda s: "http://fileserve.com%s" % s, new_links)] + else: + self.fail('Could not extract any links') diff --git a/pyload/plugins/crypter/FilestubeCom.py b/pyload/plugins/crypter/FilestubeCom.py new file mode 100644 index 000000000..fc80762d1 --- /dev/null +++ b/pyload/plugins/crypter/FilestubeCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class FilestubeCom(SimpleCrypter): + __name__ = "FilestubeCom" + __type__ = "crypter" + __version__ = "0.03" + + __pattern__ = r'http://(?:www\.)?filestube\.(?:com|to)/\w+' + + __description__ = """Filestube.com decrypter plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + LINK_PATTERN = r'<a class=\"file-link-main(?: noref)?\" [^>]* href=\"(http://[^\"]+)' + TITLE_PATTERN = r'<h1\s*> (?P<title>.+) download\s*</h1>' diff --git a/pyload/plugins/crypter/FiletramCom.py b/pyload/plugins/crypter/FiletramCom.py new file mode 100644 index 000000000..6620adc12 --- /dev/null +++ b/pyload/plugins/crypter/FiletramCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class FiletramCom(SimpleCrypter): + __name__ = "FiletramCom" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?filetram.com/[^/]+/.+' + + __description__ = """Filetram.com decrypter plugin""" + __author_name__ = ("igel", "stickell") + __author_mail__ = ("igelkun@myopera.com", "l.stickell@yahoo.it") + + LINK_PATTERN = r'\s+(http://.+)' + TITLE_PATTERN = r'<title>(?P<title>[^<]+) - Free Download[^<]*</title>' diff --git a/pyload/plugins/crypter/FiredriveComFolder.py b/pyload/plugins/crypter/FiredriveComFolder.py new file mode 100644 index 000000000..072a548a2 --- /dev/null +++ b/pyload/plugins/crypter/FiredriveComFolder.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class FiredriveComFolder(SimpleCrypter): + __name__ = "FiredriveComFolder" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'https?://(?:www\.)?(firedrive|putlocker)\.com/share/.+' + + __description__ = """Firedrive.com folder decrypter plugin""" + __author_name__ = "Walter Purcaro" + __author_mail__ = "vuolter@gmail.com" + + LINK_PATTERN = r'<div class="pf_item pf_(file|folder).+?public=\'(.+?)\'' + TITLE_PATTERN = r'>Shared Folder "(?P<title>.+)" | Firedrive<' + OFFLINE_PATTERN = r'class="sad_face_image"|>No such page here.<' + TEMP_OFFLINE_PATTERN = r'>(File Temporarily Unavailable|Server Error. Try again later)' + + + def getLinks(self): + return map(lambda x: "http://www.firedrive.com/%s/%s" % + ("share" if x[0] == "folder" else "file", x[1]), + re.findall(self.LINK_PATTERN, self.html)) diff --git a/pyload/plugins/crypter/FourChanOrg.py b/pyload/plugins/crypter/FourChanOrg.py new file mode 100644 index 000000000..2d3bfa07a --- /dev/null +++ b/pyload/plugins/crypter/FourChanOrg.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# +# Based on 4chandl by Roland Beermann (https://gist.github.com/enkore/3492599) + +import re + +from pyload.plugins.Crypter import Crypter + + +class FourChanOrg(Crypter): + __name__ = "FourChanOrg" + __type__ = "crypter" + __version__ = "0.3" + + __pattern__ = r'http://(?:www\.)?boards\.4chan.org/\w+/res/(\d+)' + + __description__ = """4chan.org folder decrypter plugin""" + __author_name__ = None + __author_mail__ = None + + + def decrypt(self, pyfile): + pagehtml = self.load(pyfile.url) + images = set(re.findall(r'(images\.4chan\.org/[^/]*/src/[^"<]*)', pagehtml)) + self.urls = ["http://" + image for image in images] diff --git a/pyload/plugins/crypter/FreakhareComFolder.py b/pyload/plugins/crypter/FreakhareComFolder.py new file mode 100644 index 000000000..fca1b26a1 --- /dev/null +++ b/pyload/plugins/crypter/FreakhareComFolder.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class FreakhareComFolder(SimpleCrypter): + __name__ = "FreakhareComFolder" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?freakshare\.com/folder/.+' + + __description__ = """Freakhare.com folder decrypter plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + LINK_PATTERN = r'<a href="(http://freakshare.com/files/[^"]+)" target="_blank">' + TITLE_PATTERN = r'Folder:</b> (?P<title>.+)' + PAGES_PATTERN = r'Pages: +(?P<pages>\d+)' + + + def loadPage(self, page_n): + if not hasattr(self, 'f_id') and not hasattr(self, 'f_md5'): + m = re.search(r'http://freakshare.com/\?x=folder&f_id=(\d+)&f_md5=(\w+)', self.html) + if m: + self.f_id = m.group(1) + self.f_md5 = m.group(2) + return self.load('http://freakshare.com/', get={'x': 'folder', + 'f_id': self.f_id, + 'f_md5': self.f_md5, + 'entrys': '20', + 'page': page_n - 1, + 'order': ''}, decode=True) diff --git a/pyload/plugins/crypter/FreetexthostCom.py b/pyload/plugins/crypter/FreetexthostCom.py new file mode 100644 index 000000000..e56d638f0 --- /dev/null +++ b/pyload/plugins/crypter/FreetexthostCom.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class FreetexthostCom(SimpleCrypter): + __name__ = "FreetexthostCom" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?freetexthost\.com/\w+' + + __description__ = """Freetexthost.com decrypter plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + + def getLinks(self): + m = re.search(r'<div id="contentsinner">\s*(.+)<div class="viewcount">', self.html, re.DOTALL) + if m is None: + self.fail('Unable to extract links | Plugin may be out-of-date') + links = m.group(1) + return links.strip().split("<br />\r\n") diff --git a/pyload/plugins/crypter/FshareVnFolder.py b/pyload/plugins/crypter/FshareVnFolder.py new file mode 100644 index 000000000..1706d97e0 --- /dev/null +++ b/pyload/plugins/crypter/FshareVnFolder.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class FshareVnFolder(SimpleCrypter): + __name__ = "FshareVnFolder" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?fshare.vn/folder/.*' + + __description__ = """Fshare.vn folder decrypter plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + LINK_PATTERN = r'<li class="w_80pc"><a href="([^"]+)" target="_blank">' diff --git a/pyload/plugins/crypter/GooGl.py b/pyload/plugins/crypter/GooGl.py new file mode 100644 index 000000000..ae48c61b5 --- /dev/null +++ b/pyload/plugins/crypter/GooGl.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Crypter import Crypter +from pyload.common.json_layer import json_loads + + +class GooGl(Crypter): + __name__ = "GooGl" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'https?://(?:www\.)?goo\.gl/\w+' + + __description__ = """Goo.gl decrypter plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + API_URL = "https://www.googleapis.com/urlshortener/v1/url" + + + def decrypt(self, pyfile): + rep = self.load(self.API_URL, get={'shortUrl': pyfile.url}) + self.logDebug('JSON data: ' + rep) + rep = json_loads(rep) + + if 'longUrl' in rep: + self.urls = [rep['longUrl']] + else: + self.fail('Unable to expand shortened link') diff --git a/pyload/plugins/crypter/HoerbuchIn.py b/pyload/plugins/crypter/HoerbuchIn.py new file mode 100644 index 000000000..7c934a6f2 --- /dev/null +++ b/pyload/plugins/crypter/HoerbuchIn.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.lib.BeautifulSoup import BeautifulSoup, BeautifulStoneSoup + +from pyload.plugins.Crypter import Crypter + + +class HoerbuchIn(Crypter): + __name__ = "HoerbuchIn" + __type__ = "crypter" + __version__ = "0.6" + + __pattern__ = r'http://(?:www\.)?hoerbuch\.in/(wp/horbucher/\d+/.+/|tp/out.php\?.+|protection/folder_\d+\.html)' + + __description__ = """Hoerbuch.in decrypter plugin""" + __author_name__ = ("spoob", "mkaay") + __author_mail__ = ("spoob@pyload.org", "mkaay@mkaay.de") + + article = re.compile("http://(?:www\.)?hoerbuch\.in/wp/horbucher/\d+/.+/") + protection = re.compile("http://(?:www\.)?hoerbuch\.in/protection/folder_\d+.html") + + + def decrypt(self, pyfile): + self.pyfile = pyfile + + if self.article.match(pyfile.url): + src = self.load(pyfile.url) + soup = BeautifulSoup(src, convertEntities=BeautifulStoneSoup.HTML_ENTITIES) + + abookname = soup.find("a", attrs={"rel": "bookmark"}).text + for a in soup.findAll("a", attrs={"href": self.protection}): + package = "%s (%s)" % (abookname, a.previousSibling.previousSibling.text[:-1]) + links = self.decryptFolder(a['href']) + + self.packages.append((package, links, package)) + else: + self.urls = self.decryptFolder(pyfile.url) + + def decryptFolder(self, url): + m = self.protection.search(url) + if m is None: + self.fail("Bad URL") + url = m.group(0) + + self.pyfile.url = url + src = self.req.load(url, post={"viewed": "adpg"}) + + links = [] + pattern = re.compile("http://www\.hoerbuch\.in/protection/(\w+)/(.*?)\"") + for hoster, lid in pattern.findall(src): + self.req.lastURL = url + self.load("http://www.hoerbuch.in/protection/%s/%s" % (hoster, lid)) + links.append(self.req.lastEffectiveURL) + + return links diff --git a/pyload/plugins/crypter/HotfileFolderCom.py b/pyload/plugins/crypter/HotfileFolderCom.py new file mode 100644 index 000000000..1b5ce28b6 --- /dev/null +++ b/pyload/plugins/crypter/HotfileFolderCom.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.Crypter import Crypter + + +class HotfileFolderCom(Crypter): + __name__ = "HotfileFolderCom" + __type__ = "crypter" + __version__ = "0.1" + + __pattern__ = r'http://(?:www\.)?hotfile.com/list/\w+/\w+' + + __description__ = """Hotfile.com folder decrypter plugin""" + __author_name__ = "RaNaN" + __author_mail__ = "RaNaN@pyload.org" + + + def decrypt(self, pyfile): + html = self.load(pyfile.url) + + name = re.findall( + r'<img src="/i/folder.gif" width="23" height="14" style="margin-bottom: -2px;" />([^<]+)', html, + re.MULTILINE)[0].replace("/", "") + new_links = re.findall(r'href="(http://(www.)?hotfile\.com/dl/\d+/[0-9a-zA-Z]+[^"]+)', html) + + new_links = [x[0] for x in new_links] + + self.packages = [(name, new_links, name)] diff --git a/pyload/plugins/crypter/ILoadTo.py b/pyload/plugins/crypter/ILoadTo.py new file mode 100644 index 000000000..16f813926 --- /dev/null +++ b/pyload/plugins/crypter/ILoadTo.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class ILoadTo(DeadCrypter): + __name__ = "ILoadTo" + __type__ = "crypter" + __version__ = "0.11" + + __pattern__ = r'http://(?:www\.)?iload\.to/go/\d+-[\w\.-]+/' + + __description__ = """Iload.to decrypter plugin""" + __author_name__ = "hzpz" + __author_mail__ = None diff --git a/pyload/plugins/crypter/ImgurComAlbum.py b/pyload/plugins/crypter/ImgurComAlbum.py new file mode 100644 index 000000000..5e8be3a5d --- /dev/null +++ b/pyload/plugins/crypter/ImgurComAlbum.py @@ -0,0 +1,24 @@ +import re + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter +from pyload.utils import uniqify + + +class ImgurComAlbum(SimpleCrypter): + __name__ = "ImgurComAlbum" + __type__ = "crypter" + __version__ = "0.4" + + __pattern__ = r'https?://(?:www\.|m\.)?imgur\.com/(a|gallery|)/?\w{5,7}' + + __description__ = """Imgur.com decrypter plugin""" + __author_name_ = "nath_schwarz" + __author_mail_ = "nathan.notwhite@gmail.com" + + TITLE_PATTERN = r'(?P<title>.+) - Imgur' + LINK_PATTERN = r'i\.imgur\.com/\w{7}s?\.(?:jpeg|jpg|png|gif|apng)' + + + def getLinks(self): + f = lambda url: "http://" + re.sub(r'(\w{7})s\.', r'\1.', url) + return uniqify(map(f, re.findall(self.LINK_PATTERN, self.html))) diff --git a/pyload/plugins/crypter/LetitbitNetFolder.py b/pyload/plugins/crypter/LetitbitNetFolder.py new file mode 100644 index 000000000..b03ea27b2 --- /dev/null +++ b/pyload/plugins/crypter/LetitbitNetFolder.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- + +import re +from pyload.plugins.Crypter import Crypter + + +class LetitbitNetFolder(Crypter): + __name__ = "LetitbitNetFolder" + __type__ = "crypter" + __version__ = "0.1" + + __pattern__ = r'http://(?:www\.)?letitbit.net/folder/\w+' + + __description__ = """Letitbit.net folder decrypter plugin""" + __author_name__ = ("DHMH", "z00nx") + __author_mail__ = ("webmaster@pcProfil.de", "z00nx0@gmail.com") + + FOLDER_PATTERN = r'<table>(.*)</table>' + LINK_PATTERN = r'<a href="([^"]+)" target="_blank">' + + + def decrypt(self, pyfile): + html = self.load(pyfile.url) + + folder = re.search(self.FOLDER_PATTERN, html, re.DOTALL) + if folder is None: + self.fail("Parse error (FOLDER)") + + self.urls.extend(re.findall(self.LINK_PATTERN, folder.group(0))) + + if not self.urls: + self.fail('Could not extract any links') diff --git a/pyload/plugins/crypter/LinkSaveIn.py b/pyload/plugins/crypter/LinkSaveIn.py new file mode 100644 index 000000000..84dd8172e --- /dev/null +++ b/pyload/plugins/crypter/LinkSaveIn.py @@ -0,0 +1,225 @@ +# -*- coding: utf-8 -*- +# +# * cnl2 and web links are skipped if JS is not available (instead of failing the package) +# * only best available link source is used (priority: cnl2>rsdf>ccf>dlc>web + +import base64 +import binascii +import re + +from Crypto.Cipher import AES +from pyload.plugins.Crypter import Crypter +from pyload.unescape import unescape + + +class LinkSaveIn(Crypter): + __name__ = "LinkSaveIn" + __type__ = "crypter" + __version__ = "2.01" + + __pattern__ = r'http://(?:www\.)?linksave.in/(?P<id>\w+)$' + + __description__ = """LinkSave.in decrypter plugin""" + __author_name__ = "fragonib" + __author_mail__ = "fragonib[AT]yahoo[DOT]es" + + # Constants + _JK_KEY_ = "jk" + _CRYPTED_KEY_ = "crypted" + HOSTER_NAME = "linksave.in" + + + def setup(self): + self.html = None + self.fileid = None + self.captcha = False + self.package = None + self.preferred_sources = ["cnl2", "rsdf", "ccf", "dlc", "web"] + + def decrypt(self, pyfile): + # Init + self.package = pyfile.package() + self.fileid = re.match(self.__pattern__, pyfile.url).group('id') + self.req.cj.setCookie(self.HOSTER_NAME, "Linksave_Language", "english") + + # Request package + self.html = self.load(pyfile.url) + if not self.isOnline(): + self.offline() + + # Check for protection + if self.isPasswordProtected(): + self.unlockPasswordProtection() + self.handleErrors() + + if self.isCaptchaProtected(): + self.captcha = True + self.unlockCaptchaProtection() + self.handleErrors() + + # Get package name and folder + (package_name, folder_name) = self.getPackageInfo() + + # Extract package links + package_links = [] + for type_ in self.preferred_sources: + package_links.extend(self.handleLinkSource(type_)) + if package_links: # use only first source which provides links + break + package_links = set(package_links) + + # Pack + if package_links: + self.packages = [(package_name, package_links, folder_name)] + else: + self.fail('Could not extract any links') + + def isOnline(self): + if "<big>Error 404 - Folder not found!</big>" in self.html: + self.logDebug("File not found") + return False + return True + + def isPasswordProtected(self): + if re.search(r'''<input.*?type="password"''', self.html): + self.logDebug("Links are password protected") + return True + + def isCaptchaProtected(self): + if "<b>Captcha:</b>" in self.html: + self.logDebug("Links are captcha protected") + return True + return False + + def unlockPasswordProtection(self): + password = self.getPassword() + self.logDebug("Submitting password [%s] for protected links" % password) + post = {"id": self.fileid, "besucherpasswort": password, 'login': 'submit'} + self.html = self.load(self.pyfile.url, post=post) + + def unlockCaptchaProtection(self): + captcha_hash = re.search(r'name="hash" value="([^"]+)', self.html).group(1) + captcha_url = re.search(r'src=".(/captcha/cap.php\?hsh=[^"]+)', self.html).group(1) + captcha_code = self.decryptCaptcha("http://linksave.in" + captcha_url, forceUser=True) + self.html = self.load(self.pyfile.url, post={"id": self.fileid, "hash": captcha_hash, "code": captcha_code}) + + def getPackageInfo(self): + name = self.pyfile.package().name + folder = self.pyfile.package().folder + self.logDebug("Defaulting to pyfile name [%s] and folder [%s] for package" % (name, folder)) + return name, folder + + def handleErrors(self): + if "The visitorpassword you have entered is wrong" in self.html: + self.logDebug("Incorrect password, please set right password on 'Edit package' form and retry") + self.fail("Incorrect password, please set right password on 'Edit package' form and retry") + + if self.captcha: + if "Wrong code. Please retry" in self.html: + self.logDebug("Invalid captcha, retrying") + self.invalidCaptcha() + self.retry() + else: + self.correctCaptcha() + + def handleLinkSource(self, type_): + if type_ == "cnl2": + return self.handleCNL2() + elif type_ in ("rsdf", "ccf", "dlc"): + return self.handleContainer(type_) + elif type_ == "web": + return self.handleWebLinks() + else: + self.fail('unknown source type "%s" (this is probably a bug)' % type_) + + def handleWebLinks(self): + package_links = [] + self.logDebug("Search for Web links") + if not self.js: + self.logDebug("no JS -> skip Web links") + else: + #@TODO: Gather paginated web links + pattern = r'<a href="http://linksave\.in/(\w{43})"' + ids = re.findall(pattern, self.html) + self.logDebug("Decrypting %d Web links" % len(ids)) + for i, weblink_id in enumerate(ids): + try: + webLink = "http://linksave.in/%s" % weblink_id + self.logDebug("Decrypting Web link %d, %s" % (i + 1, webLink)) + fwLink = "http://linksave.in/fw-%s" % weblink_id + response = self.load(fwLink) + jscode = re.findall(r'<script type="text/javascript">(.*)</script>', response)[-1] + jseval = self.js.eval("document = { write: function(e) { return e; } }; %s" % jscode) + dlLink = re.search(r'http://linksave\.in/dl-\w+', jseval).group(0) + self.logDebug("JsEngine returns value [%s] for redirection link" % dlLink) + response = self.load(dlLink) + link = unescape(re.search(r'<iframe src="(.+?)"', response).group(1)) + package_links.append(link) + except Exception, detail: + self.logDebug("Error decrypting Web link %s, %s" % (webLink, detail)) + return package_links + + def handleContainer(self, type_): + package_links = [] + type_ = type_.lower() + self.logDebug('Seach for %s Container links' % type_.upper()) + if not type_.isalnum(): # check to prevent broken re-pattern (cnl2,rsdf,ccf,dlc,web are all alpha-numeric) + self.fail('unknown container type "%s" (this is probably a bug)' % type_) + pattern = r"\('%s_link'\).href=unescape\('(.*?\.%s)'\)" % (type_, type_) + containersLinks = re.findall(pattern, self.html) + self.logDebug("Found %d %s Container links" % (len(containersLinks), type_.upper())) + for containerLink in containersLinks: + link = "http://linksave.in/%s" % unescape(containerLink) + package_links.append(link) + return package_links + + def handleCNL2(self): + package_links = [] + self.logDebug("Search for CNL2 links") + if not self.js: + self.logDebug("no JS -> skip CNL2 links") + elif 'cnl2_load' in self.html: + try: + (vcrypted, vjk) = self._getCipherParams() + for (crypted, jk) in zip(vcrypted, vjk): + package_links.extend(self._getLinks(crypted, jk)) + except: + self.fail("Unable to decrypt CNL2 links") + return package_links + + def _getCipherParams(self): + # Get jk + jk_re = r'<INPUT.*?NAME="%s".*?VALUE="(.*?)"' % LinkSaveIn._JK_KEY_ + vjk = re.findall(jk_re, self.html) + + # Get crypted + crypted_re = r'<INPUT.*?NAME="%s".*?VALUE="(.*?)"' % LinkSaveIn._CRYPTED_KEY_ + vcrypted = re.findall(crypted_re, self.html) + + # Log and return + self.logDebug("Detected %d crypted blocks" % len(vcrypted)) + return vcrypted, vjk + + def _getLinks(self, crypted, jk): + # Get key + jreturn = self.js.eval("%s f()" % jk) + self.logDebug("JsEngine returns value [%s]" % jreturn) + key = binascii.unhexlify(jreturn) + + # Decode crypted + crypted = base64.standard_b64decode(crypted) + + # Decrypt + Key = key + IV = key + obj = AES.new(Key, AES.MODE_CBC, IV) + text = obj.decrypt(crypted) + + # Extract links + text = text.replace("\x00", "").replace("\r", "") + links = text.split("\n") + links = filter(lambda x: x != "", links) + + # Log and return + self.logDebug("Package has %d links" % len(links)) + return links diff --git a/pyload/plugins/crypter/LinkdecrypterCom.py b/pyload/plugins/crypter/LinkdecrypterCom.py new file mode 100644 index 000000000..b6ca2ec4f --- /dev/null +++ b/pyload/plugins/crypter/LinkdecrypterCom.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- + +import re +from pyload.plugins.Crypter import Crypter + + +class LinkdecrypterCom(Crypter): + __name__ = "LinkdecrypterCom" + __type__ = "crypter" + __version__ = "0.27" + + __pattern__ = None + + __description__ = """Linkdecrypter.com""" + __author_name__ = ("zoidberg", "flowlee") + __author_mail__ = ("zoidberg@mujmail.cz", "") + + TEXTAREA_PATTERN = r'<textarea name="links" wrap="off" readonly="1" class="caja_des">(.+)</textarea>' + PASSWORD_PATTERN = r'<input type="text" name="password"' + CAPTCHA_PATTERN = r'<img class="captcha" src="(.+?)"(.*?)>' + REDIR_PATTERN = r'<i>(Click <a href="./">here</a> if your browser does not redirect you).</i>' + + + def decrypt(self, pyfile): + + self.passwords = self.getPassword().splitlines() + + # API not working anymore + self.urls = self.decryptHTML() + if not self.urls: + self.fail('Could not extract any links') + + def decryptAPI(self): + + get_dict = {"t": "link", "url": self.pyfile.url, "lcache": "1"} + self.html = self.load('http://linkdecrypter.com/api', get=get_dict) + if self.html.startswith('http://'): + return self.html.splitlines() + + if self.html == 'INTERRUPTION(PASSWORD)': + for get_dict['pass'] in self.passwords: + self.html = self.load('http://linkdecrypter.com/api', get=get_dict) + if self.html.startswith('http://'): + return self.html.splitlines() + + self.logError('API', self.html) + if self.html == 'INTERRUPTION(PASSWORD)': + self.fail("No or incorrect password") + + return None + + def decryptHTML(self): + + retries = 5 + + post_dict = {"link_cache": "on", "pro_links": self.pyfile.url, "modo_links": "text"} + self.html = self.load('http://linkdecrypter.com/', post=post_dict, cookies=True, decode=True) + + while self.passwords or retries: + m = re.search(self.TEXTAREA_PATTERN, self.html, flags=re.DOTALL) + if m: + return [x for x in m.group(1).splitlines() if '[LINK-ERROR]' not in x] + + m = re.search(self.CAPTCHA_PATTERN, self.html) + if m: + captcha_url = 'http://linkdecrypter.com/' + m.group(1) + result_type = "positional" if "getPos" in m.group(2) else "textual" + + m = re.search(r"<p><i><b>([^<]+)</b></i></p>", self.html) + msg = m.group(1) if m else "" + self.logInfo("Captcha protected link", result_type, msg) + + captcha = self.decryptCaptcha(captcha_url, result_type=result_type) + if result_type == "positional": + captcha = "%d|%d" % captcha + self.html = self.load('http://linkdecrypter.com/', post={"captcha": captcha}, decode=True) + retries -= 1 + + elif self.PASSWORD_PATTERN in self.html: + if self.passwords: + password = self.passwords.pop(0) + self.logInfo("Password protected link, trying " + password) + self.html = self.load('http://linkdecrypter.com/', post={'password': password}, decode=True) + else: + self.fail("No or incorrect password") + + else: + retries -= 1 + self.html = self.load('http://linkdecrypter.com/', cookies=True, decode=True) + + return None diff --git a/pyload/plugins/crypter/LixIn.py b/pyload/plugins/crypter/LixIn.py new file mode 100644 index 000000000..1d812b0e3 --- /dev/null +++ b/pyload/plugins/crypter/LixIn.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.Crypter import Crypter + + +class LixIn(Crypter): + __name__ = "LixIn" + __type__ = "crypter" + __version__ = "0.22" + + __pattern__ = r'http://(www.)?lix.in/(?P<id>.*)' + + __description__ = """Lix.in decrypter plugin""" + __author_name__ = "spoob" + __author_mail__ = "spoob@pyload.org" + + CAPTCHA_PATTERN = r'<img src="(?P<image>captcha_img.php\?.*?)"' + SUBMIT_PATTERN = r"value='continue.*?'" + LINK_PATTERN = r'name="ifram" src="(?P<link>.*?)"' + + + def decrypt(self, pyfile): + url = pyfile.url + + m = re.match(self.__pattern__, url) + if m is None: + self.fail("couldn't identify file id") + + id = m.group("id") + self.logDebug("File id is %s" % id) + + self.html = self.req.load(url, decode=True) + + m = re.search(self.SUBMIT_PATTERN, self.html) + if m is None: + self.fail("link doesn't seem valid") + + m = re.search(self.CAPTCHA_PATTERN, self.html) + if m: + for _ in xrange(5): + m = re.search(self.CAPTCHA_PATTERN, self.html) + if m: + self.logDebug("trying captcha") + captcharesult = self.decryptCaptcha("http://lix.in/" + m.group("image")) + self.html = self.req.load(url, decode=True, + post={"capt": captcharesult, "submit": "submit", "tiny": id}) + else: + self.logDebug("no captcha/captcha solved") + else: + self.html = self.req.load(url, decode=True, post={"submit": "submit", "tiny": id}) + + m = re.search(self.LINK_PATTERN, self.html) + if m is None: + self.fail("can't find destination url") + else: + self.urls = [m.group("link")] + self.logDebug("Found link %s, adding to package" % self.urls[0]) diff --git a/pyload/plugins/crypter/LofCc.py b/pyload/plugins/crypter/LofCc.py new file mode 100644 index 000000000..6c91a55ec --- /dev/null +++ b/pyload/plugins/crypter/LofCc.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class LofCc(DeadCrypter): + __name__ = "LofCc" + __type__ = "crypter" + __version__ = "0.21" + + __pattern__ = r'http://(?:www\.)?lof.cc/(.*)' + + __description__ = """Lof.cc decrypter plugin""" + __author_name__ = "mkaay" + __author_mail__ = "mkaay@mkaay.de" diff --git a/pyload/plugins/crypter/MBLinkInfo.py b/pyload/plugins/crypter/MBLinkInfo.py new file mode 100644 index 000000000..8516ff6e4 --- /dev/null +++ b/pyload/plugins/crypter/MBLinkInfo.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class MBLinkInfo(DeadCrypter): + __name__ = "MBLinkInfo" + __type__ = "crypter" + __version__ = "0.03" + + __pattern__ = r'http://(?:www\.)?mblink\.info/?\?id=(\d+)' + + __description__ = """MBLink.info decrypter plugin""" + __author_name__ = ("Gummibaer", "stickell") + __author_mail__ = ("Gummibaer@wiki-bierkiste.de", "l.stickell@yahoo.it") diff --git a/pyload/plugins/crypter/MediafireComFolder.py b/pyload/plugins/crypter/MediafireComFolder.py new file mode 100644 index 000000000..4ea904e89 --- /dev/null +++ b/pyload/plugins/crypter/MediafireComFolder.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- + +import re +from pyload.plugins.Crypter import Crypter +from pyload.plugins.hoster.MediafireCom import checkHTMLHeader +from pyload.common.json_layer import json_loads + + +class MediafireComFolder(Crypter): + __name__ = "MediafireComFolder" + __type__ = "crypter" + __version__ = "0.14" + + __pattern__ = r'http://(?:www\.)?mediafire\.com/(folder/|\?sharekey=|\?\w{13}($|[/#]))' + + __description__ = """Mediafire.com folder decrypter plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FOLDER_KEY_PATTERN = r"var afI= '(\w+)';" + FILE_URL_PATTERN = r'<meta property="og:url" content="http://www.mediafire.com/\?(\w+)"/>' + + + def decrypt(self, pyfile): + url, result = checkHTMLHeader(pyfile.url) + self.logDebug('Location (%d): %s' % (result, url)) + + if result == 0: + # load and parse html + html = self.load(pyfile.url) + m = re.search(self.FILE_URL_PATTERN, html) + if m: + # file page + self.urls.append("http://www.mediafire.com/file/%s" % m.group(1)) + else: + # folder page + m = re.search(self.FOLDER_KEY_PATTERN, html) + if m: + folder_key = m.group(1) + self.logDebug("FOLDER KEY: %s" % folder_key) + + json_resp = json_loads(self.load( + "http://www.mediafire.com/api/folder/get_info.php?folder_key=%s&response_format=json&version=1" % folder_key)) + #self.logInfo(json_resp) + if json_resp['response']['result'] == "Success": + for link in json_resp['response']['folder_info']['files']: + self.urls.append("http://www.mediafire.com/file/%s" % link['quickkey']) + else: + self.fail(json_resp['response']['message']) + elif result == 1: + self.offline() + else: + self.urls.append(url) + + if not self.urls: + self.fail('Could not extract any links') diff --git a/pyload/plugins/crypter/Movie2kTo.py b/pyload/plugins/crypter/Movie2kTo.py new file mode 100644 index 000000000..b6a554758 --- /dev/null +++ b/pyload/plugins/crypter/Movie2kTo.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class Movie2kTo(DeadCrypter): + __name__ = "Movie2kTo" + __type__ = "crypter" + __version__ = "0.51" + + __pattern__ = r'http://(?:www\.)?movie2k\.to/(.*)\.html' + + __description__ = """Movie2k.to decrypter plugin""" + __author_name__ = "4Christopher" + __author_mail__ = "4Christopher@gmx.de" diff --git a/pyload/plugins/crypter/MultiUpOrg.py b/pyload/plugins/crypter/MultiUpOrg.py new file mode 100644 index 000000000..96553a09a --- /dev/null +++ b/pyload/plugins/crypter/MultiUpOrg.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- + +import re +from urlparse import urljoin + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class MultiUpOrg(SimpleCrypter): + __name__ = "MultiUpOrg" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?multiup\.org/(en|fr)/(?P<TYPE>project|download|miror)/\w+(/\w+)?' + + __description__ = """MultiUp.org crypter plugin""" + __author_name__ = "Walter Purcaro" + __author_mail__ = "vuolter@gmail.com" + + TITLE_PATTERN = r'<title>.*(Project|Projet|ownload|élécharger) (?P<title>.+?) (\(|- )' + + + def getLinks(self): + m_type = re.match(self.__pattern__, self.pyfile.url).group("TYPE") + + if m_type == "project": + pattern = r'\n(http://www\.multiup\.org/(?:en|fr)/download/.*)' + else: + pattern = r'style="width:97%;text-align:left".*\n.*href="(.*)"' + if m_type == "download": + dl_pattern = r'href="(.*)">.*\n.*<h5>DOWNLOAD</h5>' + miror_page = urljoin("http://www.multiup.org", re.search(dl_pattern, self.html).group(1)) + self.html = self.load(miror_page) + + return re.findall(pattern, self.html) diff --git a/pyload/plugins/crypter/MultiloadCz.py b/pyload/plugins/crypter/MultiloadCz.py new file mode 100644 index 000000000..be7950e98 --- /dev/null +++ b/pyload/plugins/crypter/MultiloadCz.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- + +import re +from pyload.plugins.Crypter import Crypter + + +class MultiloadCz(Crypter): + __name__ = "MultiloadCz" + __type__ = "crypter" + __version__ = "0.4" + + __pattern__ = r'http://(?:[^/]*\.)?multiload.cz/(stahnout|slozka)/.*' + __config__ = [("usedHoster", "str", "Prefered hoster list (bar-separated) ", ""), + ("ignoredHoster", "str", "Ignored hoster list (bar-separated) ", "")] + + __description__ = """Multiload.cz decrypter plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FOLDER_PATTERN = r'<form action="" method="get"><textarea[^>]*>([^>]*)</textarea></form>' + LINK_PATTERN = r'<p class="manager-server"><strong>([^<]+)</strong></p><p class="manager-linky"><a href="([^"]+)">' + + + def decrypt(self, pyfile): + self.html = self.load(pyfile.url, decode=True) + + if re.match(self.__pattern__, pyfile.url).group(1) == "slozka": + m = re.search(self.FOLDER_PATTERN, self.html) + if m: + self.urls.extend(m.group(1).split()) + else: + m = re.findall(self.LINK_PATTERN, self.html) + if m: + prefered_set = set(self.getConfig("usedHoster").split('|')) + self.urls.extend([x[1] for x in m if x[0] in prefered_set]) + + if not self.urls: + ignored_set = set(self.getConfig("ignoredHoster").split('|')) + self.urls.extend([x[1] for x in m if x[0] not in ignored_set]) + + if not self.urls: + self.fail('Could not extract any links') diff --git a/pyload/plugins/crypter/MultiuploadCom.py b/pyload/plugins/crypter/MultiuploadCom.py new file mode 100644 index 000000000..5aa77e5f5 --- /dev/null +++ b/pyload/plugins/crypter/MultiuploadCom.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- + +import re +from time import time + +from pyload.plugins.Crypter import Crypter +from pyload.common.json_layer import json_loads + + +class MultiuploadCom(Crypter): + __name__ = "MultiuploadCom" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?multiupload.com/(\w+)' + __config__ = [("preferedHoster", "str", "Prefered hoster list (bar-separated) ", "multiupload"), + ("ignoredHoster", "str", "Ignored hoster list (bar-separated) ", "")] + + __description__ = """MultiUpload.com decrypter plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + ML_LINK_PATTERN = r'<div id="downloadbutton_" style=""><a href="([^"]+)"' + + + def decrypt(self, pyfile): + self.html = self.load(pyfile.url) + m = re.search(self.ML_LINK_PATTERN, self.html) + ml_url = m.group(1) if m else None + + json_list = json_loads(self.load("http://multiupload.com/progress/", get={ + "d": re.match(self.__pattern__, pyfile.url).group(1), + "r": str(int(time() * 1000)) + })) + + prefered_set = map(lambda s: s.lower().split('.')[0], set(self.getConfig("preferedHoster").split('|'))) + + if ml_url and 'multiupload' in prefered_set: + self.urls.append(ml_url) + + for link in json_list: + if link['service'].lower() in prefered_set and int(link['status']) and not int(link['deleted']): + url = self.getLocation(link['url']) + if url: + self.urls.append(url) + + if not self.urls: + ignored_set = map(lambda s: s.lower().split('.')[0], set(self.getConfig("ignoredHoster").split('|'))) + + if 'multiupload' not in ignored_set: + self.urls.append(ml_url) + + for link in json_list: + if link['service'].lower() not in ignored_set and int(link['status']) and not int(link['deleted']): + url = self.getLocation(link['url']) + if url: + self.urls.append(url) + + if not self.urls: + self.fail('Could not extract any links') + + def getLocation(self, url): + header = self.load(url, just_header=True) + return header['location'] if "location" in header else None diff --git a/pyload/plugins/crypter/NCryptIn.py b/pyload/plugins/crypter/NCryptIn.py new file mode 100644 index 000000000..70c541d02 --- /dev/null +++ b/pyload/plugins/crypter/NCryptIn.py @@ -0,0 +1,303 @@ +# -*- coding: utf-8 -*- + +import base64 +import binascii +import re + +from Crypto.Cipher import AES + +from pyload.plugins.Crypter import Crypter +from pyload.plugins.internal.CaptchaService import ReCaptcha + + +class NCryptIn(Crypter): + __name__ = "NCryptIn" + __type__ = "crypter" + __version__ = "1.32" + + __pattern__ = r'http://(?:www\.)?ncrypt.in/(?P<type>folder|link|frame)-([^/\?]+)' + + __description__ = """NCrypt.in decrypter plugin""" + __author_name__ = ("fragonib", "stickell") + __author_mail__ = ("fragonib[AT]yahoo[DOT]es", "l.stickell@yahoo.it") + + JK_KEY = "jk" + CRYPTED_KEY = "crypted" + + NAME_PATTERN = r'<meta name="description" content="(?P<N>[^"]+)"' + + + def setup(self): + self.package = None + self.html = None + self.cleanedHtml = None + self.links_source_order = ["cnl2", "rsdf", "ccf", "dlc", "web"] + self.protection_type = None + + def decrypt(self, pyfile): + # Init + self.package = pyfile.package() + package_links = [] + package_name = self.package.name + folder_name = self.package.folder + + # Deal with single links + if self.isSingleLink(): + package_links.extend(self.handleSingleLink()) + + # Deal with folders + else: + + # Request folder home + self.html = self.requestFolderHome() + self.cleanedHtml = self.removeHtmlCrap(self.html) + if not self.isOnline(): + self.offline() + + # Check for folder protection + if self.isProtected(): + self.html = self.unlockProtection() + self.cleanedHtml = self.removeHtmlCrap(self.html) + self.handleErrors() + + # Prepare package name and folder + (package_name, folder_name) = self.getPackageInfo() + + # Extract package links + for link_source_type in self.links_source_order: + package_links.extend(self.handleLinkSource(link_source_type)) + if package_links: # use only first source which provides links + break + package_links = set(package_links) + + # Pack and return links + if not package_links: + self.fail('Could not extract any links') + self.packages = [(package_name, package_links, folder_name)] + + def isSingleLink(self): + link_type = re.match(self.__pattern__, self.pyfile.url).group('type') + return link_type in ("link", "frame") + + def requestFolderHome(self): + return self.load(self.pyfile.url, decode=True) + + def removeHtmlCrap(self, content): + patterns = (r'(type="hidden".*?(name=".*?")?.*?value=".*?")', + r'display:none;">(.*?)</(div|span)>', + r'<div\s+class="jdownloader"(.*?)</div>', + r'<table class="global">(.*?)</table>', + r'<iframe\s+style="display:none(.*?)</iframe>') + for pattern in patterns: + rexpr = re.compile(pattern, re.DOTALL) + content = re.sub(rexpr, "", content) + return content + + def isOnline(self): + if "Your folder does not exist" in self.cleanedHtml: + self.logDebug("File not m") + return False + return True + + def isProtected(self): + form = re.search(r'<form.*?name.*?protected.*?>(.*?)</form>', self.cleanedHtml, re.DOTALL) + if form is not None: + content = form.group(1) + for keyword in ("password", "captcha"): + if keyword in content: + self.protection_type = keyword + self.logDebug("Links are %s protected" % self.protection_type) + return True + return False + + def getPackageInfo(self): + m = re.search(self.NAME_PATTERN, self.html) + if m: + name = folder = m.group('N').strip() + self.logDebug("Found name [%s] and folder [%s] in package info" % (name, folder)) + else: + name = self.package.name + folder = self.package.folder + self.logDebug("Package info not m, defaulting to pyfile name [%s] and folder [%s]" % (name, folder)) + return name, folder + + def unlockProtection(self): + + postData = {} + + form = re.search(r'<form name="protected"(.*?)</form>', self.cleanedHtml, re.DOTALL).group(1) + + # Submit package password + if "password" in form: + password = self.getPassword() + self.logDebug("Submitting password [%s] for protected links" % password) + postData['password'] = password + + # Resolve anicaptcha + if "anicaptcha" in form: + self.logDebug("Captcha protected") + captchaUri = re.search(r'src="(/temp/anicaptcha/[^"]+)', form).group(1) + captcha = self.decryptCaptcha("http://ncrypt.in" + captchaUri) + self.logDebug("Captcha resolved [%s]" % captcha) + postData['captcha'] = captcha + + # Resolve recaptcha + if "recaptcha" in form: + self.logDebug("ReCaptcha protected") + captcha_key = re.search(r'\?k=(.*?)"', form).group(1) + self.logDebug("Resolving ReCaptcha with key [%s]" % captcha_key) + recaptcha = ReCaptcha(self) + challenge, code = recaptcha.challenge(captcha_key) + postData['recaptcha_challenge_field'] = challenge + postData['recaptcha_response_field'] = code + + # Resolve circlecaptcha + if "circlecaptcha" in form: + self.logDebug("CircleCaptcha protected") + captcha_img_url = "http://ncrypt.in/classes/captcha/circlecaptcha.php" + coords = self.decryptCaptcha(captcha_img_url, forceUser=True, imgtype="png", result_type='positional') + self.logDebug("Captcha resolved, coords [%s]" % str(coords)) + postData['circle.x'] = coords[0] + postData['circle.y'] = coords[1] + + # Unlock protection + postData['submit_protected'] = 'Continue to folder' + return self.load(self.pyfile.url, post=postData, decode=True) + + def handleErrors(self): + if self.protection_type == "password": + if "This password is invalid!" in self.cleanedHtml: + self.logDebug("Incorrect password, please set right password on 'Edit package' form and retry") + self.fail("Incorrect password, please set right password on 'Edit package' form and retry") + + if self.protection_type == "captcha": + if "The securitycheck was wrong!" in self.cleanedHtml: + self.logDebug("Invalid captcha, retrying") + self.invalidCaptcha() + self.retry() + else: + self.correctCaptcha() + + def handleLinkSource(self, link_source_type): + # Check for JS engine + require_js_engine = link_source_type in ("cnl2", "rsdf", "ccf", "dlc") + if require_js_engine and not self.js: + self.logDebug("No JS engine available, skip %s links" % link_source_type) + return [] + + # Select suitable handler + if link_source_type == 'single': + return self.handleSingleLink() + if link_source_type == 'cnl2': + return self.handleCNL2() + elif link_source_type in ("rsdf", "ccf", "dlc"): + return self.handleContainer(link_source_type) + elif link_source_type == "web": + return self.handleWebLinks() + else: + self.fail('unknown source type "%s" (this is probably a bug)' % link_source_type) + + def handleSingleLink(self): + + self.logDebug("Handling Single link") + package_links = [] + + # Decrypt single link + decrypted_link = self.decryptLink(self.pyfile.url) + if decrypted_link: + package_links.append(decrypted_link) + + return package_links + + def handleCNL2(self): + + self.logDebug("Handling CNL2 links") + package_links = [] + + if 'cnl2_output' in self.cleanedHtml: + try: + (vcrypted, vjk) = self._getCipherParams() + for (crypted, jk) in zip(vcrypted, vjk): + package_links.extend(self._getLinks(crypted, jk)) + except: + self.fail("Unable to decrypt CNL2 links") + + return package_links + + def handleContainers(self): + + self.logDebug("Handling Container links") + package_links = [] + + pattern = r"/container/(rsdf|dlc|ccf)/([a-z0-9]+)" + containersLinks = re.findall(pattern, self.html) + self.logDebug("Decrypting %d Container links" % len(containersLinks)) + for containerLink in containersLinks: + link = "http://ncrypt.in/container/%s/%s.%s" % (containerLink[0], containerLink[1], containerLink[0]) + package_links.append(link) + + return package_links + + def handleWebLinks(self): + + self.logDebug("Handling Web links") + pattern = r"(http://ncrypt\.in/link-.*?=)" + links = re.findall(pattern, self.html) + + package_links = [] + self.logDebug("Decrypting %d Web links" % len(links)) + for i, link in enumerate(links): + self.logDebug("Decrypting Web link %d, %s" % (i + 1, link)) + decrypted_link = self.decrypt(link) + if decrypted_link: + package_links.append(decrypted_link) + + return package_links + + def decryptLink(self, link): + try: + url = link.replace("link-", "frame-") + link = self.load(url, just_header=True)['location'] + return link + except Exception, detail: + self.logDebug("Error decrypting link %s, %s" % (link, detail)) + + def _getCipherParams(self): + + pattern = r'<input.*?name="%s".*?value="(.*?)"' + + # Get jk + jk_re = pattern % NCryptIn.JK_KEY + vjk = re.findall(jk_re, self.html) + + # Get crypted + crypted_re = pattern % NCryptIn.CRYPTED_KEY + vcrypted = re.findall(crypted_re, self.html) + + # Log and return + self.logDebug("Detected %d crypted blocks" % len(vcrypted)) + return vcrypted, vjk + + def _getLinks(self, crypted, jk): + # Get key + jreturn = self.js.eval("%s f()" % jk) + self.logDebug("JsEngine returns value [%s]" % jreturn) + key = binascii.unhexlify(jreturn) + + # Decode crypted + crypted = base64.standard_b64decode(crypted) + + # Decrypt + Key = key + IV = key + obj = AES.new(Key, AES.MODE_CBC, IV) + text = obj.decrypt(crypted) + + # Extract links + text = text.replace("\x00", "").replace("\r", "") + links = text.split("\n") + links = filter(lambda x: x != "", links) + + # Log and return + self.logDebug("Block has %d links" % len(links)) + return links diff --git a/pyload/plugins/crypter/NetfolderIn.py b/pyload/plugins/crypter/NetfolderIn.py new file mode 100644 index 000000000..858755e5c --- /dev/null +++ b/pyload/plugins/crypter/NetfolderIn.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class NetfolderIn(SimpleCrypter): + __name__ = "NetfolderIn" + __type__ = "crypter" + __version__ = "0.6" + + __pattern__ = r'http://(?:www\.)?netfolder.in/((?P<id1>\w+)/\w+|folder.php\?folder_id=(?P<id2>\w+))' + + __description__ = """NetFolder.in decrypter plugin""" + __author_name__ = ("RaNaN", "fragonib") + __author_mail__ = ("RaNaN@pyload.org", "fragonib[AT]yahoo[DOT]es") + + TITLE_PATTERN = r'<div class="Text">Inhalt des Ordners <span(.*)>(?P<title>.+)</span></div>' + + + def decrypt(self, pyfile): + # Request package + self.html = self.load(pyfile.url) + + # Check for password protection + if self.isPasswordProtected(): + self.html = self.submitPassword() + if not self.html: + self.fail("Incorrect password, please set right password on Add package form and retry") + + # Get package name and folder + (package_name, folder_name) = self.getPackageNameAndFolder() + + # Get package links + package_links = self.getLinks() + + # Set package + self.packages = [(package_name, package_links, folder_name)] + + def isPasswordProtected(self): + if '<input type="password" name="password"' in self.html: + self.logDebug("Links are password protected") + return True + return False + + def submitPassword(self): + # Gather data + try: + m = re.match(self.__pattern__, self.pyfile.url) + id = max(m.group('id1'), m.group('id2')) + except AttributeError: + self.logDebug("Unable to get package id from url [%s]" % self.pyfile.url) + return + url = "http://netfolder.in/folder.php?folder_id=" + id + password = self.getPassword() + + # Submit package password + post = {'password': password, 'save': 'Absenden'} + self.logDebug("Submitting password [%s] for protected links with id [%s]" % (password, id)) + html = self.load(url, {}, post) + + # Check for invalid password + if '<div class="InPage_Error">' in html: + self.logDebug("Incorrect password, please set right password on Edit package form and retry") + return None + + return html + + def getLinks(self): + links = re.search(r'name="list" value="(.*?)"', self.html).group(1).split(",") + self.logDebug("Package has %d links" % len(links)) + return links diff --git a/pyload/plugins/crypter/NosvideoCom.py b/pyload/plugins/crypter/NosvideoCom.py new file mode 100644 index 000000000..e1c9e2c55 --- /dev/null +++ b/pyload/plugins/crypter/NosvideoCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class NosvideoCom(SimpleCrypter): + __name__ = "NosvideoCom" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?nosvideo\.com/\?v=\w+' + + __description__ = """Nosvideo.com decrypter plugin""" + __author_name__ = "igel" + __author_mail__ = "igelkun@myopera.com" + + LINK_PATTERN = r'href="(http://(?:w{3}\.)?nosupload.com/\?d=\w+)"' + TITLE_PATTERN = r'<[tT]itle>Watch (?P<title>.+)</[tT]itle>' diff --git a/pyload/plugins/crypter/OneKhDe.py b/pyload/plugins/crypter/OneKhDe.py new file mode 100644 index 000000000..320eaf6c6 --- /dev/null +++ b/pyload/plugins/crypter/OneKhDe.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.unescape import unescape +from pyload.plugins.Crypter import Crypter + + +class OneKhDe(Crypter): + __name__ = "OneKhDe" + __type__ = "crypter" + __version__ = "0.1" + + __pattern__ = r'http://(?:www\.)?1kh.de/f/' + + __description__ = """1kh.de decrypter plugin""" + __author_name__ = "spoob" + __author_mail__ = "spoob@pyload.org" + + + def __init__(self, parent): + Crypter.__init__(self, parent) + self.parent = parent + self.html = None + + def file_exists(self): + """ returns True or False + """ + return True + + def proceed(self, url, location): + url = self.parent.url + self.html = self.req.load(url) + link_ids = re.findall(r"<a id=\"DownloadLink_(\d*)\" href=\"http://1kh.de/", self.html) + for id in link_ids: + new_link = unescape( + re.search("width=\"100%\" src=\"(.*)\"></iframe>", self.req.load("http://1kh.de/l/" + id)).group(1)) + self.urls.append(new_link) diff --git a/pyload/plugins/crypter/OronComFolder.py b/pyload/plugins/crypter/OronComFolder.py new file mode 100644 index 000000000..9b5fb3959 --- /dev/null +++ b/pyload/plugins/crypter/OronComFolder.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class OronComFolder(DeadCrypter): + __name__ = "OronComFolder" + __type__ = "crypter" + __version__ = "0.11" + + __pattern__ = r'http://(?:www\.)?oron.com/folder/\w+' + + __description__ = """Oron.com folder decrypter plugin""" + __author_name__ = "DHMH" + __author_mail__ = "webmaster@pcProfil.de" diff --git a/pyload/plugins/crypter/PastebinCom.py b/pyload/plugins/crypter/PastebinCom.py new file mode 100644 index 000000000..8e394ac3a --- /dev/null +++ b/pyload/plugins/crypter/PastebinCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class PastebinCom(SimpleCrypter): + __name__ = "PastebinCom" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?pastebin\.com/\w+' + + __description__ = """Pastebin.com decrypter plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + LINK_PATTERN = r'<div class="de\d+">(https?://[^ <]+)(?:[^<]*)</div>' + TITLE_PATTERN = r'<div class="paste_box_line1" title="(?P<title>[^"]+)">' diff --git a/pyload/plugins/crypter/QuickshareCzFolder.py b/pyload/plugins/crypter/QuickshareCzFolder.py new file mode 100644 index 000000000..5d99cbffd --- /dev/null +++ b/pyload/plugins/crypter/QuickshareCzFolder.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- + +import re +from pyload.plugins.Crypter import Crypter + + +class QuickshareCzFolder(Crypter): + __name__ = "QuickshareCzFolder" + __type__ = "crypter" + __version__ = "0.1" + + __pattern__ = r'http://(?:www\.)?quickshare.cz/slozka-\d+.*' + + __description__ = """Quickshare.cz folder decrypter plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FOLDER_PATTERN = r'<textarea[^>]*>(.*?)</textarea>' + LINK_PATTERN = r'(http://www.quickshare.cz/\S+)' + + + def decrypt(self, pyfile): + html = self.load(pyfile.url) + + m = re.search(self.FOLDER_PATTERN, html, re.DOTALL) + if m is None: + self.fail("Parse error (FOLDER)") + self.urls.extend(re.findall(self.LINK_PATTERN, m.group(1))) + + if not self.urls: + self.fail('Could not extract any links') diff --git a/pyload/plugins/crypter/RSLayerCom.py b/pyload/plugins/crypter/RSLayerCom.py new file mode 100644 index 000000000..ded550a50 --- /dev/null +++ b/pyload/plugins/crypter/RSLayerCom.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class RSLayerCom(DeadCrypter): + __name__ = "RSLayerCom" + __type__ = "crypter" + __version__ = "0.21" + + __pattern__ = r'http://(?:www\.)?rs-layer.com/directory-' + + __description__ = """RS-Layer.com decrypter plugin""" + __author_name__ = "hzpz" + __author_mail__ = None diff --git a/pyload/plugins/crypter/RelinkUs.py b/pyload/plugins/crypter/RelinkUs.py new file mode 100644 index 000000000..74228d41a --- /dev/null +++ b/pyload/plugins/crypter/RelinkUs.py @@ -0,0 +1,263 @@ +# -*- coding: utf-8 -*- + +import base64 +import binascii +import re +import os + +from Crypto.Cipher import AES +from pyload.plugins.Crypter import Crypter + + +class RelinkUs(Crypter): + __name__ = "RelinkUs" + __type__ = "crypter" + __version__ = "3.0" + + __pattern__ = r'http://(?:www\.)?relink.us/(f/|((view|go).php\?id=))(?P<id>.+)' + + __description__ = """Relink.us decrypter plugin""" + __author_name__ = "fragonib" + __author_mail__ = "fragonib[AT]yahoo[DOT]es" + + # Constants + PREFERRED_LINK_SOURCES = ["cnl2", "dlc", "web"] + + OFFLINE_TOKEN = r'<title>Tattooside' + PASSWORD_TOKEN = r'container_password\.php' + PASSWORD_ERROR_ROKEN = r'You have entered an incorrect password' + PASSWORD_SUBMIT_URL = r'http://www\.relink\.us/container_password\.php' + CAPTCHA_TOKEN = r'container_captcha\.php' + CAPTCHA_ERROR_ROKEN = r'You have solved the captcha wrong' + CAPTCHA_IMG_URL = r'http://www\.relink\.us/core/captcha/circlecaptcha\.php' + CAPTCHA_SUBMIT_URL = r'http://www\.relink\.us/container_captcha\.php' + FILE_TITLE_REGEX = r'<th>Title</th><td><i>(.*)</i></td></tr>' + FILE_NOTITLE = r'No title' + + CNL2_FORM_REGEX = r'<form id="cnl_form-(.*?)</form>' + CNL2_FORMINPUT_REGEX = r'<input.*?name="%s".*?value="(.*?)"' + CNL2_JK_KEY = "jk" + CNL2_CRYPTED_KEY = "crypted" + DLC_LINK_REGEX = r'<a href=".*?" class="dlc_button" target="_blank">' + DLC_DOWNLOAD_URL = r'http://www\.relink\.us/download\.php' + WEB_FORWARD_REGEX = r"getFile\('(?P<link>.+)'\)" + WEB_FORWARD_URL = r'http://www\.relink\.us/frame\.php' + WEB_LINK_REGEX = r'<iframe name="Container" height="100%" frameborder="no" width="100%" src="(?P<link>.+)"></iframe>' + + + def setup(self): + self.fileid = None + self.package = None + self.password = None + self.html = None + self.captcha = False + + def decrypt(self, pyfile): + # Init + self.initPackage(pyfile) + + # Request package + self.requestPackage() + + # Check for online + if not self.isOnline(): + self.offline() + + # Check for protection + if self.isPasswordProtected(): + self.unlockPasswordProtection() + self.handleErrors() + + if self.isCaptchaProtected(): + self.captcha = True + self.unlockCaptchaProtection() + self.handleErrors() + + # Get package name and folder + (package_name, folder_name) = self.getPackageInfo() + + # Extract package links + package_links = [] + for sources in self.PREFERRED_LINK_SOURCES: + package_links.extend(self.handleLinkSource(sources)) + if package_links: # use only first source which provides links + break + package_links = set(package_links) + + # Pack + if package_links: + self.packages = [(package_name, package_links, folder_name)] + else: + self.fail('Could not extract any links') + + def initPackage(self, pyfile): + self.fileid = re.match(self.__pattern__, pyfile.url).group('id') + self.package = pyfile.package() + self.password = self.getPassword() + + def requestPackage(self): + self.html = self.load(self.pyfile.url, decode=True) + + def isOnline(self): + if self.OFFLINE_TOKEN in self.html: + self.logDebug("File not found") + return False + return True + + def isPasswordProtected(self): + if self.PASSWORD_TOKEN in self.html: + self.logDebug("Links are password protected") + return True + + def isCaptchaProtected(self): + if self.CAPTCHA_TOKEN in self.html: + self.logDebug("Links are captcha protected") + return True + return False + + def unlockPasswordProtection(self): + self.logDebug("Submitting password [%s] for protected links" % self.password) + passwd_url = self.PASSWORD_SUBMIT_URL + "?id=%s" % self.fileid + passwd_data = {'id': self.fileid, 'password': self.password, 'pw': 'submit'} + self.html = self.load(passwd_url, post=passwd_data, decode=True) + + def unlockCaptchaProtection(self): + self.logDebug("Request user positional captcha resolving") + captcha_img_url = self.CAPTCHA_IMG_URL + "?id=%s" % self.fileid + coords = self.decryptCaptcha(captcha_img_url, forceUser=True, imgtype="png", result_type='positional') + self.logDebug("Captcha resolved, coords [%s]" % str(coords)) + captcha_post_url = self.CAPTCHA_SUBMIT_URL + "?id=%s" % self.fileid + captcha_post_data = {'button.x': coords[0], 'button.y': coords[1], 'captcha': 'submit'} + self.html = self.load(captcha_post_url, post=captcha_post_data, decode=True) + + def getPackageInfo(self): + name = folder = None + + # Try to get info from web + m = re.search(self.FILE_TITLE_REGEX, self.html) + if m is not None: + title = m.group(1).strip() + if not self.FILE_NOTITLE in title: + name = folder = title + self.logDebug("Found name [%s] and folder [%s] in package info" % (name, folder)) + + # Fallback to defaults + if not name or not folder: + name = self.package.name + folder = self.package.folder + self.logDebug("Package info not found, defaulting to pyfile name [%s] and folder [%s]" % (name, folder)) + + # Return package info + return name, folder + + def handleErrors(self): + if self.PASSWORD_ERROR_ROKEN in self.html: + msg = "Incorrect password, please set right password on 'Edit package' form and retry" + self.logDebug(msg) + self.fail(msg) + + if self.captcha: + if self.CAPTCHA_ERROR_ROKEN in self.html: + self.logDebug("Invalid captcha, retrying") + self.invalidCaptcha() + self.retry() + else: + self.correctCaptcha() + + def handleLinkSource(self, source): + if source == 'cnl2': + return self.handleCNL2Links() + elif source == 'dlc': + return self.handleDLCLinks() + elif source == 'web': + return self.handleWEBLinks() + else: + self.fail('Unknown source [%s] (this is probably a bug)' % source) + + def handleCNL2Links(self): + self.logDebug("Search for CNL2 links") + package_links = [] + m = re.search(self.CNL2_FORM_REGEX, self.html, re.DOTALL) + if m is not None: + cnl2_form = m.group(1) + try: + (vcrypted, vjk) = self._getCipherParams(cnl2_form) + for (crypted, jk) in zip(vcrypted, vjk): + package_links.extend(self._getLinks(crypted, jk)) + except: + self.logDebug("Unable to decrypt CNL2 links") + return package_links + + def handleDLCLinks(self): + self.logDebug('Search for DLC links') + package_links = [] + m = re.search(self.DLC_LINK_REGEX, self.html) + if m is not None: + container_url = self.DLC_DOWNLOAD_URL + "?id=%s&dlc=1" % self.fileid + self.logDebug("Downloading DLC container link [%s]" % container_url) + try: + dlc = self.load(container_url) + dlc_filename = self.fileid + ".dlc" + dlc_filepath = os.path.join(self.config['general']['download_folder'], dlc_filename) + f = open(dlc_filepath, "wb") + f.write(dlc) + f.close() + package_links.append(dlc_filepath) + except: + self.logDebug("Unable to download DLC container") + return package_links + + def handleWEBLinks(self): + self.logDebug("Search for WEB links") + package_links = [] + fw_params = re.findall(self.WEB_FORWARD_REGEX, self.html) + self.logDebug("Decrypting %d Web links" % len(fw_params)) + for index, fw_param in enumerate(fw_params): + try: + fw_url = self.WEB_FORWARD_URL + "?%s" % fw_param + self.logDebug("Decrypting Web link %d, %s" % (index + 1, fw_url)) + fw_response = self.load(fw_url, decode=True) + dl_link = re.search(self.WEB_LINK_REGEX, fw_response).group('link') + package_links.append(dl_link) + except Exception, detail: + self.logDebug("Error decrypting Web link %s, %s" % (index, detail)) + self.setWait(4) + self.wait() + return package_links + + def _getCipherParams(self, cnl2_form): + # Get jk + jk_re = self.CNL2_FORMINPUT_REGEX % self.CNL2_JK_KEY + vjk = re.findall(jk_re, cnl2_form, re.IGNORECASE) + + # Get crypted + crypted_re = self.CNL2_FORMINPUT_REGEX % RelinkUs.CNL2_CRYPTED_KEY + vcrypted = re.findall(crypted_re, cnl2_form, re.IGNORECASE) + + # Log and return + self.logDebug("Detected %d crypted blocks" % len(vcrypted)) + return vcrypted, vjk + + def _getLinks(self, crypted, jk): + # Get key + jreturn = self.js.eval("%s f()" % jk) + self.logDebug("JsEngine returns value [%s]" % jreturn) + key = binascii.unhexlify(jreturn) + + # Decode crypted + crypted = base64.standard_b64decode(crypted) + + # Decrypt + Key = key + IV = key + obj = AES.new(Key, AES.MODE_CBC, IV) + text = obj.decrypt(crypted) + + # Extract links + text = text.replace("\x00", "").replace("\r", "") + links = text.split("\n") + links = filter(lambda x: x != "", links) + + # Log and return + self.logDebug("Package has %d links" % len(links)) + return links diff --git a/pyload/plugins/crypter/SafelinkingNet.py b/pyload/plugins/crypter/SafelinkingNet.py new file mode 100644 index 000000000..62dcc6021 --- /dev/null +++ b/pyload/plugins/crypter/SafelinkingNet.py @@ -0,0 +1,82 @@ +# -*- coding: utf-8 -*- + +import re + +from pycurl import FOLLOWLOCATION + +from pyload.lib.BeautifulSoup import BeautifulSoup + +from pyload.common.json_layer import json_loads +from pyload.plugins.Crypter import Crypter +from pyload.plugins.internal.CaptchaService import SolveMedia + + +class SafelinkingNet(Crypter): + __name__ = "SafelinkingNet" + __type__ = "crypter" + __version__ = "0.1" + + __pattern__ = r'https?://(?:www\.)?safelinking.net/([pd])/\w+' + + __description__ = """Safelinking.net decrypter plugin""" + __author_name__ = "quareevo" + __author_mail__ = "quareevo@arcor.de" + + SOLVEMEDIA_PATTERN = "solvemediaApiKey = '([\w\.\-_]+)';" + + + def decrypt(self, pyfile): + url = pyfile.url + if re.match(self.__pattern__, url).group(1) == "d": + self.req.http.c.setopt(FOLLOWLOCATION, 0) + self.load(url) + m = re.search("^Location: (.+)$", self.req.http.header, re.MULTILINE) + if m: + self.urls = [m.group(1)] + else: + self.fail("Couldn't find forwarded Link") + + else: + password = "" + postData = {"post-protect": "1"} + + self.html = self.load(url) + + if "link-password" in self.html: + password = pyfile.package().password + postData['link-password'] = password + + if "altcaptcha" in self.html: + for _ in xrange(5): + m = re.search(self.SOLVEMEDIA_PATTERN, self.html) + if m: + captchaKey = m.group(1) + captcha = SolveMedia(self) + captchaProvider = "Solvemedia" + else: + self.fail("Error parsing captcha") + + challenge, response = captcha.challenge(captchaKey) + postData['adcopy_challenge'] = challenge + postData['adcopy_response'] = response + + self.html = self.load(url, post=postData) + if "The password you entered was incorrect" in self.html: + self.fail("Incorrect Password") + if not "The CAPTCHA code you entered was wrong" in self.html: + break + + pyfile.package().password = "" + soup = BeautifulSoup(self.html) + scripts = soup.findAll("script") + for s in scripts: + if "d_links" in s.text: + break + m = re.search('d_links":(\[.*?\])', s.text) + if m: + linkDict = json_loads(m.group(1)) + for link in linkDict: + if not "http://" in link['full']: + self.urls.append("https://safelinking.net/d/" + link['full']) + else: + self.urls.append(link['full']) diff --git a/pyload/plugins/crypter/SecuredIn.py b/pyload/plugins/crypter/SecuredIn.py new file mode 100644 index 000000000..fc2667586 --- /dev/null +++ b/pyload/plugins/crypter/SecuredIn.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class SecuredIn(DeadCrypter): + __name__ = "SecuredIn" + __type__ = "crypter" + __version__ = "0.21" + + __pattern__ = r'http://(?:www\.)?secured\.in/download-[\d]+-[\w]{8}\.html' + + __description__ = """Secured.in decrypter plugin""" + __author_name__ = "mkaay" + __author_mail__ = "mkaay@mkaay.de" diff --git a/pyload/plugins/crypter/SerienjunkiesOrg.py b/pyload/plugins/crypter/SerienjunkiesOrg.py new file mode 100644 index 000000000..c7f7b1892 --- /dev/null +++ b/pyload/plugins/crypter/SerienjunkiesOrg.py @@ -0,0 +1,324 @@ +# -*- coding: utf-8 -*- + +import random +import re + +from time import sleep + +from pyload.lib.BeautifulSoup import BeautifulSoup + +from pyload.plugins.Crypter import Crypter +from pyload.unescape import unescape + + +class SerienjunkiesOrg(Crypter): + __name__ = "SerienjunkiesOrg" + __type__ = "crypter" + __version__ = "0.39" + + __pattern__ = r'http://(?:www\.)?(serienjunkies.org|dokujunkies.org)/.*?' + __config__ = [("changeNameSJ", "Packagename;Show;Season;Format;Episode", "Take SJ.org name", "Show"), + ("changeNameDJ", "Packagename;Show;Format;Episode", "Take DJ.org name", "Show"), + ("randomPreferred", "bool", "Randomize Preferred-List", False), + ("hosterListMode", "OnlyOne;OnlyPreferred(One);OnlyPreferred(All);All", + "Use for hosters (if supported)", "All"), + ("hosterList", "str", "Preferred Hoster list (comma separated)", + "RapidshareCom,UploadedTo,NetloadIn,FilefactoryCom,FreakshareNet,FilebaseTo,HotfileCom,DepositfilesCom,EasyshareCom,KickloadCom"), + ("ignoreList", "str", "Ignored Hoster list (comma separated)", "MegauploadCom")] + + __description__ = """Serienjunkies.org decrypter plugin""" + __author_name__ = ("mkaay", "godofdream") + __author_mail__ = ("mkaay@mkaay.de", "soilfiction@gmail.com") + + + def setup(self): + self.multiDL = False + + def getSJSrc(self, url): + src = self.req.load(str(url)) + if "This website is not available in your country" in src: + self.fail("Not available in your country") + if not src.find("Enter Serienjunkies") == -1: + sleep(1) + src = self.req.load(str(url)) + return src + + def handleShow(self, url): + src = self.getSJSrc(url) + soup = BeautifulSoup(src) + packageName = self.pyfile.package().name + if self.getConfig("changeNameSJ") == "Show": + found = unescape(soup.find("h2").find("a").string.split(' –')[0]) + if found: + packageName = found + + nav = soup.find("div", attrs={"id": "scb"}) + + package_links = [] + for a in nav.findAll("a"): + if self.getConfig("changeNameSJ") == "Show": + package_links.append(a['href']) + else: + package_links.append(a['href'] + "#hasName") + if self.getConfig("changeNameSJ") == "Show": + self.packages.append((packageName, package_links, packageName)) + else: + self.core.files.addLinks(package_links, self.pyfile.package().id) + + def handleSeason(self, url): + src = self.getSJSrc(url) + soup = BeautifulSoup(src) + post = soup.find("div", attrs={"class": "post-content"}) + ps = post.findAll("p") + + seasonName = unescape(soup.find("a", attrs={"rel": "bookmark"}).string).replace("–", "-") + groups = {} + gid = -1 + for p in ps: + if re.search("<strong>Sprache|<strong>Format", str(p)): + var = p.findAll("strong") + opts = {"Sprache": "", "Format": ""} + for v in var: + n = unescape(v.string).strip() + n = re.sub(r"^([:]?)(.*?)([:]?)$", r'\2', n) + if n.strip() not in opts: + continue + val = v.nextSibling + if not val: + continue + val = val.replace("|", "").strip() + val = re.sub(r"^([:]?)(.*?)([:]?)$", r'\2', val) + opts[n.strip()] = val.strip() + gid += 1 + groups[gid] = {} + groups[gid]['ep'] = {} + groups[gid]['opts'] = opts + elif re.search("<strong>Download:", str(p)): + parts = str(p).split("<br />") + if re.search("<strong>", parts[0]): + ename = re.search('<strong>(.*?)</strong>', parts[0]).group(1).strip().decode("utf-8").replace( + "–", "-") + groups[gid]['ep'][ename] = {} + parts.remove(parts[0]) + for part in parts: + hostername = re.search(r" \| ([-a-zA-Z0-9]+\.\w+)", part) + if hostername: + hostername = hostername.group(1) + groups[gid]['ep'][ename][hostername] = [] + links = re.findall('href="(.*?)"', part) + for link in links: + groups[gid]['ep'][ename][hostername].append(link + "#hasName") + + links = [] + for g in groups.values(): + for ename in g['ep']: + links.extend(self.getpreferred(g['ep'][ename])) + if self.getConfig("changeNameSJ") == "Episode": + self.packages.append((ename, links, ename)) + links = [] + package = "%s (%s, %s)" % (seasonName, g['opts']['Format'], g['opts']['Sprache']) + if self.getConfig("changeNameSJ") == "Format": + self.packages.append((package, links, package)) + links = [] + if (self.getConfig("changeNameSJ") == "Packagename") or re.search("#hasName", url): + self.core.files.addLinks(links, self.pyfile.package().id) + elif (self.getConfig("changeNameSJ") == "Season") or not re.search("#hasName", url): + self.packages.append((seasonName, links, seasonName)) + + def handleEpisode(self, url): + src = self.getSJSrc(url) + if not src.find( + "Du hast das Download-Limit überschritten! Bitte versuche es später nocheinmal.") == -1: + self.fail(_("Downloadlimit reached")) + else: + soup = BeautifulSoup(src) + form = soup.find("form") + h1 = soup.find("h1") + + if h1.get("class") == "wrap": + captchaTag = soup.find(attrs={"src": re.compile("^/secure/")}) + if not captchaTag: + sleep(5) + self.retry() + + captchaUrl = "http://download.serienjunkies.org" + captchaTag['src'] + result = self.decryptCaptcha(str(captchaUrl), imgtype="png") + sinp = form.find(attrs={"name": "s"}) + + self.req.lastURL = str(url) + sj = self.load(str(url), post={'s': sinp['value'], 'c': result, 'action': "Download"}) + + soup = BeautifulSoup(sj) + rawLinks = soup.findAll(attrs={"action": re.compile("^http://download.serienjunkies.org/")}) + + if not len(rawLinks) > 0: + sleep(1) + self.retry() + return + + self.correctCaptcha() + + links = [] + for link in rawLinks: + frameUrl = link['action'].replace("/go-", "/frame/go-") + links.append(self.handleFrame(frameUrl)) + if re.search("#hasName", url) or ((self.getConfig("changeNameSJ") == "Packagename") and + (self.getConfig("changeNameDJ") == "Packagename")): + self.core.files.addLinks(links, self.pyfile.package().id) + else: + if h1.text[2] == "_": + eName = h1.text[3:] + else: + eName = h1.text + self.packages.append((eName, links, eName)) + + def handleOldStyleLink(self, url): + sj = self.req.load(str(url)) + soup = BeautifulSoup(sj) + form = soup.find("form", attrs={"action": re.compile("^http://serienjunkies.org")}) + captchaTag = form.find(attrs={"src": re.compile("^/safe/secure/")}) + captchaUrl = "http://serienjunkies.org" + captchaTag['src'] + result = self.decryptCaptcha(str(captchaUrl)) + url = form['action'] + sinp = form.find(attrs={"name": "s"}) + + self.req.load(str(url), post={'s': sinp['value'], 'c': result, 'dl.start': "Download"}, cookies=False, + just_header=True) + decrypted = self.req.lastEffectiveURL + if decrypted == str(url): + self.retry() + self.core.files.addLinks([decrypted], self.pyfile.package().id) + + def handleFrame(self, url): + self.req.load(str(url)) + return self.req.lastEffectiveURL + + def handleShowDJ(self, url): + src = self.getSJSrc(url) + soup = BeautifulSoup(src) + post = soup.find("div", attrs={"id": "page_post"}) + ps = post.findAll("p") + found = unescape(soup.find("h2").find("a").string.split(' –')[0]) + if found: + seasonName = found + + groups = {} + gid = -1 + for p in ps: + if re.search("<strong>Sprache|<strong>Format", str(p)): + var = p.findAll("strong") + opts = {"Sprache": "", "Format": ""} + for v in var: + n = unescape(v.string).strip() + n = re.sub(r"^([:]?)(.*?)([:]?)$", r'\2', n) + if n.strip() not in opts: + continue + val = v.nextSibling + if not val: + continue + val = val.replace("|", "").strip() + val = re.sub(r"^([:]?)(.*?)([:]?)$", r'\2', val) + opts[n.strip()] = val.strip() + gid += 1 + groups[gid] = {} + groups[gid]['ep'] = {} + groups[gid]['opts'] = opts + elif re.search("<strong>Download:", str(p)): + parts = str(p).split("<br />") + if re.search("<strong>", parts[0]): + ename = re.search('<strong>(.*?)</strong>', parts[0]).group(1).strip().decode("utf-8").replace( + "–", "-") + groups[gid]['ep'][ename] = {} + parts.remove(parts[0]) + for part in parts: + hostername = re.search(r" \| ([-a-zA-Z0-9]+\.\w+)", part) + if hostername: + hostername = hostername.group(1) + groups[gid]['ep'][ename][hostername] = [] + links = re.findall('href="(.*?)"', part) + for link in links: + groups[gid]['ep'][ename][hostername].append(link + "#hasName") + + links = [] + for g in groups.values(): + for ename in g['ep']: + links.extend(self.getpreferred(g['ep'][ename])) + if self.getConfig("changeNameDJ") == "Episode": + self.packages.append((ename, links, ename)) + links = [] + package = "%s (%s, %s)" % (seasonName, g['opts']['Format'], g['opts']['Sprache']) + if self.getConfig("changeNameDJ") == "Format": + self.packages.append((package, links, package)) + links = [] + if (self.getConfig("changeNameDJ") == "Packagename") or re.search("#hasName", url): + self.core.files.addLinks(links, self.pyfile.package().id) + elif (self.getConfig("changeNameDJ") == "Show") or not re.search("#hasName", url): + self.packages.append((seasonName, links, seasonName)) + + def handleCategoryDJ(self, url): + package_links = [] + src = self.getSJSrc(url) + soup = BeautifulSoup(src) + content = soup.find("div", attrs={"id": "content"}) + for a in content.findAll("a", attrs={"rel": "bookmark"}): + package_links.append(a['href']) + self.core.files.addLinks(package_links, self.pyfile.package().id) + + def decrypt(self, pyfile): + showPattern = re.compile("^http://serienjunkies.org/serie/(.*)/$") + seasonPattern = re.compile("^http://serienjunkies.org/.*?/(.*)/$") + episodePattern = re.compile("^http://download.serienjunkies.org/f-.*?.html(#hasName)?$") + oldStyleLink = re.compile("^http://serienjunkies.org/safe/(.*)$") + categoryPatternDJ = re.compile("^http://dokujunkies.org/.*?(.*)$") + showPatternDJ = re.compile(r"^http://dokujunkies.org/.*?/(.*)\.html(#hasName)?$") + framePattern = re.compile("^http://download.(serienjunkies.org|dokujunkies.org)/frame/go-.*?/$") + url = pyfile.url + if framePattern.match(url): + self.packages.append((pyfile.package().name, [self.handleFrame(url)], pyfile.package().name)) + elif episodePattern.match(url): + self.handleEpisode(url) + elif oldStyleLink.match(url): + self.handleOldStyleLink(url) + elif showPattern.match(url): + self.handleShow(url) + elif showPatternDJ.match(url): + self.handleShowDJ(url) + elif seasonPattern.match(url): + self.handleSeason(url) + elif categoryPatternDJ.match(url): + self.handleCategoryDJ(url) + + #selects the preferred hoster, after that selects any hoster (ignoring the one to ignore) + def getpreferred(self, hosterlist): + + result = [] + preferredList = self.getConfig("hosterList").strip().lower().replace( + '|', ',').replace('.', '').replace(';', ',').split(',') + if (self.getConfig("randomPreferred") is True) and ( + self.getConfig("hosterListMode") in ["OnlyOne", "OnlyPreferred(One)"]): + random.shuffle(preferredList) + # we don't want hosters be read two times + hosterlist2 = hosterlist.copy() + + for preferred in preferredList: + for Hoster in hosterlist: + if preferred == Hoster.lower().replace('.', ''): + for Part in hosterlist[Hoster]: + self.logDebug("selected " + Part) + result.append(str(Part)) + del (hosterlist2[Hoster]) + if self.getConfig("hosterListMode") in ["OnlyOne", "OnlyPreferred(One)"]: + return result + + ignorelist = self.getConfig("ignoreList").strip().lower().replace( + '|', ',').replace('.', '').replace(';', ',').split(',') + if self.getConfig('hosterListMode') in ["OnlyOne", "All"]: + for Hoster in hosterlist2: + if Hoster.strip().lower().replace('.', '') not in ignorelist: + for Part in hosterlist2[Hoster]: + self.logDebug("selected2 " + Part) + result.append(str(Part)) + + if self.getConfig('hosterListMode') == "OnlyOne": + return result + return result diff --git a/pyload/plugins/crypter/ShareLinksBiz.py b/pyload/plugins/crypter/ShareLinksBiz.py new file mode 100644 index 000000000..132d2160b --- /dev/null +++ b/pyload/plugins/crypter/ShareLinksBiz.py @@ -0,0 +1,269 @@ +# -*- coding: utf-8 -*- + +import base64 +import binascii +import re + +from Crypto.Cipher import AES +from pyload.plugins.Crypter import Crypter + + +class ShareLinksBiz(Crypter): + __name__ = "ShareLinksBiz" + __type__ = "crypter" + __version__ = "1.13" + + __pattern__ = r'http://(?:www\.)?(share-links|s2l)\.biz/(?P<ID>_?\w+)' + + __description__ = """Share-Links.biz decrypter plugin""" + __author_name__ = "fragonib" + __author_mail__ = "fragonib[AT]yahoo[DOT]es" + + + def setup(self): + self.baseUrl = None + self.fileId = None + self.package = None + self.html = None + self.captcha = False + + def decrypt(self, pyfile): + # Init + self.initFile(pyfile) + + # Request package + url = self.baseUrl + '/' + self.fileId + self.html = self.load(url, decode=True) + + # Unblock server (load all images) + self.unblockServer() + + # Check for protection + if self.isPasswordProtected(): + self.unlockPasswordProtection() + self.handleErrors() + + if self.isCaptchaProtected(): + self.captcha = True + self.unlockCaptchaProtection() + self.handleErrors() + + # Extract package links + package_links = [] + package_links.extend(self.handleWebLinks()) + package_links.extend(self.handleContainers()) + package_links.extend(self.handleCNL2()) + package_links = set(package_links) + + # Get package info + package_name, package_folder = self.getPackageInfo() + + # Pack + self.packages = [(package_name, package_links, package_folder)] + + def initFile(self, pyfile): + url = pyfile.url + if 's2l.biz' in url: + url = self.load(url, just_header=True)['location'] + self.baseUrl = "http://www.%s.biz" % re.match(self.__pattern__, url).group(1) + self.fileId = re.match(self.__pattern__, url).group('ID') + self.package = pyfile.package() + + def isOnline(self): + if "No usable content was found" in self.html: + self.logDebug("File not found") + return False + return True + + def isPasswordProtected(self): + if re.search(r'''<form.*?id="passwordForm".*?>''', self.html): + self.logDebug("Links are protected") + return True + return False + + def isCaptchaProtected(self): + if '<map id="captchamap"' in self.html: + self.logDebug("Links are captcha protected") + return True + return False + + def unblockServer(self): + imgs = re.findall(r"(/template/images/.*?\.gif)", self.html) + for img in imgs: + self.load(self.baseUrl + img) + + def unlockPasswordProtection(self): + password = self.getPassword() + self.logDebug("Submitting password [%s] for protected links" % password) + post = {"password": password, 'login': 'Submit form'} + url = self.baseUrl + '/' + self.fileId + self.html = self.load(url, post=post, decode=True) + + def unlockCaptchaProtection(self): + # Get captcha map + captchaMap = self._getCaptchaMap() + self.logDebug("Captcha map with [%d] positions" % len(captchaMap.keys())) + + # Request user for captcha coords + m = re.search(r'<img src="/captcha.gif\?d=(.*?)&PHPSESSID=(.*?)&legend=1"', self.html) + captchaUrl = self.baseUrl + '/captcha.gif?d=%s&PHPSESSID=%s' % (m.group(1), m.group(2)) + self.logDebug("Waiting user for correct position") + coords = self.decryptCaptcha(captchaUrl, forceUser=True, imgtype="gif", result_type='positional') + self.logDebug("Captcha resolved, coords [%s]" % str(coords)) + + # Resolve captcha + href = self._resolveCoords(coords, captchaMap) + if href is None: + self.logDebug("Invalid captcha resolving, retrying") + self.invalidCaptcha() + self.setWait(5, False) + self.wait() + self.retry() + url = self.baseUrl + href + self.html = self.load(url, decode=True) + + def _getCaptchaMap(self): + mapp = {} + for m in re.finditer(r'<area shape="rect" coords="(.*?)" href="(.*?)"', self.html): + rect = eval('(' + m.group(1) + ')') + href = m.group(2) + mapp[rect] = href + return mapp + + def _resolveCoords(self, coords, captchaMap): + x, y = coords + for rect, href in captchaMap.items(): + x1, y1, x2, y2 = rect + if (x >= x1 and x <= x2) and (y >= y1 and y <= y2): + return href + + def handleErrors(self): + if "The inserted password was wrong" in self.html: + self.logDebug("Incorrect password, please set right password on 'Edit package' form and retry") + self.fail("Incorrect password, please set right password on 'Edit package' form and retry") + + if self.captcha: + if "Your choice was wrong" in self.html: + self.logDebug("Invalid captcha, retrying") + self.invalidCaptcha() + self.setWait(5) + self.wait() + self.retry() + else: + self.correctCaptcha() + + def getPackageInfo(self): + name = folder = None + + # Extract from web package header + title_re = r'<h2><img.*?/>(.*)</h2>' + m = re.search(title_re, self.html, re.DOTALL) + if m is not None: + title = m.group(1).strip() + if 'unnamed' not in title: + name = folder = title + self.logDebug("Found name [%s] and folder [%s] in package info" % (name, folder)) + + # Fallback to defaults + if not name or not folder: + name = self.package.name + folder = self.package.folder + self.logDebug("Package info not found, defaulting to pyfile name [%s] and folder [%s]" % (name, folder)) + + # Return package info + return name, folder + + def handleWebLinks(self): + package_links = [] + self.logDebug("Handling Web links") + + #@TODO: Gather paginated web links + pattern = r"javascript:_get\('(.*?)', \d+, ''\)" + ids = re.findall(pattern, self.html) + self.logDebug("Decrypting %d Web links" % len(ids)) + for i, ID in enumerate(ids): + try: + self.logDebug("Decrypting Web link %d, [%s]" % (i + 1, ID)) + dwLink = self.baseUrl + "/get/lnk/" + ID + response = self.load(dwLink) + code = re.search(r'frm/(\d+)', response).group(1) + fwLink = self.baseUrl + "/get/frm/" + code + response = self.load(fwLink) + jscode = re.search(r'<script language="javascript">\s*eval\((.*)\)\s*</script>', response, + re.DOTALL).group(1) + jscode = self.js.eval("f = %s" % jscode) + jslauncher = "window=''; parent={frames:{Main:{location:{href:''}}},location:''}; %s; parent.frames.Main.location.href" + dlLink = self.js.eval(jslauncher % jscode) + self.logDebug("JsEngine returns value [%s] for redirection link" % dlLink) + package_links.append(dlLink) + except Exception, detail: + self.logDebug("Error decrypting Web link [%s], %s" % (ID, detail)) + return package_links + + def handleContainers(self): + package_links = [] + self.logDebug("Handling Container links") + + pattern = r"javascript:_get\('(.*?)', 0, '(rsdf|ccf|dlc)'\)" + containersLinks = re.findall(pattern, self.html) + self.logDebug("Decrypting %d Container links" % len(containersLinks)) + for containerLink in containersLinks: + link = "%s/get/%s/%s" % (self.baseUrl, containerLink[1], containerLink[0]) + package_links.append(link) + return package_links + + def handleCNL2(self): + package_links = [] + self.logDebug("Handling CNL2 links") + + if '/lib/cnl2/ClicknLoad.swf' in self.html: + try: + (crypted, jk) = self._getCipherParams() + package_links.extend(self._getLinks(crypted, jk)) + except: + self.fail("Unable to decrypt CNL2 links") + return package_links + + def _getCipherParams(self): + # Request CNL2 + code = re.search(r'ClicknLoad.swf\?code=(.*?)"', self.html).group(1) + url = "%s/get/cnl2/%s" % (self.baseUrl, code) + response = self.load(url) + params = response.split(";;") + + # Get jk + strlist = list(base64.standard_b64decode(params[1])) + strlist.reverse() + jk = ''.join(strlist) + + # Get crypted + strlist = list(base64.standard_b64decode(params[2])) + strlist.reverse() + crypted = ''.join(strlist) + + # Log and return + return crypted, jk + + def _getLinks(self, crypted, jk): + # Get key + jreturn = self.js.eval("%s f()" % jk) + self.logDebug("JsEngine returns value [%s]" % jreturn) + key = binascii.unhexlify(jreturn) + + # Decode crypted + crypted = base64.standard_b64decode(crypted) + + # Decrypt + Key = key + IV = key + obj = AES.new(Key, AES.MODE_CBC, IV) + text = obj.decrypt(crypted) + + # Extract links + text = text.replace("\x00", "").replace("\r", "") + links = text.split("\n") + links = filter(lambda x: x != "", links) + + # Log and return + self.logDebug("Block has %d links" % len(links)) + return links diff --git a/pyload/plugins/crypter/ShareRapidComFolder.py b/pyload/plugins/crypter/ShareRapidComFolder.py new file mode 100644 index 000000000..c8e95be1c --- /dev/null +++ b/pyload/plugins/crypter/ShareRapidComFolder.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class ShareRapidComFolder(SimpleCrypter): + __name__ = "ShareRapidComFolder" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?((share(-?rapid\.(biz|com|cz|info|eu|net|org|pl|sk)|-(central|credit|free|net)\.cz|-ms\.net)|(s-?rapid|rapids)\.(cz|sk))|(e-stahuj|mediatack|premium-rapidshare|rapidshare-premium|qiuck)\.cz|kadzet\.com|stahuj-zdarma\.eu|strelci\.net|universal-share\.com)/(slozka/.+)' + + __description__ = """Share-Rapid.com folder decrypter plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + LINK_PATTERN = r'<td class="soubor"[^>]*><a href="([^"]+)">' diff --git a/pyload/plugins/crypter/SpeedLoadOrgFolder.py b/pyload/plugins/crypter/SpeedLoadOrgFolder.py new file mode 100644 index 000000000..fff119a93 --- /dev/null +++ b/pyload/plugins/crypter/SpeedLoadOrgFolder.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class SpeedLoadOrgFolder(DeadCrypter): + __name__ = "SpeedLoadOrgFolder" + __type__ = "crypter" + __version__ = "0.3" + + __pattern__ = r'http://(?:www\.)?speedload\.org/(\d+~f$|folder/\d+/)' + + __description__ = """Speedload decrypter plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" diff --git a/pyload/plugins/crypter/StealthTo.py b/pyload/plugins/crypter/StealthTo.py new file mode 100644 index 000000000..24489a1b3 --- /dev/null +++ b/pyload/plugins/crypter/StealthTo.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class StealthTo(DeadCrypter): + __name__ = "StealthTo" + __type__ = "crypter" + __version__ = "0.2" + + __pattern__ = r'http://(?:www\.)?stealth\.to/folder/.+' + + __description__ = """Stealth.to decrypter plugin""" + __author_name__ = "spoob" + __author_mail__ = "spoob@pyload.org" diff --git a/pyload/plugins/crypter/TnyCz.py b/pyload/plugins/crypter/TnyCz.py new file mode 100644 index 000000000..879941ba4 --- /dev/null +++ b/pyload/plugins/crypter/TnyCz.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + +import re + + +class TnyCz(SimpleCrypter): + __name__ = "TnyCz" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?tny\.cz/\w+' + + __description__ = """Tny.cz decrypter plugin""" + __author_name__ = "Walter Purcaro" + __author_mail__ = "vuolter@gmail.com" + + TITLE_PATTERN = r'<title>(?P<title>.+) - .+</title>' + + + def getLinks(self): + m = re.search(r'<a id=\'save_paste\' href="(.+save\.php\?hash=.+)">', self.html) + return re.findall(".+", self.load(m.group(1), decode=True)) if m else None diff --git a/pyload/plugins/crypter/TrailerzoneInfo.py b/pyload/plugins/crypter/TrailerzoneInfo.py new file mode 100644 index 000000000..7be3beef0 --- /dev/null +++ b/pyload/plugins/crypter/TrailerzoneInfo.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class TrailerzoneInfo(DeadCrypter): + __name__ = "TrailerzoneInfo" + __type__ = "crypter" + __version__ = "0.03" + + __pattern__ = r'http://(?:www\.)?trailerzone.info/.*?' + + __description__ = """TrailerZone.info decrypter plugin""" + __author_name__ = "godofdream" + __author_mail__ = "soilfiction@gmail.com" diff --git a/pyload/plugins/crypter/TurbobitNetFolder.py b/pyload/plugins/crypter/TurbobitNetFolder.py new file mode 100644 index 000000000..48b28c28a --- /dev/null +++ b/pyload/plugins/crypter/TurbobitNetFolder.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter +from pyload.common.json_layer import json_loads + + +class TurbobitNetFolder(SimpleCrypter): + __name__ = "TurbobitNetFolder" + __type__ = "crypter" + __version__ = "0.03" + + __pattern__ = r'http://(?:www\.)?turbobit\.net/download/folder/(?P<ID>\w+)' + + __description__ = """Turbobit.net folder decrypter plugin""" + __author_name__ = ("stickell", "Walter Purcaro") + __author_mail__ = ("l.stickell@yahoo.it", "vuolter@gmail.com") + + TITLE_PATTERN = r"src='/js/lib/grid/icon/folder.png'> <span>(?P<title>.+?)</span>" + + + def _getLinks(self, id, page=1): + gridFile = self.load("http://turbobit.net/downloadfolder/gridFile", + get={"rootId": id, "rows": 200, "page": page}, decode=True) + grid = json_loads(gridFile) + + if grid['rows']: + for i in grid['rows']: + yield i['id'] + for id in self._getLinks(id, page + 1): + yield id + else: + return + + def getLinks(self): + id = re.match(self.__pattern__, self.pyfile.url).group("ID") + fixurl = lambda id: "http://turbobit.net/%s.html" % id + return map(fixurl, self._getLinks(id)) diff --git a/pyload/plugins/crypter/TusfilesNetFolder.py b/pyload/plugins/crypter/TusfilesNetFolder.py new file mode 100644 index 000000000..f4f1c7723 --- /dev/null +++ b/pyload/plugins/crypter/TusfilesNetFolder.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- + +import math +import re +from urlparse import urljoin + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class TusfilesNetFolder(SimpleCrypter): + __name__ = "TusfilesNetFolder" + __type__ = "crypter" + __version__ = "0.02" + + __pattern__ = r'https?://(?:www\.)?tusfiles\.net/go/(?P<ID>\w+)/?' + + __description__ = """Tusfiles.net folder decrypter plugin""" + __author_name__ = ("Walter Purcaro", "stickell") + __author_mail__ = ("vuolter@gmail.com", "l.stickell@yahoo.it") + + LINK_PATTERN = r'<TD align=left><a href="(.*?)">' + TITLE_PATTERN = r'<Title>.*?\: (?P<title>.+) folder</Title>' + PAGES_PATTERN = r'>\((?P<pages>\d+) \w+\)<' + + URL_REPLACEMENTS = [(__pattern__, r'https://www.tusfiles.net/go/\g<ID>/')] + + + def loadPage(self, page_n): + return self.load(urljoin(self.pyfile.url, str(page_n)), decode=True) + + def handleMultiPages(self): + pages = re.search(self.PAGES_PATTERN, self.html) + if pages: + pages = int(math.ceil(int(pages.group('pages')) / 25.0)) + else: + return + + for p in xrange(2, pages + 1): + self.html = self.loadPage(p) + self.package_links += self.getLinks() diff --git a/pyload/plugins/crypter/UlozToFolder.py b/pyload/plugins/crypter/UlozToFolder.py new file mode 100644 index 000000000..2cc440a5d --- /dev/null +++ b/pyload/plugins/crypter/UlozToFolder.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- + +import re +from pyload.plugins.Crypter import Crypter + + +class UlozToFolder(Crypter): + __name__ = "UlozToFolder" + __type__ = "crypter" + __version__ = "0.2" + + __pattern__ = r'http://(?:www\.)?(uloz\.to|ulozto\.(cz|sk|net)|bagruj.cz|zachowajto.pl)/(m|soubory)/.*' + + __description__ = """Uloz.to folder decrypter plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FOLDER_PATTERN = r'<ul class="profile_files">(.*?)</ul>' + LINK_PATTERN = r'<br /><a href="/([^"]+)">[^<]+</a>' + NEXT_PAGE_PATTERN = r'<a class="next " href="/([^"]+)"> </a>' + + + def decrypt(self, pyfile): + html = self.load(pyfile.url) + + new_links = [] + for i in xrange(1, 100): + self.logInfo("Fetching links from page %i" % i) + m = re.search(self.FOLDER_PATTERN, html, re.DOTALL) + if m is None: + self.fail("Parse error (FOLDER)") + + new_links.extend(re.findall(self.LINK_PATTERN, m.group(1))) + m = re.search(self.NEXT_PAGE_PATTERN, html) + if m: + html = self.load("http://ulozto.net/" + m.group(1)) + else: + break + else: + self.logInfo("Limit of 99 pages reached, aborting") + + if new_links: + self.urls = [map(lambda s: "http://ulozto.net/%s" % s, new_links)] + else: + self.fail('Could not extract any links') diff --git a/pyload/plugins/crypter/UploadableChFolder.py b/pyload/plugins/crypter/UploadableChFolder.py new file mode 100644 index 000000000..3be8b0167 --- /dev/null +++ b/pyload/plugins/crypter/UploadableChFolder.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class UploadableChFolder(SimpleCrypter): + __name__ = "UploadableChFolder" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?uploadable\.ch/list/\w+' + + __description__ = """ Uploadable.ch folder decrypter plugin """ + __author_name__ = ("guidobelix", "Walter Purcaro") + __author_mail__ = ("guidobelix@hotmail.it", "vuolter@gmail.com") + + + LINK_PATTERN = r'"(.+?)" class="icon_zipfile">' + TITLE_PATTERN = r'<div class="folder"><span> </span>(?P<title>.+?)</div>' + OFFLINE_PATTERN = r'We are sorry... The URL you entered cannot be found on the server.' + TEMP_OFFLINE_PATTERN = r'<div class="icon_err">' diff --git a/pyload/plugins/crypter/UploadedToFolder.py b/pyload/plugins/crypter/UploadedToFolder.py new file mode 100644 index 000000000..31977409d --- /dev/null +++ b/pyload/plugins/crypter/UploadedToFolder.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class UploadedToFolder(SimpleCrypter): + __name__ = "UploadedToFolder" + __type__ = "crypter" + __version__ = "0.3" + + __pattern__ = r'http://(?:www\.)?(uploaded|ul)\.(to|net)/(f|folder|list)/(?P<id>\w+)' + + __description__ = """UploadedTo decrypter plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + PLAIN_PATTERN = r'<small class="date"><a href="(?P<plain>[\w/]+)" onclick=' + TITLE_PATTERN = r'<title>(?P<title>[^<]+)</title>' + + + def decrypt(self, pyfile): + self.html = self.load(pyfile.url) + + package_name, folder_name = self.getPackageNameAndFolder() + + m = re.search(self.PLAIN_PATTERN, self.html) + if m: + plain_link = 'http://uploaded.net/' + m.group('plain') + else: + self.fail('Parse error - Unable to find plain url list') + + self.html = self.load(plain_link) + package_links = self.html.split('\n')[:-1] + self.logDebug('Package has %d links' % len(package_links)) + + self.packages = [(package_name, package_links, folder_name)] diff --git a/pyload/plugins/crypter/WiiReloadedOrg.py b/pyload/plugins/crypter/WiiReloadedOrg.py new file mode 100644 index 000000000..7dfe574ab --- /dev/null +++ b/pyload/plugins/crypter/WiiReloadedOrg.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class WiiReloadedOrg(DeadCrypter): + __name__ = "WiiReloadedOrg" + __type__ = "crypter" + __version__ = "0.11" + + __pattern__ = r'http://(?:www\.)?wii-reloaded\.org/protect/get\.php\?i=.+' + + __description__ = """Wii-Reloaded.org decrypter plugin""" + __author_name__ = "hzpz" + __author_mail__ = None diff --git a/pyload/plugins/crypter/XupPl.py b/pyload/plugins/crypter/XupPl.py new file mode 100644 index 000000000..8d09e28a3 --- /dev/null +++ b/pyload/plugins/crypter/XupPl.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Crypter import Crypter + + +class XupPl(Crypter): + __name__ = "XupPl" + __type__ = "crypter" + __version__ = "0.1" + + __pattern__ = r'https?://(?:[^/]*\.)?xup\.pl/.*' + + __description__ = """Xup.pl decrypter plugin""" + __author_name__ = "z00nx" + __author_mail__ = "z00nx0@gmail.com" + + + def decrypt(self, pyfile): + header = self.load(pyfile.url, just_header=True) + if 'location' in header: + self.urls = [header['location']] + else: + self.fail('Unable to find link') diff --git a/pyload/plugins/crypter/YoutubeBatch.py b/pyload/plugins/crypter/YoutubeBatch.py new file mode 100644 index 000000000..5b7cb6530 --- /dev/null +++ b/pyload/plugins/crypter/YoutubeBatch.py @@ -0,0 +1,138 @@ +# -*- coding: utf-8 -*- + +import re + +from urlparse import urljoin + +from pyload.common.json_layer import json_loads +from pyload.plugins.Crypter import Crypter +from pyload.utils import safe_join + +API_URL = "AIzaSyCKnWLNlkX-L4oD1aEzqqhRw1zczeD6_k0" + + +class YoutubeBatch(Crypter): + __name__ = "YoutubeBatch" + __type__ = "crypter" + __version__ = "1.00" + + __pattern__ = r'https?://(?:www\.|m\.)?youtube\.com/(?P<TYPE>user|playlist|view_play_list)(/|.*?[?&](?:list|p)=)(?P<ID>[\w-]+)' + __config__ = [("likes", "bool", "Grab user (channel) liked videos", False), + ("favorites", "bool", "Grab user (channel) favorite videos", False), + ("uploads", "bool", "Grab channel unplaylisted videos", True)] + + __description__ = """Youtube.com channel & playlist decrypter plugin""" + __author_name__ = "Walter Purcaro" + __author_mail__ = "vuolter@gmail.com" + + + def api_response(self, ref, req): + req.update({"key": API_KEY}) + url = urljoin("https://www.googleapis.com/youtube/v3/", ref) + page = self.load(url, get=req) + return json_loads(page) + + def getChannel(self, user): + channels = self.api_response("channels", {"part": "id,snippet,contentDetails", "forUsername": user, "maxResults": "50"}) + if channels['items']: + channel = channels['items'][0] + return {"id": channel['id'], + "title": channel['snippet']['title'], + "relatedPlaylists": channel['contentDetails']['relatedPlaylists'], + "user": user} # One lone channel for user? + + def getPlaylist(self, p_id): + playlists = self.api_response("playlists", {"part": "snippet", "id": p_id}) + if playlists['items']: + playlist = playlists['items'][0] + return {"id": p_id, + "title": playlist['snippet']['title'], + "channelId": playlist['snippet']['channelId'], + "channelTitle": playlist['snippet']['channelTitle']} + + def _getPlaylists(self, id, token=None): + req = {"part": "id", "maxResults": "50", "channelId": id} + if token: + req.update({"pageToken": token}) + + playlists = self.api_response("playlists", req) + + for playlist in playlists['items']: + yield playlist['id'] + + if "nextPageToken" in playlists: + for item in self._getPlaylists(id, playlists['nextPageToken']): + yield item + + def getPlaylists(self, ch_id): + return map(self.getPlaylist, self._getPlaylists(ch_id)) + + def _getVideosId(self, id, token=None): + req = {"part": "contentDetails", "maxResults": "50", "playlistId": id} + if token: + req.update({"pageToken": token}) + + playlist = self.api_response("playlistItems", req) + + for item in playlist['items']: + yield item['contentDetails']['videoId'] + + if "nextPageToken" in playlist: + for item in self._getVideosId(id, playlist['nextPageToken']): + yield item + + def getVideosId(self, p_id): + return list(self._getVideosId(p_id)) + + def decrypt(self, pyfile): + m = re.match(self.__pattern__, pyfile.url) + m_id = m.group("ID") + m_type = m.group("TYPE") + + if m_type == "user": + self.logDebug("Url recognized as Channel") + user = m_id + channel = self.getChannel(user) + + if channel: + playlists = self.getPlaylists(channel['id']) + self.logDebug("%s playlist\s found on channel \"%s\"" % (len(playlists), channel['title'])) + + relatedplaylist = {p_name: self.getPlaylist(p_id) for p_name, p_id in channel['relatedPlaylists'].iteritems()} + self.logDebug("Channel's related playlists found = %s" % relatedplaylist.keys()) + + relatedplaylist['uploads']['title'] = "Unplaylisted videos" + relatedplaylist['uploads']['checkDups'] = True #: checkDups flag + + for p_name, p_data in relatedplaylist.iteritems(): + if self.getConfig(p_name): + p_data['title'] += " of " + user + playlists.append(p_data) + else: + playlists = [] + else: + self.logDebug("Url recognized as Playlist") + playlists = [self.getPlaylist(m_id)] + + if not playlists: + self.fail("No playlist available") + + addedvideos = [] + urlize = lambda x: "https://www.youtube.com/watch?v=" + x + for p in playlists: + p_name = p['title'] + p_videos = self.getVideosId(p['id']) + p_folder = safe_join(self.config['general']['download_folder'], p['channelTitle'], p_name) + self.logDebug("%s video\s found on playlist \"%s\"" % (len(p_videos), p_name)) + + if not p_videos: + continue + elif "checkDups" in p: + p_urls = [urlize(v_id) for v_id in p_videos if v_id not in addedvideos] + self.logDebug("%s video\s available on playlist \"%s\" after duplicates cleanup" % (len(p_urls), p_name)) + else: + p_urls = map(urlize, p_videos) + + self.packages.append((p_name, p_urls, p_folder)) #: folder is NOT recognized by pyload 0.4.9! + + addedvideos.extend(p_videos) diff --git a/module/plugins/crypter/__init__.py b/pyload/plugins/crypter/__init__.py index e69de29bb..e69de29bb 100644 --- a/module/plugins/crypter/__init__.py +++ b/pyload/plugins/crypter/__init__.py diff --git a/pyload/plugins/hooks/AlldebridCom.py b/pyload/plugins/hooks/AlldebridCom.py new file mode 100644 index 000000000..8eade2941 --- /dev/null +++ b/pyload/plugins/hooks/AlldebridCom.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- + +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.MultiHoster import MultiHoster + + +class AlldebridCom(MultiHoster): + __name__ = "AlldebridCom" + __type__ = "hook" + __version__ = "0.13" + + __config__ = [("activated", "bool", "Activated", False), + ("https", "bool", "Enable HTTPS", False), + ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), + ("hosterList", "str", "Hoster list (comma separated)", ""), + ("unloadFailing", "bool", "Revert to stanard download if download fails", False), + ("interval", "int", "Reload interval in hours (0 to disable)", 24)] + + __description__ = """Alldebrid.com hook plugin""" + __author_name__ = "Andy Voigt" + __author_mail__ = "spamsales@online.de" + + + def getHoster(self): + https = "https" if self.getConfig("https") else "http" + page = getURL(https + "://www.alldebrid.com/api.php?action=get_host").replace("\"", "").strip() + + return [x.strip() for x in page.split(",") if x.strip()] diff --git a/pyload/plugins/hooks/BypassCaptcha.py b/pyload/plugins/hooks/BypassCaptcha.py new file mode 100644 index 000000000..9558ba4c4 --- /dev/null +++ b/pyload/plugins/hooks/BypassCaptcha.py @@ -0,0 +1,127 @@ +# -*- coding: utf-8 -*- + +from pycurl import FORM_FILE, LOW_SPEED_TIME +from thread import start_new_thread + +from pyload.network.HTTPRequest import BadHeader +from pyload.network.RequestFactory import getURL, getRequest +from pyload.plugins.Hook import Hook + + +class BypassCaptchaException(Exception): + + def __init__(self, err): + self.err = err + + def getCode(self): + return self.err + + def __str__(self): + return "<BypassCaptchaException %s>" % self.err + + def __repr__(self): + return "<BypassCaptchaException %s>" % self.err + + +class BypassCaptcha(Hook): + __name__ = "BypassCaptcha" + __type__ = "hook" + __version__ = "0.04" + + __config__ = [("activated", "bool", "Activated", False), + ("force", "bool", "Force BC even if client is connected", False), + ("passkey", "password", "Passkey", "")] + + __description__ = """Send captchas to BypassCaptcha.com""" + __author_name__ = ("RaNaN", "Godofdream", "zoidberg") + __author_mail__ = ("RaNaN@pyload.org", "soilfcition@gmail.com", "zoidberg@mujmail.cz") + + PYLOAD_KEY = "4f771155b640970d5607f919a615bdefc67e7d32" + + SUBMIT_URL = "http://bypasscaptcha.com/upload.php" + RESPOND_URL = "http://bypasscaptcha.com/check_value.php" + GETCREDITS_URL = "http://bypasscaptcha.com/ex_left.php" + + + def setup(self): + self.info = {} + + def getCredits(self): + response = getURL(self.GETCREDITS_URL, post={"key": self.getConfig("passkey")}) + + data = dict([x.split(' ', 1) for x in response.splitlines()]) + return int(data['Left']) + + def submit(self, captcha, captchaType="file", match=None): + req = getRequest() + + #raise timeout threshold + req.c.setopt(LOW_SPEED_TIME, 80) + + try: + response = req.load(self.SUBMIT_URL, + post={"vendor_key": self.PYLOAD_KEY, + "key": self.getConfig("passkey"), + "gen_task_id": "1", + "file": (FORM_FILE, captcha)}, + multipart=True) + finally: + req.close() + + data = dict([x.split(' ', 1) for x in response.splitlines()]) + if not data or "Value" not in data: + raise BypassCaptchaException(response) + + result = data['Value'] + ticket = data['TaskId'] + self.logDebug("result %s : %s" % (ticket, result)) + + return ticket, result + + def respond(self, ticket, success): + try: + response = getURL(self.RESPOND_URL, post={"task_id": ticket, "key": self.getConfig("passkey"), + "cv": 1 if success else 0}) + except BadHeader, e: + self.logError("Could not send response.", str(e)) + + def newCaptchaTask(self, task): + if "service" in task.data: + return False + + if not task.isTextual(): + return False + + if not self.getConfig("passkey"): + return False + + if self.core.isClientConnected() and not self.getConfig("force"): + return False + + if self.getCredits() > 0: + task.handler.append(self) + task.data['service'] = self.__name__ + task.setWaiting(100) + start_new_thread(self.processCaptcha, (task,)) + + else: + self.logInfo("Your %s account has not enough credits" % self.__name__) + + def captchaCorrect(self, task): + if task.data['service'] == self.__name__ and "ticket" in task.data: + self.respond(task.data['ticket'], True) + + def captchaInvalid(self, task): + if task.data['service'] == self.__name__ and "ticket" in task.data: + self.respond(task.data['ticket'], False) + + def processCaptcha(self, task): + c = task.captchaFile + try: + ticket, result = self.submit(c) + except BypassCaptchaException, e: + task.error = e.getCode() + return + + task.data['ticket'] = ticket + task.setResult(result) diff --git a/pyload/plugins/hooks/Captcha9kw.py b/pyload/plugins/hooks/Captcha9kw.py new file mode 100644 index 000000000..fcb5dd7c1 --- /dev/null +++ b/pyload/plugins/hooks/Captcha9kw.py @@ -0,0 +1,156 @@ +# -*- coding: utf-8 -*- + +from __future__ import with_statement + +import time + +from base64 import b64encode +from thread import start_new_thread + +from pyload.network.HTTPRequest import BadHeader +from pyload.network.RequestFactory import getURL +from pyload.plugins.Hook import Hook + + +class Captcha9kw(Hook): + __name__ = "Captcha9kw" + __type__ = "hook" + __version__ = "0.09" + + __config__ = [("activated", "bool", "Activated", False), + ("force", "bool", "Force CT even if client is connected", True), + ("https", "bool", "Enable HTTPS", False), + ("confirm", "bool", "Confirm Captcha (Cost +6)", False), + ("captchaperhour", "int", "Captcha per hour (max. 9999)", 9999), + ("prio", "int", "Prio 1-10 (Cost +1-10)", 0), + ("selfsolve", "bool", + "If enabled and you have a 9kw client active only you will get your captcha to solve it (Selfsolve)", + False), + ("timeout", "int", "Timeout (max. 300)", 300), + ("passkey", "password", "API key", "")] + + __description__ = """Send captchas to 9kw.eu""" + __author_name__ = "RaNaN" + __author_mail__ = "RaNaN@pyload.org" + + API_URL = "://www.9kw.eu/index.cgi" + + + def setup(self): + self.API_URL = "https" + self.API_URL if self.getConfig("https") else "http" + self.API_URL + self.info = {} + + def getCredits(self): + response = getURL(self.API_URL, get={"apikey": self.getConfig("passkey"), "pyload": "1", "source": "pyload", + "action": "usercaptchaguthaben"}) + + if response.isdigit(): + self.logInfo(_("%s credits left") % response) + self.info['credits'] = credits = int(response) + return credits + else: + self.logError(response) + return 0 + + def processCaptcha(self, task): + result = None + + with open(task.captchaFile, 'rb') as f: + data = f.read() + data = b64encode(data) + self.logDebug("%s : %s" % (task.captchaFile, data)) + if task.isPositional(): + mouse = 1 + else: + mouse = 0 + + response = getURL(self.API_URL, post={ + "apikey": self.getConfig("passkey"), + "prio": self.getConfig("prio"), + "confirm": self.getConfig("confirm"), + "captchaperhour": self.getConfig("captchaperhour"), + "maxtimeout": self.getConfig("timeout"), + "selfsolve": self.getConfig("selfsolve"), + "pyload": "1", + "source": "pyload", + "base64": "1", + "mouse": mouse, + "file-upload-01": data, + "action": "usercaptchaupload"}) + + if response.isdigit(): + self.logInfo(_("New CaptchaID from upload: %s : %s") % (response, task.captchaFile)) + + for _ in xrange(1, 100, 1): + response2 = getURL(self.API_URL, get={"apikey": self.getConfig("passkey"), "id": response, + "pyload": "1", "source": "pyload", + "action": "usercaptchacorrectdata"}) + + if response2 != "": + break + + time.sleep(3) + + result = response2 + task.data['ticket'] = response + self.logInfo("result %s : %s" % (response, result)) + task.setResult(result) + else: + self.logError("Bad upload: %s" % response) + return False + + def newCaptchaTask(self, task): + if not task.isTextual() and not task.isPositional(): + return False + + if not self.getConfig("passkey"): + return False + + if self.core.isClientConnected() and not self.getConfig("force"): + return False + + if self.getCredits() > 0: + task.handler.append(self) + task.setWaiting(self.getConfig("timeout")) + start_new_thread(self.processCaptcha, (task,)) + + else: + self.logError(_("Your Captcha 9kw.eu Account has not enough credits")) + + def captchaCorrect(self, task): + if "ticket" in task.data: + + try: + response = getURL(self.API_URL, + post={"action": "usercaptchacorrectback", + "apikey": self.getConfig("passkey"), + "api_key": self.getConfig("passkey"), + "correct": "1", + "pyload": "1", + "source": "pyload", + "id": task.data['ticket']}) + self.logInfo("Request correct: %s" % response) + + except BadHeader, e: + self.logError("Could not send correct request.", str(e)) + else: + self.logError("No CaptchaID for correct request (task %s) found." % task) + + def captchaInvalid(self, task): + if "ticket" in task.data: + + try: + response = getURL(self.API_URL, + post={"action": "usercaptchacorrectback", + "apikey": self.getConfig("passkey"), + "api_key": self.getConfig("passkey"), + "correct": "2", + "pyload": "1", + "source": "pyload", + "id": task.data['ticket']}) + self.logInfo("Request refund: %s" % response) + + except BadHeader, e: + self.logError("Could not send refund request.", str(e)) + else: + self.logError("No CaptchaID for not correct request (task %s) found." % task) diff --git a/pyload/plugins/hooks/CaptchaBrotherhood.py b/pyload/plugins/hooks/CaptchaBrotherhood.py new file mode 100644 index 000000000..81325be92 --- /dev/null +++ b/pyload/plugins/hooks/CaptchaBrotherhood.py @@ -0,0 +1,157 @@ +# -*- coding: utf-8 -*- + +from __future__ import with_statement + +import StringIO +import pycurl + +from PIL import Image +from thread import start_new_thread +from time import sleep +from urllib import urlencode + +from pyload.network.RequestFactory import getURL, getRequest +from pyload.plugins.Hook import Hook + + +class CaptchaBrotherhoodException(Exception): + + def __init__(self, err): + self.err = err + + def getCode(self): + return self.err + + def __str__(self): + return "<CaptchaBrotherhoodException %s>" % self.err + + def __repr__(self): + return "<CaptchaBrotherhoodException %s>" % self.err + + +class CaptchaBrotherhood(Hook): + __name__ = "CaptchaBrotherhood" + __type__ = "hook" + __version__ = "0.05" + + __config__ = [("activated", "bool", "Activated", False), + ("username", "str", "Username", ""), + ("force", "bool", "Force CT even if client is connected", False), + ("passkey", "password", "Password", "")] + + __description__ = """Send captchas to CaptchaBrotherhood.com""" + __author_name__ = ("RaNaN", "zoidberg") + __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz") + + API_URL = "http://www.captchabrotherhood.com/" + + + def setup(self): + self.info = {} + + def getCredits(self): + response = getURL(self.API_URL + "askCredits.aspx", + get={"username": self.getConfig("username"), "password": self.getConfig("passkey")}) + if not response.startswith("OK"): + raise CaptchaBrotherhoodException(response) + else: + credits = int(response[3:]) + self.logInfo(_("%d credits left") % credits) + self.info['credits'] = credits + return credits + + def submit(self, captcha, captchaType="file", match=None): + try: + img = Image.open(captcha) + output = StringIO.StringIO() + self.logDebug("CAPTCHA IMAGE", img, img.format, img.mode) + if img.format in ("GIF", "JPEG"): + img.save(output, img.format) + else: + if img.mode != "RGB": + img = img.convert("RGB") + img.save(output, "JPEG") + data = output.getvalue() + output.close() + except Exception, e: + raise CaptchaBrotherhoodException("Reading or converting captcha image failed: %s" % e) + + req = getRequest() + + url = "%ssendNewCaptcha.aspx?%s" % (self.API_URL, + urlencode({"username": self.getConfig("username"), + "password": self.getConfig("passkey"), + "captchaSource": "pyLoad", + "timeout": "80"})) + + req.c.setopt(pycurl.URL, url) + req.c.setopt(pycurl.POST, 1) + req.c.setopt(pycurl.POSTFIELDS, data) + req.c.setopt(pycurl.HTTPHEADER, ["Content-Type: text/html"]) + + try: + req.c.perform() + response = req.getResponse() + except Exception, e: + raise CaptchaBrotherhoodException("Submit captcha image failed") + + req.close() + + if not response.startswith("OK"): + raise CaptchaBrotherhoodException(response[1]) + + ticket = response[3:] + + for _ in xrange(15): + sleep(5) + response = self.get_api("askCaptchaResult", ticket) + if response.startswith("OK-answered"): + return ticket, response[12:] + + raise CaptchaBrotherhoodException("No solution received in time") + + def get_api(self, api, ticket): + response = getURL("%s%s.aspx" % (self.API_URL, api), + get={"username": self.getConfig("username"), + "password": self.getConfig("passkey"), + "captchaID": ticket}) + if not response.startswith("OK"): + raise CaptchaBrotherhoodException("Unknown response: %s" % response) + + return response + + def newCaptchaTask(self, task): + if "service" in task.data: + return False + + if not task.isTextual(): + return False + + if not self.getConfig("username") or not self.getConfig("passkey"): + return False + + if self.core.isClientConnected() and not self.getConfig("force"): + return False + + if self.getCredits() > 10: + task.handler.append(self) + task.data['service'] = self.__name__ + task.setWaiting(100) + start_new_thread(self.processCaptcha, (task,)) + else: + self.logInfo("Your CaptchaBrotherhood Account has not enough credits") + + def captchaInvalid(self, task): + if task.data['service'] == self.__name__ and "ticket" in task.data: + response = self.get_api("complainCaptcha", task.data['ticket']) + + def processCaptcha(self, task): + c = task.captchaFile + try: + ticket, result = self.submit(c) + except CaptchaBrotherhoodException, e: + task.error = e.getCode() + return + + task.data['ticket'] = ticket + task.setResult(result) diff --git a/pyload/plugins/hooks/Checksum.py b/pyload/plugins/hooks/Checksum.py new file mode 100644 index 000000000..75ebcdc4c --- /dev/null +++ b/pyload/plugins/hooks/Checksum.py @@ -0,0 +1,175 @@ +# -*- coding: utf-8 -*- + +from __future__ import with_statement + +import hashlib +import re +import zlib + +from os import remove +from os.path import getsize, isfile, splitext + +from pyload.plugins.Hook import Hook +from pyload.utils import safe_join, fs_encode + + +def computeChecksum(local_file, algorithm): + if algorithm in getattr(hashlib, "algorithms", ("md5", "sha1", "sha224", "sha256", "sha384", "sha512")): + h = getattr(hashlib, algorithm)() + + with open(local_file, 'rb') as f: + for chunk in iter(lambda: f.read(128 * h.block_size), b''): + h.update(chunk) + + return h.hexdigest() + + elif algorithm in ("adler32", "crc32"): + hf = getattr(zlib, algorithm) + last = 0 + + with open(local_file, 'rb') as f: + for chunk in iter(lambda: f.read(8192), b''): + last = hf(chunk, last) + + return "%x" % last + + else: + return None + + +class Checksum(Hook): + __name__ = "Checksum" + __type__ = "hook" + __version__ = "0.13" + + __config__ = [("activated", "bool", "Activated", False), + ("check_checksum", "bool", "Check checksum? (If False only size will be verified)", True), + ("check_action", "fail;retry;nothing", "What to do if check fails?", "retry"), + ("max_tries", "int", "Number of retries", 2), + ("retry_action", "fail;nothing", "What to do if all retries fail?", "fail"), + ("wait_time", "int", "Time to wait before each retry (seconds)", 1)] + + __description__ = """Verify downloaded file size and checksum""" + __author_name__ = ("zoidberg", "Walter Purcaro", "stickell") + __author_mail__ = ("zoidberg@mujmail.cz", "vuolter@gmail.com", "l.stickell@yahoo.it") + + methods = {'sfv': 'crc32', 'crc': 'crc32', 'hash': 'md5'} + regexps = {'sfv': r'^(?P<name>[^;].+)\s+(?P<hash>[0-9A-Fa-f]{8})$', + 'md5': r'^(?P<name>[0-9A-Fa-f]{32}) (?P<file>.+)$', + 'crc': r'filename=(?P<name>.+)\nsize=(?P<size>\d+)\ncrc32=(?P<hash>[0-9A-Fa-f]{8})$', + 'default': r'^(?P<hash>[0-9A-Fa-f]+)\s+\*?(?P<name>.+)$'} + + + def coreReady(self): + if not self.getConfig("check_checksum"): + self.logInfo("Checksum validation is disabled in plugin configuration") + + def setup(self): + self.algorithms = sorted( + getattr(hashlib, "algorithms", ("md5", "sha1", "sha224", "sha256", "sha384", "sha512")), reverse=True) + self.algorithms.extend(["crc32", "adler32"]) + self.formats = self.algorithms + ["sfv", "crc", "hash"] + + def downloadFinished(self, pyfile): + """ + Compute checksum for the downloaded file and compare it with the hash provided by the hoster. + pyfile.plugin.check_data should be a dictionary which can contain: + a) if known, the exact filesize in bytes (e.g. "size": 123456789) + b) hexadecimal hash string with algorithm name as key (e.g. "md5": "d76505d0869f9f928a17d42d66326307") + """ + if hasattr(pyfile.plugin, "check_data") and (isinstance(pyfile.plugin.check_data, dict)): + data = pyfile.plugin.check_data.copy() + elif hasattr(pyfile.plugin, "api_data") and (isinstance(pyfile.plugin.api_data, dict)): + data = pyfile.plugin.api_data.copy() + else: + return + + self.logDebug(data) + + if not pyfile.plugin.lastDownload: + self.checkFailed(pyfile, None, "No file downloaded") + + local_file = fs_encode(pyfile.plugin.lastDownload) + #download_folder = self.config['general']['download_folder'] + #local_file = fs_encode(safe_join(download_folder, pyfile.package().folder, pyfile.name)) + + if not isfile(local_file): + self.checkFailed(pyfile, None, "File does not exist") + + # validate file size + if "size" in data: + api_size = int(data['size']) + file_size = getsize(local_file) + if api_size != file_size: + self.logWarning("File %s has incorrect size: %d B (%d expected)" % (pyfile.name, file_size, api_size)) + self.checkFailed(pyfile, local_file, "Incorrect file size") + del data['size'] + + # validate checksum + if data and self.getConfig("check_checksum"): + if "checksum" in data: + data['md5'] = data['checksum'] + + for key in self.algorithms: + if key in data: + checksum = computeChecksum(local_file, key.replace("-", "").lower()) + if checksum: + if checksum == data[key].lower(): + self.logInfo('File integrity of "%s" verified by %s checksum (%s).' % + (pyfile.name, key.upper(), checksum)) + break + else: + self.logWarning("%s checksum for file %s does not match (%s != %s)" % + (key.upper(), pyfile.name, checksum, data[key])) + self.checkFailed(pyfile, local_file, "Checksums do not match") + else: + self.logWarning("Unsupported hashing algorithm: %s" % key.upper()) + else: + self.logWarning("Unable to validate checksum for file %s" % pyfile.name) + + def checkFailed(self, pyfile, local_file, msg): + check_action = self.getConfig("check_action") + if check_action == "retry": + max_tries = self.getConfig("max_tries") + retry_action = self.getConfig("retry_action") + if pyfile.plugin.retries < max_tries: + if local_file: + remove(local_file) + pyfile.plugin.retry(max_tries=max_tries, wait_time=self.getConfig("wait_time"), reason=msg) + elif retry_action == "nothing": + return + elif check_action == "nothing": + return + pyfile.plugin.fail(reason=msg) + + def packageFinished(self, pypack): + download_folder = safe_join(self.config['general']['download_folder'], pypack.folder, "") + + for link in pypack.getChildren().itervalues(): + file_type = splitext(link['name'])[1][1:].lower() + #self.logDebug(link, file_type) + + if file_type not in self.formats: + continue + + hash_file = fs_encode(safe_join(download_folder, link['name'])) + if not isfile(hash_file): + self.logWarning("File not found: %s" % link['name']) + continue + + with open(hash_file) as f: + text = f.read() + + for m in re.finditer(self.regexps.get(file_type, self.regexps['default']), text): + data = m.groupdict() + self.logDebug(link['name'], data) + + local_file = fs_encode(safe_join(download_folder, data['name'])) + algorithm = self.methods.get(file_type, file_type) + checksum = computeChecksum(local_file, algorithm) + if checksum == data['hash']: + self.logInfo('File integrity of "%s" verified by %s checksum (%s).' % + (data['name'], algorithm, checksum)) + else: + self.logWarning("%s checksum for file %s does not match (%s != %s)" % + (algorithm, data['name'], checksum, data['hash'])) diff --git a/pyload/plugins/hooks/ClickAndLoad.py b/pyload/plugins/hooks/ClickAndLoad.py new file mode 100644 index 000000000..47163ceef --- /dev/null +++ b/pyload/plugins/hooks/ClickAndLoad.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- + +import socket +import thread + +from pyload.plugins.Hook import Hook + + +class ClickAndLoad(Hook): + __name__ = "ClickAndLoad" + __type__ = "hook" + __version__ = "0.22" + + __config__ = [("activated", "bool", "Activated", True), + ("extern", "bool", "Allow external link adding", False)] + + __description__ = """Gives abillity to use jd's click and load. depends on webinterface""" + __author_name__ = ("RaNaN", "mkaay") + __author_mail__ = ("RaNaN@pyload.de", "mkaay@mkaay.de") + + + def coreReady(self): + self.port = int(self.config['webinterface']['port']) + if self.config['webinterface']['activated']: + try: + if self.getConfig("extern"): + ip = "0.0.0.0" + else: + ip = "127.0.0.1" + + thread.start_new_thread(proxy, (self, ip, self.port, 9666)) + except: + self.logError("ClickAndLoad port already in use.") + + +def proxy(self, *settings): + thread.start_new_thread(server, (self,) + settings) + lock = thread.allocate_lock() + lock.acquire() + lock.acquire() + + +def server(self, *settings): + try: + dock_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + dock_socket.bind((settings[0], settings[2])) + dock_socket.listen(5) + while True: + client_socket = dock_socket.accept()[0] + server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server_socket.connect(("127.0.0.1", settings[1])) + thread.start_new_thread(forward, (client_socket, server_socket)) + thread.start_new_thread(forward, (server_socket, client_socket)) + except socket.error, e: + if hasattr(e, "errno"): + errno = e.errno + else: + errno = e.args[0] + + if errno == 98: + self.logWarning(_("Click'N'Load: Port 9666 already in use")) + return + thread.start_new_thread(server, (self,) + settings) + except: + thread.start_new_thread(server, (self,) + settings) + + +def forward(source, destination): + string = ' ' + while string: + string = source.recv(1024) + if string: + destination.sendall(string) + else: + #source.shutdown(socket.SHUT_RD) + destination.shutdown(socket.SHUT_WR) diff --git a/pyload/plugins/hooks/DeathByCaptcha.py b/pyload/plugins/hooks/DeathByCaptcha.py new file mode 100644 index 000000000..57bf9031f --- /dev/null +++ b/pyload/plugins/hooks/DeathByCaptcha.py @@ -0,0 +1,202 @@ +# -*- coding: utf-8 -*- + +from __future__ import with_statement + +import re + +from base64 import b64encode +from pycurl import FORM_FILE, HTTPHEADER +from thread import start_new_thread +from time import sleep + +from pyload.common.json_layer import json_loads +from pyload.network.HTTPRequest import BadHeader +from pyload.network.RequestFactory import getRequest +from pyload.plugins.Hook import Hook + + +class DeathByCaptchaException(Exception): + DBC_ERRORS = {'not-logged-in': 'Access denied, check your credentials', + 'invalid-credentials': 'Access denied, check your credentials', + 'banned': 'Access denied, account is suspended', + 'insufficient-funds': 'Insufficient account balance to decrypt CAPTCHA', + 'invalid-captcha': 'CAPTCHA is not a valid image', + 'service-overload': 'CAPTCHA was rejected due to service overload, try again later', + 'invalid-request': 'Invalid request', + 'timed-out': 'No CAPTCHA solution received in time'} + + def __init__(self, err): + self.err = err + + def getCode(self): + return self.err + + def getDesc(self): + if self.err in self.DBC_ERRORS.keys(): + return self.DBC_ERRORS[self.err] + else: + return self.err + + def __str__(self): + return "<DeathByCaptchaException %s>" % self.err + + def __repr__(self): + return "<DeathByCaptchaException %s>" % self.err + + +class DeathByCaptcha(Hook): + __name__ = "DeathByCaptcha" + __type__ = "hook" + __version__ = "0.03" + + __config__ = [("activated", "bool", "Activated", False), + ("username", "str", "Username", ""), + ("passkey", "password", "Password", ""), + ("force", "bool", "Force DBC even if client is connected", False)] + + __description__ = """Send captchas to DeathByCaptcha.com""" + __author_name__ = ("RaNaN", "zoidberg") + __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz") + + API_URL = "http://api.dbcapi.me/api/" + + + def setup(self): + self.info = {} + + def call_api(self, api="captcha", post=False, multipart=False): + req = getRequest() + req.c.setopt(HTTPHEADER, ["Accept: application/json", "User-Agent: pyLoad %s" % self.core.version]) + + if post: + if not isinstance(post, dict): + post = {} + post.update({"username": self.getConfig("username"), + "password": self.getConfig("passkey")}) + + response = None + try: + json = req.load("%s%s" % (self.API_URL, api), + post=post, + multipart=multipart) + self.logDebug(json) + response = json_loads(json) + + if "error" in response: + raise DeathByCaptchaException(response['error']) + elif "status" not in response: + raise DeathByCaptchaException(str(response)) + + except BadHeader, e: + if 403 == e.code: + raise DeathByCaptchaException('not-logged-in') + elif 413 == e.code: + raise DeathByCaptchaException('invalid-captcha') + elif 503 == e.code: + raise DeathByCaptchaException('service-overload') + elif e.code in (400, 405): + raise DeathByCaptchaException('invalid-request') + else: + raise + + finally: + req.close() + + return response + + def getCredits(self): + response = self.call_api("user", True) + + if 'is_banned' in response and response['is_banned']: + raise DeathByCaptchaException('banned') + elif 'balance' in response and 'rate' in response: + self.info.update(response) + else: + raise DeathByCaptchaException(response) + + def getStatus(self): + response = self.call_api("status", False) + + if 'is_service_overloaded' in response and response['is_service_overloaded']: + raise DeathByCaptchaException('service-overload') + + def submit(self, captcha, captchaType="file", match=None): + #workaround multipart-post bug in HTTPRequest.py + if re.match("^[A-Za-z0-9]*$", self.getConfig("passkey")): + multipart = True + data = (FORM_FILE, captcha) + else: + multipart = False + with open(captcha, 'rb') as f: + data = f.read() + data = "base64:" + b64encode(data) + + response = self.call_api("captcha", {"captchafile": data}, multipart) + + if "captcha" not in response: + raise DeathByCaptchaException(response) + ticket = response['captcha'] + + for _ in xrange(24): + sleep(5) + response = self.call_api("captcha/%d" % ticket, False) + if response['text'] and response['is_correct']: + break + else: + raise DeathByCaptchaException('timed-out') + + result = response['text'] + self.logDebug("result %s : %s" % (ticket, result)) + + return ticket, result + + def newCaptchaTask(self, task): + if "service" in task.data: + return False + + if not task.isTextual(): + return False + + if not self.getConfig("username") or not self.getConfig("passkey"): + return False + + if self.core.isClientConnected() and not self.getConfig("force"): + return False + + try: + self.getStatus() + self.getCredits() + except DeathByCaptchaException, e: + self.logError(e.getDesc()) + return False + + balance, rate = self.info['balance'], self.info['rate'] + self.logInfo("Account balance: US$%.3f (%d captchas left at %.2f cents each)" % (balance / 100, + balance // rate, rate)) + + if balance > rate: + task.handler.append(self) + task.data['service'] = self.__name__ + task.setWaiting(180) + start_new_thread(self.processCaptcha, (task,)) + + def captchaInvalid(self, task): + if task.data['service'] == self.__name__ and "ticket" in task.data: + try: + response = self.call_api("captcha/%d/report" % task.data['ticket'], True) + except DeathByCaptchaException, e: + self.logError(e.getDesc()) + except Exception, e: + self.logError(e) + + def processCaptcha(self, task): + c = task.captchaFile + try: + ticket, result = self.submit(c) + except DeathByCaptchaException, e: + task.error = e.getCode() + self.logError(e.getDesc()) + return + + task.data['ticket'] = ticket + task.setResult(result) diff --git a/pyload/plugins/hooks/DebridItaliaCom.py b/pyload/plugins/hooks/DebridItaliaCom.py new file mode 100644 index 000000000..4272b758f --- /dev/null +++ b/pyload/plugins/hooks/DebridItaliaCom.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.MultiHoster import MultiHoster + + +class DebridItaliaCom(MultiHoster): + __name__ = "DebridItaliaCom" + __type__ = "hook" + __version__ = "0.07" + + __config__ = [("activated", "bool", "Activated", False), + ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), + ("hosterList", "str", "Hoster list (comma separated)", ""), + ("unloadFailing", "bool", "Revert to standard download if download fails", False), + ("interval", "int", "Reload interval in hours (0 to disable)", 24)] + + __description__ = """Debriditalia.com hook plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + + def getHoster(self): + return ["netload.in", "hotfile.com", "rapidshare.com", "multiupload.com", + "uploading.com", "megashares.com", "crocko.com", "filepost.com", + "bitshare.com", "share-links.biz", "putlocker.com", "uploaded.to", + "speedload.org", "rapidgator.net", "likeupload.net", "cyberlocker.ch", + "depositfiles.com", "extabit.com", "filefactory.com", "sharefiles.co", + "ryushare.com", "tusfiles.net", "nowvideo.co", "cloudzer.net", "letitbit.net", + "easybytez.com", "uptobox.com", "ddlstorage.com"] diff --git a/pyload/plugins/hooks/DeleteFinished.py b/pyload/plugins/hooks/DeleteFinished.py new file mode 100644 index 000000000..99aa040bf --- /dev/null +++ b/pyload/plugins/hooks/DeleteFinished.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- + +from pyload.database import style +from pyload.plugins.Hook import Hook + + +class DeleteFinished(Hook): + __name__ = "DeleteFinished" + __type__ = "hook" + __version__ = "1.09" + + __config__ = [('activated', 'bool', 'Activated', 'False'), + ('interval', 'int', 'Delete every (hours)', '72'), + ('deloffline', 'bool', 'Delete packages with offline links', 'False')] + + __description__ = """Automatically delete all finished packages from queue""" + __author_name__ = "Walter Purcaro" + __author_mail__ = "vuolter@gmail.com" + + + ## overwritten methods ## + def periodical(self): + if not self.info['sleep']: + deloffline = self.getConfig('deloffline') + mode = '0,1,4' if deloffline else '0,4' + msg = 'delete all finished packages in queue list (%s packages with offline links)' + self.logInfo(msg % ('including' if deloffline else 'excluding')) + self.deleteFinished(mode) + self.info['sleep'] = True + self.addEvent('packageFinished', self.wakeup) + + def pluginConfigChanged(self, plugin, name, value): + if name == 'interval' and value != self.interval: + self.interval = value * 3600 + self.initPeriodical() + + def unload(self): + self.removeEvent('packageFinished', self.wakeup) + + def coreReady(self): + self.info = {'sleep': True} + interval = self.getConfig('interval') + self.pluginConfigChanged('DeleteFinished', 'interval', interval) + self.addEvent('packageFinished', self.wakeup) + + ## own methods ## + @style.queue + def deleteFinished(self, mode): + self.c.execute('DELETE FROM packages WHERE NOT EXISTS(SELECT 1 FROM links WHERE package=packages.id AND status NOT IN (%s))' % mode) + self.c.execute('DELETE FROM links WHERE NOT EXISTS(SELECT 1 FROM packages WHERE id=links.package)') + + def wakeup(self, pypack): + self.removeEvent('packageFinished', self.wakeup) + self.info['sleep'] = False + + ## event managing ## + def addEvent(self, event, func): + """Adds an event listener for event name""" + if event in self.m.events: + if func in self.m.events[event]: + self.logDebug('Function already registered %s' % func) + else: + self.m.events[event].append(func) + else: + self.m.events[event] = [func] + + def setup(self): + self.m = self.manager + self.removeEvent = self.m.removeEvent diff --git a/pyload/plugins/hooks/DownloadScheduler.py b/pyload/plugins/hooks/DownloadScheduler.py new file mode 100644 index 000000000..fc2e10aac --- /dev/null +++ b/pyload/plugins/hooks/DownloadScheduler.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- + +import re + +from time import localtime + +from pyload.plugins.Hook import Hook + + +class DownloadScheduler(Hook): + __name__ = "DownloadScheduler" + __type__ = "hook" + __version__ = "0.21" + + __config__ = [("activated", "bool", "Activated", False), + ("timetable", "str", "List time periods as hh:mm full or number(kB/s)", + "0:00 full, 7:00 250, 10:00 0, 17:00 150"), + ("abort", "bool", "Abort active downloads when start period with speed 0", False)] + + __description__ = """Download Scheduler""" + __author_name__ = ("zoidberg", "stickell") + __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") + + + def setup(self): + self.cb = None # callback to scheduler job; will be by removed hookmanager when hook unloaded + + def coreReady(self): + self.updateSchedule() + + def updateSchedule(self, schedule=None): + if schedule is None: + schedule = self.getConfig("timetable") + + schedule = re.findall("(\d{1,2}):(\d{2})[\s]*(-?\d+)", + schedule.lower().replace("full", "-1").replace("none", "0")) + if not schedule: + self.logError("Invalid schedule") + return + + t0 = localtime() + now = (t0.tm_hour, t0.tm_min, t0.tm_sec, "X") + schedule = sorted([(int(x[0]), int(x[1]), 0, int(x[2])) for x in schedule] + [now]) + + self.logDebug("Schedule", schedule) + + for i, v in enumerate(schedule): + if v[3] == "X": + last, next = schedule[i - 1], schedule[(i + 1) % len(schedule)] + self.logDebug("Now/Last/Next", now, last, next) + + self.setDownloadSpeed(last[3]) + + next_time = (((24 + next[0] - now[0]) * 60 + next[1] - now[1]) * 60 + next[2] - now[2]) % 86400 + self.core.scheduler.removeJob(self.cb) + self.cb = self.core.scheduler.addJob(next_time, self.updateSchedule, threaded=False) + + def setDownloadSpeed(self, speed): + if speed == 0: + abort = self.getConfig("abort") + self.logInfo("Stopping download server. (Running downloads will %sbe aborted.)" % ('' if abort else 'not ')) + self.core.api.pauseServer() + if abort: + self.core.api.stopAllDownloads() + else: + self.core.api.unpauseServer() + + if speed > 0: + self.logInfo("Setting download speed to %d kB/s" % speed) + self.core.api.setConfigValue("download", "limit_speed", 1) + self.core.api.setConfigValue("download", "max_speed", speed) + else: + self.logInfo("Setting download speed to FULL") + self.core.api.setConfigValue("download", "limit_speed", 0) + self.core.api.setConfigValue("download", "max_speed", -1) diff --git a/pyload/plugins/hooks/EasybytezCom.py b/pyload/plugins/hooks/EasybytezCom.py new file mode 100644 index 000000000..1ec8a98f1 --- /dev/null +++ b/pyload/plugins/hooks/EasybytezCom.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.MultiHoster import MultiHoster + + +class EasybytezCom(MultiHoster): + __name__ = "EasybytezCom" + __type__ = "hook" + __version__ = "0.03" + + __config__ = [("activated", "bool", "Activated", False), + ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), + ("hosterList", "str", "Hoster list (comma separated)", "")] + + __description__ = """EasyBytez.com hook plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + + def getHoster(self): + self.account = self.core.accountManager.getAccountPlugin(self.__name__) + user = self.account.selectAccount()[0] + + try: + req = self.account.getAccountRequest(user) + page = req.load("http://www.easybytez.com") + + m = re.search(r'</textarea>\s*Supported sites:(.*)', page) + return m.group(1).split(',') + except Exception, e: + self.logDebug(e) + self.logWarning("Unable to load supported hoster list, using last known") + return ["bitshare.com", "crocko.com", "ddlstorage.com", "depositfiles.com", "extabit.com", "hotfile.com", + "mediafire.com", "netload.in", "rapidgator.net", "rapidshare.com", "uploading.com", "uload.to", + "uploaded.to"] diff --git a/pyload/plugins/hooks/Ev0InFetcher.py b/pyload/plugins/hooks/Ev0InFetcher.py new file mode 100644 index 000000000..5c2022bac --- /dev/null +++ b/pyload/plugins/hooks/Ev0InFetcher.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- + +from time import mktime, time + +from pyload.lib import feedparser + +from pyload.plugins.Hook import Hook + + +class Ev0InFetcher(Hook): + __name__ = "Ev0InFetcher" + __type__ = "hook" + __version__ = "0.21" + + __config__ = [("activated", "bool", "Activated", False), + ("interval", "int", "Check interval in minutes", 10), + ("queue", "bool", "Move new shows directly to Queue", False), + ("shows", "str", "Shows to check for (comma seperated)", ""), + ("quality", "xvid;x264;rmvb", "Video Format", "xvid"), + ("hoster", "str", "Hoster to use (comma seperated)", + "NetloadIn,RapidshareCom,MegauploadCom,HotfileCom")] + + __description__ = """Checks rss feeds for Ev0.in""" + __author_name__ = "mkaay" + __author_mail__ = "mkaay@mkaay.de" + + + def setup(self): + self.interval = self.getConfig("interval") * 60 + + def filterLinks(self, links): + results = self.core.pluginManager.parseUrls(links) + sortedLinks = {} + + for url, hoster in results: + if hoster not in sortedLinks: + sortedLinks[hoster] = [] + sortedLinks[hoster].append(url) + + for h in self.getConfig("hoster").split(","): + try: + return sortedLinks[h.strip()] + except: + continue + return [] + + + def periodical(self): + + def normalizefiletitle(filename): + filename = filename.replace('.', ' ') + filename = filename.replace('_', ' ') + filename = filename.lower() + return filename + + shows = [s.strip() for s in self.getConfig("shows").split(",")] + + feed = feedparser.parse("http://feeds.feedburner.com/ev0in/%s?format=xml" % self.getConfig("quality")) + + showStorage = {} + for show in shows: + showStorage[show] = int(self.getStorage("show_%s_lastfound" % show, 0)) + + found = False + for item in feed['items']: + for show, lastfound in showStorage.iteritems(): + if show.lower() in normalizefiletitle(item['title']) and lastfound < int(mktime(item.date_parsed)): + links = self.filterLinks(item['description'].split("<br />")) + packagename = item['title'].encode("utf-8") + self.logInfo("Ev0InFetcher: new episode '%s' (matched '%s')" % (packagename, show)) + self.core.api.addPackage(packagename, links, 1 if self.getConfig("queue") else 0) + self.setStorage("show_%s_lastfound" % show, int(mktime(item.date_parsed))) + found = True + if not found: + #self.logDebug("Ev0InFetcher: no new episodes found") + pass + + for show, lastfound in self.getStorage().iteritems(): + if int(lastfound) > 0 and int(lastfound) + (3600 * 24 * 30) < int(time()): + self.delStorage("show_%s_lastfound" % show) + self.logDebug("Ev0InFetcher: cleaned '%s' record" % show) diff --git a/pyload/plugins/hooks/ExpertDecoders.py b/pyload/plugins/hooks/ExpertDecoders.py new file mode 100644 index 000000000..ef5409b76 --- /dev/null +++ b/pyload/plugins/hooks/ExpertDecoders.py @@ -0,0 +1,94 @@ +# -*- coding: utf-8 -*- + +from __future__ import with_statement + +from base64 import b64encode +from pycurl import LOW_SPEED_TIME +from thread import start_new_thread +from uuid import uuid4 + +from pyload.network.HTTPRequest import BadHeader +from pyload.network.RequestFactory import getURL, getRequest +from pyload.plugins.Hook import Hook + + +class ExpertDecoders(Hook): + __name__ = "ExpertDecoders" + __type__ = "hook" + __version__ = "0.01" + + __config__ = [("activated", "bool", "Activated", False), + ("force", "bool", "Force CT even if client is connected", False), + ("passkey", "password", "Access key", "")] + + __description__ = """Send captchas to expertdecoders.com""" + __author_name__ = ("RaNaN", "zoidberg") + __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz") + + API_URL = "http://www.fasttypers.org/imagepost.ashx" + + + def setup(self): + self.info = {} + + def getCredits(self): + response = getURL(self.API_URL, post={"key": self.getConfig("passkey"), "action": "balance"}) + + if response.isdigit(): + self.logInfo(_("%s credits left") % response) + self.info['credits'] = credits = int(response) + return credits + else: + self.logError(response) + return 0 + + def processCaptcha(self, task): + task.data['ticket'] = ticket = uuid4() + result = None + + with open(task.captchaFile, 'rb') as f: + data = f.read() + data = b64encode(data) + #self.logDebug("%s: %s : %s" % (ticket, task.captchaFile, data)) + + req = getRequest() + #raise timeout threshold + req.c.setopt(LOW_SPEED_TIME, 80) + + try: + result = req.load(self.API_URL, post={"action": "upload", "key": self.getConfig("passkey"), + "file": data, "gen_task_id": ticket}) + finally: + req.close() + + self.logDebug("result %s : %s" % (ticket, result)) + task.setResult(result) + + def newCaptchaTask(self, task): + if not task.isTextual(): + return False + + if not self.getConfig("passkey"): + return False + + if self.core.isClientConnected() and not self.getConfig("force"): + return False + + if self.getCredits() > 0: + task.handler.append(self) + task.setWaiting(100) + start_new_thread(self.processCaptcha, (task,)) + + else: + self.logInfo(_("Your ExpertDecoders Account has not enough credits")) + + def captchaInvalid(self, task): + if "ticket" in task.data: + + try: + response = getURL(self.API_URL, post={"action": "refund", "key": self.getConfig("passkey"), + "gen_task_id": task.data['ticket']}) + self.logInfo("Request refund: %s" % response) + + except BadHeader, e: + self.logError("Could not send refund request.", str(e)) diff --git a/pyload/plugins/hooks/ExternalScripts.py b/pyload/plugins/hooks/ExternalScripts.py new file mode 100644 index 000000000..372035e82 --- /dev/null +++ b/pyload/plugins/hooks/ExternalScripts.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- + +import subprocess + +from os import listdir, access, X_OK, makedirs +from os.path import join, exists, basename, abspath + +from pyload.plugins.Hook import Hook +from pyload.utils import safe_join + + +class ExternalScripts(Hook): + __name__ = "ExternalScripts" + __type__ = "hook" + __version__ = "0.23" + + __config__ = [("activated", "bool", "Activated", True)] + + __description__ = """Run external scripts""" + __author_name__ = ("mkaay", "RaNaN", "spoob") + __author_mail__ = ("mkaay@mkaay.de", "ranan@pyload.org", "spoob@pyload.org") + + event_list = ["unrarFinished", "allDownloadsFinished", "allDownloadsProcessed"] + + + def setup(self): + self.scripts = {} + + folders = ["download_preparing", "download_finished", "package_finished", + "before_reconnect", "after_reconnect", "unrar_finished", + "all_dls_finished", "all_dls_processed"] + + for folder in folders: + self.scripts[folder] = [] + + self.initPluginType(folder, join(pypath, 'scripts', folder)) + self.initPluginType(folder, join('scripts', folder)) + + for script_type, names in self.scripts.iteritems(): + if names: + self.logInfo((_("Installed scripts for %s: ") % script_type) + ", ".join([basename(x) for x in names])) + + def initPluginType(self, folder, path): + if not exists(path): + try: + makedirs(path) + except: + self.logDebug("Script folder %s not created" % folder) + return + + for f in listdir(path): + if f.startswith("#") or f.startswith(".") or f.startswith("_") or f.endswith("~") or f.endswith(".swp"): + continue + + if not access(join(path, f), X_OK): + self.logWarning(_("Script not executable:") + " %s/%s" % (folder, f)) + + self.scripts[folder].append(join(path, f)) + + def callScript(self, script, *args): + try: + cmd = [script] + [str(x) if not isinstance(x, basestring) else x for x in args] + self.logDebug("Executing %(script)s: %(cmd)s" % {"script": abspath(script), "cmd": " ".join(cmd)}) + #output goes to pyload + subprocess.Popen(cmd, bufsize=-1) + except Exception, e: + self.logError(_("Error in %(script)s: %(error)s") % {"script": basename(script), "error": str(e)}) + + def downloadPreparing(self, pyfile): + for script in self.scripts['download_preparing']: + self.callScript(script, pyfile.pluginname, pyfile.url, pyfile.id) + + def downloadFinished(self, pyfile): + for script in self.scripts['download_finished']: + self.callScript(script, pyfile.pluginname, pyfile.url, pyfile.name, + safe_join(self.config['general']['download_folder'], + pyfile.package().folder, pyfile.name), pyfile.id) + + def packageFinished(self, pypack): + for script in self.scripts['package_finished']: + folder = self.config['general']['download_folder'] + folder = safe_join(folder, pypack.folder) + + self.callScript(script, pypack.name, folder, pypack.password, pypack.id) + + def beforeReconnecting(self, ip): + for script in self.scripts['before_reconnect']: + self.callScript(script, ip) + + def afterReconnecting(self, ip): + for script in self.scripts['after_reconnect']: + self.callScript(script, ip) + + def unrarFinished(self, folder, fname): + for script in self.scripts['unrar_finished']: + self.callScript(script, folder, fname) + + def allDownloadsFinished(self): + for script in self.scripts['all_dls_finished']: + self.callScript(script) + + def allDownloadsProcessed(self): + for script in self.scripts['all_dls_processed']: + self.callScript(script) diff --git a/pyload/plugins/hooks/ExtractArchive.py b/pyload/plugins/hooks/ExtractArchive.py new file mode 100644 index 000000000..1a2da53ad --- /dev/null +++ b/pyload/plugins/hooks/ExtractArchive.py @@ -0,0 +1,320 @@ +# -*- coding: utf-8 -*- + +import os +import sys + +from copy import copy +from os import remove, chmod, makedirs +from os.path import exists, basename, isfile, isdir +from traceback import print_exc + +# monkey patch bug in python 2.6 and lower +# http://bugs.python.org/issue6122 , http://bugs.python.org/issue1236 , http://bugs.python.org/issue1731717 +if sys.version_info < (2, 7) and os.name != "nt": + import errno + from subprocess import Popen + + def _eintr_retry_call(func, *args): + while True: + try: + return func(*args) + except OSError, e: + if e.errno == errno.EINTR: + continue + raise + + # unsued timeout option for older python version + def wait(self, timeout=0): + """Wait for child process to terminate. Returns returncode + attribute.""" + if self.returncode is None: + try: + pid, sts = _eintr_retry_call(os.waitpid, self.pid, 0) + except OSError, e: + if e.errno != errno.ECHILD: + raise + # This happens if SIGCLD is set to be ignored or waiting + # for child processes has otherwise been disabled for our + # process. This child is dead, we can't get the status. + sts = 0 + self._handle_exitstatus(sts) + return self.returncode + + Popen.wait = wait + +if os.name != "nt": + from grp import getgrnam + from os import chown + from pwd import getpwnam + +from pyload.plugins.Hook import Hook, threaded, Expose +from pyload.plugins.internal.AbstractExtractor import ArchiveError, CRCError, WrongPassword +from pyload.utils import safe_join, fs_encode + + +class ExtractArchive(Hook): + """ + Provides: unrarFinished (folder, filename) + """ + __name__ = "ExtractArchive" + __type__ = "hook" + __version__ = "0.16" + + __config__ = [("activated", "bool", "Activated", True), + ("fullpath", "bool", "Extract full path", True), + ("overwrite", "bool", "Overwrite files", True), + ("passwordfile", "file", "password file", "unrar_passwords.txt"), + ("deletearchive", "bool", "Delete archives when done", False), + ("subfolder", "bool", "Create subfolder for each package", False), + ("destination", "folder", "Extract files to", ""), + ("excludefiles", "str", "Exclude files from unpacking (seperated by ;)", ""), + ("recursive", "bool", "Extract archives in archvies", True), + ("queue", "bool", "Wait for all downloads to be finished", True), + ("renice", "int", "CPU Priority", 0)] + + __description__ = """Extract different kind of archives""" + __author_name__ = ("pyLoad Team", "AndroKev") + __author_mail__ = ("admin@pyload.org", "@pyloadforum") + + event_list = ["allDownloadsProcessed"] + + + def setup(self): + self.plugins = [] + self.passwords = [] + names = [] + + for p in ("UnRar", "UnZip"): + try: + module = self.core.pluginManager.loadModule("internal", p) + klass = getattr(module, p) + if klass.checkDeps(): + names.append(p) + self.plugins.append(klass) + + except OSError, e: + if e.errno == 2: + self.logInfo(_("No %s installed") % p) + else: + self.logWarning(_("Could not activate %s") % p, str(e)) + if self.core.debug: + print_exc() + + except Exception, e: + self.logWarning(_("Could not activate %s") % p, str(e)) + if self.core.debug: + print_exc() + + if names: + self.logInfo(_("Activated") + " " + " ".join(names)) + else: + self.logInfo(_("No Extract plugins activated")) + + # queue with package ids + self.queue = [] + + @Expose + def extractPackage(self, id): + """ Extract package with given id""" + self.manager.startThread(self.extract, [id]) + + def packageFinished(self, pypack): + if self.getConfig("queue"): + self.logInfo(_("Package %s queued for later extracting") % pypack.name) + self.queue.append(pypack.id) + else: + self.manager.startThread(self.extract, [pypack.id]) + + @threaded + def allDownloadsProcessed(self, thread): + local = copy(self.queue) + del self.queue[:] + self.extract(local, thread) + + def extract(self, ids, thread=None): + # reload from txt file + self.reloadPasswords() + + # dl folder + dl = self.config['general']['download_folder'] + + extracted = [] + + #iterate packages -> plugins -> targets + for pid in ids: + p = self.core.files.getPackage(pid) + self.logInfo(_("Check package %s") % p.name) + if not p: + continue + + # determine output folder + out = safe_join(dl, p.folder, "") + # force trailing slash + + if self.getConfig("destination") and self.getConfig("destination").lower() != "none": + + out = safe_join(dl, p.folder, self.getConfig("destination"), "") + #relative to package folder if destination is relative, otherwise absolute path overwrites them + + if self.getConfig("subfolder"): + out = safe_join(out, fs_encode(p.folder)) + + if not exists(out): + makedirs(out) + + files_ids = [(safe_join(dl, p.folder, x['name']), x['id']) for x in p.getChildren().itervalues()] + matched = False + + # check as long there are unseen files + while files_ids: + new_files_ids = [] + + for plugin in self.plugins: + targets = plugin.getTargets(files_ids) + if targets: + self.logDebug("Targets for %s: %s" % (plugin.__name__, targets)) + matched = True + for target, fid in targets: + if target in extracted: + self.logDebug(basename(target), "skipped") + continue + extracted.append(target) # prevent extracting same file twice + + klass = plugin(self, target, out, self.getConfig("fullpath"), self.getConfig("overwrite"), self.getConfig("excludefiles"), + self.getConfig("renice")) + klass.init() + + self.logInfo(basename(target), _("Extract to %s") % out) + new_files = self.startExtracting(klass, fid, p.password.strip().splitlines(), thread) + self.logDebug("Extracted: %s" % new_files) + self.setPermissions(new_files) + + for file in new_files: + if not exists(file): + self.logDebug("new file %s does not exists" % file) + continue + if self.getConfig("recursive") and isfile(file): + new_files_ids.append((file, fid)) # append as new target + + files_ids = new_files_ids # also check extracted files + + if not matched: + self.logInfo(_("No files found to extract")) + + def startExtracting(self, plugin, fid, passwords, thread): + pyfile = self.core.files.getFile(fid) + if not pyfile: + return [] + + pyfile.setCustomStatus(_("extracting")) + thread.addActive(pyfile) # keep this file until everything is done + + try: + progress = lambda x: pyfile.setProgress(x) + success = False + + if not plugin.checkArchive(): + plugin.extract(progress) + success = True + else: + self.logInfo(basename(plugin.file), _("Password protected")) + self.logDebug("Passwords: %s" % str(passwords)) + + pwlist = copy(self.getPasswords()) + #remove already supplied pws from list (only local) + for pw in passwords: + if pw in pwlist: + pwlist.remove(pw) + + for pw in passwords + pwlist: + try: + self.logDebug("Try password: %s" % pw) + if plugin.checkPassword(pw): + plugin.extract(progress, pw) + self.addPassword(pw) + success = True + break + except WrongPassword: + self.logDebug("Password was wrong") + + if not success: + self.logError(basename(plugin.file), _("Wrong password")) + return [] + + if self.core.debug: + self.logDebug("Would delete: %s" % ", ".join(plugin.getDeleteFiles())) + + if self.getConfig("deletearchive"): + files = plugin.getDeleteFiles() + self.logInfo(_("Deleting %s files") % len(files)) + for f in files: + if exists(f): + remove(f) + else: + self.logDebug("%s does not exists" % f) + + self.logInfo(basename(plugin.file), _("Extracting finished")) + self.manager.dispatchEvent("unrarFinished", plugin.out, plugin.file) + + return plugin.getExtractedFiles() + + except ArchiveError, e: + self.logError(basename(plugin.file), _("Archive Error"), str(e)) + except CRCError: + self.logError(basename(plugin.file), _("CRC Mismatch")) + except Exception, e: + if self.core.debug: + print_exc() + self.logError(basename(plugin.file), _("Unknown Error"), str(e)) + + return [] + + @Expose + def getPasswords(self): + """ List of saved passwords """ + return self.passwords + + def reloadPasswords(self): + pwfile = self.getConfig("passwordfile") + if not exists(pwfile): + open(pwfile, "wb").close() + + passwords = [] + f = open(pwfile, "rb") + for pw in f.read().splitlines(): + passwords.append(pw) + f.close() + + self.passwords = passwords + + @Expose + def addPassword(self, pw): + """ Adds a password to saved list""" + pwfile = self.getConfig("passwordfile") + + if pw in self.passwords: + self.passwords.remove(pw) + self.passwords.insert(0, pw) + + f = open(pwfile, "wb") + for pw in self.passwords: + f.write(pw + "\n") + f.close() + + def setPermissions(self, files): + for f in files: + if not exists(f): + continue + try: + if self.config['permission']['change_file']: + if isfile(f): + chmod(f, int(self.config['permission']['file'], 8)) + elif isdir(f): + chmod(f, int(self.config['permission']['folder'], 8)) + + if self.config['permission']['change_dl'] and os.name != "nt": + uid = getpwnam(self.config['permission']['user'])[2] + gid = getgrnam(self.config['permission']['group'])[2] + chown(f, uid, gid) + except Exception, e: + self.logWarning(_("Setting User and Group failed"), e) diff --git a/pyload/plugins/hooks/FastixRu.py b/pyload/plugins/hooks/FastixRu.py new file mode 100644 index 000000000..966bc6bd3 --- /dev/null +++ b/pyload/plugins/hooks/FastixRu.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- + +from pyload.common.json_layer import json_loads +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.MultiHoster import MultiHoster + + +class FastixRu(MultiHoster): + __name__ = "FastixRu" + __type__ = "hook" + __version__ = "0.02" + + __config__ = [("activated", "bool", "Activated", False), + ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), + ("unloadFailing", "bool", "Revert to standard download if download fails", False), + ("interval", "int", "Reload interval in hours (0 to disable)", 24)] + + __description__ = """Fastix.ru hook plugin""" + __author_name__ = "Massimo Rosamilia" + __author_mail__ = "max@spiritix.eu" + + + def getHoster(self): + page = getURL( + "http://fastix.ru/api_v2/?apikey=5182964c3f8f9a7f0b00000a_kelmFB4n1IrnCDYuIFn2y&sub=allowed_sources") + host_list = json_loads(page) + host_list = host_list['allow'] + return host_list diff --git a/pyload/plugins/hooks/FreeWayMe.py b/pyload/plugins/hooks/FreeWayMe.py new file mode 100644 index 000000000..35b275067 --- /dev/null +++ b/pyload/plugins/hooks/FreeWayMe.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- + +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.MultiHoster import MultiHoster + + +class FreeWayMe(MultiHoster): + __name__ = "FreeWayMe" + __type__ = "hook" + __version__ = "0.11" + + __config__ = [("activated", "bool", "Activated", False), + ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"), + ("hosterList", "str", "Hoster list (comma separated)", ""), + ("unloadFailing", "bool", "Revert to stanard download if download fails", False), + ("interval", "int", "Reload interval in hours (0 to disable)", 24)] + + __description__ = """FreeWay.me hook plugin""" + __author_name__ = "Nicolas Giese" + __author_mail__ = "james@free-way.me" + + + def getHoster(self): + hostis = getURL("https://www.free-way.me/ajax/jd.php", get={"id": 3}).replace("\"", "").strip() + self.logDebug("hosters: %s" % hostis) + return [x.strip() for x in hostis.split(",") if x.strip()] diff --git a/pyload/plugins/hooks/HotFolder.py b/pyload/plugins/hooks/HotFolder.py new file mode 100644 index 000000000..f76e95af4 --- /dev/null +++ b/pyload/plugins/hooks/HotFolder.py @@ -0,0 +1,65 @@ +# -*- coding: utf-8 -*- + +import time + +from os import listdir, makedirs +from os.path import exists, isfile, join +from shutil import move + +from pyload.plugins.Hook import Hook + + +class HotFolder(Hook): + __name__ = "HotFolder" + __type__ = "hook" + __version__ = "0.11" + + __config__ = [("activated", "bool", "Activated", False), + ("folder", "str", "Folder to observe", "container"), + ("watch_file", "bool", "Observe link file", False), + ("keep", "bool", "Keep added containers", True), + ("file", "str", "Link file", "links.txt")] + + __description__ = """Observe folder and file for changes and add container and links""" + __author_name__ = "RaNaN" + __author_mail__ = "RaNaN@pyload.de" + + + def setup(self): + self.interval = 10 + + def periodical(self): + if not exists(join(self.getConfig("folder"), "finished")): + makedirs(join(self.getConfig("folder"), "finished")) + + if self.getConfig("watch_file"): + + if not exists(self.getConfig("file")): + f = open(self.getConfig("file"), "wb") + f.close() + + f = open(self.getConfig("file"), "rb") + content = f.read().strip() + f.close() + f = open(self.getConfig("file"), "wb") + f.close() + if content: + name = "%s_%s.txt" % (self.getConfig("file"), time.strftime("%H-%M-%S_%d%b%Y")) + + f = open(join(self.getConfig("folder"), "finished", name), "wb") + f.write(content) + f.close() + + self.core.api.addPackage(f.name, [f.name], 1) + + for f in listdir(self.getConfig("folder")): + path = join(self.getConfig("folder"), f) + + if not isfile(path) or f.endswith("~") or f.startswith("#") or f.startswith("."): + continue + + newpath = join(self.getConfig("folder"), "finished", f if self.getConfig("keep") else "tmp_" + f) + move(path, newpath) + + self.logInfo(_("Added %s from HotFolder") % f) + self.core.api.addPackage(f, [newpath], 1) diff --git a/pyload/plugins/hooks/IRCInterface.py b/pyload/plugins/hooks/IRCInterface.py new file mode 100644 index 000000000..af8d8fa69 --- /dev/null +++ b/pyload/plugins/hooks/IRCInterface.py @@ -0,0 +1,404 @@ +# -*- coding: utf-8 -*- + +import re +import socket +import time + +from pycurl import FORM_FILE +from select import select +from threading import Thread +from time import sleep +from traceback import print_exc + +from pyload.Api import PackageDoesNotExists, FileDoesNotExists +from pyload.network.RequestFactory import getURL +from pyload.plugins.Hook import Hook +from pyload.utils import formatSize + + +class IRCInterface(Thread, Hook): + __name__ = "IRCInterface" + __type__ = "hook" + __version__ = "0.11" + + __config__ = [("activated", "bool", "Activated", False), + ("host", "str", "IRC-Server Address", "Enter your server here!"), + ("port", "int", "IRC-Server Port", 6667), + ("ident", "str", "Clients ident", "pyload-irc"), + ("realname", "str", "Realname", "pyload-irc"), + ("nick", "str", "Nickname the Client will take", "pyLoad-IRC"), + ("owner", "str", "Nickname the Client will accept commands from", "Enter your nick here!"), + ("info_file", "bool", "Inform about every file finished", False), + ("info_pack", "bool", "Inform about every package finished", True), + ("captcha", "bool", "Send captcha requests", True)] + + __description__ = """Connect to irc and let owner perform different tasks""" + __author_name__ = "Jeix" + __author_mail__ = "Jeix@hasnomail.com" + + + def __init__(self, core, manager): + Thread.__init__(self) + Hook.__init__(self, core, manager) + self.setDaemon(True) + # self.sm = core.server_methods + self.api = core.api # todo, only use api + + def coreReady(self): + self.abort = False + self.more = [] + self.new_package = {} + + self.start() + + def packageFinished(self, pypack): + try: + if self.getConfig("info_pack"): + self.response(_("Package finished: %s") % pypack.name) + except: + pass + + def downloadFinished(self, pyfile): + try: + if self.getConfig("info_file"): + self.response( + _("Download finished: %(name)s @ %(plugin)s ") % {"name": pyfile.name, "plugin": pyfile.pluginname}) + except: + pass + + def newCaptchaTask(self, task): + if self.getConfig("captcha") and task.isTextual(): + task.handler.append(self) + task.setWaiting(60) + + page = getURL("http://www.freeimagehosting.net/upload.php", + post={"attached": (FORM_FILE, task.captchaFile)}, multipart=True) + + url = re.search(r"\[img\]([^\[]+)\[/img\]\[/url\]", page).group(1) + self.response(_("New Captcha Request: %s") % url) + self.response(_("Answer with 'c %s text on the captcha'") % task.id) + + def run(self): + # connect to IRC etc. + self.sock = socket.socket() + host = self.getConfig("host") + self.sock.connect((host, self.getConfig("port"))) + nick = self.getConfig("nick") + self.sock.send("NICK %s\r\n" % nick) + self.sock.send("USER %s %s bla :%s\r\n" % (nick, host, nick)) + for t in self.getConfig("owner").split(): + if t.strip().startswith("#"): + self.sock.send("JOIN %s\r\n" % t.strip()) + self.logInfo("pyLoad IRC: Connected to %s!" % host) + self.logInfo("pyLoad IRC: Switching to listening mode!") + try: + self.main_loop() + + except IRCError, ex: + self.sock.send("QUIT :byebye\r\n") + print_exc() + self.sock.close() + + def main_loop(self): + readbuffer = "" + while True: + sleep(1) + fdset = select([self.sock], [], [], 0) + if self.sock not in fdset[0]: + continue + + if self.abort: + raise IRCError("quit") + + readbuffer += self.sock.recv(1024) + temp = readbuffer.split("\n") + readbuffer = temp.pop() + + for line in temp: + line = line.rstrip() + first = line.split() + + if first[0] == "PING": + self.sock.send("PONG %s\r\n" % first[1]) + + if first[0] == "ERROR": + raise IRCError(line) + + msg = line.split(None, 3) + if len(msg) < 4: + continue + + msg = { + "origin": msg[0][1:], + "action": msg[1], + "target": msg[2], + "text": msg[3][1:] + } + + self.handle_events(msg) + + def handle_events(self, msg): + if not msg['origin'].split("!", 1)[0] in self.getConfig("owner").split(): + return + + if msg['target'].split("!", 1)[0] != self.getConfig("nick"): + return + + if msg['action'] != "PRIVMSG": + return + + # HANDLE CTCP ANTI FLOOD/BOT PROTECTION + if msg['text'] == "\x01VERSION\x01": + self.logDebug("Sending CTCP VERSION.") + self.sock.send("NOTICE %s :%s\r\n" % (msg['origin'], "pyLoad! IRC Interface")) + return + elif msg['text'] == "\x01TIME\x01": + self.logDebug("Sending CTCP TIME.") + self.sock.send("NOTICE %s :%d\r\n" % (msg['origin'], time.time())) + return + elif msg['text'] == "\x01LAG\x01": + self.logDebug("Received CTCP LAG.") # don't know how to answer + return + + trigger = "pass" + args = None + + try: + temp = msg['text'].split() + trigger = temp[0] + if len(temp) > 1: + args = temp[1:] + except: + pass + + handler = getattr(self, "event_%s" % trigger, self.event_pass) + try: + res = handler(args) + for line in res: + self.response(line, msg['origin']) + except Exception, e: + self.logError("pyLoad IRC: " + repr(e)) + + def response(self, msg, origin=""): + if origin == "": + for t in self.getConfig("owner").split(): + self.sock.send("PRIVMSG %s :%s\r\n" % (t.strip(), msg)) + else: + self.sock.send("PRIVMSG %s :%s\r\n" % (origin.split("!", 1)[0], msg)) + + #### Events + + def event_pass(self, args): + return [] + + def event_status(self, args): + downloads = self.api.statusDownloads() + if not downloads: + return ["INFO: There are no active downloads currently."] + + temp_progress = "" + lines = ["ID - Name - Status - Speed - ETA - Progress"] + for data in downloads: + + if data.status == 5: + temp_progress = data.format_wait + else: + temp_progress = "%d%% (%s)" % (data.percent, data.format_size) + + lines.append("#%d - %s - %s - %s - %s - %s" % + ( + data.fid, + data.name, + data.statusmsg, + "%s/s" % formatSize(data.speed), + "%s" % data.format_eta, + temp_progress + )) + return lines + + def event_queue(self, args): + ps = self.api.getQueueData() + + if not ps: + return ["INFO: There are no packages in queue."] + + lines = [] + for pack in ps: + lines.append('PACKAGE #%s: "%s" with %d links.' % (pack.pid, pack.name, len(pack.links))) + + return lines + + def event_collector(self, args): + ps = self.api.getCollectorData() + if not ps: + return ["INFO: No packages in collector!"] + + lines = [] + for pack in ps: + lines.append('PACKAGE #%s: "%s" with %d links.' % (pack.pid, pack.name, len(pack.links))) + + return lines + + def event_info(self, args): + if not args: + return ["ERROR: Use info like this: info <id>"] + + info = None + try: + info = self.api.getFileData(int(args[0])) + + except FileDoesNotExists: + return ["ERROR: Link doesn't exists."] + + return ['LINK #%s: %s (%s) [%s][%s]' % (info.fid, info.name, info.format_size, info.statusmsg, info.plugin)] + + def event_packinfo(self, args): + if not args: + return ["ERROR: Use packinfo like this: packinfo <id>"] + + lines = [] + pack = None + try: + pack = self.api.getPackageData(int(args[0])) + + except PackageDoesNotExists: + return ["ERROR: Package doesn't exists."] + + id = args[0] + + self.more = [] + + lines.append('PACKAGE #%s: "%s" with %d links' % (id, pack.name, len(pack.links))) + for pyfile in pack.links: + self.more.append('LINK #%s: %s (%s) [%s][%s]' % (pyfile.fid, pyfile.name, pyfile.format_size, + pyfile.statusmsg, pyfile.plugin)) + + if len(self.more) < 6: + lines.extend(self.more) + self.more = [] + else: + lines.extend(self.more[:6]) + self.more = self.more[6:] + lines.append("%d more links do display." % len(self.more)) + + return lines + + def event_more(self, args): + if not self.more: + return ["No more information to display."] + + lines = self.more[:6] + self.more = self.more[6:] + lines.append("%d more links do display." % len(self.more)) + + return lines + + def event_start(self, args): + self.api.unpauseServer() + return ["INFO: Starting downloads."] + + def event_stop(self, args): + self.api.pauseServer() + return ["INFO: No new downloads will be started."] + + def event_add(self, args): + if len(args) < 2: + return ['ERROR: Add links like this: "add <packagename|id> links". ', + "This will add the link <link> to to the package <package> / the package with id <id>!"] + + pack = args[0].strip() + links = [x.strip() for x in args[1:]] + + count_added = 0 + count_failed = 0 + try: + id = int(pack) + pack = self.api.getPackageData(id) + if not pack: + return ["ERROR: Package doesn't exists."] + + #TODO add links + + return ["INFO: Added %d links to Package %s [#%d]" % (len(links), pack['name'], id)] + + except: + # create new package + id = self.api.addPackage(pack, links, 1) + return ["INFO: Created new Package %s [#%d] with %d links." % (pack, id, len(links))] + + def event_del(self, args): + if len(args) < 2: + return ["ERROR: Use del command like this: del -p|-l <id> [...] (-p indicates that the ids are from packages, -l indicates that the ids are from links)"] + + if args[0] == "-p": + ret = self.api.deletePackages(map(int, args[1:])) + return ["INFO: Deleted %d packages!" % len(args[1:])] + + elif args[0] == "-l": + ret = self.api.delLinks(map(int, args[1:])) + return ["INFO: Deleted %d links!" % len(args[1:])] + + else: + return ["ERROR: Use del command like this: del <-p|-l> <id> [...] (-p indicates that the ids are from packages, -l indicates that the ids are from links)"] + + def event_push(self, args): + if not args: + return ["ERROR: Push package to queue like this: push <package id>"] + + id = int(args[0]) + try: + info = self.api.getPackageInfo(id) + except PackageDoesNotExists: + return ["ERROR: Package #%d does not exist." % id] + + self.api.pushToQueue(id) + return ["INFO: Pushed package #%d to queue." % id] + + def event_pull(self, args): + if not args: + return ["ERROR: Pull package from queue like this: pull <package id>."] + + id = int(args[0]) + if not self.api.getPackageData(id): + return ["ERROR: Package #%d does not exist." % id] + + self.api.pullFromQueue(id) + return ["INFO: Pulled package #%d from queue to collector." % id] + + def event_c(self, args): + """ captcha answer """ + if not args: + return ["ERROR: Captcha ID missing."] + + task = self.core.captchaManager.getTaskByID(args[0]) + if not task: + return ["ERROR: Captcha Task with ID %s does not exists." % args[0]] + + task.setResult(" ".join(args[1:])) + return ["INFO: Result %s saved." % " ".join(args[1:])] + + def event_help(self, args): + lines = ["The following commands are available:", + "add <package|packid> <links> [...] Adds link to package. (creates new package if it does not exist)", + "queue Shows all packages in the queue", + "collector Shows all packages in collector", + "del -p|-l <id> [...] Deletes all packages|links with the ids specified", + "info <id> Shows info of the link with id <id>", + "packinfo <id> Shows info of the package with id <id>", + "more Shows more info when the result was truncated", + "start Starts all downloads", + "stop Stops the download (but not abort active downloads)", + "push <id> Push package to queue", + "pull <id> Pull package from queue", + "status Show general download status", + "help Shows this help message"] + return lines + + +class IRCError(Exception): + + def __init__(self, value): + self.value = value + + def __str__(self): + return repr(self.value) diff --git a/pyload/plugins/hooks/ImageTyperz.py b/pyload/plugins/hooks/ImageTyperz.py new file mode 100644 index 000000000..2591a1c78 --- /dev/null +++ b/pyload/plugins/hooks/ImageTyperz.py @@ -0,0 +1,143 @@ +# -*- coding: utf-8 -*- + +from __future__ import with_statement + +import re + +from base64 import b64encode +from pycurl import FORM_FILE, LOW_SPEED_TIME +from thread import start_new_thread + +from pyload.network.RequestFactory import getURL, getRequest +from pyload.plugins.Hook import Hook + + +class ImageTyperzException(Exception): + + def __init__(self, err): + self.err = err + + def getCode(self): + return self.err + + def __str__(self): + return "<ImageTyperzException %s>" % self.err + + def __repr__(self): + return "<ImageTyperzException %s>" % self.err + + +class ImageTyperz(Hook): + __name__ = "ImageTyperz" + __type__ = "hook" + __version__ = "0.04" + + __config__ = [("activated", "bool", "Activated", False), + ("username", "str", "Username", ""), + ("passkey", "password", "Password", ""), + ("force", "bool", "Force IT even if client is connected", False)] + + __description__ = """Send captchas to ImageTyperz.com""" + __author_name__ = ("RaNaN", "zoidberg") + __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz") + + SUBMIT_URL = "http://captchatypers.com/Forms/UploadFileAndGetTextNEW.ashx" + RESPOND_URL = "http://captchatypers.com/Forms/SetBadImage.ashx" + GETCREDITS_URL = "http://captchatypers.com/Forms/RequestBalance.ashx" + + + def setup(self): + self.info = {} + + def getCredits(self): + response = getURL(self.GETCREDITS_URL, post={"action": "REQUESTBALANCE", "username": self.getConfig("username"), + "password": self.getConfig("passkey")}) + + if response.startswith('ERROR'): + raise ImageTyperzException(response) + + try: + balance = float(response) + except: + raise ImageTyperzException("invalid response") + + self.logInfo("Account balance: $%s left" % response) + return balance + + def submit(self, captcha, captchaType="file", match=None): + req = getRequest() + #raise timeout threshold + req.c.setopt(LOW_SPEED_TIME, 80) + + try: + #workaround multipart-post bug in HTTPRequest.py + if re.match("^[A-Za-z0-9]*$", self.getConfig("passkey")): + multipart = True + data = (FORM_FILE, captcha) + else: + multipart = False + with open(captcha, 'rb') as f: + data = f.read() + data = b64encode(data) + + response = req.load(self.SUBMIT_URL, post={"action": "UPLOADCAPTCHA", + "username": self.getConfig("username"), + "password": self.getConfig("passkey"), "file": data}, + multipart=multipart) + finally: + req.close() + + if response.startswith("ERROR"): + raise ImageTyperzException(response) + else: + data = response.split('|') + if len(data) == 2: + ticket, result = data + else: + raise ImageTyperzException("Unknown response %s" % response) + + return ticket, result + + def newCaptchaTask(self, task): + if "service" in task.data: + return False + + if not task.isTextual(): + return False + + if not self.getConfig("username") or not self.getConfig("passkey"): + return False + + if self.core.isClientConnected() and not self.getConfig("force"): + return False + + if self.getCredits() > 0: + task.handler.append(self) + task.data['service'] = self.__name__ + task.setWaiting(100) + start_new_thread(self.processCaptcha, (task,)) + + else: + self.logInfo("Your %s account has not enough credits" % self.__name__) + + def captchaInvalid(self, task): + if task.data['service'] == self.__name__ and "ticket" in task.data: + response = getURL(self.RESPOND_URL, post={"action": "SETBADIMAGE", "username": self.getConfig("username"), + "password": self.getConfig("passkey"), + "imageid": task.data['ticket']}) + + if response == "SUCCESS": + self.logInfo("Bad captcha solution received, requested refund") + else: + self.logError("Bad captcha solution received, refund request failed", response) + + def processCaptcha(self, task): + c = task.captchaFile + try: + ticket, result = self.submit(c) + except ImageTyperzException, e: + task.error = e.getCode() + return + + task.data['ticket'] = ticket + task.setResult(result) diff --git a/pyload/plugins/hooks/LinkdecrypterCom.py b/pyload/plugins/hooks/LinkdecrypterCom.py new file mode 100644 index 000000000..34517761a --- /dev/null +++ b/pyload/plugins/hooks/LinkdecrypterCom.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.network.RequestFactory import getURL +from pyload.plugins.Hook import Hook +from pyload.utils import remove_chars + + +class LinkdecrypterCom(Hook): + __name__ = "LinkdecrypterCom" + __type__ = "hook" + __version__ = "0.19" + + __config__ = [("activated", "bool", "Activated", False)] + + __description__ = """Linkdecrypter.com hook plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + + def coreReady(self): + try: + self.loadPatterns() + except Exception, e: + self.logError(e) + + def loadPatterns(self): + page = getURL("http://linkdecrypter.com/") + m = re.search(r'<b>Supported\(\d+\)</b>: <i>([^+<]*)', page) + if m is None: + self.logError(_("Crypter list not found")) + return + + builtin = [name.lower() for name in self.core.pluginManager.crypterPlugins.keys()] + builtin.append("downloadserienjunkiesorg") + + crypter_pattern = re.compile("(\w[\w.-]+)") + online = [] + for crypter in m.group(1).split(', '): + m = re.match(crypter_pattern, crypter) + if m and remove_chars(m.group(1), "-.") not in builtin: + online.append(m.group(1).replace(".", "\\.")) + + if not online: + self.logError(_("Crypter list is empty")) + return + + regexp = r"https?://([^.]+\.)*?(%s)/.*" % "|".join(online) + + dict = self.core.pluginManager.crypterPlugins[self.__name__] + dict['pattern'] = regexp + dict['re'] = re.compile(regexp) + + self.logDebug("REGEXP: " + regexp) diff --git a/pyload/plugins/hooks/LinksnappyCom.py b/pyload/plugins/hooks/LinksnappyCom.py new file mode 100644 index 000000000..f662ae4e9 --- /dev/null +++ b/pyload/plugins/hooks/LinksnappyCom.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- + +from pyload.common.json_layer import json_loads +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.MultiHoster import MultiHoster + + +class LinksnappyCom(MultiHoster): + __name__ = "LinksnappyCom" + __type__ = "hook" + __version__ = "0.01" + + __config__ = [("activated", "bool", "Activated", False), + ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), + ("hosterList", "str", "Hoster list (comma separated)", ""), + ("unloadFailing", "bool", "Revert to standard download if download fails", False), + ("interval", "int", "Reload interval in hours (0 to disable)", 24)] + + __description__ = """Linksnappy.com hook plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + + def getHoster(self): + json_data = getURL('http://gen.linksnappy.com/lseAPI.php?act=FILEHOSTS') + json_data = json_loads(json_data) + + return json_data['return'].keys() diff --git a/pyload/plugins/hooks/MegaDebridEu.py b/pyload/plugins/hooks/MegaDebridEu.py new file mode 100644 index 000000000..da151f9aa --- /dev/null +++ b/pyload/plugins/hooks/MegaDebridEu.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- + +from pyload.common.json_layer import json_loads +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.MultiHoster import MultiHoster + + +class MegaDebridEu(MultiHoster): + __name__ = "MegaDebridEu" + __type__ = "hook" + __version__ = "0.02" + + __config__ = [("activated", "bool", "Activated", False), + ("unloadFailing", "bool", "Revert to standard download if download fails", False)] + + __description__ = """mega-debrid.eu hook plugin""" + __author_name__ = "D.Ducatel" + __author_mail__ = "dducatel@je-geek.fr" + + + def getHoster(self): + reponse = getURL('http://www.mega-debrid.eu/api.php?action=getHosters') + json_data = json_loads(reponse) + + if json_data['response_code'] == "ok": + host_list = [element[0] for element in json_data['hosters']] + else: + self.logError("Unable to retrieve hoster list") + host_list = list() + + return host_list diff --git a/pyload/plugins/hooks/MergeFiles.py b/pyload/plugins/hooks/MergeFiles.py new file mode 100644 index 000000000..5761a5990 --- /dev/null +++ b/pyload/plugins/hooks/MergeFiles.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- + +import os +import re +import traceback + +from pyload.plugins.Hook import Hook, threaded +from pyload.utils import safe_join, fs_encode + + +class MergeFiles(Hook): + __name__ = "MergeFiles" + __type__ = "hook" + __version__ = "0.12" + + __config__ = [("activated", "bool", "Activated", False)] + + __description__ = """Merges parts splitted with hjsplit""" + __author_name__ = "and9000" + __author_mail__ = "me@has-no-mail.com" + + BUFFER_SIZE = 4096 + + + def setup(self): + # nothing to do + pass + + @threaded + def packageFinished(self, pack): + files = {} + fid_dict = {} + for fid, data in pack.getChildren().iteritems(): + if re.search("\.[0-9]{3}$", data['name']): + if data['name'][:-4] not in files: + files[data['name'][:-4]] = [] + files[data['name'][:-4]].append(data['name']) + files[data['name'][:-4]].sort() + fid_dict[data['name']] = fid + + download_folder = self.config['general']['download_folder'] + + if self.config['general']['folder_per_package']: + download_folder = safe_join(download_folder, pack.folder) + + for name, file_list in files.iteritems(): + self.logInfo("Starting merging of %s" % name) + final_file = open(safe_join(download_folder, name), "wb") + + for splitted_file in file_list: + self.logDebug("Merging part %s" % splitted_file) + pyfile = self.core.files.getFile(fid_dict[splitted_file]) + pyfile.setStatus("processing") + try: + s_file = open(os.path.join(download_folder, splitted_file), "rb") + size_written = 0 + s_file_size = int(os.path.getsize(os.path.join(download_folder, splitted_file))) + while True: + f_buffer = s_file.read(self.BUFFER_SIZE) + if f_buffer: + final_file.write(f_buffer) + size_written += self.BUFFER_SIZE + pyfile.setProgress((size_written * 100) / s_file_size) + else: + break + s_file.close() + self.logDebug("Finished merging part %s" % splitted_file) + except Exception, e: + print traceback.print_exc() + finally: + pyfile.setProgress(100) + pyfile.setStatus("finished") + pyfile.release() + + final_file.close() + self.logInfo("Finished merging of %s" % name) diff --git a/pyload/plugins/hooks/MultiDebridCom.py b/pyload/plugins/hooks/MultiDebridCom.py new file mode 100644 index 000000000..7d9b6526a --- /dev/null +++ b/pyload/plugins/hooks/MultiDebridCom.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- + +from pyload.common.json_layer import json_loads +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.MultiHoster import MultiHoster + + +class MultiDebridCom(MultiHoster): + __name__ = "MultiDebridCom" + __type__ = "hook" + __version__ = "0.01" + + __config__ = [("activated", "bool", "Activated", False), + ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), + ("hosterList", "str", "Hoster list (comma separated)", ""), + ("unloadFailing", "bool", "Revert to standard download if download fails", False), + ("interval", "int", "Reload interval in hours (0 to disable)", 24)] + + __description__ = """Multi-debrid.com hook plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + + def getHoster(self): + json_data = getURL('http://multi-debrid.com/api.php?hosts', decode=True) + self.logDebug('JSON data: ' + json_data) + json_data = json_loads(json_data) + + return json_data['hosts'] diff --git a/pyload/plugins/hooks/MultiHome.py b/pyload/plugins/hooks/MultiHome.py new file mode 100644 index 000000000..61fbdd230 --- /dev/null +++ b/pyload/plugins/hooks/MultiHome.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- + +from time import time + +from pyload.plugins.Hook import Hook + + +class MultiHome(Hook): + __name__ = "MultiHome" + __type__ = "hook" + __version__ = "0.11" + + __config__ = [("activated", "bool", "Activated", False), + ("interfaces", "str", "Interfaces", "None")] + + __description__ = """Ip address changer""" + __author_name__ = "mkaay" + __author_mail__ = "mkaay@mkaay.de" + + + def setup(self): + self.register = {} + self.interfaces = [] + self.parseInterfaces(self.getConfig("interfaces").split(";")) + if not self.interfaces: + self.parseInterfaces([self.config['download']['interface']]) + self.setConfig("interfaces", self.toConfig()) + + def toConfig(self): + return ";".join([i.adress for i in self.interfaces]) + + def parseInterfaces(self, interfaces): + for interface in interfaces: + if not interface or str(interface).lower() == "none": + continue + self.interfaces.append(Interface(interface)) + + def coreReady(self): + requestFactory = self.core.requestFactory + oldGetRequest = requestFactory.getRequest + + def getRequest(pluginName, account=None): + iface = self.bestInterface(pluginName, account) + if iface: + iface.useFor(pluginName, account) + requestFactory.iface = lambda: iface.adress + self.logDebug("Multihome: using address: " + iface.adress) + return oldGetRequest(pluginName, account) + + requestFactory.getRequest = getRequest + + def bestInterface(self, pluginName, account): + best = None + for interface in self.interfaces: + if not best or interface.lastPluginAccess(pluginName, account) < best.lastPluginAccess(pluginName, account): + best = interface + return best + + +class Interface(object): + + def __init__(self, adress): + self.adress = adress + self.history = {} + + def lastPluginAccess(self, pluginName, account): + if (pluginName, account) in self.history: + return self.history[(pluginName, account)] + return 0 + + def useFor(self, pluginName, account): + self.history[(pluginName, account)] = time() + + def __repr__(self): + return "<Interface - %s>" % self.adress diff --git a/pyload/plugins/hooks/MultishareCz.py b/pyload/plugins/hooks/MultishareCz.py new file mode 100644 index 000000000..9e1bd50a4 --- /dev/null +++ b/pyload/plugins/hooks/MultishareCz.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.MultiHoster import MultiHoster + + +class MultishareCz(MultiHoster): + __name__ = "MultishareCz" + __type__ = "hook" + __version__ = "0.04" + + __config__ = [("activated", "bool", "Activated", False), + ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), + ("hosterList", "str", "Hoster list (comma separated)", "uloz.to")] + + __description__ = """MultiShare.cz hook plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + HOSTER_PATTERN = r'<img class="logo-shareserveru"[^>]*?alt="([^"]+)"></td>\s*<td class="stav">[^>]*?alt="OK"' + + + def getHoster(self): + page = getURL("http://www.multishare.cz/monitoring/") + return re.findall(self.HOSTER_PATTERN, page) diff --git a/pyload/plugins/hooks/OverLoadMe.py b/pyload/plugins/hooks/OverLoadMe.py new file mode 100644 index 000000000..a57c7c2b4 --- /dev/null +++ b/pyload/plugins/hooks/OverLoadMe.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- + +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.MultiHoster import MultiHoster + + +class OverLoadMe(MultiHoster): + __name__ = "OverLoadMe" + __type__ = "hook" + __version__ = "0.01" + + __config__ = [("activated", "bool", "Activated", False), + ("https", "bool", "Enable HTTPS", True), + ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"), + ("hosterList", "str", "Hoster list (comma separated)", ""), + ("unloadFailing", "bool", "Revert to standard download if download fails", False), + ("interval", "int", "Reload interval in hours (0 to disable)", 12)] + + __description__ = """Over-Load.me hook plugin""" + __author_name__ = "marley" + __author_mail__ = "marley@over-load.me" + + + def getHoster(self): + https = "https" if self.getConfig("https") else "http" + page = getURL(https + "://api.over-load.me/hoster.php", + get={"auth": "0001-cb1f24dadb3aa487bda5afd3b76298935329be7700cd7-5329be77-00cf-1ca0135f"} + ).replace("\"", "").strip() + self.logDebug("Hosterlist: %s" % page) + + return [x.strip() for x in page.split(",") if x.strip()] diff --git a/pyload/plugins/hooks/Premium4Me.py b/pyload/plugins/hooks/Premium4Me.py new file mode 100644 index 000000000..6841dfa90 --- /dev/null +++ b/pyload/plugins/hooks/Premium4Me.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- + +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.MultiHoster import MultiHoster + + +class Premium4Me(MultiHoster): + __name__ = "Premium4Me" + __type__ = "hook" + __version__ = "0.03" + + __config__ = [("activated", "bool", "Activated", False), + ("hosterListMode", "all;listed;unlisted", "Use for downloads from supported hosters:", "all"), + ("hosterList", "str", "Hoster list (comma separated)", "")] + + __description__ = """Premium.to hook plugin""" + __author_name__ = ("RaNaN", "zoidberg", "stickell") + __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz", "l.stickell@yahoo.it") + + + def getHoster(self): + page = getURL("http://premium.to/api/hosters.php?authcode=%s" % self.account.authcode) + return [x.strip() for x in page.replace("\"", "").split(";")] + + def coreReady(self): + self.account = self.core.accountManager.getAccountPlugin("Premium4Me") + + user = self.account.selectAccount()[0] + + if not user: + self.logError(_("Please add your premium.to account first and restart pyLoad")) + return + + return MultiHoster.coreReady(self) diff --git a/pyload/plugins/hooks/PremiumizeMe.py b/pyload/plugins/hooks/PremiumizeMe.py new file mode 100644 index 000000000..70bc4a0f2 --- /dev/null +++ b/pyload/plugins/hooks/PremiumizeMe.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- + +from pyload.common.json_layer import json_loads +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.MultiHoster import MultiHoster + + +class PremiumizeMe(MultiHoster): + __name__ = "PremiumizeMe" + __type__ = "hook" + __version__ = "0.12" + + __config__ = [("activated", "bool", "Activated", False), + ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"), + ("hosterList", "str", "Hoster list (comma separated)", ""), + ("unloadFailing", "bool", "Revert to stanard download if download fails", False), + ("interval", "int", "Reload interval in hours (0 to disable)", 24)] + + __description__ = """Premiumize.me hook plugin""" + __author_name__ = "Florian Franzen" + __author_mail__ = "FlorianFranzen@gmail.com" + + + def getHoster(self): + # If no accounts are available there will be no hosters available + if not self.account or not self.account.canUse(): + return [] + + # Get account data + (user, data) = self.account.selectAccount() + + # Get supported hosters list from premiumize.me using the + # json API v1 (see https://secure.premiumize.me/?show=api) + answer = getURL("https://api.premiumize.me/pm-api/v1.php?method=hosterlist¶ms[login]=%s¶ms[pass]=%s" % ( + user, data['password'])) + data = json_loads(answer) + + # If account is not valid thera are no hosters available + if data['status'] != 200: + return [] + + # Extract hosters from json file + return data['result']['hosterlist'] + + def coreReady(self): + # Get account plugin and check if there is a valid account available + self.account = self.core.accountManager.getAccountPlugin("PremiumizeMe") + if not self.account.canUse(): + self.account = None + self.logError(_("Please add a valid premiumize.me account first and restart pyLoad.")) + return + + # Run the overwriten core ready which actually enables the multihoster hook + return MultiHoster.coreReady(self) diff --git a/pyload/plugins/hooks/RPNetBiz.py b/pyload/plugins/hooks/RPNetBiz.py new file mode 100644 index 000000000..e119e6451 --- /dev/null +++ b/pyload/plugins/hooks/RPNetBiz.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- + +from pyload.common.json_layer import json_loads +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.MultiHoster import MultiHoster + + +class RPNetBiz(MultiHoster): + __name__ = "RPNetBiz" + __type__ = "hook" + __version__ = "0.1" + + __config__ = [("activated", "bool", "Activated", False), + ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"), + ("hosterList", "str", "Hoster list (comma separated)", ""), + ("unloadFailing", "bool", "Revert to stanard download if download fails", False), + ("interval", "int", "Reload interval in hours (0 to disable)", 24)] + + __description__ = """RPNet.biz hook plugin""" + __author_name__ = "Dman" + __author_mail__ = "dmanugm@gmail.com" + + + def getHoster(self): + # No hosts supported if no account + if not self.account or not self.account.canUse(): + return [] + + # Get account data + (user, data) = self.account.selectAccount() + + response = getURL("https://premium.rpnet.biz/client_api.php", + get={"username": user, "password": data['password'], "action": "showHosterList"}) + hoster_list = json_loads(response) + + # If account is not valid thera are no hosters available + if 'error' in hoster_list: + return [] + + # Extract hosters from json file + return hoster_list['hosters'] + + def coreReady(self): + # Get account plugin and check if there is a valid account available + self.account = self.core.accountManager.getAccountPlugin("RPNetBiz") + if not self.account.canUse(): + self.account = None + self.logError(_("Please enter your %s account or deactivate this plugin") % "rpnet") + return + + # Run the overwriten core ready which actually enables the multihoster hook + return MultiHoster.coreReady(self) diff --git a/pyload/plugins/hooks/RealdebridCom.py b/pyload/plugins/hooks/RealdebridCom.py new file mode 100644 index 000000000..c1c519ace --- /dev/null +++ b/pyload/plugins/hooks/RealdebridCom.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- + +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.MultiHoster import MultiHoster + + +class RealdebridCom(MultiHoster): + __name__ = "RealdebridCom" + __type__ = "hook" + __version__ = "0.43" + + __config__ = [("activated", "bool", "Activated", False), + ("https", "bool", "Enable HTTPS", False), + ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"), + ("hosterList", "str", "Hoster list (comma separated)", ""), + ("unloadFailing", "bool", "Revert to stanard download if download fails", False), + ("interval", "int", "Reload interval in hours (0 to disable)", 24)] + + __description__ = """Real-Debrid.com hook plugin""" + __author_name__ = "Devirex Hazzard" + __author_mail__ = "naibaf_11@yahoo.de" + + + def getHoster(self): + https = "https" if self.getConfig("https") else "http" + page = getURL(https + "://real-debrid.com/api/hosters.php").replace("\"", "").strip() + + return [x.strip() for x in page.split(",") if x.strip()] diff --git a/pyload/plugins/hooks/RehostTo.py b/pyload/plugins/hooks/RehostTo.py new file mode 100644 index 000000000..097ebc646 --- /dev/null +++ b/pyload/plugins/hooks/RehostTo.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- + +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.MultiHoster import MultiHoster + + +class RehostTo(MultiHoster): + __name__ = "RehostTo" + __type__ = "hook" + __version__ = "0.43" + + __config__ = [("activated", "bool", "Activated", False), + ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), + ("hosterList", "str", "Hoster list (comma separated)", ""), + ("unloadFailing", "bool", "Revert to stanard download if download fails", False), + ("interval", "int", "Reload interval in hours (0 to disable)", 24)] + + __description__ = """Rehost.to hook plugin""" + __author_name__ = "RaNaN" + __author_mail__ = "RaNaN@pyload.org" + + + def getHoster(self): + page = getURL("http://rehost.to/api.php?cmd=get_supported_och_dl&long_ses=%s" % self.long_ses) + return [x.strip() for x in page.replace("\"", "").split(",")] + + def coreReady(self): + self.account = self.core.accountManager.getAccountPlugin("RehostTo") + + user = self.account.selectAccount()[0] + + if not user: + self.logError("Rehost.to: " + _("Please add your rehost.to account first and restart pyLoad")) + return + + data = self.account.getAccountInfo(user) + self.ses = data['ses'] + self.long_ses = data['long_ses'] + + return MultiHoster.coreReady(self) diff --git a/pyload/plugins/hooks/RestartFailed.py b/pyload/plugins/hooks/RestartFailed.py new file mode 100644 index 000000000..a50ab60a4 --- /dev/null +++ b/pyload/plugins/hooks/RestartFailed.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Hook import Hook + + +class RestartFailed(Hook): + __name__ = "RestartFailed" + __type__ = "hook" + __version__ = "1.55" + + __config__ = [("activated", "bool", "Activated", False), + ("interval", "int", "Check interval in minutes", 90)] + + __description__ = """Periodically restart all failed downloads in queue""" + __author_name__ = "Walter Purcaro" + __author_mail__ = "vuolter@gmail.com" + + MIN_INTERVAL = 15 * 60 #: 15m minimum check interval (value is in seconds) + + event_list = ["pluginConfigChanged"] + + + def pluginConfigChanged(self, plugin, name, value): + if name == "interval": + interval = value * 60 + if self.MIN_INTERVAL <= interval != self.interval: + self.core.scheduler.removeJob(self.cb) + self.interval = interval + self.initPeriodical() + else: + self.logDebug("Invalid interval value, kept current") + + def periodical(self): + self.logInfo("Restart failed downloads") + self.api.restartFailed() + + def setup(self): + self.api = self.core.api + self.interval = self.MIN_INTERVAL + + def coreReady(self): + self.pluginConfigChanged(self.__name__, "interval", self.getConfig("interval")) diff --git a/pyload/plugins/hooks/SimplyPremiumCom.py b/pyload/plugins/hooks/SimplyPremiumCom.py new file mode 100644 index 000000000..8e9bc5e1e --- /dev/null +++ b/pyload/plugins/hooks/SimplyPremiumCom.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- + +from pyload.common.json_layer import json_loads +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.MultiHoster import MultiHoster + + +class SimplyPremiumCom(MultiHoster): + __name__ = "SimplyPremiumCom" + __type__ = "hook" + __version__ = "0.02" + + __config__ = [("activated", "bool", "Activated", "False"), + ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), + ("hosterList", "str", "Hoster list (comma separated)", ""), + ("unloadFailing", "bool", "Revert to standard download if download fails", "False"), + ("interval", "int", "Reload interval in hours (0 to disable)", "24")] + + __description__ = """Simply-Premium.com hook plugin""" + __author_name__ = "EvolutionClip" + __author_mail__ = "evolutionclip@live.de" + + + def getHoster(self): + json_data = getURL('http://www.simply-premium.com/api/hosts.php?format=json&online=1') + json_data = json_loads(json_data) + + host_list = [element['regex'] for element in json_data['result']] + + return host_list diff --git a/pyload/plugins/hooks/SimplydebridCom.py b/pyload/plugins/hooks/SimplydebridCom.py new file mode 100644 index 000000000..f7c899a48 --- /dev/null +++ b/pyload/plugins/hooks/SimplydebridCom.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- + +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.MultiHoster import MultiHoster + + +class SimplydebridCom(MultiHoster): + __name__ = "SimplydebridCom" + __type__ = "hook" + __version__ = "0.01" + + __config__ = [("activated", "bool", "Activated", False), + ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), + ("hosterList", "str", "Hoster list (comma separated)", "")] + + __description__ = """Simply-Debrid.com hook plugin""" + __author_name__ = "Kagenoshin" + __author_mail__ = "kagenoshin@gmx.ch" + + + def getHoster(self): + page = getURL("http://simply-debrid.com/api.php?list=1") + return [x.strip() for x in page.rstrip(';').replace("\"", "").split(";")] diff --git a/pyload/plugins/hooks/UnSkipOnFail.py b/pyload/plugins/hooks/UnSkipOnFail.py new file mode 100644 index 000000000..fd3b35a0a --- /dev/null +++ b/pyload/plugins/hooks/UnSkipOnFail.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- + +from os.path import basename + +from pyload.PyFile import PyFile +from pyload.plugins.Hook import Hook +from pyload.utils import fs_encode + + +class UnSkipOnFail(Hook): + __name__ = "UnSkipOnFail" + __type__ = "hook" + __version__ = "0.01" + + __config__ = [("activated", "bool", "Activated", True)] + + __description__ = """When a download fails, restart skipped duplicates""" + __author_name__ = "hagg" + __author_mail__ = None + + + def downloadFailed(self, pyfile): + pyfile_name = basename(pyfile.name) + pid = pyfile.package().id + msg = 'look for skipped duplicates for %s (pid:%s)...' + self.logInfo(msg % (pyfile_name, pid)) + dups = self.findDuplicates(pyfile) + for link in dups: + # check if link is "skipped"(=4) + if link.status == 4: + lpid = link.packageID + self.logInfo('restart "%s" (pid:%s)...' % (pyfile_name, lpid)) + self.setLinkStatus(link, "queued") + + def findDuplicates(self, pyfile): + """ Search all packages for duplicate links to "pyfile". + Duplicates are links that would overwrite "pyfile". + To test on duplicity the package-folder and link-name + of twolinks are compared (basename(link.name)). + So this method returns a list of all links with equal + package-folders and filenames as "pyfile", but except + the data for "pyfile" iotselöf. + It does MOT check the link's status. + """ + dups = [] + pyfile_name = fs_encode(basename(pyfile.name)) + # get packages (w/o files, as most file data is useless here) + queue = self.core.api.getQueue() + for package in queue: + # check if package-folder equals pyfile's package folder + if fs_encode(package.folder) == fs_encode(pyfile.package().folder): + # now get packaged data w/ files/links + pdata = self.core.api.getPackageData(package.pid) + if pdata.links: + for link in pdata.links: + link_name = fs_encode(basename(link.name)) + # check if link name collides with pdata's name + if link_name == pyfile_name: + # at last check if it is not pyfile itself + if link.fid != pyfile.id: + dups.append(link) + return dups + + def setLinkStatus(self, link, new_status): + """ Change status of "link" to "new_status". + "link" has to be a valid FileData object, + "new_status" has to be a valid status name + (i.e. "queued" for this Plugin) + It creates a temporary PyFile object using + "link" data, changes its status, and tells + the core.files-manager to save its data. + """ + pyfile = PyFile(self.core.files, + link.fid, + link.url, + link.name, + link.size, + link.status, + link.error, + link.plugin, + link.packageID, + link.order) + pyfile.setStatus(new_status) + self.core.files.save() + pyfile.release() diff --git a/pyload/plugins/hooks/UnrestrictLi.py b/pyload/plugins/hooks/UnrestrictLi.py new file mode 100644 index 000000000..1562bdf24 --- /dev/null +++ b/pyload/plugins/hooks/UnrestrictLi.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- + +from pyload.common.json_layer import json_loads +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.MultiHoster import MultiHoster + + +class UnrestrictLi(MultiHoster): + __name__ = "UnrestrictLi" + __type__ = "hook" + __version__ = "0.02" + + __config__ = [("activated", "bool", "Activated", False), + ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), + ("hosterList", "str", "Hoster list (comma separated)", ""), + ("unloadFailing", "bool", "Revert to standard download if download fails", False), + ("interval", "int", "Reload interval in hours (0 to disable)", 24), + ("history", "bool", "Delete History", False)] + + __description__ = """Unrestrict.li hook plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + + def getHoster(self): + json_data = getURL('http://unrestrict.li/api/jdownloader/hosts.php?format=json') + json_data = json_loads(json_data) + + host_list = [element['host'] for element in json_data['result']] + + return host_list diff --git a/pyload/plugins/hooks/UpdateManager.py b/pyload/plugins/hooks/UpdateManager.py new file mode 100644 index 000000000..ece7ca610 --- /dev/null +++ b/pyload/plugins/hooks/UpdateManager.py @@ -0,0 +1,281 @@ +# -*- coding: utf-8 -*- + +import re +import sys + +from operator import itemgetter +from os import path, remove, stat + +from pyload.network.RequestFactory import getURL +from pyload.plugins.Hook import Expose, Hook, threaded +from pyload.utils import safe_join + + +class UpdateManager(Hook): + __name__ = "UpdateManager" + __type__ = "hook" + __version__ = "0.35" + + __config__ = [("activated", "bool", "Activated", True), + ("mode", "pyLoad + plugins;plugins only", "Check updates for", "pyLoad + plugins"), + ("interval", "int", "Check interval in hours", 8), + ("reloadplugins", "bool", "Monitor plugins for code changes (debug mode only)", True), + ("nodebugupdate", "bool", "Don't check for updates in debug mode", True)] + + __description__ = """ Check for updates """ + __author_name__ = "Walter Purcaro" + __author_mail__ = "vuolter@gmail.com" + + + event_list = ["pluginConfigChanged"] + + SERVER_URL = "http://updatemanager.pyload.org" + MIN_INTERVAL = 3 * 60 * 60 #: 3h minimum check interval (value is in seconds) + + + def pluginConfigChanged(self, plugin, name, value): + if name == "interval": + interval = value * 60 * 60 + if self.MIN_INTERVAL <= interval != self.interval: + self.core.scheduler.removeJob(self.cb) + self.interval = interval + self.initPeriodical() + else: + self.logDebug("Invalid interval value, kept current") + elif name == "reloadplugins": + if self.cb2: + self.core.scheduler.removeJob(self.cb2) + if value is True and self.core.debug: + self.periodical2() + + def coreReady(self): + self.pluginConfigChanged(self.__name__, "interval", self.getConfig("interval")) + x = lambda: self.pluginConfigChanged(self.__name__, "reloadplugins", self.getConfig("reloadplugins")) + self.core.scheduler.addJob(10, x, threaded=False) + + def unload(self): + self.pluginConfigChanged(self.__name__, "reloadplugins", False) + + def setup(self): + self.cb2 = None + self.interval = self.MIN_INTERVAL + self.updating = False + self.info = {'pyload': False, 'version': None, 'plugins': False} + self.mtimes = {} #: store modification time for each plugin + + def periodical2(self): + if not self.updating: + self.autoreloadPlugins() + self.cb2 = self.core.scheduler.addJob(4, self.periodical2, threaded=False) + + @Expose + def autoreloadPlugins(self): + """ reload and reindex all modified plugins """ + modules = filter( + lambda m: m and (m.__name__.startswith("pyload.plugins.") or + m.__name__.startswith("userplugins.")) and + m.__name__.count(".") >= 2, sys.modules.itervalues() + ) + + reloads = [] + + for m in modules: + root, type, name = m.__name__.rsplit(".", 2) + id = (type, name) + if type in self.core.pluginManager.plugins: + f = m.__file__.replace(".pyc", ".py") + if not path.isfile(f): + continue + + mtime = stat(f).st_mtime + + if id not in self.mtimes: + self.mtimes[id] = mtime + elif self.mtimes[id] < mtime: + reloads.append(id) + self.mtimes[id] = mtime + + return True if self.core.pluginManager.reloadPlugins(reloads) else False + + def periodical(self): + if not self.info['pyload'] and not (self.getConfig("nodebugupdate") and self.core.debug): + self.updateThread() + + def server_request(self): + try: + return getURL(self.SERVER_URL, get={'v': self.core.api.getServerVersion()}).splitlines() + except: + self.logWarning(_("Unable to contact server to get updates")) + + @threaded + def updateThread(self): + self.updating = True + status = self.update(onlyplugin=self.getConfig("mode") == "plugins only") + if status == 2: + self.core.api.restart() + else: + self.updating = False + + @Expose + def updatePlugins(self): + """ simple wrapper for calling plugin update quickly """ + return self.update(onlyplugin=True) + + @Expose + def update(self, onlyplugin=False): + """ check for updates """ + data = self.server_request() + if not data: + exitcode = 0 + elif data[0] == "None": + self.logInfo(_("No new pyLoad version available")) + updates = data[1:] + exitcode = self._updatePlugins(updates) + elif onlyplugin: + exitcode = 0 + else: + newversion = data[0] + self.logInfo(_("*** New pyLoad Version %s available ***") % newversion) + self.logInfo(_("*** Get it here: https://github.com/pyload/pyload/releases ***")) + exitcode = 3 + self.info['pyload'] = True + self.info['version'] = newversion + return exitcode #: 0 = No plugins updated; 1 = Plugins updated; 2 = Plugins updated, but restart required; 3 = No plugins updated, new pyLoad version available + + def _updatePlugins(self, updates): + """ check for plugin updates """ + + if self.info['plugins']: + return False #: plugins were already updated + + updated = [] + + vre = re.compile(r'__version__.*=.*("|\')([0-9.]+)') + url = updates[0] + schema = updates[1].split('|') + if "BLACKLIST" in updates: + blacklist = updates[updates.index('BLACKLIST') + 1:] + updates = updates[2:updates.index('BLACKLIST')] + else: + blacklist = None + updates = updates[2:] + + upgradable = sorted(map(lambda x: dict(zip(schema, x.split('|'))), updates), key=itemgetter("type", "name")) + for plugin in upgradable: + filename = plugin['name'] + prefix = plugin['type'] + version = plugin['version'] + + if filename.endswith(".pyc"): + name = filename[:filename.find("_")] + else: + name = filename.replace(".py", "") + + #@TODO: obsolete after 0.4.10 + if prefix.endswith("s"): + type = prefix[:-1] + else: + type = prefix + + plugins = getattr(self.core.pluginManager, "%sPlugins" % type) + + oldver = float(plugins[name]['v']) if name in plugins else None + newver = float(version) + + if not oldver: + msg = "New [%(type)s] %(name)s (v%(newver)s)" + elif newver > oldver: + msg = "New version of [%(type)s] %(name)s (v%(oldver)s -> v%(newver)s)" + else: + continue + + self.logInfo(_(msg) % { + 'type': type, + 'name': name, + 'oldver': oldver, + 'newver': newver, + }) + + try: + content = getURL(url % plugin) + m = vre.search(content) + if m and m.group(2) == version: + f = open(safe_join("userplugins", prefix, filename), "wb") + f.write(content) + f.close() + updated.append((prefix, name)) + else: + raise Exception, _("Version mismatch") + except Exception, e: + self.logError(_("Error updating plugin %s") % filename, str(e)) + + if blacklist: + blacklisted = sorted(map(lambda x: (x.split('|')[0], x.split('|')[1].rsplit('.', 1)[0]), blacklist)) + + # Always protect UpdateManager from self-removing + try: + blacklisted.remove(("hook", "UpdateManager")) + except: + pass + + removed = self.removePlugins(blacklisted) + for t, n in removed: + self.logInfo(_("Removed blacklisted plugin [%(type)s] %(name)s") % { + 'type': t, + 'name': n, + }) + + if updated: + reloaded = self.core.pluginManager.reloadPlugins(updated) + if reloaded: + self.logInfo(_("Plugins updated and reloaded")) + exitcode = 1 + else: + self.logInfo(_("*** Plugins have been updated, but need a pyLoad restart to be reloaded ***")) + self.info['plugins'] = True + exitcode = 2 + else: + self.logInfo(_("No plugin updates available")) + exitcode = 0 + + return exitcode #: 0 = No plugins updated; 1 = Plugins updated; 2 = Plugins updated, but restart required + + @Expose + def removePlugins(self, type_plugins): + """ delete plugins from disk """ + + if not type_plugins: + return + + self.logDebug("Request deletion of plugins: %s" % type_plugins) + + removed = [] + + for type, name in type_plugins: + err = False + file = name + ".py" + + for root in ("userplugins", path.join(pypath, "pyload", "plugins")): + + filename = safe_join(root, type, file) + try: + remove(filename) + except Exception, e: + self.logDebug("Error deleting \"%s\"" % path.basename(filename), str(e)) + err = True + + filename += "c" + if path.isfile(filename): + try: + if type == "hook": + self.manager.deactivateHook(name) + remove(filename) + except Exception, e: + self.logDebug("Error deleting \"%s\"" % path.basename(filename), str(e)) + err = True + + if not err: + id = (type, name) + removed.append(id) + + return removed #: return a list of the plugins successfully removed diff --git a/pyload/plugins/hooks/WindowsPhoneToastNotify.py b/pyload/plugins/hooks/WindowsPhoneToastNotify.py new file mode 100644 index 000000000..79812cefa --- /dev/null +++ b/pyload/plugins/hooks/WindowsPhoneToastNotify.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- + +import httplib +import time + +from pyload.plugins.Hook import Hook + + +class WindowsPhoneToastNotify(Hook): + __name__ = "WindowsPhoneToastNotify" + __type__ = "hook" + __version__ = "0.02" + + __config__ = [("activated", "bool", "Activated", False), + ("force", "bool", "Force even if client is connected", False), + ("pushId", "str", "pushId", ""), + ("pushUrl", "str", "pushUrl", ""), + ("pushTimeout", "int", "Timeout between notifications in seconds", 0)] + + __description__ = """Send push notifications to Windows Phone""" + __author_name__ = "Andy Voigt" + __author_mail__ = "phone-support@hotmail.de" + + + def setup(self): + self.info = {} + + def getXmlData(self): + myxml = ("<?xml version='1.0' encoding='utf-8'?> <wp:Notification xmlns:wp='WPNotification'> " + "<wp:Toast> <wp:Text1>Pyload Mobile</wp:Text1> <wp:Text2>Captcha waiting!</wp:Text2> " + "</wp:Toast> </wp:Notification>") + return myxml + + def doRequest(self): + URL = self.getConfig("pushUrl") + request = self.getXmlData() + webservice = httplib.HTTP(URL) + webservice.putrequest("POST", self.getConfig("pushId")) + webservice.putheader("Host", URL) + webservice.putheader("Content-type", "text/xml") + webservice.putheader("X-NotificationClass", "2") + webservice.putheader("X-WindowsPhone-Target", "toast") + webservice.putheader("Content-length", "%d" % len(request)) + webservice.endheaders() + webservice.send(request) + webservice.close() + self.setStorage("LAST_NOTIFY", time.time()) + + def newCaptchaTask(self, task): + if not self.getConfig("pushId") or not self.getConfig("pushUrl"): + return False + + if self.core.isClientConnected() and not self.getConfig("force"): + return False + + if (time.time() - float(self.getStorage("LAST_NOTIFY", 0))) < self.getConf("pushTimeout"): + return False + + self.doRequest() diff --git a/pyload/plugins/hooks/XFileSharingPro.py b/pyload/plugins/hooks/XFileSharingPro.py new file mode 100644 index 000000000..7478034c6 --- /dev/null +++ b/pyload/plugins/hooks/XFileSharingPro.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.Hook import Hook + + +class XFileSharingPro(Hook): + __name__ = "XFileSharingPro" + __type__ = "hook" + __version__ = "0.11" + + __config__ = [("activated", "bool", "Activated", True), + ("loadDefault", "bool", "Include default (built-in) hoster list", True), + ("includeList", "str", "Include hosters (comma separated)", ""), + ("excludeList", "str", "Exclude hosters (comma separated)", "")] + + __description__ = """XFileSharingPro hook plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + + def coreReady(self): + self.loadPattern() + + def loadPattern(self): + hosterList = self.getConfigSet('includeList') + excludeList = self.getConfigSet('excludeList') + + if self.getConfig('loadDefault'): + hosterList |= set(( + #WORKING HOSTERS: + "aieshare.com", "asixfiles.com", "banashare.com", "cyberlocker.ch", "eyesfile.co", "eyesfile.com", + "fileband.com", "filedwon.com", "filedownloads.org", "hipfile.com", "kingsupload.com", "mlfat4arab.com", + "netuploaded.com", "odsiebie.pl", "q4share.com", "ravishare.com", "uptobox.com", "verzend.be", + "xvidstage.com", "thefile.me", "sharesix.com", "hostingbulk.com", + #NOT TESTED: + "bebasupload.com", "boosterking.com", "divxme.com", "filevelocity.com", "glumbouploads.com", + "grupload.com", "heftyfile.com", "host4desi.com", "laoupload.com", "linkzhost.com", "movreel.com", + "rockdizfile.com", "limfile.com", "share76.com", "sharebeast.com", "sharehut.com", "sharerun.com", + "shareswift.com", "sharingonline.com", "6ybh-upload.com", "skipfile.com", "spaadyshare.com", + "space4file.com", "uploadbaz.com", "uploadc.com", "uploaddot.com", "uploadfloor.com", "uploadic.com", + "uploadville.com", "vidbull.com", "zalaa.com", "zomgupload.com", "kupload.org", "movbay.org", + "multishare.org", "omegave.org", "toucansharing.org", "uflinq.org", "banicrazy.info", "flowhot.info", + "upbrasil.info", "shareyourfilez.biz", "bzlink.us", "cloudcache.cc", "fileserver.cc", "farshare.to", + "filemaze.ws", "filehost.ws", "filestock.ru", "moidisk.ru", "4up.im", "100shared.com", "sharesix.com", + "thefile.me", "filenuke.com", "sharerepo.com", "mightyupload.com", + #WRONG FILE NAME: + "sendmyway.com", "upchi.co.il", + #NOT WORKING: + "amonshare.com", "imageporter.com", "file4safe.com", + #DOWN OR BROKEN: + "ddlanime.com", "fileforth.com", "loombo.com", "goldfile.eu", "putshare.com" + )) + + hosterList -= (excludeList) + hosterList -= set(('', u'')) + + if not hosterList: + self.unload() + return + + regexp = r"http://(?:[^/]*\.)?(%s)/\w{12}" % ("|".join(sorted(hosterList)).replace('.', '\.')) + #self.logDebug(regexp) + + dict = self.core.pluginManager.hosterPlugins['XFileSharingPro'] + dict['pattern'] = regexp + dict['re'] = re.compile(regexp) + self.logDebug("Pattern loaded - handling %d hosters" % len(hosterList)) + + def getConfigSet(self, option): + s = self.getConfig(option).lower().replace('|', ',').replace(';', ',') + return set([x.strip() for x in s.split(',')]) + + def unload(self): + dict = self.core.pluginManager.hosterPlugins['XFileSharingPro'] + dict['pattern'] = r'^unmatchable$' + dict['re'] = re.compile(r'^unmatchable$') diff --git a/pyload/plugins/hooks/XMPPInterface.py b/pyload/plugins/hooks/XMPPInterface.py new file mode 100644 index 000000000..881e7f5dc --- /dev/null +++ b/pyload/plugins/hooks/XMPPInterface.py @@ -0,0 +1,233 @@ +# -*- coding: utf-8 -*- + +from pyxmpp import streamtls +from pyxmpp.all import JID, Message +from pyxmpp.interface import implements +from pyxmpp.interfaces import * +from pyxmpp.jabber.client import JabberClient + +from pyload.plugins.hooks.IRCInterface import IRCInterface + + +class XMPPInterface(IRCInterface, JabberClient): + __name__ = "XMPPInterface" + __type__ = "hook" + __version__ = "0.11" + + __config__ = [("activated", "bool", "Activated", False), + ("jid", "str", "Jabber ID", "user@exmaple-jabber-server.org"), + ("pw", "str", "Password", ""), + ("tls", "bool", "Use TLS", False), + ("owners", "str", "List of JIDs accepting commands from", "me@icq-gateway.org;some@msn-gateway.org"), + ("info_file", "bool", "Inform about every file finished", False), + ("info_pack", "bool", "Inform about every package finished", True), + ("captcha", "bool", "Send captcha requests", True)] + + __description__ = """Connect to jabber and let owner perform different tasks""" + __author_name__ = "RaNaN" + __author_mail__ = "RaNaN@pyload.org" + + + implements(IMessageHandlersProvider) + + def __init__(self, core, manager): + IRCInterface.__init__(self, core, manager) + + self.jid = JID(self.getConfig("jid")) + password = self.getConfig("pw") + + # if bare JID is provided add a resource -- it is required + if not self.jid.resource: + self.jid = JID(self.jid.node, self.jid.domain, "pyLoad") + + if self.getConfig("tls"): + tls_settings = streamtls.TLSSettings(require=True, verify_peer=False) + auth = ("sasl:PLAIN", "sasl:DIGEST-MD5") + else: + tls_settings = None + auth = ("sasl:DIGEST-MD5", "digest") + + # setup client with provided connection information + # and identity data + JabberClient.__init__(self, self.jid, password, + disco_name="pyLoad XMPP Client", disco_type="bot", + tls_settings=tls_settings, auth_methods=auth) + + self.interface_providers = [ + VersionHandler(self), + self, + ] + + def coreReady(self): + self.new_package = {} + + self.start() + + def packageFinished(self, pypack): + try: + if self.getConfig("info_pack"): + self.announce(_("Package finished: %s") % pypack.name) + except: + pass + + def downloadFinished(self, pyfile): + try: + if self.getConfig("info_file"): + self.announce( + _("Download finished: %(name)s @ %(plugin)s") % {"name": pyfile.name, "plugin": pyfile.pluginname}) + except: + pass + + def run(self): + # connect to IRC etc. + self.connect() + try: + self.loop() + except Exception, ex: + self.logError("pyLoad XMPP: %s" % str(ex)) + + def stream_state_changed(self, state, arg): + """This one is called when the state of stream connecting the component + to a server changes. This will usually be used to let the user + know what is going on.""" + self.logDebug("pyLoad XMPP: *** State changed: %s %r ***" % (state, arg)) + + def disconnected(self): + self.logDebug("pyLoad XMPP: Client was disconnected") + + def stream_closed(self, stream): + self.logDebug("pyLoad XMPP: Stream was closed | %s" % stream) + + def stream_error(self, err): + self.logDebug("pyLoad XMPP: Stream Error: %s" % err) + + def get_message_handlers(self): + """Return list of (message_type, message_handler) tuples. + + The handlers returned will be called when matching message is received + in a client session.""" + return [("normal", self.message)] + + def message(self, stanza): + """Message handler for the component.""" + subject = stanza.get_subject() + body = stanza.get_body() + t = stanza.get_type() + self.logDebug(u'pyLoad XMPP: Message from %s received.' % (unicode(stanza.get_from(),))) + self.logDebug(u'pyLoad XMPP: Body: %s Subject: %s Type: %s' % (body, subject, t)) + + if t == "headline": + # 'headline' messages should never be replied to + return True + if subject: + subject = u"Re: " + subject + + to_jid = stanza.get_from() + from_jid = stanza.get_to() + + #j = JID() + to_name = to_jid.as_utf8() + from_name = from_jid.as_utf8() + + names = self.getConfig("owners").split(";") + + if to_name in names or to_jid.node + "@" + to_jid.domain in names: + messages = [] + + trigger = "pass" + args = None + + try: + temp = body.split() + trigger = temp[0] + if len(temp) > 1: + args = temp[1:] + except: + pass + + handler = getattr(self, "event_%s" % trigger, self.event_pass) + try: + res = handler(args) + for line in res: + m = Message( + to_jid=to_jid, + from_jid=from_jid, + stanza_type=stanza.get_type(), + subject=subject, + body=line) + + messages.append(m) + except Exception, e: + self.logError("pyLoad XMPP: " + repr(e)) + + return messages + + else: + return True + + def response(self, msg, origin=""): + return self.announce(msg) + + def announce(self, message): + """ send message to all owners""" + for user in self.getConfig("owners").split(";"): + self.logDebug("pyLoad XMPP: Send message to %s" % user) + + to_jid = JID(user) + + m = Message(from_jid=self.jid, + to_jid=to_jid, + stanza_type="chat", + body=message) + + stream = self.get_stream() + if not stream: + self.connect() + stream = self.get_stream() + + stream.send(m) + + def beforeReconnecting(self, ip): + self.disconnect() + + def afterReconnecting(self, ip): + self.connect() + + +class VersionHandler(object): + """Provides handler for a version query. + + This class will answer version query and announce 'jabber:iq:version' namespace + in the client's disco#info results.""" + + implements(IIqHandlersProvider, IFeaturesProvider) + + def __init__(self, client): + """Just remember who created this.""" + self.client = client + + def get_features(self): + """Return namespace which should the client include in its reply to a + disco#info query.""" + return ["jabber:iq:version"] + + def get_iq_get_handlers(self): + """Return list of tuples (element_name, namespace, handler) describing + handlers of <iq type='get'/> stanzas""" + return [("query", "jabber:iq:version", self.get_version)] + + def get_iq_set_handlers(self): + """Return empty list, as this class provides no <iq type='set'/> stanza handler.""" + return [] + + def get_version(self, iq): + """Handler for jabber:iq:version queries. + + jabber:iq:version queries are not supported directly by PyXMPP, so the + XML node is accessed directly through the libxml2 API. This should be + used very carefully!""" + iq = iq.make_result_response() + q = iq.new_query("jabber:iq:version") + q.newTextChild(q.ns(), "name", "Echo component") + q.newTextChild(q.ns(), "version", "1.0") + return iq diff --git a/pyload/plugins/hooks/ZeveraCom.py b/pyload/plugins/hooks/ZeveraCom.py new file mode 100644 index 000000000..155143f64 --- /dev/null +++ b/pyload/plugins/hooks/ZeveraCom.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- + +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.MultiHoster import MultiHoster + + +class ZeveraCom(MultiHoster): + __name__ = "ZeveraCom" + __type__ = "hook" + __version__ = "0.02" + + __config__ = [("activated", "bool", "Activated", False), + ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"), + ("hosterList", "str", "Hoster list (comma separated)", "")] + + __description__ = """Real-Debrid.com hook plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + + def getHoster(self): + page = getURL("http://www.zevera.com/jDownloader.ashx?cmd=gethosters") + return [x.strip() for x in page.replace("\"", "").split(",")] diff --git a/module/plugins/hooks/__init__.py b/pyload/plugins/hooks/__init__.py index e69de29bb..e69de29bb 100644 --- a/module/plugins/hooks/__init__.py +++ b/pyload/plugins/hooks/__init__.py diff --git a/pyload/plugins/hoster/AlldebridCom.py b/pyload/plugins/hoster/AlldebridCom.py new file mode 100644 index 000000000..1b115f19e --- /dev/null +++ b/pyload/plugins/hoster/AlldebridCom.py @@ -0,0 +1,87 @@ +# -*- coding: utf-8 -*- + +import re + +from random import randrange +from urllib import unquote + +from pyload.common.json_layer import json_loads +from pyload.plugins.Hoster import Hoster +from pyload.utils import parseFileSize + + +class AlldebridCom(Hoster): + __name__ = "AlldebridCom" + __type__ = "hoster" + __version__ = "0.34" + + __pattern__ = r'https?://(?:[^/]*\.)?alldebrid\..*' + + __description__ = """Alldebrid.com hoster plugin""" + __author_name__ = "Andy Voigt" + __author_mail__ = "spamsales@online.de" + + + def getFilename(self, url): + try: + name = unquote(url.rsplit("/", 1)[1]) + except IndexError: + name = "Unknown_Filename..." + if name.endswith("..."): # incomplete filename, append random stuff + name += "%s.tmp" % randrange(100, 999) + return name + + def setup(self): + self.chunkLimit = 16 + self.resumeDownload = True + + def process(self, pyfile): + if re.match(self.__pattern__, pyfile.url): + new_url = pyfile.url + elif not self.account: + self.logError(_("Please enter your %s account or deactivate this plugin") % "AllDebrid") + self.fail("No AllDebrid account provided") + else: + self.logDebug("Old URL: %s" % pyfile.url) + password = self.getPassword().splitlines() + password = "" if not password else password[0] + + url = "http://www.alldebrid.com/service.php?link=%s&json=true&pw=%s" % (pyfile.url, password) + page = self.load(url) + data = json_loads(page) + + self.logDebug("Json data: %s" % str(data)) + + if data['error']: + if data['error'] == "This link isn't available on the hoster website.": + self.offline() + else: + self.logWarning(data['error']) + self.tempOffline() + else: + if pyfile.name and not pyfile.name.endswith('.tmp'): + pyfile.name = data['filename'] + pyfile.size = parseFileSize(data['filesize']) + new_url = data['link'] + + if self.getConfig("https"): + new_url = new_url.replace("http://", "https://") + else: + new_url = new_url.replace("https://", "http://") + + if new_url != pyfile.url: + self.logDebug("New URL: %s" % new_url) + + if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown"): + #only use when name wasnt already set + pyfile.name = self.getFilename(new_url) + + self.download(new_url, disposition=True) + + check = self.checkDownload({"error": "<title>An error occured while processing your request</title>", + "empty": re.compile(r"^$")}) + + if check == "error": + self.retry(wait_time=60, reason="An error occured while generating link.") + elif check == "empty": + self.retry(wait_time=60, reason="Downloaded File was empty.") diff --git a/pyload/plugins/hoster/BasePlugin.py b/pyload/plugins/hoster/BasePlugin.py new file mode 100644 index 000000000..55cdf5b88 --- /dev/null +++ b/pyload/plugins/hoster/BasePlugin.py @@ -0,0 +1,116 @@ +# -*- coding: utf-8 -*- + +from re import match, search +from urllib import unquote +from urlparse import urlparse + +from pyload.network.HTTPRequest import BadHeader +from pyload.plugins.Hoster import Hoster +from pyload.utils import html_unescape, remove_chars + + +class BasePlugin(Hoster): + __name__ = "BasePlugin" + __type__ = "hoster" + __version__ = "0.20" + + __pattern__ = r'^unmatchable$' + + __description__ = """Base Plugin when any other didnt fit""" + __author_name__ = "RaNaN" + __author_mail__ = "RaNaN@pyload.org" + + + def setup(self): + self.chunkLimit = -1 + self.resumeDownload = True + + def process(self, pyfile): + """main function""" + + #debug part, for api exerciser + if pyfile.url.startswith("DEBUG_API"): + self.multiDL = False + return + + # self.__name__ = "NetloadIn" + # pyfile.name = "test" + # self.html = self.load("http://localhost:9000/short") + # self.download("http://localhost:9000/short") + # self.api = self.load("http://localhost:9000/short") + # self.decryptCaptcha("http://localhost:9000/captcha") + # + # if pyfile.url == "79": + # self.core.api.addPackage("test", [str(i) for i in xrange(80)], 1) + # + # return + if pyfile.url.startswith("http"): + + try: + self.downloadFile(pyfile) + except BadHeader, e: + if e.code in (401, 403): + self.logDebug("Auth required") + + account = self.core.accountManager.getAccountPlugin('Http') + servers = [x['login'] for x in account.getAllAccounts()] + server = urlparse(pyfile.url).netloc + + if server in servers: + self.logDebug("Logging on to %s" % server) + self.req.addAuth(account.accounts[server]['password']) + else: + for pwd in pyfile.package().password.splitlines(): + if ":" in pwd: + self.req.addAuth(pwd.strip()) + break + else: + self.fail(_("Authorization required (username:password)")) + + self.downloadFile(pyfile) + else: + raise + + else: + self.fail("No Plugin matched and not a downloadable url.") + + def downloadFile(self, pyfile): + url = pyfile.url + + for _ in xrange(5): + header = self.load(url, just_header=True) + + # self.load does not raise a BadHeader on 404 responses, do it here + if 'code' in header and header['code'] == 404: + raise BadHeader(404) + + if 'location' in header: + self.logDebug("Location: " + header['location']) + base = match(r'https?://[^/]+', url).group(0) + if header['location'].startswith("http"): + url = header['location'] + elif header['location'].startswith("/"): + url = base + unquote(header['location']) + else: + url = '%s/%s' % (base, unquote(header['location'])) + else: + break + + name = html_unescape(unquote(urlparse(url).path.split("/")[-1])) + + if 'content-disposition' in header: + self.logDebug("Content-Disposition: " + header['content-disposition']) + m = search("filename(?P<type>=|\*=(?P<enc>.+)'')(?P<name>.*)", header['content-disposition']) + if m: + disp = m.groupdict() + self.logDebug(disp) + if not disp['enc']: + disp['enc'] = 'utf-8' + name = remove_chars(disp['name'], "\"';").strip() + name = unicode(unquote(name), disp['enc']) + + if not name: + name = url + pyfile.name = name + self.logDebug("Filename: %s" % pyfile.name) + self.download(url, disposition=True) diff --git a/pyload/plugins/hoster/BayfilesCom.py b/pyload/plugins/hoster/BayfilesCom.py new file mode 100644 index 000000000..ea4bd3ca5 --- /dev/null +++ b/pyload/plugins/hoster/BayfilesCom.py @@ -0,0 +1,84 @@ +# -*- coding: utf-8 -*- + +import re + +from time import time + +from pyload.common.json_layer import json_loads +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class BayfilesCom(SimpleHoster): + __name__ = "BayfilesCom" + __type__ = "hoster" + __version__ = "0.07" + + __pattern__ = r'https?://(?:www\.)?bayfiles\.(com|net)/file/(?P<ID>[a-zA-Z0-9]+/[a-zA-Z0-9]+/[^/]+)' + + __description__ = """Bayfiles.com hoster plugin""" + __author_name__ = ("zoidberg", "Walter Purcaro") + __author_mail__ = ("zoidberg@mujmail.cz", "vuolter@gmail.com") + + FILE_INFO_PATTERN = r'<p title="(?P<N>[^"]+)">[^<]*<strong>(?P<S>[0-9., ]+)(?P<U>[kKMG])i?B</strong></p>' + OFFLINE_PATTERN = r'(<p>The requested file could not be found.</p>|<title>404 Not Found</title>)' + + WAIT_PATTERN = r'>Your IP [0-9.]* has recently downloaded a file\. Upgrade to premium or wait (\d+) minutes\.<' + VARS_PATTERN = r'var vfid = (\d+);\s*var delay = (\d+);' + FREE_LINK_PATTERN = r"javascript:window.location.href = '([^']+)';" + PREMIUM_LINK_PATTERN = r'(?:<a class="highlighted-btn" href="|(?=http://s\d+\.baycdn\.com/dl/))(.*?)"' + + + def handleFree(self): + m = re.search(self.WAIT_PATTERN, self.html) + if m: + self.wait(int(m.group(1)) * 60) + self.retry() + + # Get download token + m = re.search(self.VARS_PATTERN, self.html) + if m is None: + self.parseError('VARS') + vfid, delay = m.groups() + + response = json_loads(self.load('http://bayfiles.com/ajax_download', get={ + "_": time() * 1000, + "action": "startTimer", + "vfid": vfid}, decode=True)) + + if not "token" in response or not response['token']: + self.fail('No token') + + self.wait(int(delay)) + + self.html = self.load('http://bayfiles.com/ajax_download', get={ + "token": response['token'], + "action": "getLink", + "vfid": vfid}) + + # Get final link and download + m = re.search(self.FREE_LINK_PATTERN, self.html) + if m is None: + self.parseError("Free link") + self.startDownload(m.group(1)) + + def handlePremium(self): + m = re.search(self.PREMIUM_LINK_PATTERN, self.html) + if m is None: + self.parseError("Premium link") + self.startDownload(m.group(1)) + + def startDownload(self, url): + self.logDebug("%s URL: %s" % ("Premium" if self.premium else "Free", url)) + self.download(url) + # check download + check = self.checkDownload({ + "waitforfreeslots": re.compile(r"<title>BayFiles</title>"), + "notfound": re.compile(r"<title>404 Not Found</title>") + }) + if check == "waitforfreeslots": + self.retry(30, 5 * 60, "Wait for free slot") + elif check == "notfound": + self.retry(30, 5 * 60, "404 Not found") + + +getInfo = create_getInfo(BayfilesCom) diff --git a/pyload/plugins/hoster/BezvadataCz.py b/pyload/plugins/hoster/BezvadataCz.py new file mode 100644 index 000000000..8b989da67 --- /dev/null +++ b/pyload/plugins/hoster/BezvadataCz.py @@ -0,0 +1,87 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class BezvadataCz(SimpleHoster): + __name__ = "BezvadataCz" + __type__ = "hoster" + __version__ = "0.24" + + __pattern__ = r'http://(?:www\.)?bezvadata.cz/stahnout/.*' + + __description__ = """BezvaData.cz hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_NAME_PATTERN = r'<p><b>Soubor: (?P<N>[^<]+)</b></p>' + FILE_SIZE_PATTERN = r'<li><strong>Velikost:</strong> (?P<S>[^<]+)</li>' + OFFLINE_PATTERN = r'<title>BezvaData \| Soubor nenalezen</title>' + + + def setup(self): + self.multiDL = self.resumeDownload = True + + def handleFree(self): + #download button + m = re.search(r'<a class="stahnoutSoubor".*?href="(.*?)"', self.html) + if m is None: + self.parseError("page1 URL") + url = "http://bezvadata.cz%s" % m.group(1) + + #captcha form + self.html = self.load(url) + self.checkErrors() + for _ in xrange(5): + action, inputs = self.parseHtmlForm('frm-stahnoutFreeForm') + if not inputs: + self.parseError("FreeForm") + + m = re.search(r'<img src="data:image/png;base64,(.*?)"', self.html) + if m is None: + self.parseError("captcha img") + + #captcha image is contained in html page as base64encoded data but decryptCaptcha() expects image url + self.load, proper_load = self.loadcaptcha, self.load + try: + inputs['captcha'] = self.decryptCaptcha(m.group(1), imgtype='png') + finally: + self.load = proper_load + + if '<img src="data:image/png;base64' in self.html: + self.invalidCaptcha() + else: + self.correctCaptcha() + break + else: + self.fail("No valid captcha code entered") + + #download url + self.html = self.load("http://bezvadata.cz%s" % action, post=inputs) + self.checkErrors() + m = re.search(r'<a class="stahnoutSoubor2" href="(.*?)">', self.html) + if m is None: + self.parseError("page2 URL") + url = "http://bezvadata.cz%s" % m.group(1) + self.logDebug("DL URL %s" % url) + + #countdown + m = re.search(r'id="countdown">(\d\d):(\d\d)<', self.html) + wait_time = (int(m.group(1)) * 60 + int(m.group(2)) + 1) if m else 120 + self.wait(wait_time, False) + + self.download(url) + + def checkErrors(self): + if 'images/button-download-disable.png' in self.html: + self.longWait(5 * 60, 24) # parallel dl limit + elif '<div class="infobox' in self.html: + self.tempOffline() + + def loadcaptcha(self, data, *args, **kwargs): + return data.decode("base64") + + +getInfo = create_getInfo(BezvadataCz) diff --git a/pyload/plugins/hoster/BillionuploadsCom.py b/pyload/plugins/hoster/BillionuploadsCom.py new file mode 100644 index 000000000..6c14d103d --- /dev/null +++ b/pyload/plugins/hoster/BillionuploadsCom.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class BillionuploadsCom(XFileSharingPro): + __name__ = "BillionuploadsCom" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?billionuploads.com/\w{12}' + + __description__ = """Billionuploads.com hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + HOSTER_NAME = "billionuploads.com" + + FILE_NAME_PATTERN = r'<b>Filename:</b>(?P<N>.*?)<br>' + FILE_SIZE_PATTERN = r'<b>Size:</b>(?P<S>.*?)<br>' + + +getInfo = create_getInfo(BillionuploadsCom) diff --git a/pyload/plugins/hoster/BitshareCom.py b/pyload/plugins/hoster/BitshareCom.py new file mode 100644 index 000000000..897206f87 --- /dev/null +++ b/pyload/plugins/hoster/BitshareCom.py @@ -0,0 +1,151 @@ +# -*- coding: utf-8 -*- + +from __future__ import with_statement + +import re + +from pyload.plugins.internal.CaptchaService import ReCaptcha +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class BitshareCom(SimpleHoster): + __name__ = "BitshareCom" + __type__ = "hoster" + __version__ = "0.50" + + __pattern__ = r'http://(?:www\.)?bitshare\.com/(files/(?P<id1>[a-zA-Z0-9]+)(/(?P<name>.*?)\.html)?|\?f=(?P<id2>[a-zA-Z0-9]+))' + + __description__ = """Bitshare.com hoster plugin""" + __author_name__ = ("Paul King", "fragonib") + __author_mail__ = ("", "fragonib[AT]yahoo[DOT]es") + + FILE_INFO_PATTERN = r'Downloading (?P<N>.+) - (?P<S>[\d.]+) (?P<U>\w+)</h1>' + OFFLINE_PATTERN = r'(>We are sorry, but the requested file was not found in our database|>Error - File not available<|The file was deleted either by the uploader, inactivity or due to copyright claim)' + + FILE_AJAXID_PATTERN = r'var ajaxdl = "(.*?)";' + CAPTCHA_KEY_PATTERN = r'http://api\.recaptcha\.net/challenge\?k=(.*?) ' + TRAFFIC_USED_UP = r'Your Traffic is used up for today. Upgrade to premium to continue!' + + + def setup(self): + self.req.cj.setCookie(".bitshare.com", "language_selection", "EN") + self.multiDL = self.premium + self.chunkLimit = 1 + + def process(self, pyfile): + if self.premium: + self.account.relogin(self.user) + + self.pyfile = pyfile + + # File id + m = re.match(self.__pattern__, pyfile.url) + self.file_id = max(m.group('id1'), m.group('id2')) + self.logDebug("File id is [%s]" % self.file_id) + + # Load main page + self.html = self.load(pyfile.url, ref=False, decode=True) + + # Check offline + if re.search(self.OFFLINE_PATTERN, self.html): + self.offline() + + # Check Traffic used up + if re.search(self.TRAFFIC_USED_UP, self.html): + self.logInfo("Your Traffic is used up for today") + self.wait(30 * 60, True) + self.retry() + + # File name + m = re.match(self.__pattern__, pyfile.url) + name1 = m.group('name') if m else None + m = re.search(self.FILE_INFO_PATTERN, self.html) + name2 = m.group('N') if m else None + pyfile.name = max(name1, name2) + + # Ajax file id + self.ajaxid = re.search(self.FILE_AJAXID_PATTERN, self.html).group(1) + self.logDebug("File ajax id is [%s]" % self.ajaxid) + + # This may either download our file or forward us to an error page + url = self.getDownloadUrl() + self.logDebug("Downloading file with url [%s]" % url) + self.download(url) + + check = self.checkDownload({"404": ">404 Not Found<", "Error": ">Error occured<"}) + if check == "404": + self.retry(3, 60, 'Error 404') + elif check == "error": + self.retry(5, 5 * 60, "Bitshare host : Error occured") + + def getDownloadUrl(self): + # Return location if direct download is active + if self.premium: + header = self.load(self.pyfile.url, cookies=True, just_header=True) + if 'location' in header: + return header['location'] + + # Get download info + self.logDebug("Getting download info") + response = self.load("http://bitshare.com/files-ajax/" + self.file_id + "/request.html", + post={"request": "generateID", "ajaxid": self.ajaxid}) + self.handleErrors(response, ':') + parts = response.split(":") + filetype = parts[0] + wait = int(parts[1]) + captcha = int(parts[2]) + self.logDebug("Download info [type: '%s', waiting: %d, captcha: %d]" % (filetype, wait, captcha)) + + # Waiting + if wait > 0: + self.logDebug("Waiting %d seconds." % wait) + if wait < 120: + self.wait(wait, False) + else: + self.wait(wait - 55, True) + self.retry() + + # Resolve captcha + if captcha == 1: + self.logDebug("File is captcha protected") + id = re.search(self.CAPTCHA_KEY_PATTERN, self.html).group(1) + # Try up to 3 times + for i in xrange(3): + self.logDebug("Resolving ReCaptcha with key [%s], round %d" % (id, i + 1)) + recaptcha = ReCaptcha(self) + challenge, code = recaptcha.challenge(id) + response = self.load("http://bitshare.com/files-ajax/" + self.file_id + "/request.html", + post={"request": "validateCaptcha", "ajaxid": self.ajaxid, + "recaptcha_challenge_field": challenge, "recaptcha_response_field": code}) + if self.handleCaptchaErrors(response): + break + + # Get download URL + self.logDebug("Getting download url") + response = self.load("http://bitshare.com/files-ajax/" + self.file_id + "/request.html", + post={"request": "getDownloadURL", "ajaxid": self.ajaxid}) + self.handleErrors(response, '#') + url = response.split("#")[-1] + + return url + + def handleErrors(self, response, separator): + self.logDebug("Checking response [%s]" % response) + if "ERROR:Session timed out" in response: + self.retry() + elif "ERROR" in response: + msg = response.split(separator)[-1] + self.fail(msg) + + def handleCaptchaErrors(self, response): + self.logDebug("Result of captcha resolving [%s]" % response) + if "SUCCESS" in response: + self.correctCaptcha() + return True + elif "ERROR:SESSION ERROR" in response: + self.retry() + self.logDebug("Wrong captcha") + self.invalidCaptcha() + + +getInfo = create_getInfo(BitshareCom) diff --git a/pyload/plugins/hoster/BoltsharingCom.py b/pyload/plugins/hoster/BoltsharingCom.py new file mode 100644 index 000000000..196e801e4 --- /dev/null +++ b/pyload/plugins/hoster/BoltsharingCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class BoltsharingCom(DeadHoster): + __name__ = "BoltsharingCom" + __type__ = "hoster" + __version__ = "0.02" + + __pattern__ = r'http://(?:www\.)?boltsharing.com/\w{12}' + + __description__ = """Boltsharing.com hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + +getInfo = create_getInfo(BoltsharingCom) diff --git a/pyload/plugins/hoster/CatShareNet.py b/pyload/plugins/hoster/CatShareNet.py new file mode 100644 index 000000000..415ec2379 --- /dev/null +++ b/pyload/plugins/hoster/CatShareNet.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.CaptchaService import ReCaptcha +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class CatShareNet(SimpleHoster): + __name__ = "CatShareNet" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?catshare.net/\w{16}.*' + + __description__ = """CatShare.net hoster plugin""" + __author_name__ = "z00nx" + __author_mail__ = "z00nx0@gmail.com" + + FILE_INFO_PATTERN = r'<h3 class="pull-left"[^>]+>(?P<N>.*)</h3>\s+<h3 class="pull-right"[^>]+>(?P<S>.*)</h3>' + OFFLINE_PATTERN = r'Podany plik zosta' + + SECONDS_PATTERN = r'var\s+count\s+=\s+(\d+);' + + RECAPTCHA_KEY = "6Lfln9kSAAAAANZ9JtHSOgxUPB9qfDFeLUI_QMEy" + + + def handleFree(self): + m = re.search(self.SECONDS_PATTERN, self.html) + seconds = int(m.group(1)) + self.logDebug("Seconds found", seconds) + self.wait(seconds + 1) + recaptcha = ReCaptcha(self) + challenge, code = recaptcha.challenge(self.RECAPTCHA_KEY) + post_data = {"recaptcha_challenge_field": challenge, "recaptcha_response_field": code} + self.download(self.pyfile.url, post=post_data) + check = self.checkDownload({"html": re.compile("\A<!DOCTYPE html PUBLIC")}) + if check == "html": + self.logDebug("Wrong captcha entered") + self.invalidCaptcha() + self.retry() + + +getInfo = create_getInfo(CatShareNet) diff --git a/pyload/plugins/hoster/CloudzerNet.py b/pyload/plugins/hoster/CloudzerNet.py new file mode 100644 index 000000000..88313acee --- /dev/null +++ b/pyload/plugins/hoster/CloudzerNet.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class CloudzerNet(DeadHoster): + __name__ = "CloudzerNet" + __type__ = "hoster" + __version__ = "0.05" + + __pattern__ = r'https?://(?:www\.)?(cloudzer\.net/file/|clz\.to/(file/)?)\w+' + + __description__ = """Cloudzer.net hoster plugin""" + __author_name__ = ("gs", "z00nx", "stickell") + __author_mail__ = ("I-_-I-_-I@web.de", "z00nx0@gmail.com", "l.stickell@yahoo.it") + + +getInfo = create_getInfo(CloudzerNet) diff --git a/pyload/plugins/hoster/CramitIn.py b/pyload/plugins/hoster/CramitIn.py new file mode 100644 index 000000000..6c5142d96 --- /dev/null +++ b/pyload/plugins/hoster/CramitIn.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class CramitIn(XFileSharingPro): + __name__ = "CramitIn" + __type__ = "hoster" + __version__ = "0.04" + + __pattern__ = r'http://(?:www\.)?cramit.in/\w{12}' + + __description__ = """Cramit.in hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + HOSTER_NAME = "cramit.in" + + FILE_INFO_PATTERN = r'<span class=t2>\s*(?P<N>.*?)</span>.*?<small>\s*\((?P<S>.*?)\)' + LINK_PATTERN = r'href="(http://cramit.in/file_download/.*?)"' + + + def setup(self): + self.resumeDownload = self.multiDL = self.premium + + +getInfo = create_getInfo(CramitIn) diff --git a/pyload/plugins/hoster/CrockoCom.py b/pyload/plugins/hoster/CrockoCom.py new file mode 100644 index 000000000..c1e941553 --- /dev/null +++ b/pyload/plugins/hoster/CrockoCom.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.CaptchaService import ReCaptcha +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class CrockoCom(SimpleHoster): + __name__ = "CrockoCom" + __type__ = "hoster" + __version__ = "0.16" + + __pattern__ = r'http://(?:www\.)?(crocko|easy-share).com/\w+' + + __description__ = """Crocko hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_NAME_PATTERN = r'<span class="fz24">Download:\s*<strong>(?P<N>.*)' + FILE_SIZE_PATTERN = r'<span class="tip1"><span class="inner">(?P<S>[^<]+)</span></span>' + OFFLINE_PATTERN = r"<h1>Sorry,<br />the page you're looking for <br />isn't here.</h1>|File not found" + + CAPTCHA_URL_PATTERN = re.compile(r"u='(/file_contents/captcha/\w+)';\s*w='(\d+)';") + CAPTCHA_KEY_PATTERN = re.compile(r'Recaptcha.create\("([^"]+)"') + + FORM_PATTERN = r'<form method="post" action="([^"]+)">(.*?)</form>' + FORM_INPUT_PATTERN = r'<input[^>]* name="?([^" ]+)"? value="?([^" ]+)"?[^>]*>' + + FILE_NAME_REPLACEMENTS = [(r'<[^>]*>', '')] + + + def handleFree(self): + if "You need Premium membership to download this file." in self.html: + self.fail("You need Premium membership to download this file.") + + for _ in xrange(5): + m = re.search(self.CAPTCHA_URL_PATTERN, self.html) + if m: + url, wait_time = 'http://crocko.com' + m.group(1), m.group(2) + self.wait(wait_time) + self.html = self.load(url) + else: + break + + m = re.search(self.CAPTCHA_KEY_PATTERN, self.html) + if m is None: + self.parseError('Captcha KEY') + captcha_key = m.group(1) + + m = re.search(self.FORM_PATTERN, self.html, re.DOTALL) + if m is None: + self.parseError('ACTION') + action, form = m.groups() + inputs = dict(re.findall(self.FORM_INPUT_PATTERN, form)) + + recaptcha = ReCaptcha(self) + + for _ in xrange(5): + inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge(captcha_key) + self.download(action, post=inputs) + + check = self.checkDownload({ + "captcha_err": self.CAPTCHA_KEY_PATTERN + }) + + if check == "captcha_err": + self.invalidCaptcha() + else: + break + else: + self.fail('No valid captcha solution received') + + +getInfo = create_getInfo(CrockoCom) diff --git a/pyload/plugins/hoster/CyberlockerCh.py b/pyload/plugins/hoster/CyberlockerCh.py new file mode 100644 index 000000000..7c97deedb --- /dev/null +++ b/pyload/plugins/hoster/CyberlockerCh.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class CyberlockerCh(DeadHoster): + __name__ = "CyberlockerCh" + __type__ = "hoster" + __version__ = "0.02" + + __pattern__ = r'http://(?:www\.)?cyberlocker\.ch/\w+' + + __description__ = """Cyberlocker.ch hoster plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + +getInfo = create_getInfo(CyberlockerCh) diff --git a/pyload/plugins/hoster/CzshareCom.py b/pyload/plugins/hoster/CzshareCom.py new file mode 100644 index 000000000..0e6fab15a --- /dev/null +++ b/pyload/plugins/hoster/CzshareCom.py @@ -0,0 +1,148 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# http://czshare.com/5278880/random.bin + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo +from pyload.utils import parseFileSize + + +class CzshareCom(SimpleHoster): + __name__ = "CzshareCom" + __type__ = "hoster" + __version__ = "0.94" + + __pattern__ = r'http://(?:www\.)?(czshare|sdilej)\.(com|cz)/(\d+/|download.php\?).*' + + __description__ = """CZshare.com hoster plugin, now Sdilej.cz""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_NAME_PATTERN = r'<div class="tab" id="parameters">\s*<p>\s*Cel. n.zev: <a href=[^>]*>(?P<N>[^<]+)</a>' + FILE_SIZE_PATTERN = r'<div class="tab" id="category">(?:\s*<p>[^\n]*</p>)*\s*Velikost:\s*(?P<S>[0-9., ]+)(?P<U>[kKMG])i?B\s*</div>' + OFFLINE_PATTERN = r'<div class="header clearfix">\s*<h2 class="red">' + + FILE_SIZE_REPLACEMENTS = [(' ', '')] + FILE_URL_REPLACEMENTS = [(r'http://[^/]*/download.php\?.*?id=(\w+).*', r'http://sdilej.cz/\1/x/')] + + SH_CHECK_TRAFFIC = True + + FREE_URL_PATTERN = r'<a href="([^"]+)" class="page-download">[^>]*alt="([^"]+)" /></a>' + FREE_FORM_PATTERN = r'<form action="download.php" method="post">\s*<img src="captcha.php" id="captcha" />(.*?)</form>' + PREMIUM_FORM_PATTERN = r'<form action="/profi_down.php" method="post">(.*?)</form>' + FORM_INPUT_PATTERN = r'<input[^>]* name="([^"]+)" value="([^"]+)"[^>]*/>' + MULTIDL_PATTERN = r"<p><font color='red'>Z[^<]*PROFI.</font></p>" + USER_CREDIT_PATTERN = r'<div class="credit">\s*kredit: <strong>([0-9., ]+)([kKMG]i?B)</strong>\s*</div><!-- .credit -->' + + + def checkTrafficLeft(self): + # check if user logged in + m = re.search(self.USER_CREDIT_PATTERN, self.html) + if m is None: + self.account.relogin(self.user) + self.html = self.load(self.pyfile.url, cookies=True, decode=True) + m = re.search(self.USER_CREDIT_PATTERN, self.html) + if m is None: + return False + + # check user credit + try: + credit = parseFileSize(m.group(1).replace(' ', ''), m.group(2)) + self.logInfo("Premium download for %i KiB of Credit" % (self.pyfile.size / 1024)) + self.logInfo("User %s has %i KiB left" % (self.user, credit / 1024)) + if credit < self.pyfile.size: + self.logInfo("Not enough credit to download file %s" % self.pyfile.name) + return False + except Exception, e: + # let's continue and see what happens... + self.logError('Parse error (CREDIT): %s' % e) + + return True + + def handlePremium(self): + # parse download link + try: + form = re.search(self.PREMIUM_FORM_PATTERN, self.html, re.DOTALL).group(1) + inputs = dict(re.findall(self.FORM_INPUT_PATTERN, form)) + except Exception, e: + self.logError("Parse error (FORM): %s" % e) + self.resetAccount() + + # download the file, destination is determined by pyLoad + self.download("http://sdilej.cz/profi_down.php", post=inputs, disposition=True) + self.checkDownloadedFile() + + def handleFree(self): + # get free url + m = re.search(self.FREE_URL_PATTERN, self.html) + if m is None: + self.parseError('Free URL') + parsed_url = "http://sdilej.cz" + m.group(1) + self.logDebug("PARSED_URL:" + parsed_url) + + # get download ticket and parse html + self.html = self.load(parsed_url, cookies=True, decode=True) + if re.search(self.MULTIDL_PATTERN, self.html): + self.longWait(5 * 60, 12) + + try: + form = re.search(self.FREE_FORM_PATTERN, self.html, re.DOTALL).group(1) + inputs = dict(re.findall(self.FORM_INPUT_PATTERN, form)) + self.pyfile.size = int(inputs['size']) + except Exception, e: + self.logError(e) + self.parseError('Form') + + # get and decrypt captcha + captcha_url = 'http://sdilej.cz/captcha.php' + for _ in xrange(5): + inputs['captchastring2'] = self.decryptCaptcha(captcha_url) + self.html = self.load(parsed_url, cookies=True, post=inputs, decode=True) + if u"<li>ZadanÜ ovÄÅovacà kód nesouhlasÃ!</li>" in self.html: + self.invalidCaptcha() + elif re.search(self.MULTIDL_PATTERN, self.html): + self.longWait(5 * 60, 12) + else: + self.correctCaptcha() + break + else: + self.fail("No valid captcha code entered") + + m = re.search("countdown_number = (\d+);", self.html) + self.setWait(int(m.group(1)) if m else 50) + + # download the file, destination is determined by pyLoad + self.logDebug("WAIT URL", self.req.lastEffectiveURL) + m = re.search("free_wait.php\?server=(.*?)&(.*)", self.req.lastEffectiveURL) + if m is None: + self.parseError('Download URL') + + url = "http://%s/download.php?%s" % (m.group(1), m.group(2)) + + self.wait() + self.download(url) + self.checkDownloadedFile() + + def checkDownloadedFile(self): + # check download + check = self.checkDownload({ + "tempoffline": re.compile(r"^Soubor je do.*asn.* nedostupn.*$"), + "credit": re.compile(r"^Nem.*te dostate.*n.* kredit.$"), + "multi_dl": re.compile(self.MULTIDL_PATTERN), + "captcha_err": "<li>ZadanÜ ovÄÅovacà kód nesouhlasÃ!</li>" + }) + + if check == "tempoffline": + self.fail("File not available - try later") + if check == "credit": + self.resetAccount() + elif check == "multi_dl": + self.longWait(5 * 60, 12) + elif check == "captcha_err": + self.invalidCaptcha() + self.retry() + + +getInfo = create_getInfo(CzshareCom) diff --git a/pyload/plugins/hoster/DailymotionCom.py b/pyload/plugins/hoster/DailymotionCom.py new file mode 100644 index 000000000..0ae4c697b --- /dev/null +++ b/pyload/plugins/hoster/DailymotionCom.py @@ -0,0 +1,111 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.PyFile import statusMap +from pyload.common.json_layer import json_loads +from pyload.network.RequestFactory import getURL +from pyload.plugins.Hoster import Hoster + + +def getInfo(urls): + result = [] #: [ .. (name, size, status, url) .. ] + regex = re.compile(DailymotionCom.__pattern__) + apiurl = "https://api.dailymotion.com/video/" + request = {"fields": "access_error,status,title"} + for url in urls: + id = regex.search(url).group("ID") + page = getURL(apiurl + id, get=request) + info = json_loads(page) + + if "title" in info: + name = info['title'] + ".mp4" + else: + name = url + + if "error" in info or info['access_error']: + status = "offline" + else: + status = info['status'] + if status in ("ready", "published"): + status = "online" + elif status in ("waiting", "processing"): + status = "temp. offline" + else: + status = "offline" + + result.append((name, 0, statusMap[status], url)) + return result + + +class DailymotionCom(Hoster): + __name__ = "DailymotionCom" + __type__ = "hoster" + __version__ = "0.2" + + __pattern__ = r'https?://(?:www\.)?dailymotion\.com/.*?video/(?P<ID>[\w^_]+)' + __config__ = [("quality", "Lowest;LD 144p;LD 240p;SD 384p;HQ 480p;HD 720p;HD 1080p;Highest", "Quality", "Highest")] + + __description__ = """Dailymotion.com hoster plugin""" + __author_name__ = "Walter Purcaro" + __author_mail__ = "vuolter@gmail.com" + + + def setup(self): + self.resumeDownload = self.multiDL = True + + def getStreams(self): + streams = [] + for result in re.finditer(r"\"(?P<URL>http:\\/\\/www.dailymotion.com\\/cdn\\/H264-(?P<QF>.*?)\\.*?)\"", + self.html): + url = result.group("URL") + qf = result.group("QF") + link = url.replace("\\", "") + quality = tuple(int(x) for x in qf.split("x")) + streams.append((quality, link)) + return sorted(streams, key=lambda x: x[0][::-1]) + + def getQuality(self): + q = self.getConfig("quality") + if q == "Lowest": + quality = 0 + elif q == "Highest": + quality = -1 + else: + quality = int(q.rsplit(" ")[1][:-1]) + return quality + + def getLink(self, streams, quality): + if quality > 0: + for x, s in reversed([item for item in enumerate(streams)]): + qf = s[0][1] + if qf <= quality: + idx = x + break + else: + idx = 0 + else: + idx = quality + + s = streams[idx] + self.logInfo("Download video quality %sx%s" % s[0]) + return s[1] + + def checkInfo(self, pyfile): + pyfile.name, pyfile.size, pyfile.status, pyfile.url = getInfo([pyfile.url])[0] + if pyfile.status == 1: + self.offline() + elif pyfile.status == 6: + self.tempOffline() + + def process(self, pyfile): + self.checkInfo(pyfile) + + id = re.match(self.__pattern__, pyfile.url).group("ID") + self.html = self.load("http://www.dailymotion.com/embed/video/" + id, decode=True) + + streams = self.getStreams() + quality = self.getQuality() + link = self.getLink(streams, quality) + + self.download(link) diff --git a/pyload/plugins/hoster/DataHu.py b/pyload/plugins/hoster/DataHu.py new file mode 100644 index 000000000..68162c203 --- /dev/null +++ b/pyload/plugins/hoster/DataHu.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# http://data.hu/get/6381232/random.bin + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class DataHu(SimpleHoster): + __name__ = "DataHu" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?data.hu/get/\w+' + + __description__ = """Data.hu hoster plugin""" + __author_name__ = ("crash", "stickell") + __author_mail__ = "l.stickell@yahoo.it" + + FILE_INFO_PATTERN = ur'<title>(?P<N>.*) \((?P<S>[^)]+)\) let\xf6lt\xe9se</title>' + OFFLINE_PATTERN = ur'Az adott f\xe1jl nem l\xe9tezik' + LINK_PATTERN = r'<div class="download_box_button"><a href="([^"]+)">' + + + def handleFree(self): + self.resumeDownload = True + self.html = self.load(self.pyfile.url, decode=True) + + m = re.search(self.LINK_PATTERN, self.html) + if m: + url = m.group(1) + self.logDebug('Direct link: ' + url) + else: + self.parseError('Unable to get direct link') + + self.download(url, disposition=True) + + +getInfo = create_getInfo(DataHu) diff --git a/pyload/plugins/hoster/DataportCz.py b/pyload/plugins/hoster/DataportCz.py new file mode 100644 index 000000000..2d87397df --- /dev/null +++ b/pyload/plugins/hoster/DataportCz.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class DataportCz(SimpleHoster): + __name__ = "DataportCz" + __type__ = "hoster" + __version__ = "0.37" + + __pattern__ = r'http://(?:www\.)?dataport.cz/file/(.*)' + + __description__ = """Dataport.cz hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_NAME_PATTERN = r'<span itemprop="name">(?P<N>[^<]+)</span>' + FILE_SIZE_PATTERN = r'<td class="fil">Velikost</td>\s*<td>(?P<S>[^<]+)</td>' + OFFLINE_PATTERN = r'<h2>Soubor nebyl nalezen</h2>' + + FILE_URL_REPLACEMENTS = [(__pattern__, r'http://www.dataport.cz/file/\1')] + + CAPTCHA_URL_PATTERN = r'<section id="captcha_bg">\s*<img src="(.*?)"' + FREE_SLOTS_PATTERN = ur'PoÄet volnÜch slotů: <span class="darkblue">(\d+)</span><br />' + + + def handleFree(self): + captchas = {"1": "jkeG", "2": "hMJQ", "3": "vmEK", "4": "ePQM", "5": "blBd"} + + for _ in xrange(60): + action, inputs = self.parseHtmlForm('free_download_form') + self.logDebug(action, inputs) + if not action or not inputs: + self.parseError('free_download_form') + + if "captchaId" in inputs and inputs['captchaId'] in captchas: + inputs['captchaCode'] = captchas[inputs['captchaId']] + else: + self.parseError('captcha') + + self.html = self.download("http://www.dataport.cz%s" % action, post=inputs) + + check = self.checkDownload({"captcha": 'alert("\u0160patn\u011b opsan\u00fd k\u00f3d z obr\u00e1zu");', + "slot": 'alert("Je n\u00e1m l\u00edto, ale moment\u00e1ln\u011b nejsou'}) + if check == "captcha": + self.parseError('invalid captcha') + elif check == "slot": + self.logDebug("No free slots - wait 60s and retry") + self.wait(60, False) + self.html = self.load(self.pyfile.url, decode=True) + continue + else: + break + + +create_getInfo(DataportCz) diff --git a/pyload/plugins/hoster/DateiTo.py b/pyload/plugins/hoster/DateiTo.py new file mode 100644 index 000000000..1e8ca3614 --- /dev/null +++ b/pyload/plugins/hoster/DateiTo.py @@ -0,0 +1,83 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.CaptchaService import ReCaptcha +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class DateiTo(SimpleHoster): + __name__ = "DateiTo" + __type__ = "hoster" + __version__ = "0.02" + + __pattern__ = r'http://(?:www\.)?datei\.to/datei/(?P<ID>\w+)\.html' + + __description__ = """Datei.to hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_NAME_PATTERN = r'Dateiname:</td>\s*<td colspan="2"><strong>(?P<N>.*?)</' + FILE_SIZE_PATTERN = r'Dateigröße:</td>\s*<td colspan="2">(?P<S>.*?)</' + OFFLINE_PATTERN = r'>Datei wurde nicht gefunden<|>Bitte wÀhle deine Datei aus... <' + PARALELL_PATTERN = r'>Du lÀdst bereits eine Datei herunter<' + + WAIT_PATTERN = r'countdown\({seconds: (\d+)' + DATA_PATTERN = r'url: "(.*?)", data: "(.*?)",' + RECAPTCHA_KEY_PATTERN = r'Recaptcha.create\("(.*?)"' + + + def handleFree(self): + url = 'http://datei.to/ajax/download.php' + data = {'P': 'I', 'ID': self.file_info['ID']} + + recaptcha = ReCaptcha(self) + + for _ in xrange(10): + self.logDebug("URL", url, "POST", data) + self.html = self.load(url, post=data) + self.checkErrors() + + if url.endswith('download.php') and 'P' in data: + if data['P'] == 'I': + self.doWait() + + elif data['P'] == 'IV': + break + + m = re.search(self.DATA_PATTERN, self.html) + if m is None: + self.parseError('data') + url = 'http://datei.to/' + m.group(1) + data = dict(x.split('=') for x in m.group(2).split('&')) + + if url.endswith('recaptcha.php'): + m = re.search(self.RECAPTCHA_KEY_PATTERN, self.html) + recaptcha_key = m.group(1) if m else "6LdBbL8SAAAAAI0vKUo58XRwDd5Tu_Ze1DA7qTao" + + data['recaptcha_challenge_field'], data['recaptcha_response_field'] = recaptcha.challenge(recaptcha_key) + + else: + self.fail('Too bad...') + + download_url = self.html + self.logDebug('Download URL', download_url) + self.download(download_url) + + def checkErrors(self): + m = re.search(self.PARALELL_PATTERN, self.html) + if m: + m = re.search(self.WAIT_PATTERN, self.html) + wait_time = int(m.group(1)) if m else 30 + self.wait(wait_time + 1, False) + self.retry() + + def doWait(self): + m = re.search(self.WAIT_PATTERN, self.html) + wait_time = int(m.group(1)) if m else 30 + + self.load('http://datei.to/ajax/download.php', post={'P': 'Ads'}) + self.wait(wait_time + 1, False) + + +getInfo = create_getInfo(DateiTo) diff --git a/pyload/plugins/hoster/DdlstorageCom.py b/pyload/plugins/hoster/DdlstorageCom.py new file mode 100644 index 000000000..8b477ade6 --- /dev/null +++ b/pyload/plugins/hoster/DdlstorageCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class DdlstorageCom(DeadHoster): + __name__ = "DdlstorageCom" + __type__ = "hoster" + __version__ = "1.02" + + __pattern__ = r'https?://(?:www\.)?ddlstorage\.com/\w+' + + __description__ = """DDLStorage.com hoster plugin""" + __author_name__ = ("zoidberg", "stickell") + __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") + + +getInfo = create_getInfo(DdlstorageCom) diff --git a/pyload/plugins/hoster/DebridItaliaCom.py b/pyload/plugins/hoster/DebridItaliaCom.py new file mode 100644 index 000000000..74879e6e5 --- /dev/null +++ b/pyload/plugins/hoster/DebridItaliaCom.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.Hoster import Hoster + + +class DebridItaliaCom(Hoster): + __name__ = "DebridItaliaCom" + __type__ = "hoster" + __version__ = "0.05" + + __pattern__ = r'https?://(?:[^/]*\.)?debriditalia\.com' + + __description__ = """Debriditalia.com hoster plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + + def setup(self): + self.chunkLimit = -1 + self.resumeDownload = True + + def process(self, pyfile): + if re.match(self.__pattern__, pyfile.url): + new_url = pyfile.url + elif not self.account: + self.logError(_("Please enter your %s account or deactivate this plugin") % "DebridItalia") + self.fail("No DebridItalia account provided") + else: + self.logDebug("Old URL: %s" % pyfile.url) + url = "http://debriditalia.com/linkgen2.php?xjxfun=convertiLink&xjxargs[]=S<![CDATA[%s]]>" % pyfile.url + page = self.load(url) + self.logDebug("XML data: %s" % page) + + if 'File not available' in page: + self.fail('File not available') + else: + new_url = re.search(r'<a href="(?:[^"]+)">(?P<direct>[^<]+)</a>', page).group('direct') + + if new_url != pyfile.url: + self.logDebug("New URL: %s" % new_url) + + self.download(new_url, disposition=True) + + check = self.checkDownload({"empty": re.compile(r"^$")}) + + if check == "empty": + self.retry(5, 2 * 60, "Empty file downloaded") diff --git a/pyload/plugins/hoster/DepositfilesCom.py b/pyload/plugins/hoster/DepositfilesCom.py new file mode 100644 index 000000000..9c0348cbd --- /dev/null +++ b/pyload/plugins/hoster/DepositfilesCom.py @@ -0,0 +1,129 @@ +# -*- coding: utf-8 -*- + +import re + +from urllib import unquote + +from pyload.plugins.internal.CaptchaService import ReCaptcha +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class DepositfilesCom(SimpleHoster): + __name__ = "DepositfilesCom" + __type__ = "hoster" + __version__ = "0.48" + + __pattern__ = r'https?://(?:www\.)?(depositfiles\.com|dfiles\.(eu|ru))(/\w{1,3})?/files/(?P<ID>\w+)' + + __description__ = """Depositfiles.com hoster plugin""" + __author_name__ = ("spoob", "zoidberg", "Walter Purcaro") + __author_mail__ = ("spoob@pyload.org", "zoidberg@mujmail.cz", "vuolter@gmail.com") + + FILE_NAME_PATTERN = r'<script type="text/javascript">eval\( unescape\(\'(?P<N>.*?)\'' + FILE_SIZE_PATTERN = r': <b>(?P<S>[0-9.]+) (?P<U>[kKMG])i?B</b>' + OFFLINE_PATTERN = r'<span class="html_download_api-not_exists"></span>' + + FILE_NAME_REPLACEMENTS = [(r'\%u([0-9A-Fa-f]{4})', lambda m: unichr(int(m.group(1), 16))), + (r'.*<b title="(?P<N>[^"]+).*', "\g<N>")] + FILE_URL_REPLACEMENTS = [(__pattern__, "https://dfiles.eu/files/\g<ID>")] + + SH_COOKIES = [(".dfiles.eu", "lang_current", "en")] + + RECAPTCHA_PATTERN = r"Recaptcha.create\('([^']+)'" + + FREE_LINK_PATTERN = r'<form id="downloader_file_form" action="(http://.+?\.(dfiles\.eu|depositfiles\.com)/.+?)" method="post"' + PREMIUM_LINK_PATTERN = r'class="repeat"><a href="(.+?)"' + PREMIUM_MIRROR_PATTERN = r'class="repeat_mirror"><a href="(.+?)"' + + + def handleFree(self): + self.html = self.load(self.pyfile.url, post={"gateway_result": "1"}, cookies=True) + + if re.search(r'File is checked, please try again in a minute.', self.html) is not None: + self.logInfo("DepositFiles.com: The file is being checked. Waiting 1 minute.") + self.wait(61) + self.retry() + + wait = re.search(r'html_download_api-limit_interval\">(\d+)</span>', self.html) + if wait: + wait_time = int(wait.group(1)) + self.logInfo("%s: Traffic used up. Waiting %d seconds." % (self.__name__, wait_time)) + self.wait(wait_time, True) + self.retry() + + wait = re.search(r'>Try in (\d+) minutes or use GOLD account', self.html) + if wait: + wait_time = int(wait.group(1)) + self.logInfo("%s: All free slots occupied. Waiting %d minutes." % (self.__name__, wait_time)) + self.setWait(wait_time * 60, False) + + wait = re.search(r'Please wait (\d+) sec', self.html) + if wait: + self.setWait(int(wait.group(1))) + + m = re.search(r"var fid = '(\w+)';", self.html) + if m is None: + self.retry(wait_time=5) + params = {'fid': m.group(1)} + self.logDebug("FID: %s" % params['fid']) + + captcha_key = '6LdRTL8SAAAAAE9UOdWZ4d0Ky-aeA7XfSqyWDM2m' + m = re.search(self.RECAPTCHA_PATTERN, self.html) + if m: + captcha_key = m.group(1) + self.logDebug("CAPTCHA_KEY: %s" % captcha_key) + + self.wait() + recaptcha = ReCaptcha(self) + + for _ in xrange(5): + self.html = self.load("https://dfiles.eu/get_file.php", get=params) + + if '<input type=button value="Continue" onclick="check_recaptcha' in self.html: + if not captcha_key: + self.parseError('Captcha key') + if 'response' in params: + self.invalidCaptcha() + params['challenge'], params['response'] = recaptcha.challenge(captcha_key) + self.logDebug(params) + continue + + m = re.search(self.FREE_LINK_PATTERN, self.html) + if m: + if 'response' in params: + self.correctCaptcha() + link = unquote(m.group(1)) + self.logDebug("LINK: %s" % link) + break + else: + self.parseError('Download link') + else: + self.fail('No valid captcha response received') + + try: + self.download(link, disposition=True) + except: + self.retry(wait_time=60) + + def handlePremium(self): + self.html = self.load(self.pyfile.url, cookies=self.SH_COOKIES) + + if '<span class="html_download_api-gold_traffic_limit">' in self.html: + self.logWarning("Download limit reached") + self.retry(25, 60 * 60, "Download limit reached") + elif 'onClick="show_gold_offer' in self.html: + self.account.relogin(self.user) + self.retry() + else: + link = re.search(self.PREMIUM_LINK_PATTERN, self.html) + mirror = re.search(self.PREMIUM_MIRROR_PATTERN, self.html) + if link: + dlink = link.group(1) + elif mirror: + dlink = mirror.group(1) + else: + self.parseError("No direct download link or mirror found") + self.download(dlink, disposition=True) + + +getInfo = create_getInfo(DepositfilesCom) diff --git a/pyload/plugins/hoster/DlFreeFr.py b/pyload/plugins/hoster/DlFreeFr.py new file mode 100644 index 000000000..387e11efc --- /dev/null +++ b/pyload/plugins/hoster/DlFreeFr.py @@ -0,0 +1,205 @@ +# -*- coding: utf-8 -*- + +import pycurl +import re + +from pyload.common.json_layer import json_loads +from pyload.network.Browser import Browser +from pyload.network.CookieJar import CookieJar +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, replace_patterns + + +class CustomBrowser(Browser): + + def __init__(self, bucket=None, options={}): + Browser.__init__(self, bucket, options) + + def load(self, *args, **kwargs): + post = kwargs.get("post") + + if post is None and len(args) > 2: + post = args[2] + + if post: + self.http.c.setopt(pycurl.FOLLOWLOCATION, 0) + self.http.c.setopt(pycurl.POST, 1) + self.http.c.setopt(pycurl.CUSTOMREQUEST, "POST") + else: + self.http.c.setopt(pycurl.FOLLOWLOCATION, 1) + self.http.c.setopt(pycurl.POST, 0) + self.http.c.setopt(pycurl.CUSTOMREQUEST, "GET") + + return Browser.load(self, *args, **kwargs) + + +class AdYouLike: + """ + Class to support adyoulike captcha service + """ + ADYOULIKE_INPUT_PATTERN = r'Adyoulike.create\((.*?)\);' + ADYOULIKE_CALLBACK = r'Adyoulike.g._jsonp_5579316662423138' + ADYOULIKE_CHALLENGE_PATTERN = ADYOULIKE_CALLBACK + r'\((.*?)\)' + + def __init__(self, plugin, engine="adyoulike"): + self.plugin = plugin + self.engine = engine + + def challenge(self, html): + adyoulike_data_string = None + m = re.search(self.ADYOULIKE_INPUT_PATTERN, html) + if m: + adyoulike_data_string = m.group(1) + else: + self.plugin.fail("Can't read AdYouLike input data") + + # {"adyoulike":{"key":"P~zQ~O0zV0WTiAzC-iw0navWQpCLoYEP"}, + # "all":{"element_id":"ayl_private_cap_92300","lang":"fr","env":"prod"}} + ayl_data = json_loads(adyoulike_data_string) + + res = self.plugin.load( + r'http://api-ayl.appspot.com/challenge?key=%(ayl_key)s&env=%(ayl_env)s&callback=%(callback)s' % { + "ayl_key": ayl_data[self.engine]['key'], "ayl_env": ayl_data['all']['env'], + "callback": self.ADYOULIKE_CALLBACK}) + + m = re.search(self.ADYOULIKE_CHALLENGE_PATTERN, res) + challenge_string = None + if m: + challenge_string = m.group(1) + else: + self.plugin.fail("Invalid AdYouLike challenge") + challenge_data = json_loads(challenge_string) + + return ayl_data, challenge_data + + def result(self, ayl, challenge): + """ + Adyoulike.g._jsonp_5579316662423138 + ({"translations":{"fr":{"instructions_visual":"Recopiez « Soonnight » ci-dessous :"}}, + "site_under":true,"clickable":true,"pixels":{"VIDEO_050":[],"DISPLAY":[],"VIDEO_000":[],"VIDEO_100":[], + "VIDEO_025":[],"VIDEO_075":[]},"medium_type":"image/adyoulike", + "iframes":{"big":"<iframe src=\"http://www.soonnight.com/campagn.html\" scrolling=\"no\" + height=\"250\" width=\"300\" frameborder=\"0\"></iframe>"},"shares":{},"id":256, + "token":"e6QuI4aRSnbIZJg02IsV6cp4JQ9~MjA1","formats":{"small":{"y":300,"x":0,"w":300,"h":60}, + "big":{"y":0,"x":0,"w":300,"h":250},"hover":{"y":440,"x":0,"w":300,"h":60}}, + "tid":"SqwuAdxT1EZoi4B5q0T63LN2AkiCJBg5"}) + """ + response = None + try: + instructions_visual = challenge['translations'][ayl['all']['lang']]['instructions_visual'] + m = re.search(u".*«(.*)».*", instructions_visual) + if m: + response = m.group(1).strip() + else: + self.plugin.fail("Can't parse instructions visual") + except KeyError: + self.plugin.fail("No instructions visual") + + #TODO: Supports captcha + + if not response: + self.plugin.fail("AdYouLike result failed") + + return {"_ayl_captcha_engine": self.engine, + "_ayl_env": ayl['all']['env'], + "_ayl_tid": challenge['tid'], + "_ayl_token_challenge": challenge['token'], + "_ayl_response": response} + + +class DlFreeFr(SimpleHoster): + __name__ = "DlFreeFr" + __type__ = "hoster" + __version__ = "0.25" + + __pattern__ = r'http://(?:www\.)?dl\.free\.fr/([a-zA-Z0-9]+|getfile\.pl\?file=/[a-zA-Z0-9]+)' + + __description__ = """Dl.free.fr hoster plugin""" + __author_name__ = ("the-razer", "zoidberg", "Toilal") + __author_mail__ = ("daniel_ AT gmx DOT net", "zoidberg@mujmail.cz", "toilal.dev@gmail.com") + + FILE_NAME_PATTERN = r'Fichier:</td>\s*<td[^>]*>(?P<N>[^>]*)</td>' + FILE_SIZE_PATTERN = r'Taille:</td>\s*<td[^>]*>(?P<S>[\d.]+[KMG])o' + OFFLINE_PATTERN = r"Erreur 404 - Document non trouv|Fichier inexistant|Le fichier demandé n'a pas été trouvé" + + + def setup(self): + self.multiDL = self.resumeDownload = True + self.limitDL = 5 + self.chunkLimit = 1 + + def init(self): + factory = self.core.requestFactory + self.req = CustomBrowser(factory.bucket, factory.getOptions()) + + def process(self, pyfile): + self.req.setCookieJar(None) + + pyfile.url = replace_patterns(pyfile.url, self.FILE_URL_REPLACEMENTS) + valid_url = pyfile.url + headers = self.load(valid_url, just_header=True) + + self.html = None + if headers.get('code') == 302: + valid_url = headers.get('location') + headers = self.load(valid_url, just_header=True) + + if headers.get('code') == 200: + content_type = headers.get('content-type') + if content_type and content_type.startswith("text/html"): + # Undirect acces to requested file, with a web page providing it (captcha) + self.html = self.load(valid_url) + self.handleFree() + else: + # Direct access to requested file for users using free.fr as Internet Service Provider. + self.download(valid_url, disposition=True) + elif headers.get('code') == 404: + self.offline() + else: + self.fail("Invalid return code: " + str(headers.get('code'))) + + def handleFree(self): + action, inputs = self.parseHtmlForm('action="getfile.pl"') + + adyoulike = AdYouLike(self) + ayl, challenge = adyoulike.challenge(self.html) + result = adyoulike.result(ayl, challenge) + inputs.update(result) + + self.load("http://dl.free.fr/getfile.pl", post=inputs) + headers = self.getLastHeaders() + if headers.get("code") == 302 and "set-cookie" in headers and "location" in headers: + m = re.search("(.*?)=(.*?); path=(.*?); domain=(.*?)", headers.get("set-cookie")) + cj = CookieJar(__name__) + if m: + cj.setCookie(m.group(4), m.group(1), m.group(2), m.group(3)) + else: + self.fail("Cookie error") + location = headers.get("location") + self.req.setCookieJar(cj) + self.download(location, disposition=True) + else: + self.fail("Invalid response") + + def getLastHeaders(self): + #parse header + header = {"code": self.req.code} + for line in self.req.http.header.splitlines(): + line = line.strip() + if not line or ":" not in line: + continue + + key, none, value = line.partition(":") + key = key.lower().strip() + value = value.strip() + + if key in header: + if type(header[key]) == list: + header[key].append(value) + else: + header[key] = [header[key], value] + else: + header[key] = value + return header + + +getInfo = create_getInfo(DlFreeFr) diff --git a/pyload/plugins/hoster/DuploadOrg.py b/pyload/plugins/hoster/DuploadOrg.py new file mode 100644 index 000000000..8c2430c87 --- /dev/null +++ b/pyload/plugins/hoster/DuploadOrg.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class DuploadOrg(XFileSharingPro): + __name__ = "DuploadOrg" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?dupload\.org/\w{12}' + + __description__ = """Dupload.grg hoster plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + HOSTER_NAME = "dupload.org" + + FILE_INFO_PATTERN = r'<h3[^>]*>(?P<N>.+) \((?P<S>[\d.]+) (?P<U>\w+)\)</h3>' + + +getInfo = create_getInfo(DuploadOrg) diff --git a/pyload/plugins/hoster/EasybytezCom.py b/pyload/plugins/hoster/EasybytezCom.py new file mode 100644 index 000000000..7b1d8881f --- /dev/null +++ b/pyload/plugins/hoster/EasybytezCom.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class EasybytezCom(XFileSharingPro): + __name__ = "EasybytezCom" + __type__ = "hoster" + __version__ = "0.18" + + __pattern__ = r'http://(?:www\.)?easybytez.com/(\w+).*' + + __description__ = """Easybytez.com hoster plugin""" + __author_name__ = ("zoidberg", "stickell") + __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") + + HOSTER_NAME = "easybytez.com" + + FILE_INFO_PATTERN = r'<span class="name">(?P<N>.+)</span><br>\s*<span class="size">(?P<S>[^<]+)</span>' + OFFLINE_PATTERN = r'<h1>File not available</h1>' + + LINK_PATTERN = r'(http://(\w+\.(easyload|easybytez|zingload)\.(com|to)|\d+\.\d+\.\d+\.\d+)/files/\d+/\w+/[^"<]+)' + OVR_LINK_PATTERN = r'<h2>Download Link</h2>\s*<textarea[^>]*>([^<]+)' + ERROR_PATTERN = r'(?:class=["\']err["\'][^>]*>|<Center><b>)(.*?)</' + + + def setup(self): + self.resumeDownload = self.multiDL = self.premium + + +getInfo = create_getInfo(EasybytezCom) diff --git a/pyload/plugins/hoster/EdiskCz.py b/pyload/plugins/hoster/EdiskCz.py new file mode 100644 index 000000000..4c532b33f --- /dev/null +++ b/pyload/plugins/hoster/EdiskCz.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class EdiskCz(SimpleHoster): + __name__ = "EdiskCz" + __type__ = "hoster" + __version__ = "0.21" + + __pattern__ = r'http://(?:www\.)?edisk.(cz|sk|eu)/(stahni|sk/stahni|en/download)/.*' + + __description__ = """Edisk.cz hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_INFO_PATTERN = r'<span class="fl" title="(?P<N>[^"]+)">\s*.*?\((?P<S>[0-9.]*) (?P<U>[kKMG])i?B\)</h1></span>' + OFFLINE_PATTERN = r'<h3>This file does not exist due to one of the following:</h3><ul><li>' + + ACTION_PATTERN = r'/en/download/(\d+/.*\.html)' + LINK_PATTERN = r'http://.*edisk.cz.*\.html' + + + def setup(self): + self.multiDL = False + + def process(self, pyfile): + url = re.sub("/(stahni|sk/stahni)/", "/en/download/", pyfile.url) + + self.logDebug('URL:' + url) + + m = re.search(self.ACTION_PATTERN, url) + if m is None: + self.parseError("ACTION") + action = m.group(1) + + self.html = self.load(url, decode=True) + self.getFileInfo() + + self.html = self.load(re.sub("/en/download/", "/en/download-slow/", url)) + + url = self.load(re.sub("/en/download/", "/x-download/", url), post={ + "action": action + }) + + if not re.match(self.LINK_PATTERN, url): + self.fail("Unexpected server response") + + self.download(url) + + +getInfo = create_getInfo(EdiskCz) diff --git a/pyload/plugins/hoster/EgoFilesCom.py b/pyload/plugins/hoster/EgoFilesCom.py new file mode 100644 index 000000000..7d59b274c --- /dev/null +++ b/pyload/plugins/hoster/EgoFilesCom.py @@ -0,0 +1,89 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# http://egofiles.com/mOZfMI1WLZ6HBkGG/random.bin + +import re + +from pyload.plugins.internal.CaptchaService import ReCaptcha +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class EgoFilesCom(SimpleHoster): + __name__ = "EgoFilesCom" + __type__ = "hoster" + __version__ = "0.15" + + __pattern__ = r'https?://(?:www\.)?egofiles.com/(\w+)' + + __description__ = """Egofiles.com hoster plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + FILE_INFO_PATTERN = r'<div class="down-file">\s+(?P<N>[^\t]+)\s+<div class="file-properties">\s+(File size|Rozmiar): (?P<S>[\w.]+) (?P<U>\w+) \|' + OFFLINE_PATTERN = r'(File size|Rozmiar): 0 KB' + WAIT_TIME_PATTERN = r'For next free download you have to wait <strong>((?P<m>\d*)m)? ?((?P<s>\d+)s)?</strong>' + LINK_PATTERN = r'<a href="(?P<link>[^"]+)">Download ></a>' + RECAPTCHA_KEY = "6LeXatQSAAAAAHezcjXyWAni-4t302TeYe7_gfvX" + + + def setup(self): + # Set English language + self.load("https://egofiles.com/ajax/lang.php?lang=en", just_header=True) + + def process(self, pyfile): + if self.premium and (not self.SH_CHECK_TRAFFIC or self.checkTrafficLeft()): + self.handlePremium() + else: + self.handleFree() + + def handleFree(self): + self.html = self.load(self.pyfile.url, decode=True) + self.getFileInfo() + + # Wait time between free downloads + if 'For next free download you have to wait' in self.html: + m = re.search(self.WAIT_TIME_PATTERN, self.html).groupdict('0') + waittime = int(m['m']) * 60 + int(m['s']) + self.wait(waittime, True) + + downloadURL = r'' + recaptcha = ReCaptcha(self) + for _ in xrange(5): + challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY) + post_data = {'recaptcha_challenge_field': challenge, + 'recaptcha_response_field': response} + self.html = self.load(self.pyfile.url, post=post_data, decode=True) + m = re.search(self.LINK_PATTERN, self.html) + if m is None: + self.logInfo('Wrong captcha') + self.invalidCaptcha() + elif hasattr(m, 'group'): + downloadURL = m.group('link') + self.correctCaptcha() + break + else: + self.fail('Unknown error - Plugin may be out of date') + + if not downloadURL: + self.fail("No Download url retrieved/all captcha attempts failed") + + self.download(downloadURL, disposition=True) + + def handlePremium(self): + header = self.load(self.pyfile.url, just_header=True) + if 'location' in header: + self.logDebug('DIRECT LINK from header: ' + header['location']) + self.download(header['location']) + else: + self.html = self.load(self.pyfile.url, decode=True) + self.getFileInfo() + m = re.search(r'<a href="(?P<link>[^"]+)">Download ></a>', self.html) + if m is None: + self.parseError('Unable to detect direct download url') + else: + self.logDebug('DIRECT URL from html: ' + m.group('link')) + self.download(m.group('link'), disposition=True) + + +getInfo = create_getInfo(EgoFilesCom) diff --git a/pyload/plugins/hoster/EpicShareNet.py b/pyload/plugins/hoster/EpicShareNet.py new file mode 100644 index 000000000..a4a6008ae --- /dev/null +++ b/pyload/plugins/hoster/EpicShareNet.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# BigBuckBunny_320x180.mp4 - 61.7 Mb - http://epicshare.net/fch3m2bk6ihp/BigBuckBunny_320x180.mp4.html + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class EpicShareNet(XFileSharingPro): + __name__ = "EpicShareNet" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'https?://(?:www\.)?epicshare\.net/\w{12}' + + __description__ = """EpicShare.net hoster plugin""" + __author_name__ = "t4skforce" + __author_mail__ = "t4skforce1337[AT]gmail[DOT]com" + + HOSTER_NAME = "epicshare.net" + + OFFLINE_PATTERN = r'<b>File Not Found</b><br><br>' + FILE_NAME_PATTERN = r'<b>Password:</b></div>\s*<h2>(?P<N>[^<]+)</h2>' + + +getInfo = create_getInfo(EpicShareNet) diff --git a/pyload/plugins/hoster/EuroshareEu.py b/pyload/plugins/hoster/EuroshareEu.py new file mode 100644 index 000000000..d7c172594 --- /dev/null +++ b/pyload/plugins/hoster/EuroshareEu.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class EuroshareEu(SimpleHoster): + __name__ = "EuroshareEu" + __type__ = "hoster" + __version__ = "0.25" + + __pattern__ = r'http://(?:www\.)?euroshare.(eu|sk|cz|hu|pl)/file/.*' + + __description__ = """Euroshare.eu hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_INFO_PATTERN = r'<span style="float: left;"><strong>(?P<N>.+?)</strong> \((?P<S>.+?)\)</span>' + OFFLINE_PATTERN = ur'<h2>S.bor sa nena.iel</h2>|PoÅŸadovaná stránka neexistuje!' + + FREE_URL_PATTERN = r'<a href="(/file/\d+/[^/]*/download/)"><div class="downloadButton"' + ERR_PARDL_PATTERN = r'<h2>Prebieha s.ahovanie</h2>|<p>Naraz je z jednej IP adresy mo.n. s.ahova. iba jeden s.bor' + ERR_NOT_LOGGED_IN_PATTERN = r'href="/customer-zone/login/"' + + FILE_URL_REPLACEMENTS = [(r"(http://[^/]*\.)(sk|cz|hu|pl)/", r"\1eu/")] + + + def setup(self): + self.multiDL = self.resumeDownload = self.premium + self.req.setOption("timeout", 120) + + def handlePremium(self): + if self.ERR_NOT_LOGGED_IN_PATTERN in self.html: + self.account.relogin(self.user) + self.retry(reason="User not logged in") + + self.download(self.pyfile.url.rstrip('/') + "/download/") + + check = self.checkDownload({"login": re.compile(self.ERR_NOT_LOGGED_IN_PATTERN), + "json": re.compile(r'\{"status":"error".*?"message":"(.*?)"')}) + if check == "login" or (check == "json" and self.lastCheck.group(1) == "Access token expired"): + self.account.relogin(self.user) + self.retry(reason="Access token expired") + elif check == "json": + self.fail(self.lastCheck.group(1)) + + def handleFree(self): + if re.search(self.ERR_PARDL_PATTERN, self.html) is not None: + self.longWait(5 * 60, 12) + + m = re.search(self.FREE_URL_PATTERN, self.html) + if m is None: + self.parseError("Parse error (URL)") + parsed_url = "http://euroshare.eu%s" % m.group(1) + self.logDebug("URL", parsed_url) + self.download(parsed_url, disposition=True) + + check = self.checkDownload({"multi_dl": re.compile(self.ERR_PARDL_PATTERN)}) + if check == "multi_dl": + self.longWait(5 * 60, 12) + + +getInfo = create_getInfo(EuroshareEu) diff --git a/pyload/plugins/hoster/ExtabitCom.py b/pyload/plugins/hoster/ExtabitCom.py new file mode 100644 index 000000000..38479410e --- /dev/null +++ b/pyload/plugins/hoster/ExtabitCom.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.common.json_layer import json_loads + +from pyload.plugins.hoster.UnrestrictLi import secondsToMidnight +from pyload.plugins.internal.CaptchaService import ReCaptcha +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class ExtabitCom(SimpleHoster): + __name__ = "ExtabitCom" + __type__ = "hoster" + __version__ = "0.6" + + __pattern__ = r'http://(?:www\.)?extabit\.com/(file|go|fid)/(?P<ID>\w+)' + + __description__ = """Extabit.com hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_NAME_PATTERN = r'<th>File:</th>\s*<td class="col-fileinfo">\s*<div title="(?P<N>[^"]+)">' + FILE_SIZE_PATTERN = r'<th>Size:</th>\s*<td class="col-fileinfo">(?P<S>[^<]+)</td>' + OFFLINE_PATTERN = r'>File not found<' + TEMP_OFFLINE_PATTERN = r'>(File is temporary unavailable|No download mirror)<' + + LINK_PATTERN = r'[\'"](http://guest\d+\.extabit\.com/[a-z0-9]+/.*?)[\'"]' + + + def handleFree(self): + if r">Only premium users can download this file" in self.html: + self.fail("Only premium users can download this file") + + m = re.search(r"Next free download from your ip will be available in <b>(\d+)\s*minutes", self.html) + if m: + self.wait(int(m.group(1)) * 60, True) + elif "The daily downloads limit from your IP is exceeded" in self.html: + self.logWarning("You have reached your daily downloads limit for today") + self.wait(secondsToMidnight(gmt=2), True) + + self.logDebug("URL: " + self.req.http.lastEffectiveURL) + m = re.match(self.__pattern__, self.req.http.lastEffectiveURL) + fileID = m.group('ID') if m else self.file_info('ID') + + m = re.search(r'recaptcha/api/challenge\?k=(\w+)', self.html) + if m: + recaptcha = ReCaptcha(self) + captcha_key = m.group(1) + + for _ in xrange(5): + get_data = {"type": "recaptcha"} + get_data['challenge'], get_data['capture'] = recaptcha.challenge(captcha_key) + response = json_loads(self.load("http://extabit.com/file/%s/" % fileID, get=get_data)) + if "ok" in response: + self.correctCaptcha() + break + else: + self.invalidCaptcha() + else: + self.fail("Invalid captcha") + else: + self.parseError('Captcha') + + if not "href" in response: + self.parseError('JSON') + + self.html = self.load("http://extabit.com/file/%s%s" % (fileID, response['href'])) + m = re.search(self.LINK_PATTERN, self.html) + if m is None: + self.parseError('Download URL') + url = m.group(1) + self.logDebug("Download URL: " + url) + self.download(url) + + +getInfo = create_getInfo(ExtabitCom) diff --git a/pyload/plugins/hoster/FastixRu.py b/pyload/plugins/hoster/FastixRu.py new file mode 100644 index 000000000..e031e3e55 --- /dev/null +++ b/pyload/plugins/hoster/FastixRu.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- + +import re + +from random import randrange +from urllib import unquote + +from pyload.common.json_layer import json_loads +from pyload.plugins.Hoster import Hoster + + +class FastixRu(Hoster): + __name__ = "FastixRu" + __type__ = "hoster" + __version__ = "0.04" + + __pattern__ = r'http://(?:www\.)?fastix\.(ru|it)/file/(?P<ID>[a-zA-Z0-9]{24})' + + __description__ = """Fastix hoster plugin""" + __author_name__ = "Massimo Rosamilia" + __author_mail__ = "max@spiritix.eu" + + + def getFilename(self, url): + try: + name = unquote(url.rsplit("/", 1)[1]) + except IndexError: + name = "Unknown_Filename..." + if name.endswith("..."): # incomplete filename, append random stuff + name += "%s.tmp" % randrange(100, 999) + return name + + def setup(self): + self.chunkLimit = 3 + self.resumeDownload = True + + def process(self, pyfile): + if re.match(self.__pattern__, pyfile.url): + new_url = pyfile.url + elif not self.account: + self.logError(_("Please enter your %s account or deactivate this plugin") % "Fastix") + self.fail("No Fastix account provided") + else: + self.logDebug("Old URL: %s" % pyfile.url) + api_key = self.account.getAccountData(self.user) + api_key = api_key['api'] + url = "http://fastix.ru/api_v2/?apikey=%s&sub=getdirectlink&link=%s" % (api_key, pyfile.url) + page = self.load(url) + data = json_loads(page) + self.logDebug("Json data: %s" % str(data)) + if "error\":true" in page: + self.offline() + else: + new_url = data['downloadlink'] + + if new_url != pyfile.url: + self.logDebug("New URL: %s" % new_url) + + if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown"): + #only use when name wasnt already set + pyfile.name = self.getFilename(new_url) + + self.download(new_url, disposition=True) + + check = self.checkDownload({"error": "<title>An error occurred while processing your request</title>", + "empty": re.compile(r"^$")}) + + if check == "error": + self.retry(wait_time=60, reason="An error occurred while generating link.") + elif check == "empty": + self.retry(wait_time=60, reason="Downloaded File was empty.") diff --git a/pyload/plugins/hoster/FastshareCz.py b/pyload/plugins/hoster/FastshareCz.py new file mode 100644 index 000000000..3897a1c23 --- /dev/null +++ b/pyload/plugins/hoster/FastshareCz.py @@ -0,0 +1,88 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# http://www.fastshare.cz/2141189/random.bin + +import re + +from urlparse import urljoin + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class FastshareCz(SimpleHoster): + __name__ = "FastshareCz" + __type__ = "hoster" + __version__ = "0.22" + + __pattern__ = r'http://(?:www\.)?fastshare\.cz/\d+/.+' + + __description__ = """FastShare.cz hoster plugin""" + __author_name__ = ("zoidberg", "stickell", "Walter Purcaro") + __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it", "vuolter@gmail.com") + + FILE_INFO_PATTERN = r'<h1 class="dwp">(?P<N>[^<]+)</h1>\s*<div class="fileinfo">\s*Size\s*: (?P<S>\d+) (?P<U>\w+),' + OFFLINE_PATTERN = r'>(The file has been deleted|Requested page not found)' + + FILE_URL_REPLACEMENTS = [("#.*", "")] + + SH_COOKIES = [(".fastshare.cz", "lang", "en")] + + FREE_URL_PATTERN = r'action=(/free/.*?)>\s*<img src="([^"]*)"><br' + PREMIUM_URL_PATTERN = r'(http://data\d+\.fastshare\.cz/download\.php\?id=\d+&)' + CREDIT_PATTERN = r' credit for ' + + + def handleFree(self): + if "> 100% of FREE slots are full" in self.html: + self.retry(120, 60, "No free slots") + + m = re.search(self.FREE_URL_PATTERN, self.html) + if m: + action, captcha_src = m.groups() + else: + self.parseError("Free URL") + + baseurl = "http://www.fastshare.cz" + captcha = self.decryptCaptcha(urljoin(baseurl, captcha_src)) + self.download(urljoin(baseurl, action), post={"code": captcha, "btn.x": 77, "btn.y": 18}) + + check = self.checkDownload({ + "paralell_dl": + "<title>FastShare.cz</title>|<script>alert\('Pres FREE muzete stahovat jen jeden soubor najednou.'\)", + "wrong_captcha": "Download for FREE" + }) + + if check == "paralell_dl": + self.retry(6, 10 * 60, "Paralell download") + elif check == "wrong_captcha": + self.retry(max_tries=5, reason="Wrong captcha") + + def handlePremium(self): + header = self.load(self.pyfile.url, just_header=True) + if "location" in header: + url = header['location'] + else: + self.html = self.load(self.pyfile.url) + + self.getFileInfo() # + + if self.CREDIT_PATTERN in self.html: + self.logWarning("Not enough traffic left") + self.resetAccount() + else: + m = re.search(self.PREMIUM_URL_PATTERN, self.html) + if m: + url = m.group(1) + else: + self.parseError("Premium URL") + + self.logDebug("PREMIUM URL: " + url) + self.download(url, disposition=True) + + check = self.checkDownload({"credit": re.compile(self.CREDIT_PATTERN)}) + if check == "credit": + self.resetAccount() + + +getInfo = create_getInfo(FastshareCz) diff --git a/pyload/plugins/hoster/File4safeCom.py b/pyload/plugins/hoster/File4safeCom.py new file mode 100644 index 000000000..4aa0e26a4 --- /dev/null +++ b/pyload/plugins/hoster/File4safeCom.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- + +import re + +from pycurl import FOLLOWLOCATION + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class File4safeCom(XFileSharingPro): + __name__ = "File4safeCom" + __type__ = "hoster" + __version__ = "0.02" + + __pattern__ = r'https?://(?:www\.)?file4safe\.com/\w+' + + __description__ = """File4safe.com hoster plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + HOSTER_NAME = "file4safe.com" + + + def handlePremium(self): + self.req.http.lastURL = self.pyfile.url + + self.req.http.c.setopt(FOLLOWLOCATION, 0) + self.load(self.pyfile.url, post=self.getPostParameters(), decode=True) + self.header = self.req.http.header + self.req.http.c.setopt(FOLLOWLOCATION, 1) + + m = re.search(r"Location\s*:\s*(.*)", self.header, re.I) + if m and re.match(self.LINK_PATTERN, m.group(1)): + location = m.group(1).strip() + self.startDownload(location) + else: + self.parseError("Unable to detect premium download link") + + +getInfo = create_getInfo(File4safeCom) diff --git a/pyload/plugins/hoster/FileApeCom.py b/pyload/plugins/hoster/FileApeCom.py new file mode 100644 index 000000000..8c6305631 --- /dev/null +++ b/pyload/plugins/hoster/FileApeCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class FileApeCom(DeadHoster): + __name__ = "FileApeCom" + __type__ = "hoster" + __version__ = "0.12" + + __pattern__ = r'http://(?:www\.)?fileape\.com/(index\.php\?act=download\&id=|dl/)\w+' + + __description__ = """FileApe.com hoster plugin""" + __author_name__ = "espes" + __author_mail__ = None + + +getInfo = create_getInfo(FileApeCom) diff --git a/pyload/plugins/hoster/FileParadoxIn.py b/pyload/plugins/hoster/FileParadoxIn.py new file mode 100644 index 000000000..955a9726b --- /dev/null +++ b/pyload/plugins/hoster/FileParadoxIn.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class FileParadoxIn(XFileSharingPro): + __name__ = "FileParadoxIn" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'https?://(?:www\.)?fileparadox\.in/\w+' + + __description__ = """FileParadox.in hoster plugin""" + __author_name__ = "RazorWing" + __author_mail__ = "muppetuk1@hotmail.com" + + HOSTER_NAME = "fileparadox.in" + + FILE_SIZE_PATTERN = r'</font>\s*\(\s*(?P<S>[^)]+)\s*\)</font>' + LINK_PATTERN = r'(http://([^/]*?fileparadox.in|\d+\.\d+\.\d+\.\d+)(:\d+/d/|/files/\w+/\w+/)[^"\'<]+)' + + +getInfo = create_getInfo(FileParadoxIn) diff --git a/pyload/plugins/hoster/FileStoreTo.py b/pyload/plugins/hoster/FileStoreTo.py new file mode 100644 index 000000000..6a2963ec2 --- /dev/null +++ b/pyload/plugins/hoster/FileStoreTo.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class FileStoreTo(SimpleHoster): + __name__ = "FileStoreTo" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?filestore\.to/\?d=(?P<ID>\w+)' + + __description__ = """FileStore.to hoster plugin""" + __author_name__ = ("Walter Purcaro", "stickell") + __author_mail__ = ("vuolter@gmail.com", "l.stickell@yahoo.it") + + FILE_INFO_PATTERN = r'File: <span[^>]*>(?P<N>.+)</span><br />Size: (?P<S>[\d,.]+) (?P<U>\w+)' + OFFLINE_PATTERN = r'>Download-Datei wurde nicht gefunden<' + + + def setup(self): + self.resumeDownload = self.multiDL = True + + def handleFree(self): + self.wait(10) + ldc = re.search(r'wert="(\w+)"', self.html).group(1) + link = self.load("http://filestore.to/ajax/download.php", get={"LDC": ldc}) + self.logDebug("Download link = " + link) + self.download(link) + + +getInfo = create_getInfo(FileStoreTo) diff --git a/pyload/plugins/hoster/FilebeerInfo.py b/pyload/plugins/hoster/FilebeerInfo.py new file mode 100644 index 000000000..561660148 --- /dev/null +++ b/pyload/plugins/hoster/FilebeerInfo.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class FilebeerInfo(DeadHoster): + __name__ = "FilebeerInfo" + __type__ = "hoster" + __version__ = "0.03" + + __pattern__ = r'http://(?:www\.)?filebeer\.info/(?!\d*~f)(?P<ID>\w+).*' + + __description__ = """Filebeer.info plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + +getInfo = create_getInfo(FilebeerInfo) diff --git a/pyload/plugins/hoster/FilecloudIo.py b/pyload/plugins/hoster/FilecloudIo.py new file mode 100644 index 000000000..05753a67e --- /dev/null +++ b/pyload/plugins/hoster/FilecloudIo.py @@ -0,0 +1,115 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.common.json_layer import json_loads +from pyload.plugins.internal.CaptchaService import ReCaptcha +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class FilecloudIo(SimpleHoster): + __name__ = "FilecloudIo" + __type__ = "hoster" + __version__ = "0.02" + + __pattern__ = r'http://(?:www\.)?(?:filecloud\.io|ifile\.it|mihd\.net)/(?P<ID>\w+).*' + + __description__ = """Filecloud.io hoster plugin""" + __author_name__ = ("zoidberg", "stickell") + __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") + + FILE_SIZE_PATTERN = r'{var __ab1 = (?P<S>\d+);}' + FILE_NAME_PATTERN = r'id="aliasSpan">(?P<N>.*?) <' + OFFLINE_PATTERN = r'l10n.(FILES__DOESNT_EXIST|REMOVED)' + TEMP_OFFLINE_PATTERN = r'l10n.FILES__WARNING' + + UKEY_PATTERN = r"'ukey'\s*:'(\w+)'," + AB1_PATTERN = r"if\( __ab1 == '(\w+)' \)" + ERROR_MSG_PATTERN = r'var __error_msg\s*=\s*l10n\.(.*?);' + LINK_PATTERN = r'"(http://s\d+.filecloud.io/%s/\d+/.*?)"' + RECAPTCHA_KEY_PATTERN = r"var __recaptcha_public\s*=\s*'([^']+)';" + RECAPTCHA_KEY = "6Lf5OdISAAAAAEZObLcx5Wlv4daMaASRov1ysDB1" + + + def setup(self): + self.resumeDownload = self.multiDL = True + self.chunkLimit = 1 + + def handleFree(self): + data = {"ukey": self.file_info['ID']} + + m = re.search(self.AB1_PATTERN, self.html) + if m is None: + self.parseError("__AB1") + data['__ab1'] = m.group(1) + + if not self.account: + self.fail("User not logged in") + elif not self.account.logged_in: + recaptcha = ReCaptcha(self) + captcha_challenge, captcha_response = recaptcha.challenge(self.RECAPTCHA_KEY) + self.account.form_data = {"recaptcha_challenge_field": captcha_challenge, + "recaptcha_response_field": captcha_response} + self.account.relogin(self.user) + self.retry(2) + + json_url = "http://filecloud.io/download-request.json" + response = self.load(json_url, post=data) + self.logDebug(response) + response = json_loads(response) + + if "error" in response and response['error']: + self.fail(response) + + self.logDebug(response) + if response['captcha']: + recaptcha = ReCaptcha(self) + m = re.search(self.RECAPTCHA_KEY_PATTERN, self.html) + captcha_key = m.group(1) if m else self.RECAPTCHA_KEY + data['ctype'] = "recaptcha" + + for _ in xrange(5): + data['recaptcha_challenge'], data['recaptcha_response'] = recaptcha.challenge(captcha_key) + + json_url = "http://filecloud.io/download-request.json" + response = self.load(json_url, post=data) + self.logDebug(response) + response = json_loads(response) + + if "retry" in response and response['retry']: + self.invalidCaptcha() + else: + self.correctCaptcha() + break + else: + self.fail("Incorrect captcha") + + if response['dl']: + self.html = self.load('http://filecloud.io/download.html') + m = re.search(self.LINK_PATTERN % self.file_info['ID'], self.html) + if m is None: + self.parseError("Download URL") + download_url = m.group(1) + self.logDebug("Download URL: %s" % download_url) + + if "size" in self.file_info and self.file_info['size']: + self.check_data = {"size": int(self.file_info['size'])} + self.download(download_url) + else: + self.fail("Unexpected server response") + + def handlePremium(self): + akey = self.account.getAccountData(self.user)['akey'] + ukey = self.file_info['ID'] + self.logDebug("Akey: %s | Ukey: %s" % (akey, ukey)) + rep = self.load("http://api.filecloud.io/api-fetch_download_url.api", + post={"akey": akey, "ukey": ukey}) + self.logDebug("FetchDownloadUrl: " + rep) + rep = json_loads(rep) + if rep['status'] == 'ok': + self.download(rep['download_url'], disposition=True) + else: + self.fail(rep['message']) + + +getInfo = create_getInfo(FilecloudIo) diff --git a/pyload/plugins/hoster/FilefactoryCom.py b/pyload/plugins/hoster/FilefactoryCom.py new file mode 100644 index 000000000..fafe96477 --- /dev/null +++ b/pyload/plugins/hoster/FilefactoryCom.py @@ -0,0 +1,106 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo + + +def getInfo(urls): + for url in urls: + h = getURL(url, just_header=True) + m = re.search(r'Location: (.+)\r\n', h) + if m and not re.match(m.group(1), FilefactoryCom.__pattern__): # It's a direct link! Skipping + yield (url, 0, 3, url) + else: # It's a standard html page + file_info = parseFileInfo(FilefactoryCom, url, getURL(url)) + yield file_info + + +class FilefactoryCom(SimpleHoster): + __name__ = "FilefactoryCom" + __type__ = "hoster" + __version__ = "0.50" + + __pattern__ = r'https?://(?:www\.)?filefactory\.com/file/(?P<id>[a-zA-Z0-9]+)' + + __description__ = """Filefactory.com hoster plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + FILE_INFO_PATTERN = r'<div id="file_name"[^>]*>\s*<h2>(?P<N>[^<]+)</h2>\s*<div id="file_info">\s*(?P<S>[\d.]+) (?P<U>\w+) uploaded' + LINK_PATTERN = r'<a href="(https?://[^"]+)"[^>]*><i[^>]*></i> Download with FileFactory Premium</a>' + OFFLINE_PATTERN = r'<h2>File Removed</h2>|This file is no longer available' + PREMIUM_ONLY_PATTERN = r'>Premium Account Required<' + + SH_COOKIES = [(".filefactory.com", "locale", "en_US.utf8")] + + + def handleFree(self): + self.html = self.load(self.pyfile.url, decode=True) + if "Currently only Premium Members can download files larger than" in self.html: + self.fail("File too large for free download") + elif "All free download slots on this server are currently in use" in self.html: + self.retry(50, 15 * 60, "All free slots are busy") + + m = re.search(r'data-href(?:-direct)?="(http://[^"]+)"', self.html) + if m: + t = re.search(r'<div id="countdown_clock" data-delay="(\d+)">', self.html) + if t: + t = t.group(1) + else: + self.logDebug("Unable to detect countdown duration. Guessing 60 seconds") + t = 60 + self.wait(t) + direct = m.group(1) + else: # This section could be completely useless now + # Load the page that contains the direct link + url = re.search(r"document\.location\.host \+\s*'(.+)';", self.html) + if url is None: + self.parseError('Unable to detect free link') + url = 'http://www.filefactory.com' + url.group(1) + self.html = self.load(url, decode=True) + + # Free downloads wait time + waittime = re.search(r'id="startWait" value="(\d+)"', self.html) + if not waittime: + self.parseError('Unable to detect wait time') + self.wait(int(waittime.group(1))) + + # Parse the direct link and download it + direct = re.search(r'data-href(?:-direct)?="(.*)" class="button', self.html) + if not direct: + self.parseError('Unable to detect free direct link') + direct = direct.group(1) + + self.logDebug('DIRECT LINK: ' + direct) + self.download(direct, disposition=True) + + check = self.checkDownload({"multiple": "You are currently downloading too many files at once.", + "error": '<div id="errorMessage">'}) + + if check == "multiple": + self.logDebug("Parallel downloads detected; waiting 15 minutes") + self.retry(wait_time=15 * 60, reason="Parallel downloads") + elif check == "error": + self.fail("Unknown error") + + def handlePremium(self): + header = self.load(self.pyfile.url, just_header=True) + if 'location' in header: + url = header['location'].strip() + if not url.startswith("http://"): + url = "http://www.filefactory.com" + url + elif 'content-disposition' in header: + url = self.pyfile.url + else: + self.logInfo('You could enable "Direct Downloads" on http://filefactory.com/account/') + html = self.load(self.pyfile.url) + m = re.search(self.LINK_PATTERN, html) + if m: + url = m.group(1) + else: + self.parseError('Unable to detect premium direct link') + + self.logDebug('DIRECT PREMIUM LINK: ' + url) + self.download(url, disposition=True) diff --git a/pyload/plugins/hoster/FilejungleCom.py b/pyload/plugins/hoster/FilejungleCom.py new file mode 100644 index 000000000..0bbc7502e --- /dev/null +++ b/pyload/plugins/hoster/FilejungleCom.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.hoster.FileserveCom import FileserveCom, checkFile +from pyload.plugins.Plugin import chunks + + +class FilejungleCom(FileserveCom): + __name__ = "FilejungleCom" + __type__ = "hoster" + __version__ = "0.51" + + __pattern__ = r'http://(?:www\.)?filejungle\.com/f/(?P<id>[^/]+).*' + + __description__ = """Filejungle.com hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + URLS = ["http://www.filejungle.com/f/", "http://www.filejungle.com/check_links.php", + "http://www.filejungle.com/checkReCaptcha.php"] + LINKCHECK_TR = r'<li>\s*(<div class="col1">.*?)</li>' + LINKCHECK_TD = r'<div class="(?:col )?col\d">(?:<[^>]*>| )*([^<]*)' + + LONG_WAIT_PATTERN = r'<h1>Please wait for (\d+) (\w+)\s*to download the next file\.</h1>' + + +def getInfo(urls): + for chunk in chunks(urls, 100): + yield checkFile(FilejungleCom, chunk) diff --git a/pyload/plugins/hoster/FileomCom.py b/pyload/plugins/hoster/FileomCom.py new file mode 100644 index 000000000..11052e289 --- /dev/null +++ b/pyload/plugins/hoster/FileomCom.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# http://fileom.com/gycaytyzdw3g/random.bin.html + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class FileomCom(XFileSharingPro): + __name__ = "FileomCom" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'https?://(?:www\.)?fileom\.com/\w+' + + __description__ = """Fileom.com hoster plugin""" + __author_name__ = "Walter Purcaro" + __author_mail__ = "vuolter@gmail.com" + + HOSTER_NAME = "fileom.com" + + FILE_URL_REPLACEMENTS = [(r'/$', "")] + SH_COOKIES = [(".fileom.com", "lang", "english")] + + FILE_NAME_PATTERN = r'Filename: <span>(?P<N>.+?)<' + FILE_SIZE_PATTERN = r'File Size: <span class="size">(?P<S>[\d\.]+) (?P<U>\w+)' + + ERROR_PATTERN = r'class=["\']err["\'][^>]*>(.*?)(?:\'|</)' + + LINK_PATTERN = r"var url2 = '(.+?)';" + + + def setup(self): + self.resumeDownload = self.premium + self.multiDL = True + self.chunkLimit = 1 + + +getInfo = create_getInfo(FileomCom) diff --git a/pyload/plugins/hoster/FilepostCom.py b/pyload/plugins/hoster/FilepostCom.py new file mode 100644 index 000000000..ac2ae4845 --- /dev/null +++ b/pyload/plugins/hoster/FilepostCom.py @@ -0,0 +1,129 @@ +# -*- coding: utf-8 -*- + +import re + +from time import time + +from pyload.common.json_layer import json_loads +from pyload.plugins.internal.CaptchaService import ReCaptcha +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class FilepostCom(SimpleHoster): + __name__ = "FilepostCom" + __type__ = "hoster" + __version__ = "0.28" + + __pattern__ = r'https?://(?:www\.)?(?:filepost\.com/files|fp.io)/([^/]+).*' + + __description__ = """Filepost.com hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_INFO_PATTERN = r'<input type="text" id="url" value=\'<a href[^>]*>(?P<N>[^>]+?) - (?P<S>[0-9\.]+ [kKMG]i?B)</a>\' class="inp_text"/>' + OFFLINE_PATTERN = r'class="error_msg_title"> Invalid or Deleted File. </div>|<div class="file_info file_info_deleted">' + + PREMIUM_ONLY_PATTERN = r'members only. Please upgrade to premium|a premium membership is required to download this file' + RECAPTCHA_KEY_PATTERN = r"Captcha.init\({\s*key:\s*'([^']+)'" + FLP_TOKEN_PATTERN = r"set_store_options\({token: '([^']+)'" + + + def handleFree(self): + # Find token and captcha key + file_id = re.match(self.__pattern__, self.pyfile.url).group(1) + + m = re.search(self.FLP_TOKEN_PATTERN, self.html) + if m is None: + self.parseError("Token") + flp_token = m.group(1) + + m = re.search(self.RECAPTCHA_KEY_PATTERN, self.html) + if m is None: + self.parseError("Captcha key") + captcha_key = m.group(1) + + # Get wait time + get_dict = {'SID': self.req.cj.getCookie('SID'), 'JsHttpRequest': str(int(time() * 10000)) + '-xml'} + post_dict = {'action': 'set_download', 'token': flp_token, 'code': file_id} + wait_time = int(self.getJsonResponse(get_dict, post_dict, 'wait_time')) + + if wait_time > 0: + self.wait(wait_time) + + post_dict = {"token": flp_token, "code": file_id, "file_pass": ''} + + if 'var is_pass_exists = true;' in self.html: + # Solve password + for file_pass in self.getPassword().splitlines(): + get_dict['JsHttpRequest'] = str(int(time() * 10000)) + '-xml' + post_dict['file_pass'] = file_pass + self.logInfo("Password protected link, trying " + file_pass) + + download_url = self.getJsonResponse(get_dict, post_dict, 'link') + if download_url: + break + + else: + self.fail("No or incorrect password") + + else: + # Solve recaptcha + recaptcha = ReCaptcha(self) + + for i in xrange(5): + get_dict['JsHttpRequest'] = str(int(time() * 10000)) + '-xml' + if i: + post_dict['recaptcha_challenge_field'], post_dict['recaptcha_response_field'] = recaptcha.challenge( + captcha_key) + self.logDebug(u"RECAPTCHA: %s : %s : %s" % ( + captcha_key, post_dict['recaptcha_challenge_field'], post_dict['recaptcha_response_field'])) + + download_url = self.getJsonResponse(get_dict, post_dict, 'link') + if download_url: + if i: + self.correctCaptcha() + break + elif i: + self.invalidCaptcha() + + else: + self.fail("Invalid captcha") + + # Download + self.download(download_url) + + def getJsonResponse(self, get_dict, post_dict, field): + json_response = json_loads(self.load('https://filepost.com/files/get/', get=get_dict, post=post_dict)) + self.logDebug(json_response) + + if not 'js' in json_response: + self.parseError('JSON %s 1' % field) + + # i changed js_answer to json_response['js'] since js_answer is nowhere set. + # i don't know the JSON-HTTP specs in detail, but the previous author + # accessed json_response['js']['error'] as well as js_answer['error']. + # see the two lines commented out with "# ~?". + if 'error' in json_response['js']: + if json_response['js']['error'] == 'download_delay': + self.retry(wait_time=json_response['js']['params']['next_download']) + # ~? self.retry(wait_time=js_answer['params']['next_download']) + elif 'Wrong file password' in json_response['js']['error']: + return None + elif 'You entered a wrong CAPTCHA code' in json_response['js']['error']: + return None + elif 'CAPTCHA Code nicht korrekt' in json_response['js']['error']: + return None + elif 'CAPTCHA' in json_response['js']['error']: + self.logDebug('error response is unknown, but mentions CAPTCHA -> return None') + return None + else: + self.fail(json_response['js']['error']) + # ~? self.fail(js_answer['error']) + + if not 'answer' in json_response['js'] or not field in json_response['js']['answer']: + self.parseError('JSON %s 2' % field) + + return json_response['js']['answer'][field] + + +getInfo = create_getInfo(FilepostCom) diff --git a/pyload/plugins/hoster/FilerNet.py b/pyload/plugins/hoster/FilerNet.py new file mode 100644 index 000000000..5f1b6bea8 --- /dev/null +++ b/pyload/plugins/hoster/FilerNet.py @@ -0,0 +1,109 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# http://filer.net/get/ivgf5ztw53et3ogd +# http://filer.net/get/hgo14gzcng3scbvv + +import pycurl +import re + +from urlparse import urljoin + +from pyload.plugins.internal.CaptchaService import ReCaptcha +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class FilerNet(SimpleHoster): + __name__ = "FilerNet" + __type__ = "hoster" + __version__ = "0.03" + + __pattern__ = r'https?://(?:www\.)?filer\.net/get/(\w+)' + + __description__ = """Filer.net hoster plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + FILE_INFO_PATTERN = r'<h1 class="page-header">Free Download (?P<N>\S+) <small>(?P<S>[\w.]+) (?P<U>\w+)</small></h1>' + OFFLINE_PATTERN = r'Nicht gefunden' + RECAPTCHA_KEY = "6LcFctISAAAAAAgaeHgyqhNecGJJRnxV1m_vAz3V" + LINK_PATTERN = r'href="([^"]+)">Get download</a>' + + + def process(self, pyfile): + if self.premium and (not self.SH_CHECK_TRAFFIC or self.checkTrafficLeft()): + self.handlePremium() + else: + self.handleFree() + + def handleFree(self): + self.req.setOption("timeout", 120) + self.html = self.load(self.pyfile.url, decode=not self.SH_BROKEN_ENCODING, cookies=self.SH_COOKIES) + + # Wait between downloads + m = re.search(r'musst du <span id="time">(\d+)</span> Sekunden warten', self.html) + if m: + waittime = int(m.group(1)) + self.retry(3, waittime, "Wait between free downloads") + + self.getFileInfo() + + self.html = self.load(self.pyfile.url, decode=True) + + inputs = self.parseHtmlForm(input_names='token')[1] + if 'token' not in inputs: + self.parseError('Unable to detect token') + token = inputs['token'] + self.logDebug('Token: ' + token) + + self.html = self.load(self.pyfile.url, post={'token': token}, decode=True) + + inputs = self.parseHtmlForm(input_names='hash')[1] + if 'hash' not in inputs: + self.parseError('Unable to detect hash') + hash_data = inputs['hash'] + self.logDebug('Hash: ' + hash_data) + + downloadURL = r'' + recaptcha = ReCaptcha(self) + for _ in xrange(5): + challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY) + post_data = {'recaptcha_challenge_field': challenge, + 'recaptcha_response_field': response, + 'hash': hash_data} + + # Workaround for 0.4.9 just_header issue. In 0.5 clean the code using just_header + self.req.http.c.setopt(pycurl.FOLLOWLOCATION, 0) + self.load(self.pyfile.url, post=post_data) + self.req.http.c.setopt(pycurl.FOLLOWLOCATION, 1) + + if 'location' in self.req.http.header.lower(): + location = re.search(r'location: (\S+)', self.req.http.header, re.I).group(1) + downloadURL = urljoin('http://filer.net', location) + self.correctCaptcha() + break + else: + self.logInfo('Wrong captcha') + self.invalidCaptcha() + + if not downloadURL: + self.fail("No Download url retrieved/all captcha attempts failed") + + self.download(downloadURL, disposition=True) + + def handlePremium(self): + header = self.load(self.pyfile.url, just_header=True) + if 'location' in header: # Direct Download ON + dl = self.pyfile.url + else: # Direct Download OFF + html = self.load(self.pyfile.url) + m = re.search(self.LINK_PATTERN, html) + if m is None: + self.parseError("Unable to detect direct link, try to enable 'Direct download' in your user settings") + dl = 'http://filer.net' + m.group(1) + + self.logDebug('Direct link: ' + dl) + self.download(dl, disposition=True) + + +getInfo = create_getInfo(FilerNet) diff --git a/pyload/plugins/hoster/FilerioCom.py b/pyload/plugins/hoster/FilerioCom.py new file mode 100644 index 000000000..31d04b0ee --- /dev/null +++ b/pyload/plugins/hoster/FilerioCom.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class FilerioCom(XFileSharingPro): + __name__ = "FilerioCom" + __type__ = "hoster" + __version__ = "0.02" + + __pattern__ = r'http://(?:www\.)?(filerio\.(in|com)|filekeen\.com)/\w{12}' + + __description__ = """FileRio.in hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + HOSTER_NAME = "filerio.in" + + OFFLINE_PATTERN = r'<b>"File Not Found"</b>|File has been removed due to Copyright Claim' + FILE_URL_REPLACEMENTS = [(r'http://.*?/', 'http://filerio.in/')] + + + def setup(self): + self.resumeDownload = self.multiDL = self.premium + + +getInfo = create_getInfo(FilerioCom) diff --git a/pyload/plugins/hoster/FilesMailRu.py b/pyload/plugins/hoster/FilesMailRu.py new file mode 100644 index 000000000..01d9c256a --- /dev/null +++ b/pyload/plugins/hoster/FilesMailRu.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.network.RequestFactory import getURL +from pyload.plugins.Hoster import Hoster +from pyload.plugins.Plugin import chunks + + +def getInfo(urls): + result = [] + for chunk in chunks(urls, 10): + for url in chunk: + src = getURL(url) + if r'<div class="errorMessage mb10">' in src: + result.append((url, 0, 1, url)) + elif r'Page cannot be displayed' in src: + result.append((url, 0, 1, url)) + else: + try: + url_pattern = '<a href="(.+?)" onclick="return Act\(this\, \'dlink\'\, event\)">(.+?)</a>' + file_name = re.search(url_pattern, src).group(0).split(', event)">')[1].split('</a>')[0] + result.append((file_name, 0, 2, url)) + except: + pass + + # status 1=OFFLINE, 2=OK, 3=UNKNOWN + # result.append((#name,#size,#status,#url)) + yield result + + +class FilesMailRu(Hoster): + __name__ = "FilesMailRu" + __type__ = "hoster" + __version__ = "0.31" + + __pattern__ = r'http://(?:www\.)?files\.mail\.ru/.*' + + __description__ = """Files.mail.ru hoster plugin""" + __author_name__ = "oZiRiz" + __author_mail__ = "ich@oziriz.de" + + + def setup(self): + if not self.account: + self.multiDL = False + + def process(self, pyfile): + self.html = self.load(pyfile.url) + self.url_pattern = '<a href="(.+?)" onclick="return Act\(this\, \'dlink\'\, event\)">(.+?)</a>' + + #marks the file as "offline" when the pattern was found on the html-page''' + if r'<div class="errorMessage mb10">' in self.html: + self.offline() + + elif r'Page cannot be displayed' in self.html: + self.offline() + + #the filename that will be showed in the list (e.g. test.part1.rar)''' + pyfile.name = self.getFileName() + + #prepare and download''' + if not self.account: + self.prepare() + self.download(self.getFileUrl()) + self.myPostProcess() + else: + self.download(self.getFileUrl()) + self.myPostProcess() + + def prepare(self): + """You have to wait some seconds. Otherwise you will get a 40Byte HTML Page instead of the file you expected""" + self.setWait(10) + self.wait() + return True + + def getFileUrl(self): + """gives you the URL to the file. Extracted from the Files.mail.ru HTML-page stored in self.html""" + return re.search(self.url_pattern, self.html).group(0).split('<a href="')[1].split('" onclick="return Act')[0] + + def getFileName(self): + """gives you the Name for each file. Also extracted from the HTML-Page""" + return re.search(self.url_pattern, self.html).group(0).split(', event)">')[1].split('</a>')[0] + + def myPostProcess(self): + # searches the file for HTMl-Code. Sometimes the Redirect + # doesn't work (maybe a curl Problem) and you get only a small + # HTML file and the Download is marked as "finished" + # then the download will be restarted. It's only bad for these + # who want download a HTML-File (it's one in a million ;-) ) + # + # The maximum UploadSize allowed on files.mail.ru at the moment is 100MB + # so i set it to check every download because sometimes there are downloads + # that contain the HTML-Text and 60MB ZEROs after that in a xyzfile.part1.rar file + # (Loading 100MB in to ram is not an option) + check = self.checkDownload({"html": "<meta name="}, read_size=50000) + if check == "html": + self.logInfo(_( + "There was HTML Code in the Downloaded File (%s)...redirect error? The Download will be restarted." % + self.pyfile.name)) + self.retry() diff --git a/pyload/plugins/hoster/FileserveCom.py b/pyload/plugins/hoster/FileserveCom.py new file mode 100644 index 000000000..15830b759 --- /dev/null +++ b/pyload/plugins/hoster/FileserveCom.py @@ -0,0 +1,209 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.common.json_layer import json_loads +from pyload.network.RequestFactory import getURL +from pyload.plugins.Hoster import Hoster +from pyload.plugins.Plugin import chunks +from pyload.plugins.hoster.UnrestrictLi import secondsToMidnight +from pyload.plugins.internal.CaptchaService import ReCaptcha +from pyload.utils import parseFileSize + + +def checkFile(plugin, urls): + html = getURL(plugin.URLS[1], post={"urls": "\n".join(urls)}, decode=True) + + file_info = [] + for li in re.finditer(plugin.LINKCHECK_TR, html, re.DOTALL): + try: + cols = re.findall(plugin.LINKCHECK_TD, li.group(1)) + if cols: + file_info.append(( + cols[1] if cols[1] != '--' else cols[0], + parseFileSize(cols[2]) if cols[2] != '--' else 0, + 2 if cols[3].startswith('Available') else 1, + cols[0])) + except Exception, e: + continue + + return file_info + + +class FileserveCom(Hoster): + __name__ = "FileserveCom" + __type__ = "hoster" + __version__ = "0.52" + + __pattern__ = r'http://(?:www\.)?fileserve\.com/file/(?P<id>[^/]+).*' + + __description__ = """Fileserve.com hoster plugin""" + __author_name__ = ("jeix", "mkaay", "Paul King", "zoidberg") + __author_mail__ = ("jeix@hasnomail.de", "mkaay@mkaay.de", "", "zoidberg@mujmail.cz") + + URLS = ["http://www.fileserve.com/file/", "http://www.fileserve.com/link-checker.php", + "http://www.fileserve.com/checkReCaptcha.php"] + LINKCHECK_TR = r'<tr>\s*(<td>http://www.fileserve\.com/file/.*?)</tr>' + LINKCHECK_TD = r'<td>(?:<[^>]*>| )*([^<]*)' + + CAPTCHA_KEY_PATTERN = r"var reCAPTCHA_publickey='(?P<key>[^']+)'" + LONG_WAIT_PATTERN = r'<li class="title">You need to wait (\d+) (\w+) to start another download\.</li>' + LINK_EXPIRED_PATTERN = r'Your download link has expired' + DAILY_LIMIT_PATTERN = r'Your daily download limit has been reached' + NOT_LOGGED_IN_PATTERN = r'<form (name="loginDialogBoxForm"|id="login_form")|<li><a href="/login.php">Login</a></li>' + + + def setup(self): + self.resumeDownload = self.multiDL = self.premium + + self.file_id = re.match(self.__pattern__, self.pyfile.url).group('id') + self.url = "%s%s" % (self.URLS[0], self.file_id) + self.logDebug("File ID: %s URL: %s" % (self.file_id, self.url)) + + def process(self, pyfile): + pyfile.name, pyfile.size, status, self.url = checkFile(self, [self.url])[0] + if status != 2: + self.offline() + self.logDebug("File Name: %s Size: %d" % (pyfile.name, pyfile.size)) + + if self.premium: + self.handlePremium() + else: + self.handleFree() + + def handleFree(self): + self.html = self.load(self.url) + action = self.load(self.url, post={"checkDownload": "check"}, decode=True) + action = json_loads(action) + self.logDebug(action) + + if "fail" in action: + if action['fail'] == "timeLimit": + self.html = self.load(self.url, post={"checkDownload": "showError", "errorType": "timeLimit"}, + decode=True) + + self.doLongWait(re.search(self.LONG_WAIT_PATTERN, self.html)) + + elif action['fail'] == "parallelDownload": + self.logWarning(_("Parallel download error, now waiting 60s.")) + self.retry(wait_time=60, reason="parallelDownload") + + else: + self.fail("Download check returned %s" % action['fail']) + + elif "success" in action: + if action['success'] == "showCaptcha": + self.doCaptcha() + self.doTimmer() + elif action['success'] == "showTimmer": + self.doTimmer() + + else: + self.fail("Unknown server response") + + # show download link + response = self.load(self.url, post={"downloadLink": "show"}, decode=True) + self.logDebug("show downloadLink response : %s" % response) + if "fail" in response: + self.fail("Couldn't retrieve download url") + + # this may either download our file or forward us to an error page + self.download(self.url, post={"download": "normal"}) + self.logDebug(self.req.http.lastEffectiveURL) + + check = self.checkDownload({"expired": self.LINK_EXPIRED_PATTERN, + "wait": re.compile(self.LONG_WAIT_PATTERN), + "limit": self.DAILY_LIMIT_PATTERN}) + + if check == "expired": + self.logDebug("Download link was expired") + self.retry() + elif check == "wait": + self.doLongWait(self.lastCheck) + elif check == "limit": + self.logWarning("Download limited reached for today") + self.setWait(secondsToMidnight(gmt=2), True) + self.wait() + self.retry() + + self.thread.m.reconnecting.wait(3) # Ease issue with later downloads appearing to be in parallel + + def doTimmer(self): + response = self.load(self.url, post={"downloadLink": "wait"}, decode=True) + self.logDebug("wait response : %s" % response[:80]) + + if "fail" in response: + self.fail("Failed getting wait time") + + if self.__name__ == "FilejungleCom": + m = re.search(r'"waitTime":(\d+)', response) + if m is None: + self.fail("Cannot get wait time") + wait_time = int(m.group(1)) + else: + wait_time = int(response) + 3 + + self.setWait(wait_time) + self.wait() + + def doCaptcha(self): + captcha_key = re.search(self.CAPTCHA_KEY_PATTERN, self.html).group("key") + recaptcha = ReCaptcha(self) + + for _ in xrange(5): + challenge, code = recaptcha.challenge(captcha_key) + + response = json_loads(self.load(self.URLS[2], + post={'recaptcha_challenge_field': challenge, + 'recaptcha_response_field': code, + 'recaptcha_shortencode_field': self.file_id})) + self.logDebug("reCaptcha response : %s" % response) + if not response['success']: + self.invalidCaptcha() + else: + self.correctCaptcha() + break + else: + self.fail("Invalid captcha") + + def doLongWait(self, m): + wait_time = (int(m.group(1)) * {'seconds': 1, 'minutes': 60, 'hours': 3600}[m.group(2)]) if m else 12 * 60 + self.setWait(wait_time, True) + self.wait() + self.retry() + + def handlePremium(self): + premium_url = None + if self.__name__ == "FileserveCom": + #try api download + response = self.load("http://app.fileserve.com/api/download/premium/", + post={"username": self.user, + "password": self.account.getAccountData(self.user)['password'], + "shorten": self.file_id}, + decode=True) + if response: + response = json_loads(response) + if response['error_code'] == "302": + premium_url = response['next'] + elif response['error_code'] in ["305", "500"]: + self.tempOffline() + elif response['error_code'] in ["403", "605"]: + self.resetAccount() + elif response['error_code'] in ["606", "607", "608"]: + self.offline() + else: + self.logError(response['error_code'], response['error_message']) + + self.download(premium_url or self.pyfile.url) + + if not premium_url: + check = self.checkDownload({"login": re.compile(self.NOT_LOGGED_IN_PATTERN)}) + + if check == "login": + self.account.relogin(self.user) + self.retry(reason=_("Not logged in.")) + + +def getInfo(urls): + for chunk in chunks(urls, 100): + yield checkFile(FileserveCom, chunk) diff --git a/pyload/plugins/hoster/FileshareInUa.py b/pyload/plugins/hoster/FileshareInUa.py new file mode 100644 index 000000000..162217de2 --- /dev/null +++ b/pyload/plugins/hoster/FileshareInUa.py @@ -0,0 +1,83 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.network.RequestFactory import getURL +from pyload.plugins.Hoster import Hoster +from pyload.utils import parseFileSize + + +class FileshareInUa(Hoster): + __name__ = "FileshareInUa" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?fileshare.in.ua/[A-Za-z0-9]+' + + __description__ = """Fileshare.in.ua hoster plugin""" + __author_name__ = "fwannmacher" + __author_mail__ = "felipe@warhammerproject.com" + + PATTERN_FILENAME = r'<h3 class="b-filename">(.*?)</h3>' + PATTERN_FILESIZE = r'<b class="b-filesize">(.*?)</b>' + PATTERN_OFFLINE = r"This file doesn't exist, or has been removed." + + + def setup(self): + self.resumeDownload = self.multiDL = True + + def process(self, pyfile): + self.pyfile = pyfile + self.html = self.load(pyfile.url, decode=True) + + if not self._checkOnline(): + self.offline() + + pyfile.name = self._getName() + + link = self._getLink() + + if not link.startswith('http://'): + link = "http://fileshare.in.ua" + link + + self.download(link) + + def _checkOnline(self): + if re.search(self.PATTERN_OFFLINE, self.html): + return False + else: + return True + + def _getName(self): + name = re.search(self.PATTERN_FILENAME, self.html) + if name is None: + self.fail("%s: Plugin broken." % self.__name__) + + return name.group(1) + + def _getLink(self): + return re.search("<a href=\"(/get/.+)\" class=\"b-button m-blue m-big\" >", self.html).group(1) + + +def getInfo(urls): + result = [] + + for url in urls: + html = getURL(url) + + if re.search(FileshareInUa.PATTERN_OFFLINE, html): + result.append((url, 0, 1, url)) + else: + name = re.search(FileshareInUa.PATTERN_FILENAME, html) + + if name is None: + result.append((url, 0, 1, url)) + continue + + name = name.group(1) + size = re.search(FileshareInUa.PATTERN_FILESIZE, html) + size = parseFileSize(size.group(1)) + + result.append((name, size, 3, url)) + + yield result diff --git a/pyload/plugins/hoster/FilezyNet.py b/pyload/plugins/hoster/FilezyNet.py new file mode 100644 index 000000000..eeba4add0 --- /dev/null +++ b/pyload/plugins/hoster/FilezyNet.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class FilezyNet(XFileSharingPro): + __name__ = "FilezyNet" + __type__ = "hoster" + __version__ = "0.1" + + __pattern__ = r'http://(?:www\.)?filezy.net/.*/.*.html' + + __description__ = """Filezy.net hoster plugin""" + __author_name__ = None + __author_mail__ = None + + HOSTER_NAME = "filezy.net" + + FILE_SIZE_PATTERN = r'<span class="plansize">(?P<S>[0-9.]+) (?P<U>[kKMG])i?B</span>' + WAIT_PATTERN = r'<div id="countdown_str" class="seconds">\n<!--Wait--> <span id=".*?">(\d+)</span>' + DOWNLOAD_JS_PATTERN = r"<script type='text/javascript'>eval(.*)" + + + def setup(self): + self.resumeDownload = True + self.multiDL = self.premium + + def getDownloadLink(self): + self.logDebug("Getting download link") + + data = self.getPostParameters() + self.html = self.load(self.pyfile.url, post=data, ref=True, decode=True) + + obfuscated_js = re.search(self.DOWNLOAD_JS_PATTERN, self.html) + dl_file_now = self.js.eval(obfuscated_js.group(1)) + link = re.search(self.LINK_PATTERN, dl_file_now) + return link.group(1) + + +getInfo = create_getInfo(FilezyNet) diff --git a/pyload/plugins/hoster/FiredriveCom.py b/pyload/plugins/hoster/FiredriveCom.py new file mode 100644 index 000000000..a9d62bb75 --- /dev/null +++ b/pyload/plugins/hoster/FiredriveCom.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class FiredriveCom(SimpleHoster): + __name__ = "FiredriveCom" + __type__ = "hoster" + __version__ = "0.03" + + __pattern__ = r'https?://(?:www\.)?(firedrive|putlocker)\.com/(mobile/)?(file|embed)/(?P<ID>\w+)' + + __description__ = """Firedrive.com hoster plugin""" + __author_name__ = "Walter Purcaro" + __author_mail__ = "vuolter@gmail.com" + + FILE_NAME_PATTERN = r'<b>Name:</b> (?P<N>.+) <br>' + FILE_SIZE_PATTERN = r'<b>Size:</b> (?P<S>[\d.]+) (?P<U>[a-zA-Z]+) <br>' + OFFLINE_PATTERN = r'class="sad_face_image"|>No such page here.<' + TEMP_OFFLINE_PATTERN = r'>(File Temporarily Unavailable|Server Error. Try again later)' + + FILE_URL_REPLACEMENTS = [(__pattern__, r'http://www.firedrive.com/file/\g<ID>')] + + LINK_PATTERN = r'<a href="(https?://dl\.firedrive\.com/\?key=.+?)"' + + + def setup(self): + self.multiDL = self.resumeDownload = True + self.chunkLimit = -1 + + def handleFree(self): + link = self._getLink() + self.logDebug("Direct link: " + link) + self.download(link, disposition=True) + + def _getLink(self): + f = re.search(self.LINK_PATTERN, self.html) + if f: + return f.group(1) + else: + self.html = self.load(self.pyfile.url, post={"confirm": re.search(r'name="confirm" value="(.+?)"', self.html).group(1)}) + f = re.search(self.LINK_PATTERN, self.html) + if f: + return f.group(1) + else: + self.parseError("Direct download link not found") + + +getInfo = create_getInfo(FiredriveCom) diff --git a/pyload/plugins/hoster/FlyFilesNet.py b/pyload/plugins/hoster/FlyFilesNet.py new file mode 100644 index 000000000..d8d6efb7e --- /dev/null +++ b/pyload/plugins/hoster/FlyFilesNet.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- + +import re + +from urllib import unquote + +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.SimpleHoster import SimpleHoster + + +class FlyFilesNet(SimpleHoster): + __name__ = "FlyFilesNet" + __type__ = "hoster" + __version__ = "0.1" + + __pattern__ = r'http://(?:www\.)?flyfiles\.net/.*' + + __description__ = """FlyFiles.net hoster plugin""" + __author_name__ = None + __author_mail__ = None + + SESSION_PATTERN = r'flyfiles\.net/(.*)/.*' + FILE_NAME_PATTERN = r'flyfiles\.net/.*/(.*)' + + + def process(self, pyfile): + name = re.search(self.FILE_NAME_PATTERN, pyfile.url).group(1) + pyfile.name = unquote_plus(name) + + session = re.search(self.SESSION_PATTERN, pyfile.url).group(1) + + url = "http://flyfiles.net" + + # get download URL + parsed_url = getURL(url, post={"getDownLink": session}, cookies=True) + self.logDebug("Parsed URL: %s" % parsed_url) + + if parsed_url == '#downlink|' or parsed_url == "#downlink|#": + self.logWarning("Could not get the download URL. Please wait 10 minutes.") + self.wait(10 * 60, True) + self.retry() + + download_url = parsed_url.replace('#downlink|', '') + + self.logDebug("Download URL: %s" % download_url) + self.download(download_url) diff --git a/pyload/plugins/hoster/FourSharedCom.py b/pyload/plugins/hoster/FourSharedCom.py new file mode 100644 index 000000000..e2cb980a4 --- /dev/null +++ b/pyload/plugins/hoster/FourSharedCom.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class FourSharedCom(SimpleHoster): + __name__ = "FourSharedCom" + __type__ = "hoster" + __version__ = "0.29" + + __pattern__ = r'https?://(?:www\.)?4shared(\-china)?\.com/(account/)?(download|get|file|document|photo|video|audio|mp3|office|rar|zip|archive|music)/.+?/.*' + + __description__ = """4Shared.com hoster plugin""" + __author_name__ = ("jeix", "zoidberg") + __author_mail__ = ("jeix@hasnomail.de", "zoidberg@mujmail.cz") + + FILE_NAME_PATTERN = r'<meta name="title" content="(?P<N>.+?)"' + FILE_SIZE_PATTERN = r'<span title="Size: (?P<S>[0-9,.]+) (?P<U>[kKMG])i?B">' + OFFLINE_PATTERN = r'The file link that you requested is not valid\.|This file was deleted.' + + FILE_NAME_REPLACEMENTS = [(r"&#(\d+).", lambda m: unichr(int(m.group(1))))] + FILE_SIZE_REPLACEMENTS = [(",", "")] + + DOWNLOAD_URL_PATTERN = r'name="d3link" value="(.*?)"' + DOWNLOAD_BUTTON_PATTERN = r'id="btnLink" href="(.*?)"' + FID_PATTERN = r'name="d3fid" value="(.*?)"' + + + def handleFree(self): + if not self.account: + self.fail("User not logged in") + + m = re.search(self.DOWNLOAD_BUTTON_PATTERN, self.html) + if m: + link = m.group(1) + else: + link = re.sub(r'/(download|get|file|document|photo|video|audio)/', r'/get/', self.pyfile.url) + + self.html = self.load(link) + + m = re.search(self.DOWNLOAD_URL_PATTERN, self.html) + if m is None: + self.parseError('Download link') + link = m.group(1) + + try: + m = re.search(self.FID_PATTERN, self.html) + response = self.load('http://www.4shared.com/web/d2/getFreeDownloadLimitInfo?fileId=%s' % m.group(1)) + self.logDebug(response) + except: + pass + + self.wait(20) + self.download(link) + + +getInfo = create_getInfo(FourSharedCom) diff --git a/pyload/plugins/hoster/FreakshareCom.py b/pyload/plugins/hoster/FreakshareCom.py new file mode 100644 index 000000000..979b3c5f2 --- /dev/null +++ b/pyload/plugins/hoster/FreakshareCom.py @@ -0,0 +1,173 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.Hoster import Hoster +from pyload.plugins.hoster.UnrestrictLi import secondsToMidnight +from pyload.plugins.internal.CaptchaService import ReCaptcha + + +class FreakshareCom(Hoster): + __name__ = "FreakshareCom" + __type__ = "hoster" + __version__ = "0.39" + + __pattern__ = r'http://(?:www\.)?freakshare\.(net|com)/files/\S*?/' + + __description__ = """Freakshare.com hoster plugin""" + __author_name__ = ("sitacuisses", "spoob", "mkaay", "Toilal") + __author_mail__ = ("sitacuisses@yahoo.de", "spoob@pyload.org", "mkaay@mkaay.de", "toilal.dev@gmail.com") + + + def setup(self): + self.multiDL = False + self.req_opts = [] + + def process(self, pyfile): + self.pyfile = pyfile + + pyfile.url = pyfile.url.replace("freakshare.net/", "freakshare.com/") + + if self.account: + self.html = self.load(pyfile.url, cookies=False) + pyfile.name = self.get_file_name() + self.download(pyfile.url) + + else: + self.prepare() + self.get_file_url() + + self.download(pyfile.url, post=self.req_opts) + + check = self.checkDownload({"bad": "bad try", + "paralell": "> Sorry, you cant download more then 1 files at time. <", + "empty": "Warning: Unknown: Filename cannot be empty", + "wrong_captcha": "Wrong Captcha!", + "downloadserver": "No Downloadserver. Please try again later!"}) + + if check == "bad": + self.fail("Bad Try.") + elif check == "paralell": + self.setWait(300, True) + self.wait() + self.retry() + elif check == "empty": + self.fail("File not downloadable") + elif check == "wrong_captcha": + self.invalidCaptcha() + self.retry() + elif check == "downloadserver": + self.retry(5, 15 * 60, "No Download server") + + def prepare(self): + pyfile = self.pyfile + + self.wantReconnect = False + + self.download_html() + + if not self.file_exists(): + self.offline() + + self.setWait(self.get_waiting_time()) + + pyfile.name = self.get_file_name() + pyfile.size = self.get_file_size() + + self.wait() + + return True + + def download_html(self): + self.load("http://freakshare.com/index.php", {"language": "EN"}) # Set english language in server session + self.html = self.load(self.pyfile.url) + + def get_file_url(self): + """ returns the absolute downloadable filepath + """ + if not self.html: + self.download_html() + if not self.wantReconnect: + self.req_opts = self.get_download_options() # get the Post options for the Request + #file_url = self.pyfile.url + #return file_url + else: + self.offline() + + def get_file_name(self): + if not self.html: + self.download_html() + if not self.wantReconnect: + file_name = re.search(r"<h1\sclass=\"box_heading\"\sstyle=\"text-align:center;\">([^ ]+)", self.html) + if file_name is not None: + file_name = file_name.group(1) + else: + file_name = self.pyfile.url + return file_name + else: + return self.pyfile.url + + def get_file_size(self): + size = 0 + if not self.html: + self.download_html() + if not self.wantReconnect: + file_size_check = re.search( + r"<h1\sclass=\"box_heading\"\sstyle=\"text-align:center;\">[^ ]+ - ([^ ]+) (\w\w)yte", self.html) + if file_size_check is not None: + units = float(file_size_check.group(1).replace(",", "")) + pow = {'KB': 1, 'MB': 2, 'GB': 3}[file_size_check.group(2)] + size = int(units * 1024 ** pow) + + return size + + def get_waiting_time(self): + if not self.html: + self.download_html() + + if "Your Traffic is used up for today" in self.html: + self.wantReconnect = True + return secondsToMidnight(gmt=2) + + timestring = re.search('\s*var\s(?:downloadWait|time)\s=\s(\d*)[.\d]*;', self.html) + if timestring: + return int(timestring.group(1)) + 1 # add 1 sec as tenths of seconds are cut off + else: + return 60 + + def file_exists(self): + """ returns True or False + """ + if not self.html: + self.download_html() + if re.search(r"This file does not exist!", self.html) is not None: + return False + else: + return True + + def get_download_options(self): + re_envelope = re.search(r".*?value=\"Free\sDownload\".*?\n*?(.*?<.*?>\n*)*?\n*\s*?</form>", + self.html).group(0) # get the whole request + to_sort = re.findall(r"<input\stype=\"hidden\"\svalue=\"(.*?)\"\sname=\"(.*?)\"\s\/>", re_envelope) + request_options = dict((n, v) for (v, n) in to_sort) + + herewego = self.load(self.pyfile.url, None, request_options) # the actual download-Page + + # comment this in, when it doesnt work + # with open("DUMP__FS_.HTML", "w") as fp: + # fp.write(herewego) + + to_sort = re.findall(r"<input\stype=\".*?\"\svalue=\"(\S*?)\".*?name=\"(\S*?)\"\s.*?\/>", herewego) + request_options = dict((n, v) for (v, n) in to_sort) + + # comment this in, when it doesnt work as well + #print "\n\n%s\n\n" % ";".join(["%s=%s" % x for x in to_sort]) + + challenge = re.search(r"http://api\.recaptcha\.net/challenge\?k=([0-9A-Za-z]+)", herewego) + + if challenge: + re_captcha = ReCaptcha(self) + (request_options['recaptcha_challenge_field'], + request_options['recaptcha_response_field']) = re_captcha.challenge(challenge.group(1)) + + return request_options diff --git a/pyload/plugins/hoster/FreeWayMe.py b/pyload/plugins/hoster/FreeWayMe.py new file mode 100644 index 000000000..392430791 --- /dev/null +++ b/pyload/plugins/hoster/FreeWayMe.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Hoster import Hoster + + +class FreeWayMe(Hoster): + __name__ = "FreeWayMe" + __type__ = "hoster" + __version__ = "0.11" + + __pattern__ = r'https://(?:www\.)?free-way.me/.*' + + __description__ = """FreeWayMe hoster plugin""" + __author_name__ = "Nicolas Giese" + __author_mail__ = "james@free-way.me" + + + def setup(self): + self.resumeDownload = False + self.chunkLimit = 1 + self.multiDL = self.premium + + def process(self, pyfile): + if not self.account: + self.logError(_("Please enter your %s account or deactivate this plugin") % "FreeWayMe") + self.fail("No FreeWay account provided") + + self.logDebug("Old URL: %s" % pyfile.url) + + (user, data) = self.account.selectAccount() + + self.download( + "https://www.free-way.me/load.php", + get={"multiget": 7, "url": pyfile.url, "user": user, "pw": self.account.getpw(user), "json": ""}, + disposition=True) diff --git a/pyload/plugins/hoster/FreevideoCz.py b/pyload/plugins/hoster/FreevideoCz.py new file mode 100644 index 000000000..dc7dd04bd --- /dev/null +++ b/pyload/plugins/hoster/FreevideoCz.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class FreevideoCz(DeadHoster): + __name__ = "FreevideoCz" + __type__ = "hoster" + __version__ = "0.3" + + __pattern__ = r'http://(?:www\.)?freevideo\.cz/vase-videa/.+' + + __description__ = """Freevideo.cz hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + +getInfo = create_getInfo(FreevideoCz)
\ No newline at end of file diff --git a/pyload/plugins/hoster/FshareVn.py b/pyload/plugins/hoster/FshareVn.py new file mode 100644 index 000000000..5109d239d --- /dev/null +++ b/pyload/plugins/hoster/FshareVn.py @@ -0,0 +1,120 @@ +# -*- coding: utf-8 -*- + +import re + +from time import strptime, mktime, gmtime + +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo + + +def getInfo(urls): + for url in urls: + html = getURL('http://www.fshare.vn/check_link.php', post={ + "action": "check_link", + "arrlinks": url + }, decode=True) + + file_info = parseFileInfo(FshareVn, url, html) + + yield file_info + + +def doubleDecode(m): + return m.group(1).decode('raw_unicode_escape') + + +class FshareVn(SimpleHoster): + __name__ = "FshareVn" + __type__ = "hoster" + __version__ = "0.16" + + __pattern__ = r'http://(?:www\.)?fshare.vn/file/.*' + + __description__ = """FshareVn hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_INFO_PATTERN = r'<p>(?P<N>[^<]+)<\\/p>[\\trn\s]*<p>(?P<S>[0-9,.]+)\s*(?P<U>[kKMG])i?B<\\/p>' + OFFLINE_PATTERN = r'<div class=\\"f_left file_w\\"|<\\/p>\\t\\t\\t\\t\\r\\n\\t\\t<p><\\/p>\\t\\t\\r\\n\\t\\t<p>0 KB<\\/p>' + + FILE_NAME_REPLACEMENTS = [("(.*)", doubleDecode)] + + LINK_PATTERN = r'action="(http://download.*?)[#"]' + WAIT_PATTERN = ur'Lượt tải xuá»ng kế tiếp là :\s*(.*?)\s*<' + + + def process(self, pyfile): + self.html = self.load('http://www.fshare.vn/check_link.php', post={ + "action": "check_link", + "arrlinks": pyfile.url + }, decode=True) + self.getFileInfo() + + if self.premium: + self.handlePremium() + else: + self.handleFree() + self.checkDownloadedFile() + + def handleFree(self): + self.html = self.load(self.pyfile.url, decode=True) + + self.checkErrors() + + action, inputs = self.parseHtmlForm('frm_download') + self.url = self.pyfile.url + action + + if not inputs: + self.parseError('FORM') + elif 'link_file_pwd_dl' in inputs: + for password in self.getPassword().splitlines(): + self.logInfo('Password protected link, trying "%s"' % password) + inputs['link_file_pwd_dl'] = password + self.html = self.load(self.url, post=inputs, decode=True) + if not 'name="link_file_pwd_dl"' in self.html: + break + else: + self.fail("No or incorrect password") + else: + self.html = self.load(self.url, post=inputs, decode=True) + + self.checkErrors() + + m = re.search(r'var count = (\d+)', self.html) + self.setWait(int(m.group(1)) if m else 30) + + m = re.search(self.LINK_PATTERN, self.html) + if m is None: + self.parseError('FREE DL URL') + self.url = m.group(1) + self.logDebug("FREE DL URL: %s" % self.url) + + self.wait() + self.download(self.url) + + def handlePremium(self): + self.download(self.pyfile.url) + + def checkErrors(self): + if '/error.php?' in self.req.lastEffectiveURL or u"Liên kết bạn chá»n khÃŽng tá»n" in self.html: + self.offline() + + m = re.search(self.WAIT_PATTERN, self.html) + if m: + self.logInfo("Wait until %s ICT" % m.group(1)) + wait_until = mktime(strptime(m.group(1), "%d/%m/%Y %H:%M")) + self.wait(wait_until - mktime(gmtime()) - 7 * 60 * 60, True) + self.retry() + elif '<ul class="message-error">' in self.html: + self.logError("Unknown error occured or wait time not parsed") + self.retry(30, 2 * 60, "Unknown error") + + def checkDownloadedFile(self): + # check download + check = self.checkDownload({ + "not_found": "<head><title>404 Not Found</title></head>" + }) + + if check == "not_found": + self.fail("File not m on server") diff --git a/pyload/plugins/hoster/Ftp.py b/pyload/plugins/hoster/Ftp.py new file mode 100644 index 000000000..f9b3865a7 --- /dev/null +++ b/pyload/plugins/hoster/Ftp.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- + +import pycurl +import re + +from urllib import quote, unquote +from urlparse import urlparse + +from pyload.plugins.Hoster import Hoster + + +class Ftp(Hoster): + __name__ = "Ftp" + __type__ = "hoster" + __version__ = "0.41" + + __description__ = """Download from ftp directory""" + __author_name__ = ("jeix", "mkaay", "zoidberg") + __author_mail__ = ("jeix@hasnomail.com", "mkaay@mkaay.de", "zoidberg@mujmail.cz") + + + def setup(self): + self.chunkLimit = -1 + self.resumeDownload = True + + def process(self, pyfile): + parsed_url = urlparse(pyfile.url) + netloc = parsed_url.netloc + + pyfile.name = parsed_url.path.rpartition('/')[2] + try: + pyfile.name = unquote(str(pyfile.name)).decode('utf8') + except: + pass + + if not "@" in netloc: + servers = [x['login'] for x in self.account.getAllAccounts()] if self.account else [] + + if netloc in servers: + self.logDebug("Logging on to %s" % netloc) + self.req.addAuth(self.account.accounts[netloc]['password']) + else: + for pwd in pyfile.package().password.splitlines(): + if ":" in pwd: + self.req.addAuth(pwd.strip()) + break + + self.req.http.c.setopt(pycurl.NOBODY, 1) + + try: + response = self.load(pyfile.url) + except pycurl.error, e: + self.fail("Error %d: %s" % e.args) + + self.req.http.c.setopt(pycurl.NOBODY, 0) + self.logDebug(self.req.http.header) + + m = re.search(r"Content-Length:\s*(\d+)", response) + if m: + pyfile.size = int(m.group(1)) + self.download(pyfile.url) + else: + #Naive ftp directory listing + if re.search(r'^25\d.*?"', self.req.http.header, re.M): + pyfile.url = pyfile.url.rstrip('/') + pkgname = "/".join(pyfile.package().name, urlparse(pyfile.url).path.rpartition('/')[2]) + pyfile.url += '/' + self.req.http.c.setopt(48, 1) # CURLOPT_DIRLISTONLY + response = self.load(pyfile.url, decode=False) + links = [pyfile.url + quote(x) for x in response.splitlines()] + self.logDebug("LINKS", links) + self.core.api.addPackage(pkgname, links) + else: + self.fail("Unexpected server response") diff --git a/pyload/plugins/hoster/GamefrontCom.py b/pyload/plugins/hoster/GamefrontCom.py new file mode 100644 index 000000000..5d88fc0db --- /dev/null +++ b/pyload/plugins/hoster/GamefrontCom.py @@ -0,0 +1,84 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.network.RequestFactory import getURL +from pyload.plugins.Hoster import Hoster +from pyload.utils import parseFileSize + + +class GamefrontCom(Hoster): + __name__ = "GamefrontCom" + __type__ = "hoster" + __version__ = "0.04" + + __pattern__ = r'http://(?:www\.)?gamefront.com/files/[A-Za-z0-9]+' + + __description__ = """Gamefront.com hoster plugin""" + __author_name__ = "fwannmacher" + __author_mail__ = "felipe@warhammerproject.com" + + PATTERN_FILENAME = r'<title>(.*?) | Game Front' + PATTERN_FILESIZE = r'<dt>File Size:</dt>[\n\s]*<dd>(.*?)</dd>' + PATTERN_OFFLINE = r"This file doesn't exist, or has been removed." + + + def setup(self): + self.resumeDownload = self.multiDL = True + self.chunkLimit = -1 + + def process(self, pyfile): + self.pyfile = pyfile + self.html = self.load(pyfile.url, decode=True) + + if not self._checkOnline(): + self.offline() + + pyfile.name = self._getName() + + link = self._getLink() + + if not link.startswith('http://'): + link = "http://www.gamefront.com/" + link + + self.download(link) + + def _checkOnline(self): + if re.search(self.PATTERN_OFFLINE, self.html): + return False + else: + return True + + def _getName(self): + name = re.search(self.PATTERN_FILENAME, self.html) + if name is None: + self.fail("%s: Plugin broken." % self.__name__) + + return name.group(1) + + def _getLink(self): + self.html2 = self.load("http://www.gamefront.com/" + re.search("(files/service/thankyou\\?id=[A-Za-z0-9]+)", + self.html).group(1)) + return re.search("<a href=\"(http://media[0-9]+\.gamefront.com/.*)\">click here</a>", self.html2).group(1).replace("&", "&") + + +def getInfo(urls): + result = [] + + for url in urls: + html = getURL(url) + + if re.search(GamefrontCom.PATTERN_OFFLINE, html): + result.append((url, 0, 1, url)) + else: + name = re.search(GamefrontCom.PATTERN_FILENAME, html) + if name is None: + result.append((url, 0, 1, url)) + else: + name = name.group(1) + size = re.search(GamefrontCom.PATTERN_FILESIZE, html) + size = parseFileSize(size.group(1)) + + result.append((name, size, 3, url)) + + yield result diff --git a/pyload/plugins/hoster/GigapetaCom.py b/pyload/plugins/hoster/GigapetaCom.py new file mode 100644 index 000000000..d09a1fb0c --- /dev/null +++ b/pyload/plugins/hoster/GigapetaCom.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- + +import re + +from pycurl import FOLLOWLOCATION +from random import randint + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class GigapetaCom(SimpleHoster): + __name__ = "GigapetaCom" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?gigapeta\.com/dl/\w+' + + __description__ = """GigaPeta.com hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_NAME_PATTERN = r'<img src=".*" alt="file" />-->\s*(?P<N>.*?)\s*</td>' + FILE_SIZE_PATTERN = r'<th>\s*Size\s*</th>\s*<td>\s*(?P<S>.*?)\s*</td>' + OFFLINE_PATTERN = r'<div id="page_error">' + + SH_COOKIES = [(".gigapeta.com", "lang", "us")] + + + def handleFree(self): + captcha_key = str(randint(1, 100000000)) + captcha_url = "http://gigapeta.com/img/captcha.gif?x=%s" % captcha_key + + self.req.http.c.setopt(FOLLOWLOCATION, 0) + + for _ in xrange(5): + self.checkErrors() + + captcha = self.decryptCaptcha(captcha_url) + self.html = self.load(self.pyfile.url, post={ + "captcha_key": captcha_key, + "captcha": captcha, + "download": "Download"}) + + m = re.search(r"Location\s*:\s*(.*)", self.req.http.header, re.I) + if m: + download_url = m.group(1) + break + elif "Entered figures don`t coincide with the picture" in self.html: + self.invalidCaptcha() + else: + self.fail("No valid captcha code entered") + + self.req.http.c.setopt(FOLLOWLOCATION, 1) + self.logDebug("Download URL: %s" % download_url) + self.download(download_url) + + def checkErrors(self): + if "All threads for IP" in self.html: + self.logDebug("Your IP is already downloading a file - wait and retry") + self.wait(5 * 60, True) + self.retry() + + +getInfo = create_getInfo(GigapetaCom) diff --git a/pyload/plugins/hoster/GooIm.py b/pyload/plugins/hoster/GooIm.py new file mode 100644 index 000000000..13598a8b6 --- /dev/null +++ b/pyload/plugins/hoster/GooIm.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# https://goo.im/devs/liquidsmooth/3.x/codina/Nightly/LS-KK-v3.2-2014-08-01-codina.zip + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class GooIm(SimpleHoster): + __name__ = "GooIm" + __type__ = "hoster" + __version__ = "0.03" + + __pattern__ = r'https?://(?:www\.)?goo\.im/.+' + + __description__ = """Goo.im hoster plugin""" + __author_name__ = "zapp-brannigan" + __author_mail__ = "fuerst.reinje@web.de" + + FILE_NAME_PATTERN = r'You will be redirected to .*(?P<N>[^/ ]+) in' + OFFLINE_PATTERN = r'The file you requested was not found' + + + def setup(self): + self.multiDL = self.resumeDownload = True + + def handleFree(self): + url = self.pyfile.url + self.html = self.load(url, cookies=True) + self.wait(10) + self.download(url, cookies=True) + + +getInfo = create_getInfo(GooIm) diff --git a/pyload/plugins/hoster/HellshareCz.py b/pyload/plugins/hoster/HellshareCz.py new file mode 100644 index 000000000..5f3236876 --- /dev/null +++ b/pyload/plugins/hoster/HellshareCz.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class HellshareCz(SimpleHoster): + __name__ = "HellshareCz" + __type__ = "hoster" + __version__ = "0.82" + + __pattern__ = r'(http://(?:www\.)?hellshare\.(?:cz|com|sk|hu|pl)/[^?]*/\d+).*' + + __description__ = """Hellshare.cz hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_NAME_PATTERN = r'<h1 id="filename"[^>]*>(?P<N>[^<]+)</h1>' + FILE_SIZE_PATTERN = r'<strong id="FileSize_master">(?P<S>[0-9.]*) (?P<U>[kKMG])i?B</strong>' + OFFLINE_PATTERN = r'<h1>File not found.</h1>' + SHOW_WINDOW_PATTERN = r'<a href="([^?]+/(\d+)/\?do=(fileDownloadButton|relatedFileDownloadButton-\2)-showDownloadWindow)"' + + + def setup(self): + self.resumeDownload = self.multiDL = True if self.account else False + self.chunkLimit = 1 + + def process(self, pyfile): + if not self.account: + self.fail("User not logged in") + pyfile.url = re.match(self.__pattern__, pyfile.url).group(1) + self.html = self.load(pyfile.url, decode=True) + self.getFileInfo() + if not self.checkTrafficLeft(): + self.fail("Not enough traffic left for user %s." % self.user) + + m = re.search(self.SHOW_WINDOW_PATTERN, self.html) + if m is None: + self.parseError('SHOW WINDOW') + self.url = "http://www.hellshare.com" + m.group(1) + self.logDebug("DOWNLOAD URL: " + self.url) + + self.download(self.url) + + +getInfo = create_getInfo(HellshareCz) diff --git a/pyload/plugins/hoster/HellspyCz.py b/pyload/plugins/hoster/HellspyCz.py new file mode 100644 index 000000000..68b61caf0 --- /dev/null +++ b/pyload/plugins/hoster/HellspyCz.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class HellspyCz(DeadHoster): + __name__ = "HellspyCz" + __type__ = "hoster" + __version__ = "0.28" + + __pattern__ = r'http://(?:www\.)?(?:hellspy\.(?:cz|com|sk|hu|pl)|sciagaj.pl)(/\S+/\d+)/?.*' + + __description__ = """HellSpy.cz hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + +getInfo = create_getInfo(HellspyCz) diff --git a/pyload/plugins/hoster/HotfileCom.py b/pyload/plugins/hoster/HotfileCom.py new file mode 100644 index 000000000..1dd8b4f4e --- /dev/null +++ b/pyload/plugins/hoster/HotfileCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class HotfileCom(DeadHoster): + __name__ = "HotfileCom" + __type__ = "hoster" + __version__ = "0.37" + + __pattern__ = r'https?://(www.)?hotfile\.com/dl/\d+/[0-9a-zA-Z]+/' + + __description__ = """Hotfile.com hoster plugin""" + __author_name__ = ("sitacuisses", "spoob", "mkaay", "JoKoT3") + __author_mail__ = ("sitacuisses@yhoo.de", "spoob@pyload.org", "mkaay@mkaay.de", "jokot3@gmail.com") + + +getInfo = create_getInfo(HotfileCom) diff --git a/pyload/plugins/hoster/HugefilesNet.py b/pyload/plugins/hoster/HugefilesNet.py new file mode 100644 index 000000000..8a960c7fa --- /dev/null +++ b/pyload/plugins/hoster/HugefilesNet.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# http://hugefiles.net/prthf9ya4w6s + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class HugefilesNet(XFileSharingPro): + __name__ = "HugefilesNet" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?hugefiles\.net/\w{12}' + + __description__ = """Hugefiles.net hoster plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + HOSTER_NAME = "hugefiles.net" + + FILE_SIZE_PATTERN = r'File Size:</span>\s*<span[^>]*>(?P<S>[^<]+)</span></div>' + + +getInfo = create_getInfo(HugefilesNet) diff --git a/pyload/plugins/hoster/HundredEightyUploadCom.py b/pyload/plugins/hoster/HundredEightyUploadCom.py new file mode 100644 index 000000000..29e152c1d --- /dev/null +++ b/pyload/plugins/hoster/HundredEightyUploadCom.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# http://180upload.com/js9qdm6kjnrs + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class HundredEightyUploadCom(XFileSharingPro): + __name__ = "HundredEightyUploadCom" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?180upload\.com/(\w+).*' + + __description__ = """180upload.com hoster plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + HOSTER_NAME = "180upload.com" + + FILE_NAME_PATTERN = r'Filename:</b></td><td nowrap>(?P<N>.+)</td></tr>-->' + FILE_SIZE_PATTERN = r'Size:</b></td><td>(?P<S>[\d.]+) (?P<U>[A-Z]+)\s*<small>' + + +getInfo = create_getInfo(HundredEightyUploadCom) diff --git a/pyload/plugins/hoster/IFileWs.py b/pyload/plugins/hoster/IFileWs.py new file mode 100644 index 000000000..45039f8e0 --- /dev/null +++ b/pyload/plugins/hoster/IFileWs.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class IFileWs(XFileSharingPro): + __name__ = "IFileWs" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?ifile\.ws/\w+(/.+)?' + + __description__ = """Ifile.ws hoster plugin""" + __author_name__ = "z00nx" + __author_mail__ = "z00nx0@gmail.com" + + HOSTER_NAME = "ifile.ws" + + FILE_INFO_PATTERN = r'<h1\s+style="display:inline;">(?P<N>[^<]+)</h1>\s+\[(?P<S>[^]]+)\]' + OFFLINE_PATTERN = r'File Not Found|The file was removed by administrator' + + +getInfo = create_getInfo(IFileWs) diff --git a/pyload/plugins/hoster/IcyFilesCom.py b/pyload/plugins/hoster/IcyFilesCom.py new file mode 100644 index 000000000..532cd094b --- /dev/null +++ b/pyload/plugins/hoster/IcyFilesCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class IcyFilesCom(DeadHoster): + __name__ = "IcyFilesCom" + __type__ = "hoster" + __version__ = "0.06" + + __pattern__ = r'http://(?:www\.)?icyfiles\.com/(.*)' + + __description__ = """IcyFiles.com hoster plugin""" + __author_name__ = "godofdream" + __author_mail__ = "soilfiction@gmail.com" + + +getInfo = create_getInfo(IcyFilesCom) diff --git a/pyload/plugins/hoster/IfileIt.py b/pyload/plugins/hoster/IfileIt.py new file mode 100644 index 000000000..2707edd5a --- /dev/null +++ b/pyload/plugins/hoster/IfileIt.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.common.json_layer import json_loads +from pyload.plugins.internal.CaptchaService import ReCaptcha +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class IfileIt(SimpleHoster): + __name__ = "IfileIt" + __type__ = "hoster" + __version__ = "0.27" + + __pattern__ = r'^unmatchable$' + + __description__ = """Ifile.it""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + LINK_PATTERN = r'</span> If it doesn\'t, <a target="_blank" href="([^"]+)">' + RECAPTCHA_KEY_PATTERN = r"var __recaptcha_public\s*=\s*'([^']+)';" + FILE_INFO_PATTERN = r'<span style="cursor: default;[^>]*>\s*(?P<N>.*?)\s* \s*<strong>\s*(?P<S>[0-9.]+)\s*(?P<U>[kKMG])i?B\s*</strong>\s*</span>' + OFFLINE_PATTERN = r'<span style="cursor: default;[^>]*>\s* \s*<strong>\s*</strong>\s*</span>' + TEMP_OFFLINE_PATTERN = r'<span class="msg_red">Downloading of this file is temporarily disabled</span>' + + + def handleFree(self): + ukey = re.match(self.__pattern__, self.pyfile.url).group(1) + json_url = 'http://ifile.it/new_download-request.json' + post_data = {"ukey": ukey, "ab": "0"} + + json_response = json_loads(self.load(json_url, post=post_data)) + self.logDebug(json_response) + if json_response['status'] == 3: + self.offline() + + if json_response['captcha']: + captcha_key = re.search(self.RECAPTCHA_KEY_PATTERN, self.html).group(1) + recaptcha = ReCaptcha(self) + post_data['ctype'] = "recaptcha" + + for _ in xrange(5): + post_data['recaptcha_challenge'], post_data['recaptcha_response'] = recaptcha.challenge(captcha_key) + json_response = json_loads(self.load(json_url, post=post_data)) + self.logDebug(json_response) + + if json_response['retry']: + self.invalidCaptcha() + else: + self.correctCaptcha() + break + else: + self.fail("Incorrect captcha") + + if not "ticket_url" in json_response: + self.parseError("Download URL") + + self.download(json_response['ticket_url']) + + +getInfo = create_getInfo(IfileIt) diff --git a/pyload/plugins/hoster/IfolderRu.py b/pyload/plugins/hoster/IfolderRu.py new file mode 100644 index 000000000..4f84e6b32 --- /dev/null +++ b/pyload/plugins/hoster/IfolderRu.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class IfolderRu(SimpleHoster): + __name__ = "IfolderRu" + __type__ = "hoster" + __version__ = "0.38" + + __pattern__ = r'http://(?:www\.)?(?:ifolder\.ru|rusfolder\.(?:com|net|ru))/(?:files/)?(?P<ID>\d+).*' + + __description__ = """Ifolder.ru hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_SIZE_REPLACEMENTS = [(u'Ðб', 'KB'), (u'Ðб', 'MB'), (u'Ðб', 'GB')] + FILE_NAME_PATTERN = ur'(?:<div><span>)?ÐазваМОе:(?:</span>)? <b>(?P<N>[^<]+)</b><(?:/div|br)>' + FILE_SIZE_PATTERN = ur'(?:<div><span>)?РазЌеÑ:(?:</span>)? <b>(?P<S>[^<]+)</b><(?:/div|br)>' + OFFLINE_PATTERN = ur'<p>Ѐайл ÐœÐŸÐŒÐµÑ <b>[^<]*</b> (Ме МайЎеМ|ÑЎалеМ) !!!</p>' + + SESSION_ID_PATTERN = r'<a href=(http://ints.(?:rusfolder.com|ifolder.ru)/ints/sponsor/\?bi=\d*&session=([^&]+)&u=[^>]+)>' + INTS_SESSION_PATTERN = r'\(\'ints_session\'\);\s*if\(tag\)\{tag.value = "([^"]+)";\}' + HIDDEN_INPUT_PATTERN = r"var v = .*?name='([^']+)' value='1'" + LINK_PATTERN = r'<a id="download_file_href" href="([^"]+)"' + WRONG_CAPTCHA_PATTERN = ur'<font color=Red>МевеÑМÑй кПЎ,<br>ввеЎОÑе еÑе Ñаз</font><br>' + + + def setup(self): + self.resumeDownload = self.multiDL = True if self.account else False + self.chunkLimit = 1 + + def process(self, pyfile): + file_id = re.match(self.__pattern__, pyfile.url).group('ID') + self.html = self.load("http://rusfolder.com/%s" % file_id, cookies=True, decode=True) + self.getFileInfo() + + url = re.search(r"location\.href = '(http://ints\..*?=)'", self.html).group(1) + self.html = self.load(url, cookies=True, decode=True) + + url, session_id = re.search(self.SESSION_ID_PATTERN, self.html).groups() + self.html = self.load(url, cookies=True, decode=True) + + url = "http://ints.rusfolder.com/ints/frame/?session=%s" % session_id + self.html = self.load(url, cookies=True) + + self.wait(31, False) + + captcha_url = "http://ints.rusfolder.com/random/images/?session=%s" % session_id + for _ in xrange(5): + self.html = self.load(url, cookies=True) + action, inputs = self.parseHtmlForm('ID="Form1"') + inputs['ints_session'] = re.search(self.INTS_SESSION_PATTERN, self.html).group(1) + inputs[re.search(self.HIDDEN_INPUT_PATTERN, self.html).group(1)] = '1' + inputs['confirmed_number'] = self.decryptCaptcha(captcha_url, cookies=True) + inputs['action'] = '1' + self.logDebug(inputs) + + self.html = self.load(url, decode=True, cookies=True, post=inputs) + if self.WRONG_CAPTCHA_PATTERN in self.html: + self.invalidCaptcha() + else: + break + else: + self.fail("Invalid captcha") + + download_url = re.search(self.LINK_PATTERN, self.html).group(1) + self.correctCaptcha() + self.logDebug("Download URL: %s" % download_url) + self.download(download_url) + + +getInfo = create_getInfo(IfolderRu) diff --git a/pyload/plugins/hoster/JumbofilesCom.py b/pyload/plugins/hoster/JumbofilesCom.py new file mode 100644 index 000000000..d3ee9ee9b --- /dev/null +++ b/pyload/plugins/hoster/JumbofilesCom.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class JumbofilesCom(SimpleHoster): + __name__ = "JumbofilesCom" + __type__ = "hoster" + __version__ = "0.02" + + __pattern__ = r'http://(?:www\.)?jumbofiles.com/(\w{12}).*' + + __description__ = """JumboFiles.com hoster plugin""" + __author_name__ = "godofdream" + __author_mail__ = "soilfiction@gmail.com" + + FILE_INFO_PATTERN = r'<TR><TD>(?P<N>[^<]+?)\s*<small>\((?P<S>[\d.]+)\s*(?P<U>[KMG][bB])\)</small></TD></TR>' + OFFLINE_PATTERN = r'Not Found or Deleted / Disabled due to inactivity or DMCA' + LINK_PATTERN = r'<meta http-equiv="refresh" content="10;url=(.+)">' + + + def setup(self): + self.resumeDownload = self.multiDL = True + + def handleFree(self): + ukey = re.match(self.__pattern__, self.pyfile.url).group(1) + post_data = {"id": ukey, "op": "download3", "rand": ""} + html = self.load(self.pyfile.url, post=post_data, decode=True) + url = re.search(self.LINK_PATTERN, html).group(1) + self.logDebug("Download " + url) + self.download(url) + + +getInfo = create_getInfo(JumbofilesCom) diff --git a/pyload/plugins/hoster/Keep2shareCC.py b/pyload/plugins/hoster/Keep2shareCC.py new file mode 100644 index 000000000..088a1b012 --- /dev/null +++ b/pyload/plugins/hoster/Keep2shareCC.py @@ -0,0 +1,110 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# http://k2s.cc/file/55fb73e1c00c5/random.bin + +import re + +from urlparse import urlparse, urljoin + +from pyload.plugins.internal.CaptchaService import ReCaptcha +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class Keep2shareCC(SimpleHoster): + __name__ = "Keep2shareCC" + __type__ = "hoster" + __version__ = "0.10" + + __pattern__ = r'https?://(?:www\.)?(keep2share|k2s|keep2s)\.cc/file/(?P<ID>\w+)' + + __description__ = """Keep2share.cc hoster plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + FILE_NAME_PATTERN = r'File: <span>(?P<N>.+)</span>' + FILE_SIZE_PATTERN = r'Size: (?P<S>[^<]+)</div>' + OFFLINE_PATTERN = r'File not found or deleted|Sorry, this file is blocked or deleted|Error 404' + + LINK_PATTERN = r'To download this file with slow speed, use <a href="([^"]+)">this link</a>' + WAIT_PATTERN = r'Please wait ([\d:]+) to download this file' + ALREADY_DOWNLOADING_PATTERN = r'Free account does not allow to download more than one file at the same time' + + RECAPTCHA_KEY = "6LcYcN0SAAAAABtMlxKj7X0hRxOY8_2U86kI1vbb" + + + def handleFree(self): + self.sanitize_url() + self.html = self.load(self.pyfile.url) + + self.fid = re.search(r'<input type="hidden" name="slow_id" value="([^"]+)">', self.html).group(1) + self.html = self.load(self.pyfile.url, post={'yt0': '', 'slow_id': self.fid}) + + m = re.search(r"function download\(\){.*window\.location\.href = '([^']+)';", self.html, re.DOTALL) + if m: # Direct mode + self.startDownload(m.group(1)) + else: + self.handleCaptcha() + + self.wait(30) + + self.html = self.load(self.pyfile.url, post={'uniqueId': self.fid, 'free': 1}) + + m = re.search(self.WAIT_PATTERN, self.html) + if m: + self.logDebug('Hoster told us to wait for %s' % m.group(1)) + # string to time convert courtesy of https://stackoverflow.com/questions/10663720 + ftr = [3600, 60, 1] + wait_time = sum([a * b for a, b in zip(ftr, map(int, m.group(1).split(':')))]) + self.wait(wait_time, reconnect=True) + self.retry() + + m = re.search(self.ALREADY_DOWNLOADING_PATTERN, self.html) + if m: + # if someone is already downloading on our line, wait 30min and retry + self.logDebug('Already downloading, waiting for 30 minutes') + self.wait(30 * 60, reconnect=True) + self.retry() + + m = re.search(self.LINK_PATTERN, self.html) + if m is None: + self.parseError("Unable to detect direct link") + self.startDownload(m.group(1)) + + def handleCaptcha(self): + recaptcha = ReCaptcha(self) + for _ in xrange(5): + challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY) + post_data = {'recaptcha_challenge_field': challenge, + 'recaptcha_response_field': response, + 'CaptchaForm%5Bcode%5D': '', + 'free': 1, + 'freeDownloadRequest': 1, + 'uniqueId': self.fid, + 'yt0': ''} + + self.html = self.load(self.pyfile.url, post=post_data) + + if 'recaptcha' not in self.html: + self.correctCaptcha() + break + else: + self.logInfo('Wrong captcha') + self.invalidCaptcha() + else: + self.fail("All captcha attempts failed") + + def startDownload(self, url): + d = urljoin(self.base_url, url) + self.logDebug('Direct Link: ' + d) + self.download(d, disposition=True) + + def sanitize_url(self): + header = self.load(self.pyfile.url, just_header=True) + if 'location' in header: + self.pyfile.url = header['location'] + p = urlparse(self.pyfile.url) + self.base_url = "%s://%s" % (p.scheme, p.hostname) + + +getInfo = create_getInfo(Keep2shareCC) diff --git a/pyload/plugins/hoster/LemUploadsCom.py b/pyload/plugins/hoster/LemUploadsCom.py new file mode 100644 index 000000000..8556e3c9c --- /dev/null +++ b/pyload/plugins/hoster/LemUploadsCom.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# BigBuckBunny_320x180.mp4 - 61.7 Mb - http://lemuploads.com/uwol0aly9dld + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class LemUploadsCom(XFileSharingPro): + __name__ = "LemUploadsCom" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'https?://(?:www\.)?lemuploads.com/\w{12}' + + __description__ = """LemUploads.com hoster plugin""" + __author_name__ = "t4skforce" + __author_mail__ = "t4skforce1337[AT]gmail[DOT]com" + + HOSTER_NAME = "lemuploads.com" + + OFFLINE_PATTERN = r'<b>File Not Found</b><br><br>' + FILE_NAME_PATTERN = r'<b>Password:</b></div>\s*<h2>(?P<N>[^<]+)</h2>' + + +getInfo = create_getInfo(LemUploadsCom) diff --git a/pyload/plugins/hoster/LetitbitNet.py b/pyload/plugins/hoster/LetitbitNet.py new file mode 100644 index 000000000..3a8e28a90 --- /dev/null +++ b/pyload/plugins/hoster/LetitbitNet.py @@ -0,0 +1,160 @@ +# -*- coding: utf-8 -*- +# +# API Documentation: +# http://api.letitbit.net/reg/static/api.pdf +# +# Test links: +# http://letitbit.net/download/07874.0b5709a7d3beee2408bb1f2eefce/random.bin.html + +import re + +from urllib import urlencode, urlopen + +from pyload.common.json_layer import json_loads, json_dumps +from pyload.plugins.hoster.UnrestrictLi import secondsToMidnight +from pyload.plugins.internal.CaptchaService import ReCaptcha +from pyload.plugins.internal.SimpleHoster import SimpleHoster + + +def api_download_info(url): + json_data = ["yw7XQy2v9", ["download/info", {"link": url}]] + post_data = urlencode({'r': json_dumps(json_data)}) + api_rep = urlopen("http://api.letitbit.net/json", data=post_data).read() + return json_loads(api_rep) + + +def getInfo(urls): + for url in urls: + api_rep = api_download_info(url) + if api_rep['status'] == 'OK': + info = api_rep['data'][0] + yield (info['name'], info['size'], 2, url) + else: + yield (url, 0, 1, url) + + +class LetitbitNet(SimpleHoster): + __name__ = "LetitbitNet" + __type__ = "hoster" + __version__ = "0.24" + + __pattern__ = r'http://(?:www\.)?(letitbit|shareflare).net/download/.*' + + __description__ = """Letitbit.net hoster plugin""" + __author_name__ = ("zoidberg", "z00nx") + __author_mail__ = ("zoidberg@mujmail.cz", "z00nx0@gmail.com") + + FILE_URL_REPLACEMENTS = [(r"(?<=http://)([^/]+)", "letitbit.net")] + + HOSTER_NAME = "letitbit.net" + + SECONDS_PATTERN = r'seconds\s*=\s*(\d+);' + CAPTCHA_CONTROL_FIELD = r"recaptcha_control_field\s=\s'(?P<value>[^']+)'" + RECAPTCHA_KEY = "6Lc9zdMSAAAAAF-7s2wuQ-036pLRbM0p8dDaQdAM" + + + def setup(self): + self.resumeDownload = True + #TODO confirm that resume works + + def getFileInfo(self): + api_rep = api_download_info(self.pyfile.url) + if api_rep['status'] == 'OK': + self.api_data = api_rep['data'][0] + self.pyfile.name = self.api_data['name'] + self.pyfile.size = self.api_data['size'] + else: + self.offline() + + def handleFree(self): + action, inputs = self.parseHtmlForm('id="ifree_form"') + if not action: + self.parseError("page 1 / ifree_form") + + domain = "http://www." + self.HOSTER_NAME + self.pyfile.size = float(inputs['sssize']) + self.logDebug(action, inputs) + inputs['desc'] = "" + + self.html = self.load(domain + action, post=inputs, cookies=True) + + # action, inputs = self.parseHtmlForm('id="d3_form"') + # if not action: + # self.parseError("page 2 / d3_form") + # self.logDebug(action, inputs) + # + # self.html = self.load(action, post = inputs, cookies = True) + # + # try: + # ajax_check_url, captcha_url = re.search(self.CHECK_URL_PATTERN, self.html).groups() + # m = re.search(self.SECONDS_PATTERN, self.html) + # seconds = int(m.group(1)) if m else 60 + # self.wait(seconds+1) + # except Exception, e: + # self.logError(e) + # self.parseError("page 3 / js") + + m = re.search(self.SECONDS_PATTERN, self.html) + seconds = int(m.group(1)) if m else 60 + self.logDebug("Seconds found", seconds) + m = re.search(self.CAPTCHA_CONTROL_FIELD, self.html) + recaptcha_control_field = m.group(1) + self.logDebug("ReCaptcha control field found", recaptcha_control_field) + self.wait(seconds + 1) + + response = self.load("%s/ajax/download3.php" % domain, post=" ", cookies=True) + if response != '1': + self.parseError('Unknown response - ajax_check_url') + self.logDebug(response) + + recaptcha = ReCaptcha(self) + challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY) + post_data = {"recaptcha_challenge_field": challenge, "recaptcha_response_field": response, + "recaptcha_control_field": recaptcha_control_field} + self.logDebug("Post data to send", post_data) + response = self.load('%s/ajax/check_recaptcha.php' % domain, post=post_data, cookies=True) + self.logDebug(response) + if not response: + self.invalidCaptcha() + if response == "error_free_download_blocked": + self.logWarning("Daily limit reached") + self.wait(secondsToMidnight(gmt=2), True) + if response == "error_wrong_captcha": + self.logError("Wrong Captcha") + self.invalidCaptcha() + self.retry() + elif response.startswith('['): + urls = json_loads(response) + elif response.startswith('http://'): + urls = [response] + else: + self.parseError("Unknown response - captcha check") + + self.correctCaptcha() + + for download_url in urls: + try: + self.logDebug("Download URL", download_url) + self.download(download_url) + break + except Exception, e: + self.logError(e) + else: + self.fail("Download did not finish correctly") + + def handlePremium(self): + api_key = self.user + premium_key = self.account.getAccountData(self.user)['password'] + + json_data = [api_key, ["download/direct_links", {"pass": premium_key, "link": self.pyfile.url}]] + api_rep = self.load('http://api.letitbit.net/json', post={'r': json_dumps(json_data)}) + self.logDebug('API Data: ' + api_rep) + api_rep = json_loads(api_rep) + + if api_rep['status'] == 'FAIL': + self.fail(api_rep['data']) + + direct_link = api_rep['data'][0][0] + self.logDebug('Direct Link: ' + direct_link) + + self.download(direct_link, disposition=True) diff --git a/pyload/plugins/hoster/LinksnappyCom.py b/pyload/plugins/hoster/LinksnappyCom.py new file mode 100644 index 000000000..aed74d09b --- /dev/null +++ b/pyload/plugins/hoster/LinksnappyCom.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- + +import re + +from urlparse import urlsplit + +from pyload.common.json_layer import json_loads, json_dumps +from pyload.plugins.Hoster import Hoster + + +class LinksnappyCom(Hoster): + __name__ = "LinksnappyCom" + __type__ = "hoster" + __version__ = "0.02" + + __pattern__ = r'https?://(?:[^/]*\.)?linksnappy\.com' + + __description__ = """Linksnappy.com hoster plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + SINGLE_CHUNK_HOSTERS = ('easybytez.com') + + + def setup(self): + self.chunkLimit = -1 + self.resumeDownload = True + + def process(self, pyfile): + if re.match(self.__pattern__, pyfile.url): + new_url = pyfile.url + elif not self.account: + self.logError(_("Please enter your %s account or deactivate this plugin") % "Linksnappy.com") + self.fail("No Linksnappy.com account provided") + else: + self.logDebug("Old URL: %s" % pyfile.url) + host = self._get_host(pyfile.url) + json_params = json_dumps({'link': pyfile.url, + 'type': host, + 'username': self.user, + 'password': self.account.getAccountData(self.user)['password']}) + r = self.load('http://gen.linksnappy.com/genAPI.php', + post={'genLinks': json_params}) + self.logDebug("JSON data: " + r) + + j = json_loads(r)['links'][0] + + if j['error']: + self.logError('Error converting the link: %s' % j['error']) + self.fail('Error converting the link') + + pyfile.name = j['filename'] + new_url = j['generated'] + + if host in self.SINGLE_CHUNK_HOSTERS: + self.chunkLimit = 1 + else: + self.setup() + + if new_url != pyfile.url: + self.logDebug("New URL: " + new_url) + + self.download(new_url, disposition=True) + + check = self.checkDownload({"html302": "<title>302 Found</title>"}) + if check == "html302": + self.retry(wait_time=5, reason="Linksnappy returns only HTML data.") + + @staticmethod + def _get_host(url): + host = urlsplit(url).netloc + return re.search(r'[\w-]+\.\w+$', host).group(0) diff --git a/pyload/plugins/hoster/LoadTo.py b/pyload/plugins/hoster/LoadTo.py new file mode 100644 index 000000000..bd931f91e --- /dev/null +++ b/pyload/plugins/hoster/LoadTo.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# http://www.load.to/JWydcofUY6/random.bin +# http://www.load.to/oeSmrfkXE/random100.bin + +import re + +from pyload.plugins.internal.CaptchaService import SolveMedia +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class LoadTo(SimpleHoster): + __name__ = "LoadTo" + __type__ = "hoster" + __version__ = "0.16" + + __pattern__ = r'http://(?:www\.)?load\.to/\w+' + + __description__ = """ Load.to hoster plugin """ + __author_name__ = ("halfman", "stickell") + __author_mail__ = ("Pulpan3@gmail.com", "l.stickell@yahoo.it") + + FILE_NAME_PATTERN = r'<h1>(?P<N>.+)</h1>' + FILE_SIZE_PATTERN = r'Size: (?P<S>[\d.]+) (?P<U>\w+)' + OFFLINE_PATTERN = r'>Can\'t find file' + + LINK_PATTERN = r'<form method="post" action="(.+?)"' + WAIT_PATTERN = r'type="submit" value="Download \((\d+)\)"' + SOLVEMEDIA_PATTERN = r'http://api\.solvemedia\.com/papi/challenge\.noscript\?k=([^"]+)' + + FILE_URL_REPLACEMENTS = [(r'(\w)$', r'\1/')] + + + def setup(self): + self.multiDL = True + self.chunkLimit = 1 + + + def handleFree(self): + # Search for Download URL + m = re.search(self.LINK_PATTERN, self.html) + if m is None: + self.parseError("Unable to detect download URL") + + download_url = m.group(1) + + # Set Timer - may be obsolete + m = re.search(self.WAIT_PATTERN, self.html) + if m: + self.wait(m.group(1)) + + # Load.to is using solvemedia captchas since ~july 2014: + m = re.search(self.SOLVEMEDIA_PATTERN, self.html) + if m is None: + self.download(download_url) + else: + captcha_key = m.group(1) + solvemedia = SolveMedia(self) + captcha_challenge, captcha_response = solvemedia.challenge(captcha_key) + self.download(download_url, post={"adcopy_challenge": captcha_challenge, "adcopy_response": captcha_response}) + check = self.checkDownload({"404": re.compile("\A<h1>404 Not Found</h1>")}) + if check == "404": + self.logWarning("The captcha you entered was incorrect. Please try again.") + self.invalidCaptcha() + self.retry() + + +getInfo = create_getInfo(LoadTo) diff --git a/pyload/plugins/hoster/LomafileCom.py b/pyload/plugins/hoster/LomafileCom.py new file mode 100644 index 000000000..942afa1f4 --- /dev/null +++ b/pyload/plugins/hoster/LomafileCom.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class LomafileCom(SimpleHoster): + __name__ = "LomafileCom" + __type__ = "hoster" + __version__ = "0.2" + + __pattern__ = r'https?://lomafile\.com/.+/[\w\.]+' + + __description__ = """ Lomafile.com hoster plugin """ + __author_name__ = "nath_schwarz" + __author_mail__ = "nathan.notwhite@gmail.com" + + FILE_NAME_PATTERN = r'Filename:[^>]*>(?P<N>[\w\.]+)' + FILE_SIZE_PATTERN = r'\((?P<S>\d+)\s(?P<U>\w+)\)' + OFFLINE_PATTERN = r'Software error' + + + def handleFree(self): + for _ in range(3): + captcha_id = re.search(r'src="http://lomafile\.com/captchas/(?P<id>\w+)\.jpg"', self.html) + if not captcha_id: + self.parseError("Unable to parse captcha id.") + else: + captcha_id = captcha_id.group("id") + + form_id = re.search(r'name="id" value="(?P<id>\w+)"', self.html) + if not form_id: + self.parseError("Unable to parse form id") + else: + form_id = form_id.group("id") + + captcha = self.decryptCaptcha("http://lomafile.com/captchas/" + captcha_id + ".jpg") + + self.wait(60) + + self.html = self.load(self.pyfile.url, post={ + "op": "download2", + "id": form_id, + "rand": captcha_id, + "code": captcha, + "down_direct": "1"}) + + download_url = re.search(r'http://[\d\.]+:\d+/d/\w+/[\w\.]+', self.html) + if download_url is None: + self.invalidCaptcha() + self.logDebug("Invalid captcha.") + else: + download_url = download_url.group(0) + self.logDebug("Download URL: %s" % download_url) + self.download(download_url) + else: + self.fail("Invalid captcha-code entered.") + + +getInfo = create_getInfo(LomafileCom) diff --git a/pyload/plugins/hoster/LuckyShareNet.py b/pyload/plugins/hoster/LuckyShareNet.py new file mode 100644 index 000000000..cafddb0a8 --- /dev/null +++ b/pyload/plugins/hoster/LuckyShareNet.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.lib.bottle import json_loads + +from pyload.plugins.internal.CaptchaService import ReCaptcha +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class LuckyShareNet(SimpleHoster): + __name__ = "LuckyShareNet" + __type__ = "hoster" + __version__ = "0.02" + + __pattern__ = r'https?://(?:www\.)?luckyshare.net/(?P<ID>\d{10,})' + + __description__ = """LuckyShare.net hoster plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + FILE_INFO_PATTERN = r"<h1 class='file_name'>(?P<N>\S+)</h1>\s*<span class='file_size'>Filesize: (?P<S>[\d.]+)(?P<U>\w+)</span>" + OFFLINE_PATTERN = r'There is no such file available' + RECAPTCHA_KEY = "6LdivsgSAAAAANWh-d7rPE1mus4yVWuSQIJKIYNw" + + + def parseJson(self, rep): + if 'AJAX Error' in rep: + html = self.load(self.pyfile.url, decode=True) + m = re.search(r"waitingtime = (\d+);", html) + if m: + waittime = int(m.group(1)) + self.logDebug('You have to wait %d seconds between free downloads' % waittime) + self.retry(wait_time=waittime) + else: + self.parseError('Unable to detect wait time between free downloads') + elif 'Hash expired' in rep: + self.retry(reason="Hash expired") + return json_loads(rep) + + # TODO: There should be a filesize limit for free downloads + # TODO: Some files could not be downloaded in free mode + def handleFree(self): + file_id = re.match(self.__pattern__, self.pyfile.url).group('ID') + self.logDebug('File ID: ' + file_id) + rep = self.load(r"http://luckyshare.net/download/request/type/time/file/" + file_id, decode=True) + self.logDebug('JSON: ' + rep) + json = self.parseJson(rep) + + self.wait(int(json['time'])) + + recaptcha = ReCaptcha(self) + for _ in xrange(5): + challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY) + rep = self.load(r"http://luckyshare.net/download/verify/challenge/%s/response/%s/hash/%s" % + (challenge, response, json['hash']), decode=True) + self.logDebug('JSON: ' + rep) + if 'link' in rep: + json.update(self.parseJson(rep)) + self.correctCaptcha() + break + elif 'Verification failed' in rep: + self.logInfo('Wrong captcha') + self.invalidCaptcha() + else: + self.parseError('Unable to get downlaod link') + + if not json['link']: + self.fail("No Download url retrieved/all captcha attempts failed") + + self.logDebug('Direct URL: ' + json['link']) + self.download(json['link']) + + +getInfo = create_getInfo(LuckyShareNet) diff --git a/pyload/plugins/hoster/MediafireCom.py b/pyload/plugins/hoster/MediafireCom.py new file mode 100644 index 000000000..bbf9f06b6 --- /dev/null +++ b/pyload/plugins/hoster/MediafireCom.py @@ -0,0 +1,125 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.CaptchaService import SolveMedia +from pyload.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo +from pyload.network.RequestFactory import getURL + + +def replace_eval(js_expr): + return js_expr.replace(r'eval("', '').replace(r"\'", r"'").replace(r'\"', r'"') + + +def checkHTMLHeader(url): + try: + for _ in xrange(3): + header = getURL(url, just_header=True) + for line in header.splitlines(): + line = line.lower() + if 'location' in line: + url = line.split(':', 1)[1].strip() + if 'error.php?errno=320' in url: + return url, 1 + if not url.startswith('http://'): + url = 'http://www.mediafire.com' + url + break + elif 'content-disposition' in line: + return url, 2 + else: + break + except: + return url, 3 + + return url, 0 + + +def getInfo(urls): + for url in urls: + location, status = checkHTMLHeader(url) + if status: + file_info = (url, 0, status, url) + else: + file_info = parseFileInfo(MediafireCom, url, getURL(url, decode=True)) + yield file_info + + +class MediafireCom(SimpleHoster): + __name__ = "MediafireCom" + __type__ = "hoster" + __version__ = "0.79" + + __pattern__ = r'http://(?:www\.)?mediafire\.com/(file/|(view/?|download.php)?\?)(\w{11}|\w{15})($|/)' + + __description__ = """Mediafire.com hoster plugin""" + __author_name__ = ("zoidberg", "stickell") + __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") + + LINK_PATTERN = r'<div class="download_link"[^>]*(?:z-index:(?P<zindex>\d+))?[^>]*>\s*<a href="(?P<href>http://[^"]+)"' + JS_KEY_PATTERN = r"DoShow\('mfpromo1'\);[^{]*{((\w+)='';.*?)eval\(\2\);" + JS_ZMODULO_PATTERN = r"\('z-index'\)\) \% (\d+)\)\);" + SOLVEMEDIA_PATTERN = r'http://api\.solvemedia\.com/papi/challenge\.noscript\?k=([^"]+)' + PAGE1_ACTION_PATTERN = r'<link rel="canonical" href="([^"]+)"/>' + PASSWORD_PATTERN = r'<form name="form_password"' + + FILE_NAME_PATTERN = r'<META NAME="description" CONTENT="(?P<N>[^"]+)"/>' + FILE_INFO_PATTERN = r"oFileSharePopup\.ald\('(?P<ID>[^']*)','(?P<N>[^']*)','(?P<S>[^']*)','','(?P<sha256>[^']*)'\)" + OFFLINE_PATTERN = r'class="error_msg_title"> Invalid or Deleted File. </div>' + + + def setup(self): + self.multiDL = False + + def process(self, pyfile): + pyfile.url = re.sub(r'/view/?\?', '/?', pyfile.url) + + self.url, result = checkHTMLHeader(pyfile.url) + self.logDebug('Location (%d): %s' % (result, self.url)) + + if result == 0: + self.html = self.load(self.url, decode=True) + self.checkCaptcha() + self.multiDL = True + self.check_data = self.getFileInfo() + + if self.account: + self.handlePremium() + else: + self.handleFree() + elif result == 1: + self.offline() + else: + self.multiDL = True + self.download(self.url, disposition=True) + + def handleFree(self): + passwords = self.getPassword().splitlines() + while self.PASSWORD_PATTERN in self.html: + if len(passwords): + password = passwords.pop(0) + self.logInfo("Password protected link, trying " + password) + self.html = self.load(self.url, post={"downloadp": password}) + else: + self.fail("No or incorrect password") + + m = re.search(r'kNO = r"(http://.*?)";', self.html) + if m is None: + self.parseError("Download URL") + download_url = m.group(1) + self.logDebug("DOWNLOAD LINK:", download_url) + + self.download(download_url) + + def checkCaptcha(self): + for _ in xrange(5): + m = re.search(self.SOLVEMEDIA_PATTERN, self.html) + if m: + captcha_key = m.group(1) + solvemedia = SolveMedia(self) + captcha_challenge, captcha_response = solvemedia.challenge(captcha_key) + self.html = self.load(self.url, post={"adcopy_challenge": captcha_challenge, + "adcopy_response": captcha_response}, decode=True) + else: + break + else: + self.fail("No valid recaptcha solution received") diff --git a/pyload/plugins/hoster/MegaDebridEu.py b/pyload/plugins/hoster/MegaDebridEu.py new file mode 100644 index 000000000..6c980009e --- /dev/null +++ b/pyload/plugins/hoster/MegaDebridEu.py @@ -0,0 +1,89 @@ +# -*- coding: utf-8 -*- + +import re + +from urllib import unquote_plus + +from pyload.common.json_layer import json_loads +from pyload.plugins.Hoster import Hoster + + +class MegaDebridEu(Hoster): + __name__ = "MegaDebridEu" + __type__ = "hoster" + __version__ = "0.4" + + __pattern__ = r'^https?://(?:w{3}\d+\.mega-debrid.eu|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/download/file/[^/]+/.+$' + + __description__ = """mega-debrid.eu hoster plugin""" + __author_name__ = "D.Ducatel" + __author_mail__ = "dducatel@je-geek.fr" + + API_URL = "https://www.mega-debrid.eu/api.php" + + + def getFilename(self, url): + try: + return unquote_plus(url.rsplit("/", 1)[1]) + except IndexError: + return "" + + def process(self, pyfile): + if re.match(self.__pattern__, pyfile.url): + new_url = pyfile.url + elif not self.account: + self.exitOnFail(_("Please enter your %s account or deactivate this plugin") % "Mega-debrid.eu") + else: + if not self.connectToApi(): + self.exitOnFail(_("Unable to connect to %s") % "Mega-debrid.eu") + + self.logDebug("Old URL: %s" % pyfile.url) + new_url = self.debridLink(pyfile.url) + self.logDebug("New URL: " + new_url) + + filename = self.getFilename(new_url) + if filename != "": + pyfile.name = filename + self.download(new_url, disposition=True) + + def connectToApi(self): + """ + Connexion to the mega-debrid API + Return True if succeed + """ + user, data = self.account.selectAccount() + jsonResponse = self.load(self.API_URL, + get={'action': 'connectUser', 'login': user, 'password': data['password']}) + response = json_loads(jsonResponse) + + if response['response_code'] == "ok": + self.token = response['token'] + return True + else: + return False + + def debridLink(self, linkToDebrid): + """ + Debrid a link + Return The debrided link if succeed or original link if fail + """ + jsonResponse = self.load(self.API_URL, get={'action': 'getLink', 'token': self.token}, + post={"link": linkToDebrid}) + response = json_loads(jsonResponse) + + if response['response_code'] == "ok": + debridedLink = response['debridLink'][1:-1] + return debridedLink + else: + self.exitOnFail("Unable to debrid %s" % linkToDebrid) + + def exitOnFail(self, msg): + """ + exit the plugin on fail case + And display the reason of this failure + """ + if self.getConfig("unloadFailing"): + self.logError(msg) + self.resetAccount() + else: + self.fail(msg) diff --git a/pyload/plugins/hoster/MegaFilesSe.py b/pyload/plugins/hoster/MegaFilesSe.py new file mode 100644 index 000000000..48306cd7f --- /dev/null +++ b/pyload/plugins/hoster/MegaFilesSe.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class MegaFilesSe(XFileSharingPro): + __name__ = "MegaFilesSe" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?megafiles\.se/\w{12}' + + __description__ = """MegaFiles.se hoster plugin""" + __author_name__ = "t4skforce" + __author_mail__ = "t4skforce1337[AT]gmail[DOT]com" + + HOSTER_NAME = "megafiles.se" + + OFFLINE_PATTERN = r'<b><font[^>]*>File Not Found</font></b><br><br>' + FILE_NAME_PATTERN = r'<div[^>]+>\s*<b>(?P<N>[^<]+)</b>\s*</div>' + + +getInfo = create_getInfo(MegaFilesSe) diff --git a/pyload/plugins/hoster/MegaNz.py b/pyload/plugins/hoster/MegaNz.py new file mode 100644 index 000000000..801df9c9d --- /dev/null +++ b/pyload/plugins/hoster/MegaNz.py @@ -0,0 +1,132 @@ +# -*- coding: utf-8 -*- + +import random +import re + +from Crypto.Cipher import AES +from Crypto.Util import Counter +from array import array +from base64 import standard_b64decode +from os import remove + +from pyload.common.json_layer import json_loads, json_dumps +from pyload.plugins.Hoster import Hoster + + +class MegaNz(Hoster): + __name__ = "MegaNz" + __type__ = "hoster" + __version__ = "0.14" + + __pattern__ = r'https?://([a-z0-9]+\.)?mega\.co\.nz/#!([a-zA-Z0-9!_\-]+)' + + __description__ = """Mega.co.nz hoster plugin""" + __author_name__ = "RaNaN" + __author_mail__ = "ranan@pyload.org" + + API_URL = "https://g.api.mega.co.nz/cs?id=%d" + FILE_SUFFIX = ".crypted" + + + def b64_decode(self, data): + data = data.replace("-", "+").replace("_", "/") + return standard_b64decode(data + '=' * (-len(data) % 4)) + + def getCipherKey(self, key): + """ Construct the cipher key from the given data """ + a = array("I", key) + key_array = array("I", [a[0] ^ a[4], a[1] ^ a[5], a[2] ^ a[6], a[3] ^ a[7]]) + return key_array + + def callApi(self, **kwargs): + """ Dispatch a call to the api, see https://mega.co.nz/#developers """ + # generate a session id, no idea where to obtain elsewhere + uid = random.randint(10 << 9, 10 ** 10) + + resp = self.load(self.API_URL % uid, post=json_dumps([kwargs])) + self.logDebug("Api Response: " + resp) + return json_loads(resp) + + def decryptAttr(self, data, key): + + cbc = AES.new(self.getCipherKey(key), AES.MODE_CBC, "\0" * 16) + attr = cbc.decrypt(self.b64_decode(data)) + self.logDebug("Decrypted Attr: " + attr) + if not attr.startswith("MEGA"): + self.fail(_("Decryption failed")) + + # Data is padded, 0-bytes must be stripped + return json_loads(attr.replace("MEGA", "").rstrip("\0").strip()) + + def decryptFile(self, key): + """ Decrypts the file at lastDownload` """ + + # upper 64 bit of counter start + n = key[16:24] + + # convert counter to long and shift bytes + ctr = Counter.new(128, initial_value=long(n.encode("hex"), 16) << 64) + cipher = AES.new(self.getCipherKey(key), AES.MODE_CTR, counter=ctr) + + self.pyfile.setStatus("decrypting") + + file_crypted = self.lastDownload + file_decrypted = file_crypted.rsplit(self.FILE_SUFFIX)[0] + f = open(file_crypted, "rb") + df = open(file_decrypted, "wb") + + # TODO: calculate CBC-MAC for checksum + + size = 2 ** 15 # buffer size, 32k + while True: + buf = f.read(size) + if not buf: + break + + df.write(cipher.decrypt(buf)) + + f.close() + df.close() + remove(file_crypted) + + self.lastDownload = file_decrypted + + def process(self, pyfile): + + key = None + + # match is guaranteed because plugin was chosen to handle url + node = re.match(self.__pattern__, pyfile.url).group(2) + if "!" in node: + node, key = node.split("!") + + self.logDebug("File id: %s | Key: %s" % (node, key)) + + if not key: + self.fail(_("No file key provided in the URL")) + + # g is for requesting a download url + # this is similar to the calls in the mega js app, documentation is very bad + dl = self.callApi(a="g", g=1, p=node, ssl=1)[0] + + if "e" in dl: + e = dl['e'] + # ETEMPUNAVAIL (-18): Resource temporarily not available, please try again later + if e == -18: + self.retry() + else: + self.fail(_("Error code:") + e) + + # TODO: map other error codes, e.g + # EACCESS (-11): Access violation (e.g., trying to write to a read-only share) + + key = self.b64_decode(key) + attr = self.decryptAttr(dl['at'], key) + + pyfile.name = attr['n'] + self.FILE_SUFFIX + + self.download(dl['g']) + self.decryptFile(key) + + # Everything is finished and final name can be set + pyfile.name = attr['n'] diff --git a/pyload/plugins/hoster/MegacrypterCom.py b/pyload/plugins/hoster/MegacrypterCom.py new file mode 100644 index 000000000..0cc17bfe3 --- /dev/null +++ b/pyload/plugins/hoster/MegacrypterCom.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.common.json_layer import json_loads, json_dumps +from pyload.plugins.hoster.MegaNz import MegaNz + + +class MegacrypterCom(MegaNz): + __name__ = "MegacrypterCom" + __type__ = "hoster" + __version__ = "0.2" + + __pattern__ = r'(https?://[a-z0-9]{0,10}\.?megacrypter\.com/[a-zA-Z0-9!_\-]+)' + + __description__ = """Megacrypter.com decrypter plugin""" + __author_name__ = "GonzaloSR" + __author_mail__ = "gonzalo@gonzalosr.com" + + API_URL = "http://megacrypter.com/api" + FILE_SUFFIX = ".crypted" + + + def callApi(self, **kwargs): + """ Dispatch a call to the api, see megacrypter.com/api_doc """ + self.logDebug("JSON request: " + json_dumps(kwargs)) + resp = self.load(self.API_URL, post=json_dumps(kwargs)) + self.logDebug("API Response: " + resp) + return json_loads(resp) + + def process(self, pyfile): + # match is guaranteed because plugin was chosen to handle url + node = re.match(self.__pattern__, pyfile.url).group(1) + + # get Mega.co.nz link info + info = self.callApi(link=node, m="info") + + # get crypted file URL + dl = self.callApi(link=node, m="dl") + + # TODO: map error codes, implement password protection + # if info['pass'] is True: + # crypted_file_key, md5_file_key = info['key'].split("#") + + key = self.b64_decode(info['key']) + + pyfile.name = info['name'] + self.FILE_SUFFIX + + self.download(dl['url']) + self.decryptFile(key) + + # Everything is finished and final name can be set + pyfile.name = info['name'] diff --git a/pyload/plugins/hoster/MegareleaseOrg.py b/pyload/plugins/hoster/MegareleaseOrg.py new file mode 100644 index 000000000..6a689b6dd --- /dev/null +++ b/pyload/plugins/hoster/MegareleaseOrg.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class MegareleaseOrg(XFileSharingPro): + __name__ = "MegareleaseOrg" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'https?://(?:www\.)?megarelease.org/\w{12}' + + __description__ = """Megarelease.org hoster plugin""" + __author_name__ = ("derek3x", "stickell") + __author_mail__ = ("derek3x@vmail.me", "l.stickell@yahoo.it") + + HOSTER_NAME = "megarelease.org" + + FILE_INFO_PATTERN = r'<font color="red">%s/(?P<N>.+)</font> \((?P<S>[^)]+)\)</font>' % __pattern__ + + +getInfo = create_getInfo(MegareleaseOrg) diff --git a/pyload/plugins/hoster/MegasharesCom.py b/pyload/plugins/hoster/MegasharesCom.py new file mode 100644 index 000000000..36e13a531 --- /dev/null +++ b/pyload/plugins/hoster/MegasharesCom.py @@ -0,0 +1,105 @@ +# -*- coding: utf-8 -*- + +import re + +from time import time + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class MegasharesCom(SimpleHoster): + __name__ = "MegasharesCom" + __type__ = "hoster" + __version__ = "0.24" + + __pattern__ = r'http://(?:www\.)?megashares.com/.*' + + __description__ = """Megashares.com hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_NAME_PATTERN = r'<h1 class="black xxl"[^>]*title="(?P<N>[^"]+)">' + FILE_SIZE_PATTERN = r'<strong><span class="black">Filesize:</span></strong> (?P<S>[0-9.]+) (?P<U>[kKMG])i?B<br />' + OFFLINE_PATTERN = r'<dd class="red">(Invalid Link Request|Link has been deleted)' + + LINK_PATTERN = r'<div id="show_download_button_%d"[^>]*>\s*<a href="([^"]+)">' + PASSPORT_LEFT_PATTERN = r'Your Download Passport is: <[^>]*>(\w+).*\s*You have\s*<[^>]*>\s*([0-9.]+) ([kKMG]i?B)' + PASSPORT_RENEW_PATTERN = r'Your download passport will renew in\s*<strong>(\d+)</strong>:<strong>(\d+)</strong>:<strong>(\d+)</strong>' + REACTIVATE_NUM_PATTERN = r'<input[^>]*id="random_num" value="(\d+)" />' + REACTIVATE_PASSPORT_PATTERN = r'<input[^>]*id="passport_num" value="(\w+)" />' + REQUEST_URI_PATTERN = r'var request_uri = "([^"]+)";' + NO_SLOTS_PATTERN = r'<dd class="red">All download slots for this link are currently filled' + + + def setup(self): + self.resumeDownload = True + self.multiDL = self.premium + + def handlePremium(self): + self.handleDownload(True) + + def handleFree(self): + self.html = self.load(self.pyfile.url, decode=True) + + if self.NO_SLOTS_PATTERN in self.html: + self.retry(wait_time=5 * 60) + + self.getFileInfo() + # if self.pyfile.size > 576716800: + # self.fail("This file is too large for free download") + + # Reactivate passport if needed + m = re.search(self.REACTIVATE_PASSPORT_PATTERN, self.html) + if m: + passport_num = m.group(1) + request_uri = re.search(self.REQUEST_URI_PATTERN, self.html).group(1) + + for _ in xrange(5): + random_num = re.search(self.REACTIVATE_NUM_PATTERN, self.html).group(1) + + verifyinput = self.decryptCaptcha( + "http://d01.megashares.com/index.php?secgfx=gfx&random_num=%s" % random_num) + self.logInfo("Reactivating passport %s: %s %s" % (passport_num, random_num, verifyinput)) + + url = ("http://d01.megashares.com%s&rs=check_passport_renewal" % request_uri + + "&rsargs[]=%s&rsargs[]=%s&rsargs[]=%s" % (verifyinput, random_num, passport_num) + + "&rsargs[]=replace_sec_pprenewal&rsrnd=%s" % str(int(time() * 1000))) + self.logDebug(url) + response = self.load(url) + + if 'Thank you for reactivating your passport.' in response: + self.correctCaptcha() + self.retry() + else: + self.invalidCaptcha() + else: + self.fail("Failed to reactivate passport") + + # Check traffic left on passport + m = re.search(self.PASSPORT_LEFT_PATTERN, self.html) + if m is None: + self.fail('Passport not found') + self.logInfo("Download passport: %s" % m.group(1)) + data_left = float(m.group(2)) * 1024 ** {'KB': 1, 'MB': 2, 'GB': 3}[m.group(3)] + self.logInfo("Data left: %s %s (%d MB needed)" % (m.group(2), m.group(3), self.pyfile.size / 1048576)) + + if not data_left: + m = re.search(self.PASSPORT_RENEW_PATTERN, self.html) + renew = m.group(1) + m.group(2) + m.group(3) * 60 * 60 if m else 10 * 60 + self.retry(max_tries=15, wait_time=renew, reason="Unable to get passport") + + self.handleDownload(False) + + def handleDownload(self, premium=False): + # Find download link; + m = re.search(self.LINK_PATTERN % (1 if premium else 2), self.html) + msg = '%s download URL' % ('Premium' if premium else 'Free') + if m is None: + self.parseError(msg) + + download_url = m.group(1) + self.logDebug("%s: %s" % (msg, download_url)) + self.download(download_url) + + +getInfo = create_getInfo(MegasharesCom) diff --git a/pyload/plugins/hoster/MovReelCom.py b/pyload/plugins/hoster/MovReelCom.py new file mode 100644 index 000000000..3f97d3fca --- /dev/null +++ b/pyload/plugins/hoster/MovReelCom.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class MovReelCom(XFileSharingPro): + __name__ = "MovReelCom" + __type__ = "hoster" + __version__ = "1.20" + + __pattern__ = r'http://(?:www\.)?movreel.com/.*' + + __description__ = """MovReel.com hoster plugin""" + __author_name__ = "JorisV83" + __author_mail__ = "jorisv83-pyload@yahoo.com" + + HOSTER_NAME = "movreel.com" + + FILE_INFO_PATTERN = r'<h3>(?P<N>.+?) <small><sup>(?P<S>[\d.]+) (?P<U>..)</sup> </small></h3>' + OFFLINE_PATTERN = r'<b>File Not Found</b><br><br>' + LINK_PATTERN = r'<a href="(http://[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/.*)">Download Link</a>' + + +getInfo = create_getInfo(MovReelCom) diff --git a/pyload/plugins/hoster/MultiDebridCom.py b/pyload/plugins/hoster/MultiDebridCom.py new file mode 100644 index 000000000..765022eef --- /dev/null +++ b/pyload/plugins/hoster/MultiDebridCom.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.common.json_layer import json_loads +from pyload.plugins.Hoster import Hoster + + +class MultiDebridCom(Hoster): + __name__ = "MultiDebridCom" + __type__ = "hoster" + __version__ = "0.03" + + __pattern__ = r'http://(?:www\.)?\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/dl/' + + __description__ = """Multi-debrid.com hoster plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + + def setup(self): + self.chunkLimit = -1 + self.resumeDownload = True + + def process(self, pyfile): + if re.match(self.__pattern__, pyfile.url): + new_url = pyfile.url + elif not self.account: + self.logError(_("Please enter your %s account or deactivate this plugin") % "Multi-debrid.com") + self.fail("No Multi-debrid.com account provided") + else: + self.logDebug("Original URL: %s" % pyfile.url) + page = self.req.load('http://multi-debrid.com/api.php', + get={'user': self.user, 'pass': self.account.getAccountData(self.user)['password'], + 'link': pyfile.url}) + self.logDebug("JSON data: " + page) + page = json_loads(page) + if page['status'] != 'ok': + self.fail('Unable to unrestrict link') + new_url = page['link'] + + if new_url != pyfile.url: + self.logDebug("Unrestricted URL: " + new_url) + + self.download(new_url, disposition=True) diff --git a/pyload/plugins/hoster/MultishareCz.py b/pyload/plugins/hoster/MultishareCz.py new file mode 100644 index 000000000..819478659 --- /dev/null +++ b/pyload/plugins/hoster/MultishareCz.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- + +import re + +from random import random + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class MultishareCz(SimpleHoster): + __name__ = "MultishareCz" + __type__ = "hoster" + __version__ = "0.34" + + __pattern__ = r'http://(?:www\.)?multishare.cz/stahnout/(?P<ID>\d+).*' + + __description__ = """MultiShare.cz hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_INFO_PATTERN = ur'(?:<li>Název|Soubor): <strong>(?P<N>[^<]+)</strong><(?:/li><li|br)>Velikost: <strong>(?P<S>[^<]+)</strong>' + OFFLINE_PATTERN = ur'<h1>Stáhnout soubor</h1><p><strong>PoÅŸadovanÜ soubor neexistuje.</strong></p>' + FILE_SIZE_REPLACEMENTS = [(' ', '')] + + + def process(self, pyfile): + msurl = re.match(self.__pattern__, pyfile.url) + if msurl: + self.fileID = msurl.group('ID') + self.html = self.load(pyfile.url, decode=True) + self.getFileInfo() + + if self.premium: + self.handlePremium() + else: + self.handleFree() + else: + self.handleOverriden() + + def handleFree(self): + self.download("http://www.multishare.cz/html/download_free.php?ID=%s" % self.fileID) + + def handlePremium(self): + if not self.checkCredit(): + self.logWarning("Not enough credit left to download file") + self.resetAccount() + + self.download("http://www.multishare.cz/html/download_premium.php?ID=%s" % self.fileID) + + def handleOverriden(self): + if not self.premium: + self.fail("Only premium users can download from other hosters") + + self.html = self.load('http://www.multishare.cz/html/mms_ajax.php', post={"link": self.pyfile.url}, decode=True) + self.getFileInfo() + + if not self.checkCredit(): + self.fail("Not enough credit left to download file") + + url = "http://dl%d.mms.multishare.cz/html/mms_process.php" % round(random() * 10000 * random()) + params = {"u_ID": self.acc_info['u_ID'], "u_hash": self.acc_info['u_hash'], "link": self.pyfile.url} + self.logDebug(url, params) + self.download(url, get=params) + + def checkCredit(self): + self.acc_info = self.account.getAccountInfo(self.user, True) + self.logInfo("User %s has %i MB left" % (self.user, self.acc_info['trafficleft'] / 1024)) + + return self.pyfile.size / 1024 <= self.acc_info['trafficleft'] + + +getInfo = create_getInfo(MultishareCz) diff --git a/pyload/plugins/hoster/MyvideoDe.py b/pyload/plugins/hoster/MyvideoDe.py new file mode 100644 index 000000000..4ce75b4a2 --- /dev/null +++ b/pyload/plugins/hoster/MyvideoDe.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.Hoster import Hoster +from pyload.unescape import unescape + + +class MyvideoDe(Hoster): + __name__ = "MyvideoDe" + __type__ = "hoster" + __version__ = "0.9" + + __pattern__ = r'http://(?:www\.)?myvideo.de/watch/' + + __description__ = """Myvideo.de hoster plugin""" + __author_name__ = "spoob" + __author_mail__ = "spoob@pyload.org" + + + def process(self, pyfile): + self.pyfile = pyfile + self.download_html() + pyfile.name = self.get_file_name() + self.download(self.get_file_url()) + + def download_html(self): + self.html = self.load(self.pyfile.url) + + def get_file_url(self): + videoId = re.search(r"addVariable\('_videoid','(.*)'\);p.addParam\('quality'", self.html).group(1) + videoServer = re.search("rel='image_src' href='(.*)thumbs/.*' />", self.html).group(1) + file_url = videoServer + videoId + ".flv" + return file_url + + def get_file_name(self): + file_name_pattern = r"<h1 class='globalHd'>(.*)</h1>" + return unescape(re.search(file_name_pattern, self.html).group(1).replace("/", "") + '.flv') + + def file_exists(self): + self.download_html() + self.load(str(self.pyfile.url), cookies=False, just_header=True) + if self.req.lastEffectiveURL == "http://www.myvideo.de/": + return False + return True diff --git a/pyload/plugins/hoster/NarodRu.py b/pyload/plugins/hoster/NarodRu.py new file mode 100644 index 000000000..22c0ba908 --- /dev/null +++ b/pyload/plugins/hoster/NarodRu.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- + +import re + +from random import random + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class NarodRu(SimpleHoster): + __name__ = "NarodRu" + __type__ = "hoster" + __version__ = "0.1" + + __pattern__ = r'http://(?:www\.)?narod(\.yandex)?\.ru/(disk|start/[0-9]+\.\w+-narod\.yandex\.ru)/(?P<ID>\d+)/.+' + + __description__ = """Narod.ru hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_NAME_PATTERN = r'<dt class="name">(?:<[^<]*>)*(?P<N>[^<]+)</dt>' + FILE_SIZE_PATTERN = r'<dd class="size">(?P<S>\d[^<]*)</dd>' + OFFLINE_PATTERN = r'<title>404</title>|Ѐайл ÑЎалеМ Ñ ÑеÑвОÑа|ÐакПМÑОлÑÑ ÑÑПк Ñ
ÑÐ°ÐœÐµÐœÐžÑ Ñайла\.' + + FILE_SIZE_REPLACEMENTS = [(u'ÐÐ', 'KB'), (u'ÐÐ', 'MB'), (u'ÐÐ', 'GB')] + FILE_URL_REPLACEMENTS = [("narod.yandex.ru/", "narod.ru/"), + (r"/start/[0-9]+\.\w+-narod\.yandex\.ru/([0-9]{6,15})/\w+/(\w+)", r"/disk/\1/\2")] + + CAPTCHA_PATTERN = r'<number url="(.*?)">(\w+)</number>' + LINK_PATTERN = r'<a class="h-link" rel="yandex_bar" href="(.+?)">' + + + def handleFree(self): + for _ in xrange(5): + self.html = self.load('http://narod.ru/disk/getcapchaxml/?rnd=%d' % int(random() * 777)) + m = re.search(self.CAPTCHA_PATTERN, self.html) + if m is None: + self.parseError('Captcha') + post_data = {"action": "sendcapcha"} + captcha_url, post_data['key'] = m.groups() + post_data['rep'] = self.decryptCaptcha(captcha_url) + + self.html = self.load(self.pyfile.url, post=post_data, decode=True) + m = re.search(self.LINK_PATTERN, self.html) + if m: + url = 'http://narod.ru' + m.group(1) + self.correctCaptcha() + break + elif u'<b class="error-msg"><strong>ÐÑОблОÑÑ?</strong>' in self.html: + self.invalidCaptcha() + else: + self.parseError('Download link') + else: + self.fail("No valid captcha code entered") + + self.logDebug('Download link: ' + url) + self.download(url) + + +getInfo = create_getInfo(NarodRu) diff --git a/pyload/plugins/hoster/NetloadIn.py b/pyload/plugins/hoster/NetloadIn.py new file mode 100644 index 000000000..949b1aa92 --- /dev/null +++ b/pyload/plugins/hoster/NetloadIn.py @@ -0,0 +1,258 @@ +# -*- coding: utf-8 -*- + +import re + +from time import sleep, time + +from pyload.network.RequestFactory import getURL +from pyload.plugins.Hoster import Hoster +from pyload.plugins.Plugin import chunks + + +def getInfo(urls): + ## returns list of tupels (name, size (in bytes), status (see FileDatabase), url) + + apiurl = "http://api.netload.in/info.php?auth=Zf9SnQh9WiReEsb18akjvQGqT0I830e8&bz=1&md5=1&file_id=" + id_regex = re.compile(NetloadIn.__pattern__) + urls_per_query = 80 + + for chunk in chunks(urls, urls_per_query): + ids = "" + for url in chunk: + match = id_regex.search(url) + if match: + ids = ids + match.group(1) + ";" + + api = getURL(apiurl + ids, decode=True) + + if api is None or len(api) < 10: + print "Netload prefetch: failed " + return + if api.find("unknown_auth") >= 0: + print "Netload prefetch: Outdated auth code " + return + + result = [] + + for i, r in enumerate(api.splitlines()): + try: + tmp = r.split(";") + try: + size = int(tmp[2]) + except: + size = 0 + result.append((tmp[1], size, 2 if tmp[3] == "online" else 1, chunk[i])) + except: + print "Netload prefetch: Error while processing response: " + print r + + yield result + + +class NetloadIn(Hoster): + __name__ = "NetloadIn" + __type__ = "hoster" + __version__ = "0.45" + + __pattern__ = r'https?://(?:[^/]*\.)?netload\.in/(?:datei(.*?)(?:\.htm|/)|index.php?id=10&file_id=)' + + __description__ = """Netload.in hoster plugin""" + __author_name__ = ("spoob", "RaNaN", "Gregy") + __author_mail__ = ("spoob@pyload.org", "ranan@pyload.org", "gregy@gregy.cz") + + + def setup(self): + self.multiDL = self.resumeDownload = self.premium + + def process(self, pyfile): + self.url = pyfile.url + self.prepare() + pyfile.setStatus("downloading") + self.proceed(self.url) + + def prepare(self): + self.download_api_data() + + if self.api_data and self.api_data['filename']: + self.pyfile.name = self.api_data['filename'] + + if self.premium: + self.logDebug("Netload: Use Premium Account") + settings = self.load("http://www.netload.in/index.php?id=2&lang=en") + if '<option value="2" selected="selected">Direkter Download' in settings: + self.logDebug("Using direct download") + return True + else: + self.logDebug("Direct downloads not enabled. Parsing html for a download URL") + + if self.download_html(): + return True + else: + self.fail("Failed") + return False + + def download_api_data(self, n=0): + url = self.url + id_regex = re.compile(self.__pattern__) + match = id_regex.search(url) + + if match: + #normalize url + self.url = 'http://www.netload.in/datei%s.htm' % match.group(1) + self.logDebug("URL: %s" % self.url) + else: + self.api_data = False + return + + apiurl = "http://api.netload.in/info.php" + src = self.load(apiurl, cookies=False, + get={"file_id": match.group(1), "auth": "Zf9SnQh9WiReEsb18akjvQGqT0I830e8", "bz": "1", + "md5": "1"}, decode=True).strip() + if not src and n <= 3: + sleep(0.2) + self.download_api_data(n + 1) + return + + self.logDebug("Netload: APIDATA: " + src) + self.api_data = {} + if src and ";" in src and src not in ("unknown file_data", "unknown_server_data", "No input file specified."): + lines = src.split(";") + self.api_data['exists'] = True + self.api_data['fileid'] = lines[0] + self.api_data['filename'] = lines[1] + self.api_data['size'] = lines[2] + self.api_data['status'] = lines[3] + if self.api_data['status'] == "online": + self.api_data['checksum'] = lines[4].strip() + else: + self.api_data = False # check manually since api data is useless sometimes + + if lines[0] == lines[1] and lines[2] == "0": # useless api data + self.api_data = False + else: + self.api_data = False + + def final_wait(self, page): + wait_time = self.get_wait_time(page) + self.setWait(wait_time) + self.logDebug("Netload: final wait %d seconds" % wait_time) + self.wait() + self.url = self.get_file_url(page) + + def download_html(self): + self.logDebug("Netload: Entering download_html") + page = self.load(self.url, decode=True) + t = time() + 30 + + if "/share/templates/download_hddcrash.tpl" in page: + self.logError("Netload HDD Crash") + self.fail(_("File temporarily not available")) + + if not self.api_data: + self.logDebug("API Data may be useless, get details from html page") + + if "* The file was deleted" in page: + self.offline() + + name = re.search(r'class="dl_first_filename">([^<]+)', page, re.MULTILINE) + # the found filename is not truncated + if name: + name = name.group(1).strip() + if not name.endswith(".."): + self.pyfile.name = name + + captchawaited = False + for i in xrange(10): + + if not page: + page = self.load(self.url) + t = time() + 30 + + if "/share/templates/download_hddcrash.tpl" in page: + self.logError("Netload HDD Crash") + self.fail(_("File temporarily not available")) + + self.logDebug("Netload: try number %d " % i) + + if ">Your download is being prepared.<" in page: + self.logDebug("Netload: We will prepare your download") + self.final_wait(page) + return True + if ">An access request has been made from IP address <" in page: + wait = self.get_wait_time(page) + if not wait: + self.logDebug("Netload: Wait was 0 setting 30") + wait = 30 * 60 + self.logInfo(_("Netload: waiting between downloads %d s." % wait)) + self.wantReconnect = True + self.setWait(wait) + self.wait() + + return self.download_html() + + self.logDebug("Netload: Trying to find captcha") + + try: + url_captcha_html = "http://netload.in/" + re.search('(index.php\?id=10&.*&captcha=1)', + page).group(1).replace("amp;", "") + except: + page = None + continue + + try: + page = self.load(url_captcha_html, cookies=True) + captcha_url = "http://netload.in/" + re.search('(share/includes/captcha.php\?t=\d*)', page).group(1) + except: + self.logDebug("Netload: Could not find captcha, try again from beginning") + captchawaited = False + continue + + file_id = re.search('<input name="file_id" type="hidden" value="(.*)" />', page).group(1) + if not captchawaited: + wait = self.get_wait_time(page) + if i == 0: + self.pyfile.waitUntil = time() # dont wait contrary to time on website + else: + self.pyfile.waitUntil = t + self.logInfo(_("Netload: waiting for captcha %d s.") % (self.pyfile.waitUntil - time())) + #self.setWait(wait) + self.wait() + captchawaited = True + + captcha = self.decryptCaptcha(captcha_url) + page = self.load("http://netload.in/index.php?id=10", post={"file_id": file_id, "captcha_check": captcha}, + cookies=True) + + return False + + def get_file_url(self, page): + try: + file_url_pattern = r"<a class=\"Orange_Link\" href=\"(http://.+)\".?>Or click here" + attempt = re.search(file_url_pattern, page) + if attempt is not None: + return attempt.group(1) + else: + self.logDebug("Netload: Backup try for final link") + file_url_pattern = r"<a href=\"(.+)\" class=\"Orange_Link\">Click here" + attempt = re.search(file_url_pattern, page) + return "http://netload.in/" + attempt.group(1) + except: + self.logDebug("Netload: Getting final link failed") + return None + + def get_wait_time(self, page): + wait_seconds = int(re.search(r"countdown\((.+),'change\(\)'\)", page).group(1)) / 100 + return wait_seconds + + def proceed(self, url): + self.logDebug("Netload: Downloading..") + + self.download(url, disposition=True) + + check = self.checkDownload({"empty": re.compile(r"^$"), "offline": re.compile("The file was deleted")}) + + if check == "empty": + self.logInfo(_("Downloaded File was empty")) + self.retry() + elif check == "offline": + self.offline() diff --git a/pyload/plugins/hoster/NosuploadCom.py b/pyload/plugins/hoster/NosuploadCom.py new file mode 100644 index 000000000..e4feabdd0 --- /dev/null +++ b/pyload/plugins/hoster/NosuploadCom.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class NosuploadCom(XFileSharingPro): + __name__ = "NosuploadCom" + __type__ = "hoster" + __version__ = "0.1" + + __pattern__ = r'http://(?:www\.)?nosupload\.com/\?d=\w{12}' + + __description__ = """Nosupload.com hoster plugin""" + __author_name__ = "igel" + __author_mail__ = "igelkun@myopera.com" + + HOSTER_NAME = "nosupload.com" + + FILE_SIZE_PATTERN = r'<p><strong>Size:</strong> (?P<S>[0-9\.]+) (?P<U>[kKMG]?B)</p>' + LINK_PATTERN = r'<a class="select" href="(http://.+?)">Download</a>' + WAIT_PATTERN = r'Please wait.*?>(\d+)</span>' + + + def getDownloadLink(self): + # stage1: press the "Free Download" button + data = self.getPostParameters() + self.html = self.load(self.pyfile.url, post=data, ref=True, decode=True) + + # stage2: wait some time and press the "Download File" button + data = self.getPostParameters() + wait_time = re.search(self.WAIT_PATTERN, self.html, re.MULTILINE | re.DOTALL).group(1) + self.logDebug("hoster told us to wait %s seconds" % wait_time) + self.wait(wait_time) + self.html = self.load(self.pyfile.url, post=data, ref=True, decode=True) + + # stage3: get the download link + return re.search(self.LINK_PATTERN, self.html, re.S).group(1) + + +getInfo = create_getInfo(NosuploadCom) diff --git a/pyload/plugins/hoster/NovafileCom.py b/pyload/plugins/hoster/NovafileCom.py new file mode 100644 index 000000000..1346bbde9 --- /dev/null +++ b/pyload/plugins/hoster/NovafileCom.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# http://novafile.com/vfun4z6o2cit +# http://novafile.com/s6zrr5wemuz4 + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class NovafileCom(XFileSharingPro): + __name__ = "NovafileCom" + __type__ = "hoster" + __version__ = "0.02" + + __pattern__ = r'http://(?:www\.)?novafile\.com/\w{12}' + + __description__ = """Novafile.com hoster plugin""" + __author_name__ = ("zoidberg", "stickell") + __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") + + HOSTER_NAME = "novafile.com" + + FILE_SIZE_PATTERN = r'<div class="size">(?P<S>.+?)</div>' + ERROR_PATTERN = r'class="alert[^"]*alert-separate"[^>]*>\s*(?:<p>)?(.*?)\s*</' + LINK_PATTERN = r'<a href="(http://s\d+\.novafile\.com/.*?)" class="btn btn-green">Download File</a>' + WAIT_PATTERN = r'<p>Please wait <span id="count"[^>]*>(\d+)</span> seconds</p>' + + + def setup(self): + self.multiDL = False + + +getInfo = create_getInfo(NovafileCom) diff --git a/pyload/plugins/hoster/NowDownloadEu.py b/pyload/plugins/hoster/NowDownloadEu.py new file mode 100644 index 000000000..6e42a55bb --- /dev/null +++ b/pyload/plugins/hoster/NowDownloadEu.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo +from pyload.utils import fixup + + +class NowDownloadEu(SimpleHoster): + __name__ = "NowDownloadEu" + __type__ = "hoster" + __version__ = "0.05" + + __pattern__ = r'http://(?:www\.)?nowdownload\.(ch|co|eu|sx)/(dl/|download\.php\?id=)(?P<ID>\w+)' + + __description__ = """NowDownload.ch hoster plugin""" + __author_name__ = ("godofdream", "Walter Purcaro") + __author_mail__ = ("soilfiction@gmail.com", "vuolter@gmail.com") + + FILE_INFO_PATTERN = r'Downloading</span> <br> (?P<N>.*) (?P<S>[0-9,.]+) (?P<U>[kKMG])i?B </h4>' + OFFLINE_PATTERN = r'(This file does not exist!)' + + TOKEN_PATTERN = r'"(/api/token\.php\?token=[a-z0-9]+)"' + CONTINUE_PATTERN = r'"(/dl2/[a-z0-9]+/[a-z0-9]+)"' + WAIT_PATTERN = r'\.countdown\(\{until: \+(\d+),' + LINK_PATTERN = r'"(http://f\d+\.nowdownload\.ch/dl/[a-z0-9]+/[a-z0-9]+/[^<>"]*?)"' + + FILE_NAME_REPLACEMENTS = [("&#?\w+;", fixup), (r'<[^>]*>', '')] + + + def setup(self): + self.multiDL = self.resumeDownload = True + self.chunkLimit = -1 + + def handleFree(self): + tokenlink = re.search(self.TOKEN_PATTERN, self.html) + continuelink = re.search(self.CONTINUE_PATTERN, self.html) + if tokenlink is None or continuelink is None: + self.fail('Plugin out of Date') + + m = re.search(self.WAIT_PATTERN, self.html) + if m: + wait = int(m.group(1)) + else: + wait = 60 + + baseurl = "http://www.nowdownload.ch" + self.html = self.load(baseurl + str(tokenlink.group(1))) + self.wait(wait) + + self.html = self.load(baseurl + str(continuelink.group(1))) + + url = re.search(self.LINK_PATTERN, self.html) + if url is None: + self.fail('Download Link not Found (Plugin out of Date?)') + self.logDebug('Download link: ' + str(url.group(1))) + self.download(str(url.group(1))) + + +getInfo = create_getInfo(NowDownloadEu) diff --git a/pyload/plugins/hoster/OboomCom.py b/pyload/plugins/hoster/OboomCom.py new file mode 100644 index 000000000..04efa31b7 --- /dev/null +++ b/pyload/plugins/hoster/OboomCom.py @@ -0,0 +1,132 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# https://www.oboom.com/B7CYZIEB/10Mio.dat + +import re + +from pyload.common.json_layer import json_loads +from pyload.plugins.Hoster import Hoster +from pyload.plugins.internal.CaptchaService import ReCaptcha + + +class OboomCom(Hoster): + __name__ = "OboomCom" + __type__ = "hoster" + __version__ = "0.1" + + __pattern__ = r'https?://(?:www\.)?oboom\.com/(#(id=|/)?)?(?P<ID>[A-Z0-9]{8})' + + __description__ = """oboom.com hoster plugin""" + __author_name__ = "stanley" + __author_mail__ = "stanley.foerster@gmail.com" + + RECAPTCHA_KEY = "6LdqpO0SAAAAAJGHXo63HyalP7H4qlRs_vff0kJX" + + + def loadUrl(self, url, get=None): + if get is None: + get = dict() + return json_loads(self.load(url, get, decode=True)) + + def getFileId(self, url): + self.fileId = re.match(OboomCom.__pattern__, url).group('ID') + + def getSessionToken(self): + if self.premium: + accountInfo = self.account.getAccountInfo(self.user, True) + if "session" in accountInfo: + self.sessionToken = accountInfo['session'] + else: + self.fail("Could not retrieve premium session") + else: + apiUrl = "https://www.oboom.com/1.0/guestsession" + result = self.loadUrl(apiUrl) + if result[0] == 200: + self.sessionToken = result[1] + else: + self.fail("Could not retrieve token for guest session. Error code %s" % result[0]) + + def solveCaptcha(self): + recaptcha = ReCaptcha(self) + for _ in xrange(5): + challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY) + apiUrl = "https://www.oboom.com/1.0/download/ticket" + params = {"recaptcha_challenge_field": challenge, + "recaptcha_response_field": response, + "download_id": self.fileId, + "token": self.sessionToken} + result = self.loadUrl(apiUrl, params) + + if result[0] == 200: + self.downloadToken = result[1] + self.downloadAuth = result[2] + self.correctCaptcha() + self.setWait(30) + self.wait() + break + elif result[0] == 400: + if result[1] == "incorrect-captcha-sol": + self.invalidCaptcha() + elif result[1] == "captcha-timeout": + self.invalidCaptcha() + elif result[1] == "forbidden": + self.retry(5, 15 * 60, "Service unavailable") + elif result[0] == 403: + if result[1] == -1: # another download is running + self.setWait(15 * 60) + else: + self.setWait(result[1], reconnect=True) + self.wait() + self.retry(5) + else: + self.invalidCaptcha() + self.fail("Received invalid captcha 5 times") + + def getFileInfo(self, token, fileId): + apiUrl = "https://api.oboom.com/1.0/info" + params = {"token": token, "items": fileId, "http_errors": 0} + + result = self.loadUrl(apiUrl, params) + if result[0] == 200: + item = result[1][0] + if item['state'] == "online": + self.fileSize = item['size'] + self.fileName = item['name'] + else: + self.offline() + else: + self.fail("Could not retrieve file info. Error code %s: %s" % (result[0], result[1])) + + def getDownloadTicket(self): + apiUrl = "https://api.oboom.com/1.0/dl" + params = {"item": self.fileId, "http_errors": 0} + if self.premium: + params['token'] = self.sessionToken + else: + params['token'] = self.downloadToken + params['auth'] = self.downloadAuth + + result = self.loadUrl(apiUrl, params) + if result[0] == 200: + self.downloadDomain = result[1] + self.downloadTicket = result[2] + else: + self.fail("Could not retrieve download ticket. Error code %s" % result[0]) + + def setup(self): + self.chunkLimit = 1 + self.multiDL = self.premium + + def process(self, pyfile): + self.pyfile.url.replace(".com/#id=", ".com/#") + self.pyfile.url.replace(".com/#/", ".com/#") + self.getFileId(self.pyfile.url) + self.getSessionToken() + self.getFileInfo(self.sessionToken, self.fileId) + self.pyfile.name = self.fileName + self.pyfile.size = self.fileSize + if not self.premium: + self.solveCaptcha() + self.getDownloadTicket() + self.download("https://%s/1.0/dlh" % self.downloadDomain, get={"ticket": self.downloadTicket, "http_errors": 0}) diff --git a/pyload/plugins/hoster/OneFichierCom.py b/pyload/plugins/hoster/OneFichierCom.py new file mode 100644 index 000000000..8fdecb342 --- /dev/null +++ b/pyload/plugins/hoster/OneFichierCom.py @@ -0,0 +1,90 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# http://5pnm24ltcw.1fichier.com/ + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class OneFichierCom(SimpleHoster): + __name__ = "OneFichierCom" + __type__ = "hoster" + __version__ = "0.61" + + __pattern__ = r'(http://(?P<id>\w+)\.(?P<host>(1fichier|d(es)?fichiers|pjointe)\.(com|fr|net|org)|(cjoint|mesfichiers|piecejointe|oi)\.(org|net)|tenvoi\.(com|org|net)|dl4free\.com|alterupload\.com|megadl.fr))/?' + + __description__ = """1fichier.com hoster plugin""" + __author_name__ = ("fragonib", "the-razer", "zoidberg", "imclem", "stickell", "Elrick69") + __author_mail__ = ("fragonib[AT]yahoo[DOT]es", "daniel_ AT gmx DOT net", "zoidberg@mujmail.cz", + "imclem on github", "l.stickell@yahoo.it", "elrick69[AT]rocketmail[DOT]com") + + FILE_NAME_PATTERN = r'">Filename :</th>\s*<td>(?P<N>[^<]+)</td>' + FILE_SIZE_PATTERN = r'<th>Size :</th>\s*<td>(?P<S>[^<]+)</td>' + OFFLINE_PATTERN = r'The (requested)? file (could not be found|has been deleted)' + + FILE_URL_REPLACEMENTS = [(__pattern__, r'http://\g<id>.\g<host>/en/')] + + WAITING_PATTERN = r'Warning ! Without premium status, you must wait between each downloads' + NOT_PARALLEL = r'Warning ! Without premium status, you can download only one file at a time' + WAIT_TIME = 10 * 60 # Retry time between each free download + RETRY_TIME = 15 * 60 # Default retry time in seconds (if detected parallel download) + + + def setup(self): + self.multiDL = self.premium + self.resumeDownload = True + + def handleFree(self): + self.html = self.load(self.pyfile.url, decode=True) + + if self.WAITING_PATTERN in self.html: + self.logInfo('You have to wait been each free download! Retrying in %d seconds.' % self.WAIT_TIME) + self.waitAndRetry(self.WAIT_TIME) + else: # detect parallel download + m = re.search(self.NOT_PARALLEL, self.html) + if m: + self.waitAndRetry(self.RETRY_TIME) + + url, inputs = self.parseHtmlForm('action="http://%s' % self.file_info['id']) + if not url: + self.parseError("Download link not found") + + # Check for protection + if "pass" in inputs: + inputs['pass'] = self.getPassword() + inputs['submit'] = "Download" + + self.download(url, post=inputs) + + # Check download + self.checkDownloadedFile() + + def handlePremium(self): + url, inputs = self.parseHtmlForm('action="http://%s' % self.file_info['id']) + if not url: + self.parseError("Download link not found") + + # Check for protection + if "pass" in inputs: + inputs['pass'] = self.getPassword() + inputs['submit'] = "Download" + + self.download(url, post=inputs) + + # Check download + self.checkDownloadedFile() + + def checkDownloadedFile(self): + check = self.checkDownload({"wait": self.WAITING_PATTERN}) + if check == "wait": + self.waitAndRetry(int(self.lastcheck.group(1)) * 60) + + def waitAndRetry(self, wait_time): + self.wait(wait_time, True) + self.retry() + + + +getInfo = create_getInfo(OneFichierCom) diff --git a/pyload/plugins/hoster/OverLoadMe.py b/pyload/plugins/hoster/OverLoadMe.py new file mode 100644 index 000000000..8061b2e1d --- /dev/null +++ b/pyload/plugins/hoster/OverLoadMe.py @@ -0,0 +1,82 @@ +# -*- coding: utf-8 -*- + +import re + +from random import randrange +from urllib import unquote + +from pyload.common.json_layer import json_loads +from pyload.plugins.Hoster import Hoster +from pyload.utils import parseFileSize + + +class OverLoadMe(Hoster): + __name__ = "OverLoadMe" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'https?://.*overload\.me.*' + + __description__ = """Over-Load.me hoster plugin""" + __author_name__ = "marley" + __author_mail__ = "marley@over-load.me" + + + def getFilename(self, url): + try: + name = unquote(url.rsplit("/", 1)[1]) + except IndexError: + name = "Unknown_Filename..." + if name.endswith("..."): # incomplete filename, append random stuff + name += "%s.tmp" % randrange(100, 999) + return name + + def setup(self): + self.chunkLimit = 5 + self.resumeDownload = True + + def process(self, pyfile): + if re.match(self.__pattern__, pyfile.url): + new_url = pyfile.url + elif not self.account: + self.logError(_("Please enter your %s account or deactivate this plugin") % "Over-Load") + self.fail("No Over-Load account provided") + else: + self.logDebug("Old URL: %s" % pyfile.url) + data = self.account.getAccountData(self.user) + + page = self.load("https://api.over-load.me/getdownload.php", + get={"auth": data['password'], "link": pyfile.url}) + data = json_loads(page) + + self.logDebug("Returned Data: %s" % data) + + if data['err'] == 1: + self.logWarning(data['msg']) + self.tempOffline() + else: + if pyfile.name is not None and pyfile.name.endswith('.tmp') and data['filename']: + pyfile.name = data['filename'] + pyfile.size = parseFileSize(data['filesize']) + new_url = data['downloadlink'] + + if self.getConfig("https"): + new_url = new_url.replace("http://", "https://") + else: + new_url = new_url.replace("https://", "http://") + + if new_url != pyfile.url: + self.logDebug("New URL: %s" % new_url) + + if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown") or pyfile.name.endswith('..'): + # only use when name wasn't already set + pyfile.name = self.getFilename(new_url) + + self.download(new_url, disposition=True) + + check = self.checkDownload( + {"error": "<title>An error occured while processing your request</title>"}) + + if check == "error": + # usual this download can safely be retried + self.retry(reason="An error occured while generating link.", wait_time=60) diff --git a/pyload/plugins/hoster/PandaPlanet.py b/pyload/plugins/hoster/PandaPlanet.py new file mode 100644 index 000000000..8b26202df --- /dev/null +++ b/pyload/plugins/hoster/PandaPlanet.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# test.bin - 214 B - http://pandapla.net/pew1cz3ot586 +# BigBuckBunny_320x180.mp4 - 61.7 Mb - http://pandapla.net/tz0rgjfyyoh7 + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class PandaPlanet(XFileSharingPro): + __name__ = "PandaPlanet" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'https?://(?:www\.)?pandapla\.net/\w{12}' + + __description__ = """Pandapla.net hoster plugin""" + __author_name__ = "t4skforce" + __author_mail__ = "t4skforce1337[AT]gmail[DOT]com" + + HOSTER_NAME = "pandapla.net" + + FILE_SIZE_PATTERN = r'File Size:</b>\s*</td>\s*<td[^>]*>(?P<S>[^<]+)</td>\s*</tr>' + FILE_NAME_PATTERN = r'File Name:</b>\s*</td>\s*<td[^>]*>(?P<N>[^<]+)</td>\s*</tr>' + LINK_PATTERN = r'(http://([^/]*?%s|\d+\.\d+\.\d+\.\d+)(:\d+)?(/d/|(?:/files)?/\d+/\w+/)[^"\'<]+\/(?!video\.mp4)[^"\'<]+)' % HOSTER_NAME + + +getInfo = create_getInfo(PandaPlanet) diff --git a/pyload/plugins/hoster/PornhostCom.py b/pyload/plugins/hoster/PornhostCom.py new file mode 100644 index 000000000..802557873 --- /dev/null +++ b/pyload/plugins/hoster/PornhostCom.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.Hoster import Hoster + + +class PornhostCom(Hoster): + __name__ = "PornhostCom" + __type__ = "hoster" + __version__ = "0.2" + + __pattern__ = r'http://(?:www\.)?pornhost\.com/([0-9]+/[0-9]+\.html|[0-9]+)' + + __description__ = """Pornhost.com hoster plugin""" + __author_name__ = "jeix" + __author_mail__ = "jeix@hasnomail.de" + + + def process(self, pyfile): + self.download_html() + if not self.file_exists(): + self.offline() + + pyfile.name = self.get_file_name() + self.download(self.get_file_url()) + + # Old interface + def download_html(self): + url = self.pyfile.url + self.html = self.load(url) + + def get_file_url(self): + """ returns the absolute downloadable filepath + """ + if not self.html: + self.download_html() + + url = re.search(r'download this file</label>.*?<a href="(.*?)"', self.html) + if url is None: + url = re.search(r'"(http://dl[0-9]+\.pornhost\.com/files/.*?/.*?/.*?/.*?/.*?/.*?\..*?)"', self.html) + if url is None: + url = re.search(r'width: 894px; height: 675px">.*?<img src="(.*?)"', self.html) + if url is None: + url = re.search(r'"http://file[0-9]+\.pornhost\.com/[0-9]+/.*?"', + self.html) # TODO: fix this one since it doesn't match + + return url.group(1).strip() + + def get_file_name(self): + if not self.html: + self.download_html() + + name = re.search(r'<title>pornhost\.com - free file hosting with a twist - gallery(.*?)</title>', self.html) + if name is None: + name = re.search(r'id="url" value="http://www\.pornhost\.com/(.*?)/"', self.html) + if name is None: + name = re.search(r'<title>pornhost\.com - free file hosting with a twist -(.*?)</title>', self.html) + if name is None: + name = re.search(r'"http://file[0-9]+\.pornhost\.com/.*?/(.*?)"', self.html) + + name = name.group(1).strip() + ".flv" + + return name + + def file_exists(self): + """ returns True or False + """ + if not self.html: + self.download_html() + + if (re.search(r'gallery not found', self.html) is not None or + re.search(r'You will be redirected to', self.html) is not None): + return False + else: + return True diff --git a/pyload/plugins/hoster/PornhubCom.py b/pyload/plugins/hoster/PornhubCom.py new file mode 100644 index 000000000..5236fe09a --- /dev/null +++ b/pyload/plugins/hoster/PornhubCom.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.Hoster import Hoster + + +class PornhubCom(Hoster): + __name__ = "PornhubCom" + __type__ = "hoster" + __version__ = "0.5" + + __pattern__ = r'http://(?:www\.)?pornhub\.com/view_video\.php\?viewkey=[\w\d]+' + + __description__ = """Pornhub.com hoster plugin""" + __author_name__ = "jeix" + __author_mail__ = "jeix@hasnomail.de" + + + def process(self, pyfile): + self.download_html() + if not self.file_exists(): + self.offline() + + pyfile.name = self.get_file_name() + self.download(self.get_file_url()) + + def download_html(self): + url = self.pyfile.url + self.html = self.load(url) + + def get_file_url(self): + """ returns the absolute downloadable filepath + """ + if not self.html: + self.download_html() + + url = "http://www.pornhub.com//gateway.php" + video_id = self.pyfile.url.split('=')[-1] + # thanks to jD team for this one v + post_data = "\x00\x03\x00\x00\x00\x01\x00\x0c\x70\x6c\x61\x79\x65\x72\x43\x6f\x6e\x66\x69\x67\x00\x02\x2f\x31\x00\x00\x00\x44\x0a\x00\x00\x00\x03\x02\x00" + post_data += chr(len(video_id)) + post_data += video_id + post_data += "\x02\x00\x02\x2d\x31\x02\x00\x20" + post_data += "add299463d4410c6d1b1c418868225f7" + + content = self.req.load(url, post=str(post_data)) + + new_content = "" + for x in content: + if ord(x) < 32 or ord(x) > 176: + new_content += '#' + else: + new_content += x + + content = new_content + + return re.search(r'flv_url.*(http.*?)##post_roll', content).group(1) + + def get_file_name(self): + if not self.html: + self.download_html() + + m = re.search(r'<title[^>]+>([^<]+) - ', self.html) + if m: + name = m.group(1) + else: + matches = re.findall('<h1>(.*?)</h1>', self.html) + if len(matches) > 1: + name = matches[1] + else: + name = matches[0] + + return name + '.flv' + + def file_exists(self): + """ returns True or False + """ + if not self.html: + self.download_html() + + if re.search(r'This video is no longer in our database or is in conversion', self.html) is not None: + return False + else: + return True diff --git a/pyload/plugins/hoster/PotloadCom.py b/pyload/plugins/hoster/PotloadCom.py new file mode 100644 index 000000000..6a97d0289 --- /dev/null +++ b/pyload/plugins/hoster/PotloadCom.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class PotloadCom(XFileSharingPro): + __name__ = "PotloadCom" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?potload\.com/\w{12}' + + __description__ = """Potload.com hoster plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + HOSTER_NAME = "potload.com" + + FILE_INFO_PATTERN = r'<h[1-6]>(?P<N>.+) \((?P<S>\d+) (?P<U>\w+)\)</h' + + +getInfo = create_getInfo(PotloadCom) diff --git a/pyload/plugins/hoster/Premium4Me.py b/pyload/plugins/hoster/Premium4Me.py new file mode 100644 index 000000000..439242aa7 --- /dev/null +++ b/pyload/plugins/hoster/Premium4Me.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- + +from os import remove +from os.path import exists +from urllib import quote + +from pyload.plugins.Hoster import Hoster +from pyload.utils import fs_encode + + +class Premium4Me(Hoster): + __name__ = "Premium4Me" + __type__ = "hoster" + __version__ = "0.08" + + __pattern__ = r'http://(?:www\.)?premium.to/.*' + + __description__ = """Premium.to hoster plugin""" + __author_name__ = ("RaNaN", "zoidberg", "stickell") + __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz", "l.stickell@yahoo.it") + + + def setup(self): + self.resumeDownload = True + self.chunkLimit = 1 + + def process(self, pyfile): + if not self.account: + self.logError(_("Please enter your %s account or deactivate this plugin") % "premium.to") + self.fail("No premium.to account provided") + + self.logDebug("premium.to: Old URL: %s" % pyfile.url) + + tra = self.getTraffic() + + #raise timeout to 2min + self.req.setOption("timeout", 120) + + self.download( + "http://premium.to/api/getfile.php?authcode=%s&link=%s" % (self.account.authcode, quote(pyfile.url, "")), + disposition=True) + + check = self.checkDownload({"nopremium": "No premium account available"}) + + if check == "nopremium": + self.retry(60, 5 * 60, "No premium account available") + + err = '' + if self.req.http.code == '420': + # Custom error code send - fail + lastDownload = fs_encode(self.lastDownload) + + if exists(lastDownload): + f = open(lastDownload, "rb") + err = f.read(256).strip() + f.close() + remove(lastDownload) + else: + err = 'File does not exist' + + trb = self.getTraffic() + self.logInfo("Filesize: %d, Traffic used %d, traffic left %d" % (pyfile.size, tra - trb, trb)) + + if err: + self.fail(err) + + def getTraffic(self): + try: + traffic = int(self.load("http://premium.to/api/traffic.php?authcode=%s" % self.account.authcode)) + except: + traffic = 0 + return traffic diff --git a/pyload/plugins/hoster/PremiumizeMe.py b/pyload/plugins/hoster/PremiumizeMe.py new file mode 100644 index 000000000..16649f492 --- /dev/null +++ b/pyload/plugins/hoster/PremiumizeMe.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- + +from pyload.common.json_layer import json_loads +from pyload.plugins.Hoster import Hoster + + +class PremiumizeMe(Hoster): + __name__ = "PremiumizeMe" + __type__ = "hoster" + __version__ = "0.12" + + __pattern__ = None #: Since we want to allow the user to specify the list of hoster to use we let MultiHoster.coreReady + + __description__ = """Premiumize.me hoster plugin""" + __author_name__ = "Florian Franzen" + __author_mail__ = "FlorianFranzen@gmail.com" + + + def process(self, pyfile): + # Check account + if not self.account or not self.account.canUse(): + self.logError(_("Please enter your %s account or deactivate this plugin") % "premiumize.me") + self.fail("No valid premiumize.me account provided") + + # In some cases hostsers do not supply us with a filename at download, so we + # are going to set a fall back filename (e.g. for freakshare or xfileshare) + pyfile.name = pyfile.name.split('/').pop() # Remove everthing before last slash + + # Correction for automatic assigned filename: Removing html at end if needed + suffix_to_remove = ["html", "htm", "php", "php3", "asp", "shtm", "shtml", "cfml", "cfm"] + temp = pyfile.name.split('.') + if temp.pop() in suffix_to_remove: + pyfile.name = ".".join(temp) + + # Get account data + (user, data) = self.account.selectAccount() + + # Get rewritten link using the premiumize.me api v1 (see https://secure.premiumize.me/?show=api) + answer = self.load( + "https://api.premiumize.me/pm-api/v1.php?method=directdownloadlink¶ms[login]=%s¶ms[pass]=%s¶ms[link]=%s" % ( + user, data['password'], pyfile.url)) + data = json_loads(answer) + + # Check status and decide what to do + status = data['status'] + if status == 200: + self.download(data['result']['location'], disposition=True) + elif status == 400: + self.fail("Invalid link") + elif status == 404: + self.offline() + elif status >= 500: + self.tempOffline() + else: + self.fail(data['statusmessage']) diff --git a/pyload/plugins/hoster/PromptfileCom.py b/pyload/plugins/hoster/PromptfileCom.py new file mode 100644 index 000000000..108f470d2 --- /dev/null +++ b/pyload/plugins/hoster/PromptfileCom.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class PromptfileCom(SimpleHoster): + __name__ = "PromptfileCom" + __type__ = "hoster" + __version__ = "0.1" + + __pattern__ = r'https?://(?:www\.)?promptfile\.com/' + + __description__ = """Promptfile.com hoster plugin""" + __author_name__ = "igel" + __author_mail__ = "igelkun@myopera.com" + + FILE_INFO_PATTERN = r'<span style="[^"]*" title="[^"]*">(?P<N>.*?) \((?P<S>[\d.]+) (?P<U>\w+)\)</span>' + OFFLINE_PATTERN = r'<span style="[^"]*" title="File Not Found">File Not Found</span>' + + CHASH_PATTERN = r'<input type="hidden" name="chash" value="([^"]*)" />' + LINK_PATTERN = r"clip: {\s*url: '(https?://(?:www\.)promptfile[^']*)'," + + + def handleFree(self): + # STAGE 1: get link to continue + m = re.search(self.CHASH_PATTERN, self.html) + if m is None: + self.parseError("Unable to detect chash") + chash = m.group(1) + self.logDebug("read chash %s" % chash) + # continue to stage2 + self.html = self.load(self.pyfile.url, decode=True, post={'chash': chash}) + + # STAGE 2: get the direct link + m = re.search(self.LINK_PATTERN, self.html, re.MULTILINE | re.DOTALL) + if m is None: + self.parseError("Unable to detect direct link") + direct = m.group(1) + self.logDebug("found direct link: " + direct) + self.download(direct, disposition=True) + + +getInfo = create_getInfo(PromptfileCom) diff --git a/pyload/plugins/hoster/QuickshareCz.py b/pyload/plugins/hoster/QuickshareCz.py new file mode 100644 index 000000000..d82c64888 --- /dev/null +++ b/pyload/plugins/hoster/QuickshareCz.py @@ -0,0 +1,92 @@ +# -*- coding: utf-8 -*- + +import re + +from pycurl import FOLLOWLOCATION + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class QuickshareCz(SimpleHoster): + __name__ = "QuickshareCz" + __type__ = "hoster" + __version__ = "0.54" + + __pattern__ = r'http://(?:[^/]*\.)?quickshare.cz/stahnout-soubor/.*' + + __description__ = """Quickshare.cz hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_NAME_PATTERN = r'<th width="145px">Název:</th>\s*<td style="word-wrap:break-word;">(?P<N>[^<]+)</td>' + FILE_SIZE_PATTERN = r'<th>Velikost:</th>\s*<td>(?P<S>[0-9.]+) (?P<U>[kKMG])i?B</td>' + OFFLINE_PATTERN = r'<script type="text/javascript">location.href=\'/chyba\';</script>' + + + def process(self, pyfile): + self.html = self.load(pyfile.url, decode=True) + self.getFileInfo() + + # parse js variables + self.jsvars = dict((x, y.strip("'")) for x, y in re.findall(r"var (\w+) = ([0-9.]+|'[^']*')", self.html)) + self.logDebug(self.jsvars) + pyfile.name = self.jsvars['ID3'] + + # determine download type - free or premium + if self.premium: + if 'UU_prihlasen' in self.jsvars: + if self.jsvars['UU_prihlasen'] == '0': + self.logWarning('User not logged in') + self.relogin(self.user) + self.retry() + elif float(self.jsvars['UU_kredit']) < float(self.jsvars['kredit_odecet']): + self.logWarning('Not enough credit left') + self.premium = False + + if self.premium: + self.handlePremium() + else: + self.handleFree() + + check = self.checkDownload({"err": re.compile(r"\AChyba!")}, max_size=100) + if check == "err": + self.fail("File not m or plugin defect") + + def handleFree(self): + # get download url + download_url = '%s/download.php' % self.jsvars['server'] + data = dict((x, self.jsvars[x]) for x in self.jsvars if x in ("ID1", "ID2", "ID3", "ID4")) + self.logDebug("FREE URL1:" + download_url, data) + + self.req.http.c.setopt(FOLLOWLOCATION, 0) + self.load(download_url, post=data) + self.header = self.req.http.header + self.req.http.c.setopt(FOLLOWLOCATION, 1) + + m = re.search("Location\s*:\s*(.*)", self.header, re.I) + if m is None: + self.fail('File not found') + download_url = m.group(1) + self.logDebug("FREE URL2:" + download_url) + + # check errors + m = re.search(r'/chyba/(\d+)', download_url) + if m: + if m.group(1) == '1': + self.retry(60, 2 * 60, "This IP is already downloading") + elif m.group(1) == '2': + self.retry(60, 60, "No free slots available") + else: + self.fail('Error %d' % m.group(1)) + + # download file + self.download(download_url) + + def handlePremium(self): + download_url = '%s/download_premium.php' % self.jsvars['server'] + data = dict((x, self.jsvars[x]) for x in self.jsvars if x in ("ID1", "ID2", "ID4", "ID5")) + self.logDebug("PREMIUM URL:" + download_url, data) + self.download(download_url, get=data) + + +getInfo = create_getInfo(QuickshareCz) diff --git a/pyload/plugins/hoster/RPNetBiz.py b/pyload/plugins/hoster/RPNetBiz.py new file mode 100644 index 000000000..e305c35ce --- /dev/null +++ b/pyload/plugins/hoster/RPNetBiz.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.Hoster import Hoster +from pyload.common.json_layer import json_loads + + +class RPNetBiz(Hoster): + __name__ = "RPNetBiz" + __type__ = "hoster" + __version__ = "0.1" + + __description__ = """RPNet.biz hoster plugin""" + + __pattern__ = r'https?://.*rpnet\.biz' + __author_name__ = "Dman" + __author_mail__ = "dmanugm@gmail.com" + + + def setup(self): + self.chunkLimit = -1 + self.resumeDownload = True + + def process(self, pyfile): + if re.match(self.__pattern__, pyfile.url): + link_status = {'generated': pyfile.url} + elif not self.account: + # Check account + self.logError(_("Please enter your %s account or deactivate this plugin") % "rpnet") + self.fail("No rpnet account provided") + else: + (user, data) = self.account.selectAccount() + + self.logDebug("Original URL: %s" % pyfile.url) + # Get the download link + response = self.load("https://premium.rpnet.biz/client_api.php", + get={"username": user, "password": data['password'], + "action": "generate", "links": pyfile.url}) + + self.logDebug("JSON data: %s" % response) + link_status = json_loads(response)['links'][0] # get the first link... since we only queried one + + # Check if we only have an id as a HDD link + if 'id' in link_status: + self.logDebug("Need to wait at least 30 seconds before requery") + self.setWait(30) # wait for 30 seconds + self.wait() + # Lets query the server again asking for the status on the link, + # we need to keep doing this until we reach 100 + max_tries = 30 + my_try = 0 + while (my_try <= max_tries): + self.logDebug("Try: %d ; Max Tries: %d" % (my_try, max_tries)) + response = self.load("https://premium.rpnet.biz/client_api.php", + get={"username": user, "password": data['password'], + "action": "downloadInformation", "id": link_status['id']}) + self.logDebug("JSON data hdd query: %s" % response) + download_status = json_loads(response)['download'] + + if download_status['status'] == '100': + link_status['generated'] = download_status['rpnet_link'] + self.logDebug("Successfully downloaded to rpnet HDD: %s" % link_status['generated']) + break + else: + self.logDebug("At %s%% for the file download" % download_status['status']) + + self.setWait(30) + self.wait() + my_try += 1 + + if my_try > max_tries: # We went over the limit! + self.fail("Waited for about 15 minutes for download to finish but failed") + + if 'generated' in link_status: + self.download(link_status['generated'], disposition=True) + elif 'error' in link_status: + self.fail(link_status['error']) + else: + self.fail("Something went wrong, not supposed to enter here") diff --git a/pyload/plugins/hoster/RapidgatorNet.py b/pyload/plugins/hoster/RapidgatorNet.py new file mode 100644 index 000000000..46fe285b7 --- /dev/null +++ b/pyload/plugins/hoster/RapidgatorNet.py @@ -0,0 +1,191 @@ +# -*- coding: utf-8 -*- + +import re + +from pycurl import HTTPHEADER + +from pyload.common.json_layer import json_loads +from pyload.network.HTTPRequest import BadHeader +from pyload.plugins.hoster.UnrestrictLi import secondsToMidnight +from pyload.plugins.internal.CaptchaService import AdsCaptcha, ReCaptcha, SolveMedia +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class RapidgatorNet(SimpleHoster): + __name__ = "RapidgatorNet" + __type__ = "hoster" + __version__ = "0.22" + + __pattern__ = r'http://(?:www\.)?(rapidgator\.net|rg\.to)/file/\w+' + + __description__ = """Rapidgator.net hoster plugin""" + __author_name__ = ("zoidberg", "chrox", "stickell", "Walter Purcaro") + __author_mail__ = ("zoidberg@mujmail.cz", "", "l.stickell@yahoo.it", "vuolter@gmail.com") + + API_URL = "http://rapidgator.net/api/file" + + FILE_NAME_PATTERN = r'<title>Download file (?P<N>.*)</title>' + FILE_SIZE_PATTERN = r'File size:\s*<strong>(?P<S>[\d\.]+) (?P<U>\w+)</strong>' + OFFLINE_PATTERN = r'>(File not found|Error 404)' + + JSVARS_PATTERN = r"\s+var\s*(startTimerUrl|getDownloadUrl|captchaUrl|fid|secs)\s*=\s*'?(.*?)'?;" + PREMIUM_ONLY_ERROR_PATTERN = r'You can download files up to|This file can be downloaded by premium only<' + DOWNLOAD_LIMIT_ERROR_PATTERN = r'You have reached your (daily|hourly) downloads limit' + WAIT_PATTERN = r'(?:Delay between downloads must be not less than|Try again in)\s*(\d+)\s*(hour|min)' + LINK_PATTERN = r"return '(http://\w+.rapidgator.net/.*)';" + + RECAPTCHA_KEY_PATTERN = r'"http://api\.recaptcha\.net/challenge\?k=(.*?)"' + ADSCAPTCHA_SRC_PATTERN = r'(http://api\.adscaptcha\.com/Get\.aspx[^"\']*)' + SOLVEMEDIA_PATTERN = r'http://api\.solvemedia\.com/papi/challenge\.script\?k=(.*?)"' + + + def setup(self): + self.resumeDownload = self.multiDL = self.premium + self.sid = None + self.chunkLimit = 1 + self.req.setOption("timeout", 120) + + def process(self, pyfile): + if self.account: + self.sid = self.account.getAccountData(self.user).get('SID', None) + + if self.sid: + self.handlePremium() + else: + self.handleFree() + + def api_response(self, cmd): + try: + json = self.load('%s/%s' % (self.API_URL, cmd), + get={'sid': self.sid, + 'url': self.pyfile.url}, decode=True) + self.logDebug('API:%s' % cmd, json, "SID: %s" % self.sid) + json = json_loads(json) + status = json['response_status'] + msg = json['response_details'] + except BadHeader, e: + self.logError('API:%s' % cmd, e, "SID: %s" % self.sid) + status = e.code + msg = e + + if status == 200: + return json['response'] + elif status == 423: + self.account.empty(self.user) + self.retry() + else: + self.account.relogin(self.user) + self.retry(wait_time=60) + + def handlePremium(self): + #self.logDebug("ACCOUNT_DATA", self.account.getAccountData(self.user)) + self.api_data = self.api_response('info') + self.api_data['md5'] = self.api_data['hash'] + self.pyfile.name = self.api_data['filename'] + self.pyfile.size = self.api_data['size'] + url = self.api_response('download')['url'] + self.download(url) + + def handleFree(self): + self.html = self.load(self.pyfile.url, decode=True) + + self.checkFree() + + jsvars = dict(re.findall(self.JSVARS_PATTERN, self.html)) + self.logDebug(jsvars) + + self.req.http.lastURL = self.pyfile.url + self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"]) + + url = "http://rapidgator.net%s?fid=%s" % ( + jsvars.get('startTimerUrl', '/download/AjaxStartTimer'), jsvars['fid']) + jsvars.update(self.getJsonResponse(url)) + + self.wait(int(jsvars.get('secs', 45)) + 1, False) + + url = "http://rapidgator.net%s?sid=%s" % ( + jsvars.get('getDownloadUrl', '/download/AjaxGetDownload'), jsvars['sid']) + jsvars.update(self.getJsonResponse(url)) + + self.req.http.lastURL = self.pyfile.url + self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With:"]) + + url = "http://rapidgator.net%s" % jsvars.get('captchaUrl', '/download/captcha') + self.html = self.load(url) + + for _ in xrange(5): + m = re.search(self.LINK_PATTERN, self.html) + if m: + link = m.group(1) + self.logDebug(link) + self.download(link, disposition=True) + break + else: + captcha, captcha_key = self.getCaptcha() + captcha_challenge, captcha_response = captcha.challenge(captcha_key) + + self.html = self.load(url, post={ + "DownloadCaptchaForm[captcha]": "", + "adcopy_challenge": captcha_challenge, + "adcopy_response": captcha_response + }) + + if "The verification code is incorrect" in self.html: + self.invalidCaptcha() + else: + self.correctCaptcha() + else: + self.parseError("Download link") + + def getCaptcha(self): + m = re.search(self.ADSCAPTCHA_SRC_PATTERN, self.html) + if m: + captcha_key = m.group(1) + captcha = AdsCaptcha(self) + else: + m = re.search(self.RECAPTCHA_KEY_PATTERN, self.html) + if m: + captcha_key = m.group(1) + captcha = ReCaptcha(self) + else: + m = re.search(self.SOLVEMEDIA_PATTERN, self.html) + if m: + captcha_key = m.group(1) + captcha = SolveMedia(self) + else: + self.parseError("Captcha") + + return captcha, captcha_key + + def checkFree(self): + m = re.search(self.PREMIUM_ONLY_ERROR_PATTERN, self.html) + if m: + self.fail("Premium account needed for download") + else: + m = re.search(self.WAIT_PATTERN, self.html) + + if m: + wait_time = int(m.group(1)) * {"hour": 60, "min": 1}[m.group(2)] + else: + m = re.search(self.DOWNLOAD_LIMIT_ERROR_PATTERN, self.html) + if m is None: + return + elif m.group(1) == "daily": + self.logWarning("You have reached your daily downloads limit for today") + wait_time = secondsToMidnight(gmt=2) + else: + wait_time = 1 * 60 * 60 + + self.logDebug("Waiting %d minutes" % wait_time / 60) + self.wait(wait_time, True) + self.retry() + + def getJsonResponse(self, url): + response = self.load(url, decode=True) + if not response.startswith('{'): + self.retry() + self.logDebug(url, response) + return json_loads(response) + + +getInfo = create_getInfo(RapidgatorNet) diff --git a/pyload/plugins/hoster/RapidshareCom.py b/pyload/plugins/hoster/RapidshareCom.py new file mode 100644 index 000000000..fefa06fd7 --- /dev/null +++ b/pyload/plugins/hoster/RapidshareCom.py @@ -0,0 +1,223 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.network.RequestFactory import getURL +from pyload.plugins.Hoster import Hoster + + +def getInfo(urls): + ids = "" + names = "" + + p = re.compile(RapidshareCom.__pattern__) + + for url in urls: + r = p.search(url) + if r.group("name"): + ids += "," + r.group("id") + names += "," + r.group("name") + elif r.group("name_new"): + ids += "," + r.group("id_new") + names += "," + r.group("name_new") + + url = "http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=checkfiles&files=%s&filenames=%s" % (ids[1:], names[1:]) + + api = getURL(url) + result = [] + i = 0 + for res in api.split(): + tmp = res.split(",") + if tmp[4] in ("0", "4", "5"): + status = 1 + elif tmp[4] == "1": + status = 2 + else: + status = 3 + + result.append((tmp[1], tmp[2], status, urls[i])) + i += 1 + + yield result + + +class RapidshareCom(Hoster): + __name__ = "RapidshareCom" + __type__ = "hoster" + __version__ = "1.39" + + __pattern__ = r'https?://(?:www\.)?rapidshare.com/(?:files/(?P<id>\d*?)/(?P<name>[^?]+)|#!download\|(?:\w+)\|(?P<id_new>\d+)\|(?P<name_new>[^|]+))' + __config__ = [("server", + "Cogent;Deutsche Telekom;Level(3);Level(3) #2;GlobalCrossing;Level(3) #3;Teleglobe;GlobalCrossing #2;TeliaSonera #2;Teleglobe #2;TeliaSonera #3;TeliaSonera", + "Preferred Server", "None")] + + __description__ = """Rapidshare.com hoster plugin""" + __author_name__ = ("spoob", "RaNaN", "mkaay") + __author_mail__ = ("spoob@pyload.org", "ranan@pyload.org", "mkaay@mkaay.de") + + + def setup(self): + self.no_download = True + self.api_data = None + self.offset = 0 + self.dl_dict = {} + + self.id = None + self.name = None + + self.chunkLimit = -1 if self.premium else 1 + self.multiDL = self.resumeDownload = self.premium + + def process(self, pyfile): + self.url = pyfile.url + self.prepare() + + def prepare(self): + m = re.match(self.__pattern__, self.url) + + if m.group("name"): + self.id = m.group("id") + self.name = m.group("name") + else: + self.id = m.group("id_new") + self.name = m.group("name_new") + + self.download_api_data() + if self.api_data['status'] == "1": + self.pyfile.name = self.get_file_name() + + if self.premium: + self.handlePremium() + else: + self.handleFree() + + elif self.api_data['status'] == "2": + self.logInfo(_("Rapidshare: Traffic Share (direct download)")) + self.pyfile.name = self.get_file_name() + + self.download(self.pyfile.url, get={"directstart": 1}) + + elif self.api_data['status'] in ("0", "4", "5"): + self.offline() + elif self.api_data['status'] == "3": + self.tempOffline() + else: + self.fail("Unknown response code.") + + def handleFree(self): + while self.no_download: + self.dl_dict = self.freeWait() + + #tmp = "#!download|%(server)s|%(id)s|%(name)s|%(size)s" + download = "http://%(host)s/cgi-bin/rsapi.cgi?sub=download&editparentlocation=0&bin=1&fileid=%(id)s&filename=%(name)s&dlauth=%(auth)s" % self.dl_dict + + self.logDebug("RS API Request: %s" % download) + self.download(download, ref=False) + + check = self.checkDownload({"ip": "You need RapidPro to download more files from your IP address", + "auth": "Download auth invalid"}) + if check == "ip": + self.setWait(60) + self.logInfo(_("Already downloading from this ip address, waiting 60 seconds")) + self.wait() + self.handleFree() + elif check == "auth": + self.logInfo(_("Invalid Auth Code, download will be restarted")) + self.offset += 5 + self.handleFree() + + def handlePremium(self): + info = self.account.getAccountInfo(self.user, True) + self.logDebug("%s: Use Premium Account" % self.__name__) + url = self.api_data['mirror'] + self.download(url, get={"directstart": 1}) + + def download_api_data(self, force=False): + """ + http://images.rapidshare.com/apidoc.txt + """ + if self.api_data and not force: + return + api_url_base = "http://api.rapidshare.com/cgi-bin/rsapi.cgi" + api_param_file = {"sub": "checkfiles", "incmd5": "1", "files": self.id, "filenames": self.name} + src = self.load(api_url_base, cookies=False, get=api_param_file).strip() + self.logDebug("RS INFO API: %s" % src) + if src.startswith("ERROR"): + return + fields = src.split(",") + + # status codes: + # 0=File not found + # 1=File OK (Anonymous downloading) + # 3=Server down + # 4=File marked as illegal + # 5=Anonymous file locked, because it has more than 10 downloads already + # 50+n=File OK (TrafficShare direct download type "n" without any logging.) + # 100+n=File OK (TrafficShare direct download type "n" with logging. + # Read our privacy policy to see what is logged.) + + self.api_data = {"fileid": fields[0], "filename": fields[1], "size": int(fields[2]), "serverid": fields[3], + "status": fields[4], "shorthost": fields[5], "checksum": fields[6].strip().lower()} + + if int(self.api_data['status']) > 100: + self.api_data['status'] = str(int(self.api_data['status']) - 100) + elif int(self.api_data['status']) > 50: + self.api_data['status'] = str(int(self.api_data['status']) - 50) + + self.api_data['mirror'] = "http://rs%(serverid)s%(shorthost)s.rapidshare.com/files/%(fileid)s/%(filename)s" % self.api_data + + def freeWait(self): + """downloads html with the important information + """ + self.no_download = True + + id = self.id + name = self.name + + prepare = "https://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=download&fileid=%(id)s&filename=%(name)s&try=1&cbf=RSAPIDispatcher&cbid=1" % { + "name": name, "id": id} + + self.logDebug("RS API Request: %s" % prepare) + result = self.load(prepare, ref=False) + self.logDebug("RS API Result: %s" % result) + + between_wait = re.search("You need to wait (\d+) seconds", result) + + if "You need RapidPro to download more files from your IP address" in result: + self.setWait(60) + self.logInfo(_("Already downloading from this ip address, waiting 60 seconds")) + self.wait() + elif ("Too many users downloading from this server right now" in result or + "All free download slots are full" in result): + self.setWait(120) + self.logInfo(_("RapidShareCom: No free slots")) + self.wait() + elif "This file is too big to download it for free" in result: + self.fail(_("You need a premium account for this file")) + elif "Filename invalid." in result: + self.fail(_("Filename reported invalid")) + elif between_wait: + self.setWait(int(between_wait.group(1))) + self.wantReconnect = True + self.wait() + else: + self.no_download = False + + tmp, info = result.split(":") + data = info.split(",") + + dl_dict = {"id": id, + "name": name, + "host": data[0], + "auth": data[1], + "server": self.api_data['serverid'], + "size": self.api_data['size']} + self.setWait(int(data[2]) + 2 + self.offset) + self.wait() + + return dl_dict + + def get_file_name(self): + if self.api_data['filename']: + return self.api_data['filename'] + return self.url.split("/")[-1] diff --git a/pyload/plugins/hoster/RarefileNet.py b/pyload/plugins/hoster/RarefileNet.py new file mode 100644 index 000000000..7c6632aac --- /dev/null +++ b/pyload/plugins/hoster/RarefileNet.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo +from pyload.utils import html_unescape + + +class RarefileNet(XFileSharingPro): + __name__ = "RarefileNet" + __type__ = "hoster" + __version__ = "0.03" + + __pattern__ = r'http://(?:www\.)?rarefile.net/\w{12}' + + __description__ = """Rarefile.net hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + HOSTER_NAME = "rarefile.net" + + FILE_NAME_PATTERN = r'<td><font color="red">(?P<N>.*?)</font></td>' + FILE_SIZE_PATTERN = r'<td>Size : (?P<S>.+?) ' + LINK_PATTERN = r'<a href="(?P<link>[^"]+)">(?P=link)</a>' + + + def setup(self): + self.resumeDownload = self.multiDL = self.premium + + def handleCaptcha(self, inputs): + captcha_div = re.search(r'<b>Enter code.*?<div.*?>(.*?)</div>', self.html, re.S).group(1) + self.logDebug(captcha_div) + numerals = re.findall('<span.*?padding-left\s*:\s*(\d+).*?>(\d)</span>', html_unescape(captcha_div)) + inputs['code'] = "".join([a[1] for a in sorted(numerals, key=lambda num: int(num[0]))]) + self.logDebug("CAPTCHA", inputs['code'], numerals) + return 3 + + +getInfo = create_getInfo(RarefileNet) diff --git a/pyload/plugins/hoster/RealdebridCom.py b/pyload/plugins/hoster/RealdebridCom.py new file mode 100644 index 000000000..a458cc5d0 --- /dev/null +++ b/pyload/plugins/hoster/RealdebridCom.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- + +import re + +from random import randrange +from urllib import quote, unquote +from time import time + +from pyload.common.json_layer import json_loads +from pyload.plugins.Hoster import Hoster +from pyload.utils import parseFileSize + + +class RealdebridCom(Hoster): + __name__ = "RealdebridCom" + __type__ = "hoster" + __version__ = "0.53" + + __pattern__ = r'https?://(?:[^/]*\.)?real-debrid\..*' + + __description__ = """Real-Debrid.com hoster plugin""" + __author_name__ = "Devirex Hazzard" + __author_mail__ = "naibaf_11@yahoo.de" + + + def getFilename(self, url): + try: + name = unquote(url.rsplit("/", 1)[1]) + except IndexError: + name = "Unknown_Filename..." + if not name or name.endswith(".."): # incomplete filename, append random stuff + name += "%s.tmp" % randrange(100, 999) + return name + + def setup(self): + self.chunkLimit = 3 + self.resumeDownload = True + + def process(self, pyfile): + if re.match(self.__pattern__, pyfile.url): + new_url = pyfile.url + elif not self.account: + self.logError(_("Please enter your %s account or deactivate this plugin") % "Real-debrid") + self.fail("No Real-debrid account provided") + else: + self.logDebug("Old URL: %s" % pyfile.url) + password = self.getPassword().splitlines() + if not password: + password = "" + else: + password = password[0] + + url = "https://real-debrid.com/ajax/unrestrict.php?lang=en&link=%s&password=%s&time=%s" % ( + quote(pyfile.url, ""), password, int(time() * 1000)) + page = self.load(url) + data = json_loads(page) + + self.logDebug("Returned Data: %s" % data) + + if data['error'] != 0: + if data['message'] == "Your file is unavailable on the hoster.": + self.offline() + else: + self.logWarning(data['message']) + self.tempOffline() + else: + if pyfile.name is not None and pyfile.name.endswith('.tmp') and data['file_name']: + pyfile.name = data['file_name'] + pyfile.size = parseFileSize(data['file_size']) + new_url = data['generated_links'][0][-1] + + if self.getConfig("https"): + new_url = new_url.replace("http://", "https://") + else: + new_url = new_url.replace("https://", "http://") + + if new_url != pyfile.url: + self.logDebug("New URL: %s" % new_url) + + if pyfile.name.startswith("http") or pyfile.name.startswith("Unknown") or pyfile.name.endswith('..'): + #only use when name wasnt already set + pyfile.name = self.getFilename(new_url) + + self.download(new_url, disposition=True) + + check = self.checkDownload( + {"error": "<title>An error occured while processing your request</title>"}) + + if check == "error": + #usual this download can safely be retried + self.retry(wait_time=60, reason="An error occured while generating link.") diff --git a/pyload/plugins/hoster/RedtubeCom.py b/pyload/plugins/hoster/RedtubeCom.py new file mode 100644 index 000000000..42c24628e --- /dev/null +++ b/pyload/plugins/hoster/RedtubeCom.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.Hoster import Hoster +from pyload.unescape import unescape + + +class RedtubeCom(Hoster): + __name__ = "RedtubeCom" + __type__ = "hoster" + __version__ = "0.2" + + __pattern__ = r'http://(?:www\.)?redtube\.com/\d+' + + __description__ = """Redtube.com hoster plugin""" + __author_name__ = "jeix" + __author_mail__ = "jeix@hasnomail.de" + + + def process(self, pyfile): + self.download_html() + if not self.file_exists(): + self.offline() + + pyfile.name = self.get_file_name() + self.download(self.get_file_url()) + + def download_html(self): + url = self.pyfile.url + self.html = self.load(url) + + def get_file_url(self): + """ returns the absolute downloadable filepath + """ + if not self.html: + self.download_html() + + file_url = unescape(re.search(r'hashlink=(http.*?)"', self.html).group(1)) + + return file_url + + def get_file_name(self): + if not self.html: + self.download_html() + + return re.search('<title>(.*?)- RedTube - Free Porn Videos</title>', self.html).group(1).strip() + ".flv" + + def file_exists(self): + """ returns True or False + """ + if not self.html: + self.download_html() + + if re.search(r'This video has been removed.', self.html) is not None: + return False + else: + return True diff --git a/pyload/plugins/hoster/RehostTo.py b/pyload/plugins/hoster/RehostTo.py new file mode 100644 index 000000000..d3d3fcd8b --- /dev/null +++ b/pyload/plugins/hoster/RehostTo.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- + +from urllib import quote, unquote + +from pyload.plugins.Hoster import Hoster + + +class RehostTo(Hoster): + __name__ = "RehostTo" + __type__ = "hoster" + __version__ = "0.13" + + __pattern__ = r'https?://.*rehost.to\..*' + + __description__ = """Rehost.com hoster plugin""" + __author_name__ = "RaNaN" + __author_mail__ = "RaNaN@pyload.org" + + + def getFilename(self, url): + return unquote(url.rsplit("/", 1)[1]) + + def setup(self): + self.chunkLimit = 1 + self.resumeDownload = True + + def process(self, pyfile): + if not self.account: + self.logError(_("Please enter your %s account or deactivate this plugin") % "rehost.to") + self.fail("No rehost.to account provided") + + data = self.account.getAccountInfo(self.user) + long_ses = data['long_ses'] + + self.logDebug("Rehost.to: Old URL: %s" % pyfile.url) + new_url = "http://rehost.to/process_download.php?user=cookie&pass=%s&dl=%s" % (long_ses, quote(pyfile.url, "")) + + #raise timeout to 2min + self.req.setOption("timeout", 120) + + self.download(new_url, disposition=True) diff --git a/pyload/plugins/hoster/RemixshareCom.py b/pyload/plugins/hoster/RemixshareCom.py new file mode 100644 index 000000000..dfd7db5a0 --- /dev/null +++ b/pyload/plugins/hoster/RemixshareCom.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# http://remixshare.com/download/p946u +# +# Note: +# The remixshare.com website is very very slow, so +# if your download not starts because of pycurl timeouts: +# Adjust timeouts in /usr/share/pyload/pyload/network/HTTPRequest.py + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class RemixshareCom(SimpleHoster): + __name__ = "RemixshareCom" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'https?://remixshare\.com/(download|dl)/\w+' + + __description__ = """Remixshare.com hoster plugin""" + __author_name__ = ("zapp-brannigan", "Walter Purcaro") + __author_mail__ = ("fuerst.reinje@web.de", "vuolter@gmail.com") + + FILE_INFO_PATTERN = r'title=\'.+?\'>(?P<N>.+?)</span><span class=\'light2\'> \((?P<S>\d+) (?P<U>\w+)\)<' + OFFLINE_PATTERN = r'<h1>Ooops!<' + + LINK_PATTERN = r'(http://remixshare\.com/downloadfinal/.+?)"' + TOKEN_PATTERN = r'var acc = (\d+)' + WAIT_PATTERN = r'var XYZ = r"(\d+)"' + + + def setup(self): + self.multiDL = True + self.chunkLimit = 1 + + def handleFree(self): + b = re.search(self.LINK_PATTERN, self.html) + if not b: + self.parseError("Cannot parse download url") + c = re.search(self.TOKEN_PATTERN, self.html) + if not c: + self.parseError("Cannot parse file token") + dl_url = b.group(1) + c.group(1) + + #Check if we have to wait + seconds = re.search(self.WAIT_PATTERN, self.html) + if seconds: + self.logDebug("Wait " + seconds.group(1)) + self.wait(seconds.group(1)) + + # Finally start downloading... + self.logDebug("Download URL = r" + dl_url) + self.download(dl_url, disposition=True) + + +getInfo = create_getInfo(RemixshareCom) diff --git a/pyload/plugins/hoster/RgHostNet.py b/pyload/plugins/hoster/RgHostNet.py new file mode 100644 index 000000000..0240f3a05 --- /dev/null +++ b/pyload/plugins/hoster/RgHostNet.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class RgHostNet(SimpleHoster): + __name__ = "RgHostNet" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?rghost\.net/\d+(?:r=\d+)?' + + __description__ = """RgHost.net hoster plugin""" + __author_name__ = "z00nx" + __author_mail__ = "z00nx0@gmail.com" + + FILE_INFO_PATTERN = r'<h1>\s+(<a[^>]+>)?(?P<N>[^<]+)(</a>)?\s+<small[^>]+>\s+\((?P<S>[^)]+)\)\s+</small>\s+</h1>' + OFFLINE_PATTERN = r'File is deleted|this page is not found' + LINK_PATTERN = r'''<a\s+href="([^"]+)"\s+class="btn\s+large\s+download"[^>]+>Download</a>''' + + + def handleFree(self): + m = re.search(self.LINK_PATTERN, self.html) + if m is None: + self.parseError("Unable to detect the direct link") + download_link = m.group(1) + self.download(download_link, disposition=True) + + +getInfo = create_getInfo(RgHostNet) diff --git a/pyload/plugins/hoster/RyushareCom.py b/pyload/plugins/hoster/RyushareCom.py new file mode 100644 index 000000000..326c55e0c --- /dev/null +++ b/pyload/plugins/hoster/RyushareCom.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# http://ryushare.com/cl0jy8ric2js/random.bin + +import re + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo +from pyload.plugins.internal.CaptchaService import SolveMedia + + +class RyushareCom(XFileSharingPro): + __name__ = "RyushareCom" + __type__ = "hoster" + __version__ = "0.16" + + __pattern__ = r'http://(?:www\.)?ryushare\.com/\w+' + + __description__ = """Ryushare.com hoster plugin""" + __author_name__ = ("zoidberg", "stickell", "quareevo") + __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it", "quareevo@arcor.de") + + HOSTER_NAME = "ryushare.com" + + FILE_SIZE_PATTERN = r'You have requested <font color="red">[^<]+</font> \((?P<S>[\d\.]+) (?P<U>\w+)' + + WAIT_PATTERN = r'You have to wait ((?P<hour>\d+) hour[s]?, )?((?P<min>\d+) minute[s], )?(?P<sec>\d+) second[s]' + LINK_PATTERN = r'<a href="([^"]+)">Click here to download<' + SOLVEMEDIA_PATTERN = r'http:\/\/api\.solvemedia\.com\/papi\/challenge\.script\?k=(.*?)"' + + + def getDownloadLink(self): + retry = False + self.html = self.load(self.pyfile.url) + action, inputs = self.parseHtmlForm(input_names={"op": re.compile("^download")}) + if "method_premium" in inputs: + del inputs['method_premium'] + + self.html = self.load(self.pyfile.url, post=inputs) + action, inputs = self.parseHtmlForm('F1') + + self.setWait(65) + # Wait 1 hour + if "You have reached the download-limit" in self.html: + self.setWait(1 * 60 * 60, True) + retry = True + + m = re.search(self.WAIT_PATTERN, self.html) + if m: + wait = m.groupdict(0) + waittime = int(wait['hour']) * 60 * 60 + int(wait['min']) * 60 + int(wait['sec']) + self.setWait(waittime, True) + retry = True + + self.wait() + if retry: + self.retry() + + for _ in xrange(5): + m = re.search(self.SOLVEMEDIA_PATTERN, self.html) + if m is None: + self.parseError("Error parsing captcha") + + captchaKey = m.group(1) + captcha = SolveMedia(self) + challenge, response = captcha.challenge(captchaKey) + + inputs['adcopy_challenge'] = challenge + inputs['adcopy_response'] = response + + self.html = self.load(self.pyfile.url, post=inputs) + if "WRONG CAPTCHA" in self.html: + self.invalidCaptcha() + self.logInfo("Invalid Captcha") + else: + self.correctCaptcha() + break + else: + self.fail("You have entered 5 invalid captcha codes") + + if "Click here to download" in self.html: + return re.search(r'<a href="([^"]+)">Click here to download</a>', self.html).group(1) + + +getInfo = create_getInfo(RyushareCom) diff --git a/pyload/plugins/hoster/SecureUploadEu.py b/pyload/plugins/hoster/SecureUploadEu.py new file mode 100644 index 000000000..befe5f0e9 --- /dev/null +++ b/pyload/plugins/hoster/SecureUploadEu.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class SecureUploadEu(XFileSharingPro): + __name__ = "SecureUploadEu" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?secureupload\.eu/(\w){12}(/\w+)' + + __description__ = """SecureUpload.eu hoster plugin""" + __author_name__ = "z00nx" + __author_mail__ = "z00nx0@gmail.com" + + HOSTER_NAME = "secureupload.eu" + + FILE_INFO_PATTERN = r'<h3>Downloading (?P<N>[^<]+) \((?P<S>[^<]+)\)</h3>' + OFFLINE_PATTERN = r'The file was removed|File Not Found' + + +getInfo = create_getInfo(SecureUploadEu) diff --git a/pyload/plugins/hoster/SendmywayCom.py b/pyload/plugins/hoster/SendmywayCom.py new file mode 100644 index 000000000..87cbfcc0d --- /dev/null +++ b/pyload/plugins/hoster/SendmywayCom.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class SendmywayCom(XFileSharingPro): + __name__ = "SendmywayCom" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?sendmyway.com/\w{12}' + + __description__ = """SendMyWay hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + HOSTER_NAME = "sendmyway.com" + + FILE_NAME_PATTERN = r'<p class="file-name" ><.*?>\s*(?P<N>.+)' + FILE_SIZE_PATTERN = r'<small>\((?P<S>\d+) bytes\)</small>' + + +getInfo = create_getInfo(SendmywayCom) diff --git a/pyload/plugins/hoster/SendspaceCom.py b/pyload/plugins/hoster/SendspaceCom.py new file mode 100644 index 000000000..7a0908c8d --- /dev/null +++ b/pyload/plugins/hoster/SendspaceCom.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class SendspaceCom(SimpleHoster): + __name__ = "SendspaceCom" + __type__ = "hoster" + __version__ = "0.13" + + __pattern__ = r'http://(?:www\.)?sendspace.com/file/.*' + + __description__ = """Sendspace.com hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_NAME_PATTERN = r'<h2 class="bgray">\s*<(?:b|strong)>(?P<N>[^<]+)</' + FILE_SIZE_PATTERN = r'<div class="file_description reverse margin_center">\s*<b>File Size:</b>\s*(?P<S>[0-9.]+)(?P<U>[kKMG])i?B\s*</div>' + OFFLINE_PATTERN = r'<div class="msg error" style="cursor: default">Sorry, the file you requested is not available.</div>' + + LINK_PATTERN = r'<a id="download_button" href="([^"]+)"' + CAPTCHA_PATTERN = r'<td><img src="(/captchas/captcha.php?captcha=([^"]+))"></td>' + USER_CAPTCHA_PATTERN = r'<td><img src="/captchas/captcha.php?user=([^"]+))"></td>' + + + def handleFree(self): + params = {} + for _ in xrange(3): + m = re.search(self.LINK_PATTERN, self.html) + if m: + if 'captcha_hash' in params: + self.correctCaptcha() + download_url = m.group(1) + break + + m = re.search(self.CAPTCHA_PATTERN, self.html) + if m: + if 'captcha_hash' in params: + self.invalidCaptcha() + captcha_url1 = "http://www.sendspace.com/" + m.group(1) + m = re.search(self.USER_CAPTCHA_PATTERN, self.html) + captcha_url2 = "http://www.sendspace.com/" + m.group(1) + params = {'captcha_hash': m.group(2), + 'captcha_submit': 'Verify', + 'captcha_answer': self.decryptCaptcha(captcha_url1) + " " + self.decryptCaptcha(captcha_url2)} + else: + params = {'download': "Regular Download"} + + self.logDebug(params) + self.html = self.load(self.pyfile.url, post=params) + else: + self.fail("Download link not found") + + self.logDebug("Download URL: %s" % download_url) + self.download(download_url) + + +create_getInfo(SendspaceCom) diff --git a/pyload/plugins/hoster/Share4webCom.py b/pyload/plugins/hoster/Share4webCom.py new file mode 100644 index 000000000..a3d92d9f4 --- /dev/null +++ b/pyload/plugins/hoster/Share4webCom.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.hoster.UnibytesCom import UnibytesCom +from pyload.plugins.internal.SimpleHoster import create_getInfo + + +class Share4webCom(UnibytesCom): + __name__ = "Share4webCom" + __type__ = "hoster" + __version__ = "0.1" + + __pattern__ = r'http://(?:www\.)?share4web\.com/get/\w+' + + __description__ = """Share4web.com hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + HOSTER_NAME = "share4web.com" + + +getInfo = create_getInfo(UnibytesCom) diff --git a/pyload/plugins/hoster/Share76Com.py b/pyload/plugins/hoster/Share76Com.py new file mode 100644 index 000000000..2cd736992 --- /dev/null +++ b/pyload/plugins/hoster/Share76Com.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class Share76Com(DeadHoster): + __name__ = "Share76Com" + __type__ = "hoster" + __version__ = "0.04" + + __pattern__ = r'http://(?:www\.)?share76.com/\w{12}' + + __description__ = """Share76.com hoster plugin""" + __author_name__ = "me" + __author_mail__ = None + + +getInfo = create_getInfo(Share76Com) diff --git a/pyload/plugins/hoster/ShareFilesCo.py b/pyload/plugins/hoster/ShareFilesCo.py new file mode 100644 index 000000000..b75eb0740 --- /dev/null +++ b/pyload/plugins/hoster/ShareFilesCo.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class ShareFilesCo(DeadHoster): + __name__ = "ShareFilesCo" + __type__ = "hoster" + __version__ = "0.02" + + __pattern__ = r'http://(?:www\.)?sharefiles\.co/\w{12}' + + __description__ = """Sharefiles.co hoster plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + +getInfo = create_getInfo(ShareFilesCo) diff --git a/pyload/plugins/hoster/ShareRapidCom.py b/pyload/plugins/hoster/ShareRapidCom.py new file mode 100644 index 000000000..b474103fc --- /dev/null +++ b/pyload/plugins/hoster/ShareRapidCom.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- + +import re + +from pycurl import HTTPHEADER + +from pyload.network.RequestFactory import getRequest +from pyload.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo + + +def getInfo(urls): + h = getRequest() + h.c.setopt(HTTPHEADER, + ["Accept: text/html", + "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0"]) + for url in urls: + html = h.load(url, decode=True) + file_info = parseFileInfo(ShareRapidCom, url, html) + yield file_info + + +class ShareRapidCom(SimpleHoster): + __name__ = "ShareRapidCom" + __type__ = "hoster" + __version__ = "0.54" + + __pattern__ = r'http://(?:www\.)?(share|mega)rapid\.cz/soubor/\d+/.+' + + __description__ = """MegaRapid.cz hoster plugin""" + __author_name__ = ("MikyWoW", "zoidberg", "stickell", "Walter Purcaro") + __author_mail__ = ("mikywow@seznam.cz", "zoidberg@mujmail.cz", "l.stickell@yahoo.it", "vuolter@gmail.com") + + FILE_NAME_PATTERN = r'<h1[^>]*><span[^>]*>(?:<a[^>]*>)?(?P<N>[^<]+)' + FILE_SIZE_PATTERN = r'<td class="i">Velikost:</td>\s*<td class="h"><strong>\s*(?P<S>[0-9.]+) (?P<U>[kKMG])i?B</strong></td>' + OFFLINE_PATTERN = ur'Nastala chyba 404|Soubor byl smazán' + + SH_CHECK_TRAFFIC = True + + LINK_PATTERN = r'<a href="([^"]+)" title="Stahnout">([^<]+)</a>' + ERR_LOGIN_PATTERN = ur'<div class="error_div"><strong>Stahovánà je pÅÃstupné pouze pÅihlášenÜm uÅŸivatelům' + ERR_CREDIT_PATTERN = ur'<div class="error_div"><strong>Stahovánà zdarma je moÅŸné jen pÅes náš' + + + def setup(self): + self.chunkLimit = 1 + + def handlePremium(self): + try: + self.html = self.load(self.pyfile.url, decode=True) + except BadHeader, e: + self.account.relogin(self.user) + self.retry(max_tries=3, reason=str(e)) + + m = re.search(self.LINK_PATTERN, self.html) + if m: + link = m.group(1) + self.logDebug("Premium link: %s" % link) + self.download(link, disposition=True) + else: + if re.search(self.ERR_LOGIN_PATTERN, self.html): + self.relogin(self.user) + self.retry(max_tries=3, reason="User login failed") + elif re.search(self.ERR_CREDIT_PATTERN, self.html): + self.fail("Not enough credit left") + else: + self.fail("Download link not found") diff --git a/pyload/plugins/hoster/SharebeesCom.py b/pyload/plugins/hoster/SharebeesCom.py new file mode 100644 index 000000000..287dbf59c --- /dev/null +++ b/pyload/plugins/hoster/SharebeesCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class SharebeesCom(DeadHoster): + __name__ = "SharebeesCom" + __type__ = "hoster" + __version__ = "0.02" + + __pattern__ = r'http://(?:www\.)?sharebees.com/\w{12}' + + __description__ = """ShareBees hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + +getInfo = create_getInfo(SharebeesCom) diff --git a/pyload/plugins/hoster/ShareonlineBiz.py b/pyload/plugins/hoster/ShareonlineBiz.py new file mode 100644 index 000000000..b1d9ae5cb --- /dev/null +++ b/pyload/plugins/hoster/ShareonlineBiz.py @@ -0,0 +1,199 @@ +# -*- coding: utf-8 -*- + +import re + +from time import time + +from pyload.network.RequestFactory import getURL +from pyload.plugins.Hoster import Hoster +from pyload.plugins.Plugin import chunks +from pyload.plugins.internal.CaptchaService import ReCaptcha + + +def getInfo(urls): + api_url_base = "http://api.share-online.biz/linkcheck.php" + + urls = [url.replace("https://", "http://") for url in urls] + + for chunk in chunks(urls, 90): + api_param_file = {"links": "\n".join(x.replace("http://www.share-online.biz/dl/", "").rstrip("/") for x in + chunk)} # api only supports old style links + src = getURL(api_url_base, post=api_param_file, decode=True) + result = [] + for i, res in enumerate(src.split("\n")): + if not res: + continue + fields = res.split(";") + + if fields[1] == "OK": + status = 2 + elif fields[1] in ("DELETED", "NOT FOUND"): + status = 1 + else: + status = 3 + + result.append((fields[2], int(fields[3]), status, chunk[i])) + yield result + + +class ShareonlineBiz(Hoster): + __name__ = "ShareonlineBiz" + __type__ = "hoster" + __version__ = "0.40" + + __pattern__ = r'https?://(?:www\.)?(share-online\.biz|egoshare\.com)/(download.php\?id=|dl/)(?P<ID>\w+)' + + __description__ = """Shareonline.biz hoster plugin""" + __author_name__ = ("spoob", "mkaay", "zoidberg", "Walter Purcaro") + __author_mail__ = ("spoob@pyload.org", "mkaay@mkaay.de", "zoidberg@mujmail.cz", "vuolter@gmail.com") + + ERROR_INFO_PATTERN = r'<p class="b">Information:</p>\s*<div>\s*<strong>(.*?)</strong>' + + + def setup(self): + # range request not working? + # api supports resume, only one chunk + # website isn't supporting resuming in first place + self.file_id = re.match(self.__pattern__, self.pyfile.url).group("ID") + self.pyfile.url = "http://www.share-online.biz/dl/" + self.file_id + + self.resumeDownload = self.premium + self.multiDL = False + #self.chunkLimit = 1 + + self.check_data = None + + def process(self, pyfile): + if self.premium: + self.handlePremium() + #web-download fallback removed - didn't work anyway + else: + self.handleFree() + + # check = self.checkDownload({"failure": re.compile(self.ERROR_INFO_PATTERN)}) + # if check == "failure": + # try: + # self.retry(reason=self.lastCheck.group(1).decode("utf8")) + # except: + # self.retry(reason="Unknown error") + + if self.api_data: + self.check_data = {"size": int(self.api_data['size']), "md5": self.api_data['md5']} + + def loadAPIData(self): + api_url_base = "http://api.share-online.biz/linkcheck.php?md5=1" + api_param_file = {"links": self.file_id} # api only supports old style links + src = self.load(api_url_base, cookies=False, post=api_param_file, decode=True) + + fields = src.split(";") + self.api_data = {"fileid": fields[0], + "status": fields[1]} + if not self.api_data['status'] == "OK": + self.offline() + else: + self.api_data['filename'] = fields[2] + self.api_data['size'] = fields[3] # in bytes + self.api_data['md5'] = fields[4].strip().lower().replace("\n\n", "") # md5 + + def handleFree(self): + self.loadAPIData() + self.pyfile.name = self.api_data['filename'] + self.pyfile.size = int(self.api_data['size']) + + self.html = self.load(self.pyfile.url, cookies=True) # refer, stuff + self.setWait(3) + self.wait() + + self.html = self.load("%s/free/" % self.pyfile.url, post={"dl_free": "1", "choice": "free"}, decode=True) + self.checkErrors() + + m = re.search(r'var wait=(\d+);', self.html) + + recaptcha = ReCaptcha(self) + for _ in xrange(5): + challenge, response = recaptcha.challenge("6LdatrsSAAAAAHZrB70txiV5p-8Iv8BtVxlTtjKX") + self.setWait(int(m.group(1)) if m else 30) + response = self.load("%s/free/captcha/%d" % (self.pyfile.url, int(time() * 1000)), post={ + 'dl_free': '1', + 'recaptcha_challenge_field': challenge, + 'recaptcha_response_field': response}) + + if not response == '0': + self.correctCaptcha() + break + else: + self.invalidCaptcha() + else: + self.invalidCaptcha() + self.fail("No valid captcha solution received") + + download_url = response.decode("base64") + self.logDebug(download_url) + if not download_url.startswith("http://"): + self.parseError("download url") + + self.wait() + self.download(download_url) + # check download + check = self.checkDownload({ + "cookie": re.compile(r'<div id="dl_failure"'), + "fail": re.compile(r"<title>Share-Online") + }) + if check == "cookie": + self.invalidCaptcha() + self.retry(5, 60, "Cookie failure") + elif check == "fail": + self.invalidCaptcha() + self.retry(5, 5 * 60, "Download failed") + else: + self.correctCaptcha() + + def handlePremium(self): #: should be working better loading (account) api internally + self.account.getAccountInfo(self.user, True) + src = self.load("http://api.share-online.biz/account.php", + {"username": self.user, "password": self.account.accounts[self.user]['password'], + "act": "download", "lid": self.file_id}) + + self.api_data = dlinfo = {} + for line in src.splitlines(): + key, value = line.split(": ") + dlinfo[key.lower()] = value + + self.logDebug(dlinfo) + if not dlinfo['status'] == "online": + self.offline() + else: + self.pyfile.name = dlinfo['name'] + self.pyfile.size = int(dlinfo['size']) + + dlLink = dlinfo['url'] + if dlLink == "server_under_maintenance": + self.tempOffline() + else: + self.multiDL = True + self.download(dlLink) + + def checkErrors(self): + m = re.search(r"/failure/(.*?)/1", self.req.lastEffectiveURL) + if m is None: + return + + err = m.group(1) + m = re.search(self.ERROR_INFO_PATTERN, self.html) + msg = m.group(1) if m else "" + self.logError(err, msg or "Unknown error occurred") + + if err == "invalid": + self.fail(msg or "File not available") + elif err in ("freelimit", "size", "proxy"): + self.fail(msg or "Premium account needed") + else: + if err in 'server': + self.setWait(600, False) + elif err in 'expired': + self.setWait(30, False) + else: + self.setWait(300, True) + + self.wait() + self.retry(max_tries=25, reason=msg) diff --git a/pyload/plugins/hoster/ShareplaceCom.py b/pyload/plugins/hoster/ShareplaceCom.py new file mode 100644 index 000000000..60bb596cc --- /dev/null +++ b/pyload/plugins/hoster/ShareplaceCom.py @@ -0,0 +1,84 @@ +# -*- coding: utf-8 -*- + +import re + +from urllib import unquote + +from pyload.plugins.Hoster import Hoster + + +class ShareplaceCom(Hoster): + __name__ = "ShareplaceCom" + __type__ = "hoster" + __version__ = "0.11" + + __pattern__ = r'(http://)?(?:www\.)?shareplace\.(com|org)/\?[a-zA-Z0-9]+' + + __description__ = """Shareplace.com hoster plugin""" + __author_name__ = "ACCakut" + __author_mail__ = None + + + def process(self, pyfile): + self.pyfile = pyfile + self.prepare() + self.download(self.get_file_url()) + + def prepare(self): + if not self.file_exists(): + self.offline() + + self.pyfile.name = self.get_file_name() + + wait_time = self.get_waiting_time() + self.setWait(wait_time) + self.logDebug("%s: Waiting %d seconds." % (self.__name__, wait_time)) + self.wait() + + def get_waiting_time(self): + if not self.html: + self.download_html() + + #var zzipitime = 15; + m = re.search(r'var zzipitime = (\d+);', self.html) + if m: + sec = int(m.group(1)) + else: + sec = 0 + + return sec + + def download_html(self): + url = re.sub("shareplace.com\/\?", "shareplace.com//index1.php/?a=", self.pyfile.url) + self.html = self.load(url, decode=True) + + def get_file_url(self): + """ returns the absolute downloadable filepath + """ + url = re.search(r"var beer = '(.*?)';", self.html) + if url: + url = url.group(1) + url = unquote( + url.replace("http://http:/", "").replace("vvvvvvvvv", "").replace("lllllllll", "").replace( + "teletubbies", "")) + self.logDebug("URL: %s" % url) + return url + else: + self.fail("absolute filepath could not be found. offline? ") + + def get_file_name(self): + if not self.html: + self.download_html() + + return re.search("<title>\s*(.*?)\s*</title>", self.html).group(1) + + def file_exists(self): + """ returns True or False + """ + if not self.html: + self.download_html() + + if re.search(r"HTTP Status 404", self.html) is not None: + return False + else: + return True diff --git a/pyload/plugins/hoster/ShragleCom.py b/pyload/plugins/hoster/ShragleCom.py new file mode 100644 index 000000000..0ec93fcdc --- /dev/null +++ b/pyload/plugins/hoster/ShragleCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class ShragleCom(DeadHoster): + __name__ = "ShragleCom" + __type__ = "hoster" + __version__ = "0.22" + + __pattern__ = r'http://(?:www\.)?(cloudnator|shragle).com/files/(?P<ID>.*?)/' + + __description__ = """Cloudnator.com (Shragle.com) hoster plugin""" + __author_name__ = ("RaNaN", "zoidberg") + __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz") + + +getInfo = create_getInfo(ShragleCom) diff --git a/pyload/plugins/hoster/SimplyPremiumCom.py b/pyload/plugins/hoster/SimplyPremiumCom.py new file mode 100644 index 000000000..760b7ff1b --- /dev/null +++ b/pyload/plugins/hoster/SimplyPremiumCom.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- + +import re + +from datetime import datetime, timedelta + +from pyload.plugins.Hoster import Hoster +from pyload.plugins.hoster.UnrestrictLi import secondsToMidnight + + +class SimplyPremiumCom(Hoster): + __name__ = "SimplyPremiumCom" + __type__ = "hoster" + __version__ = "0.03" + + __pattern__ = r'https?://.*(simply-premium)\.com' + + __description__ = """Simply-Premium.com hoster plugin""" + __author_name__ = "EvolutionClip" + __author_mail__ = "evolutionclip@live.de" + + + def setup(self): + self.chunkLimit = 16 + self.resumeDownload = False + + def process(self, pyfile): + if re.match(self.__pattern__, pyfile.url): + new_url = pyfile.url + elif not self.account: + self.logError(_("Please enter your %s account or deactivate this plugin") % "Simply-Premium.com") + self.fail("No Simply-Premium.com account provided") + else: + self.logDebug("Old URL: %s" % pyfile.url) + for i in xrange(5): + page = self.load('http://www.simply-premium.com/premium.php?info&link=' + pyfile.url) + self.logDebug("JSON data: " + page) + if page != '': + break + else: + self.logInfo("Unable to get API data, waiting 1 minute and retry") + self.retry(5, 60, "Unable to get API data") + + if '<valid>0</valid>' in page or ( + "You are not allowed to download from this host" in page and self.premium): + self.account.relogin(self.user) + self.retry() + elif "NOTFOUND" in page: + self.offline() + elif "downloadlimit" in page: + self.logWarning("Reached maximum connctions") + self.retry(5, 60, "Reached maximum connctions") + elif "trafficlimit" in page: + self.logWarning("Reached daily limit for this host") + self.retry(1, secondsToMidnight(gmt=2), "Daily limit for this host reached") + elif "hostererror" in page: + self.logWarning("Hoster temporarily unavailable, waiting 1 minute and retry") + self.retry(5, 60, "Hoster is temporarily unavailable") + #page = json_loads(page) + #new_url = page.keys()[0] + #self.api_data = page[new_url] + + try: + self.pyfile.name = re.search(r'<name>([^<]+)</name>', page).group(1) + except AttributeError: + self.pyfile.name = "" + + try: + self.pyfile.size = re.search(r'<size>(\d+)</size>', page).group(1) + except AttributeError: + self.pyfile.size = 0 + + try: + new_url = re.search(r'<download>([^<]+)</download>', page).group(1) + except AttributeError: + new_url = 'http://www.simply-premium.com/premium.php?link=' + pyfile.url + + if new_url != pyfile.url: + self.logDebug("New URL: " + new_url) + + self.download(new_url, disposition=True) diff --git a/pyload/plugins/hoster/SimplydebridCom.py b/pyload/plugins/hoster/SimplydebridCom.py new file mode 100644 index 000000000..c6b03c124 --- /dev/null +++ b/pyload/plugins/hoster/SimplydebridCom.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.Hoster import Hoster + + +class SimplydebridCom(Hoster): + __name__ = "SimplydebridCom" + __type__ = "hoster" + __version__ = "0.1" + + __pattern__ = r'http://(?:www\.)?\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/sd.php/*' + + __description__ = """Simply-debrid.com hoster plugin""" + __author_name__ = "Kagenoshin" + __author_mail__ = "kagenoshin@gmx.ch" + + + def setup(self): + self.resumeDownload = self.multiDL = True + self.chunkLimit = 1 + + def process(self, pyfile): + if not self.account: + self.logError(_("Please enter your %s account or deactivate this plugin") % "simply-debrid.com") + self.fail("No simply-debrid.com account provided") + + self.logDebug("Old URL: %s" % pyfile.url) + + #fix the links for simply-debrid.com! + new_url = pyfile.url + new_url = new_url.replace("clz.to", "cloudzer.net/file") + new_url = new_url.replace("http://share-online", "http://www.share-online") + new_url = new_url.replace("ul.to", "uploaded.net/file") + new_url = new_url.replace("uploaded.com", "uploaded.net") + new_url = new_url.replace("filerio.com", "filerio.in") + new_url = new_url.replace("lumfile.com", "lumfile.se") + if('fileparadox' in new_url): + new_url = new_url.replace("http://", "https://") + + if re.match(self.__pattern__, new_url): + new_url = new_url + + self.logDebug("New URL: %s" % new_url) + + if not re.match(self.__pattern__, new_url): + page = self.load('http://simply-debrid.com/api.php', get={'dl': new_url}) # +'&u='+self.user+'&p='+self.account.getAccountData(self.user)['password']) + if 'tiger Link' in page or 'Invalid Link' in page or ('API' in page and 'ERROR' in page): + self.fail('Unable to unrestrict link') + new_url = page + + self.setWait(5) + self.wait() + self.logDebug("Unrestricted URL: " + new_url) + + self.download(new_url, disposition=True) + + check = self.checkDownload({"bad1": "No address associated with hostname", "bad2": "<html"}) + + if check == "bad1" or check == "bad2": + self.retry(24, 3 * 60, "Bad file downloaded") diff --git a/pyload/plugins/hoster/SockshareCom.py b/pyload/plugins/hoster/SockshareCom.py new file mode 100644 index 000000000..36e03a5ae --- /dev/null +++ b/pyload/plugins/hoster/SockshareCom.py @@ -0,0 +1,88 @@ +# -*- coding: utf-8 -*- + +import re + +from os import rename + +from pyload.plugins.hoster.UnrestrictLi import secondsToMidnight +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class SockshareCom(SimpleHoster): + __name__ = "SockshareCom" + __type__ = "hoster" + __version__ = "0.04" + + __pattern__ = r'http://(?:www\.)?sockshare\.com/(mobile/)?(file|embed)/(?P<ID>\w+)' + + __description__ = """Sockshare.com hoster plugin""" + __author_name__ = ("jeix", "stickell", "Walter Purcaro") + __author_mail__ = ("jeix@hasnomail.de", "l.stickell@yahoo.it", "vuolter@gmail.com") + + FILE_INFO_PATTERN = r'site-content">\s*<h1>(?P<N>.+)<strong>\( (?P<S>[^)]+) \)</strong></h1>' + OFFLINE_PATTERN = r'>This file doesn\'t exist, or has been removed.<' + TEMP_OFFLINE_PATTERN = r'(>This content server has been temporarily disabled for upgrades|Try again soon\\. You can still download it below\\.<)' + + FILE_URL_REPLACEMENTS = [(__pattern__, r'http://www.sockshare.com/file/\g<ID>')] + + + def setup(self): + self.multiDL = self.resumeDownload = True + self.chunkLimit = -1 + + def handleFree(self): + name = self.pyfile.name + link = self._getLink() + self.logDebug("Direct link: " + link) + self.download(link, disposition=True) + self.processName(name) + + def _getLink(self): + hash_data = re.search(r'<input type="hidden" value="([a-z0-9]+)" name="hash">', self.html) + if not hash_data: + self.parseError("Unable to detect hash") + + post_data = {"hash": hash_data.group(1), "confirm": "Continue+as+Free+User"} + self.html = self.load(self.pyfile.url, post=post_data) + if ">You have exceeded the daily stream limit for your country\\. You can wait until tomorrow" in self.html: + self.logWarning("You have exceeded your daily stream limit for today") + self.wait(secondsToMidnight(gmt=2), True) + elif re.search(self.TEMP_OFFLINE_PATTERN, self.html): + self.retry(wait_time=2 * 60 * 60, reason="Server temporarily offline") # 2 hours wait + + patterns = (r'(/get_file\.php\?id=[A-Z0-9]+&key=[a-zA-Z0-9=]+&original=1)', + r'(/get_file\.php\?download=[A-Z0-9]+&key=[a-z0-9]+)', + r'(/get_file\.php\?download=[A-Z0-9]+&key=[a-z0-9]+&original=1)', + r'<a href="/gopro\.php">Tired of ads and waiting\? Go Pro!</a>[\t\n\rn ]+</div>[\t\n\rn ]+<a href="(/.*?)"') + for pattern in patterns: + link = re.search(pattern, self.html) + if link: + break + else: + link = re.search(r"playlist: '(/get_file\.php\?stream=[a-zA-Z0-9=]+)'", self.html) + if link: + self.html = self.load("http://www.sockshare.com" + link.group(1)) + link = re.search(r'media:content url="(http://.*?)"', self.html) + if link is None: + link = re.search(r'\"(http://media\\-b\\d+\\.sockshare\\.com/download/\\d+/.*?)\"', self.html) + else: + self.parseError('Unable to detect a download link') + + link = link.group(1).replace("&", "&") + if link.startswith("http://"): + return link + else: + return "http://www.sockshare.com" + link + + def processName(self, name_old): + name = self.pyfile.name + if name <= name_old: + return + name_new = re.sub(r'\.[^.]+$', "", name_old) + name[len(name_old):] + filename = self.lastDownload + self.pyfile.name = name_new + rename(filename, filename.rsplit(name)[0] + name_new) + self.logInfo("%(name)s renamed to %(newname)s" % {"name": name, "newname": name_new}) + + +getInfo = create_getInfo(SockshareCom) diff --git a/pyload/plugins/hoster/SoundcloudCom.py b/pyload/plugins/hoster/SoundcloudCom.py new file mode 100644 index 000000000..afe8eaf62 --- /dev/null +++ b/pyload/plugins/hoster/SoundcloudCom.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- + +import pycurl +import re + +from pyload.plugins.Hoster import Hoster + + +class SoundcloudCom(Hoster): + __name__ = "SoundcloudCom" + __type__ = "hoster" + __version__ = "0.1" + + __pattern__ = r'https?://(?:www\.)?soundcloud\.com/(?P<UID>.*?)/(?P<SID>.*)' + + __description__ = """SoundCloud.com hoster plugin""" + __author_name__ = "Peekayy" + __author_mail__ = "peekayy.dev@gmail.com" + + + def process(self, pyfile): + # default UserAgent of HTTPRequest fails for this hoster so we use this one + self.req.http.c.setopt(pycurl.USERAGENT, 'Mozilla/5.0') + page = self.load(pyfile.url) + m = re.search(r'<div class="haudio.*?large.*?" data-sc-track="(?P<ID>[0-9]*)"', page) + songId = clientId = "" + if m: + songId = m.group("ID") + if len(songId) <= 0: + self.logError("Could not find song id") + self.offline() + else: + m = re.search(r'"clientID":"(?P<CID>.*?)"', page) + if m: + clientId = m.group("CID") + + if len(clientId) <= 0: + clientId = "b45b1aa10f1ac2941910a7f0d10f8e28" + + m = re.search(r'<em itemprop="name">\s(?P<TITLE>.*?)\s</em>', page) + if m: + pyfile.name = m.group("TITLE") + ".mp3" + else: + pyfile.name = re.match(self.__pattern__, pyfile.url).group("SID") + ".mp3" + + # url to retrieve the actual song url + page = self.load("https://api.sndcdn.com/i1/tracks/%s/streams" % songId, get={"client_id": clientId}) + # getting streams + # for now we choose the first stream found in all cases + # it could be improved if relevant for this hoster + streams = [ + (result.group("QUALITY"), result.group("URL")) + for result in re.finditer(r'"(?P<QUALITY>.*?)":"(?P<URL>.*?)"', page) + ] + self.logDebug("Found Streams", streams) + self.logDebug("Downloading", streams[0][0], streams[0][1]) + self.download(streams[0][1]) diff --git a/pyload/plugins/hoster/SpeedLoadOrg.py b/pyload/plugins/hoster/SpeedLoadOrg.py new file mode 100644 index 000000000..74753b029 --- /dev/null +++ b/pyload/plugins/hoster/SpeedLoadOrg.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class SpeedLoadOrg(DeadHoster): + __name__ = "SpeedLoadOrg" + __type__ = "hoster" + __version__ = "1.02" + + __pattern__ = r'http://(?:www\.)?speedload\.org/(?P<ID>\w+)' + + __description__ = """Speedload.org hoster plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + +getInfo = create_getInfo(SpeedLoadOrg) diff --git a/pyload/plugins/hoster/SpeedfileCz.py b/pyload/plugins/hoster/SpeedfileCz.py new file mode 100644 index 000000000..85df88d85 --- /dev/null +++ b/pyload/plugins/hoster/SpeedfileCz.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class SpeedfileCz(DeadHoster): + __name__ = "SpeedFileCz" + __type__ = "hoster" + __version__ = "0.32" + + __pattern__ = r'http://(?:www\.)?speedfile.cz/.*' + + __description__ = """Speedfile.cz hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + +getInfo = create_getInfo(SpeedfileCz) diff --git a/pyload/plugins/hoster/SpeedyshareCom.py b/pyload/plugins/hoster/SpeedyshareCom.py new file mode 100644 index 000000000..ed6fc443f --- /dev/null +++ b/pyload/plugins/hoster/SpeedyshareCom.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- + +# Testlink: +# http://speedy.sh/ep2qY/Zapp-Brannigan.jpg + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class SpeedyshareCom(SimpleHoster): + __name__ = "SpeedyshareCom" + __type__ = "hoster" + __pattern__ = r"https?://(www\.)?(speedyshare.com|speedy.sh)/.*" + __version__ = "0.01" + __description__ = """speedyshare.com hoster plugin""" + __author_name__ = ("zapp-brannigan") + __author_mail__ = ("fuerst.reinje@web.de") + + FILE_NAME_PATTERN = r'class=downloadfilename>(?P<N>.*)</span></td>' + FILE_SIZE_PATTERN = r'class=sizetagtext>(?P<S>.*) (?P<U>[kKmM]?[iI]?[bB]?)</div>' + LINK_PATTERN = r'<a href=\'(.*)\'><img src=/gf/slowdownload.png alt=\'Slow Download\' border=0' + FILE_OFFLINE_PATTERN = r'class=downloadfilenamenotfound>.*</span>' + BASE_URL = 'www.speedyshare.com' + + def setup(self): + self.multiDL = False + self.chunkLimit = 1 + + def process(self, pyfile): + self.html = self.load(pyfile.url, decode=True) + try: + dl_link = re.search(self.LINK_PATTERN, self.html).group(1) + self.logDebug("Link: " + dl_link) + except: + self.parseError("Unable to find download link") + self.download(self.BASE_URL + dl_link, disposition=True) + check = self.checkDownload({"is_html": re.compile("html")}) + if check == "is_html": + self.fail("The downloaded file is html, maybe the plugin is out of date") + + +getInfo = create_getInfo(SpeedyshareCom) diff --git a/pyload/plugins/hoster/StreamCz.py b/pyload/plugins/hoster/StreamCz.py new file mode 100644 index 000000000..7b20049be --- /dev/null +++ b/pyload/plugins/hoster/StreamCz.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.network.RequestFactory import getURL +from pyload.plugins.Hoster import Hoster + + +def getInfo(urls): + result = [] + + for url in urls: + + html = getURL(url) + if re.search(StreamCz.OFFLINE_PATTERN, html): + # File offline + result.append((url, 0, 1, url)) + else: + result.append((url, 0, 2, url)) + yield result + + +class StreamCz(Hoster): + __name__ = "StreamCz" + __type__ = "hoster" + __version__ = "0.2" + + __pattern__ = r'https?://(?:www\.)?stream\.cz/[^/]+/\d+.*' + + __description__ = """Stream.cz hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_NAME_PATTERN = r'<link rel="video_src" href="http://www.stream.cz/\w+/(\d+)-([^"]+)" />' + OFFLINE_PATTERN = r'<h1 class="commonTitle">Str.nku nebylo mo.n. nal.zt \(404\)</h1>' + + CDN_PATTERN = r'<param name="flashvars" value="[^"]*&id=(?P<ID>\d+)(?:&cdnLQ=(?P<cdnLQ>\d*))?(?:&cdnHQ=(?P<cdnHQ>\d*))?(?:&cdnHD=(?P<cdnHD>\d*))?&' + + + def setup(self): + self.multiDL = True + self.resumeDownload = True + + def process(self, pyfile): + + self.html = self.load(pyfile.url, decode=True) + + if re.search(self.OFFLINE_PATTERN, self.html): + self.offline() + + m = re.search(self.CDN_PATTERN, self.html) + if m is None: + self.fail("Parse error (CDN)") + cdn = m.groupdict() + self.logDebug(cdn) + for cdnkey in ("cdnHD", "cdnHQ", "cdnLQ"): + if cdnkey in cdn and cdn[cdnkey] > '': + cdnid = cdn[cdnkey] + break + else: + self.fail("Stream URL not found") + + m = re.search(self.FILE_NAME_PATTERN, self.html) + if m is None: + self.fail("Parse error (NAME)") + pyfile.name = "%s-%s.%s.mp4" % (m.group(2), m.group(1), cdnkey[-2:]) + + download_url = "http://cdn-dispatcher.stream.cz/?id=" + cdnid + self.logInfo("STREAM (%s): %s" % (cdnkey[-2:], download_url)) + self.download(download_url) diff --git a/pyload/plugins/hoster/StreamcloudEu.py b/pyload/plugins/hoster/StreamcloudEu.py new file mode 100644 index 000000000..0e36a047c --- /dev/null +++ b/pyload/plugins/hoster/StreamcloudEu.py @@ -0,0 +1,124 @@ +# -*- coding: utf-8 -*- + +import re + +from time import sleep + +from pyload.network.HTTPRequest import HTTPRequest +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class StreamcloudEu(XFileSharingPro): + __name__ = "StreamcloudEu" + __type__ = "hoster" + __version__ = "0.04" + + __pattern__ = r'http://(?:www\.)?streamcloud\.eu/\S+' + + __description__ = """Streamcloud.eu hoster plugin""" + __author_name__ = "seoester" + __author_mail__ = "seoester@googlemail.com" + + HOSTER_NAME = "streamcloud.eu" + + LINK_PATTERN = r'file: "(http://(stor|cdn)\d+\.streamcloud.eu:?\d*/.*/video\.(mp4|flv))",' + + + def setup(self): + super(StreamcloudEu, self).setup() + self.multiDL = True + + def getDownloadLink(self): + m = re.search(self.LINK_PATTERN, self.html, re.S) + if m: + return m.group(1) + + for i in xrange(5): + self.logDebug("Getting download link: #%d" % i) + data = self.getPostParameters() + httpRequest = HTTPRequest(options=self.req.options) + httpRequest.cj = self.req.cj + sleep(10) + self.html = httpRequest.load(self.pyfile.url, post=data, referer=False, cookies=True, decode=True) + self.header = httpRequest.header + + m = re.search("Location\s*:\s*(.*)", self.header, re.I) + if m: + break + + m = re.search(self.LINK_PATTERN, self.html, re.S) + if m: + break + + else: + if self.errmsg and 'captcha' in self.errmsg: + self.fail("No valid captcha code entered") + else: + self.fail("Download link not found") + + return m.group(1) + + def getPostParameters(self): + for i in xrange(3): + if not self.errmsg: + self.checkErrors() + + if hasattr(self, "FORM_PATTERN"): + action, inputs = self.parseHtmlForm(self.FORM_PATTERN) + else: + action, inputs = self.parseHtmlForm(input_names={"op": re.compile("^download")}) + + if not inputs: + action, inputs = self.parseHtmlForm('F1') + if not inputs: + if self.errmsg: + self.retry() + else: + self.parseError("Form not found") + + self.logDebug(self.HOSTER_NAME, inputs) + + if 'op' in inputs and inputs['op'] in ("download1", "download2", "download3"): + if "password" in inputs: + if self.passwords: + inputs['password'] = self.passwords.pop(0) + else: + self.fail("No or invalid passport") + + if not self.premium: + m = re.search(self.WAIT_PATTERN, self.html) + if m: + wait_time = int(m.group(1)) + 1 + self.setWait(wait_time, False) + else: + wait_time = 0 + + self.captcha = self.handleCaptcha(inputs) + + if wait_time: + self.wait() + + self.errmsg = None + self.logDebug("getPostParameters {0}".format(i)) + return inputs + + else: + inputs['referer'] = self.pyfile.url + + if self.premium: + inputs['method_premium'] = "Premium Download" + if 'method_free' in inputs: + del inputs['method_free'] + else: + inputs['method_free'] = "Free Download" + if 'method_premium' in inputs: + del inputs['method_premium'] + + self.html = self.load(self.pyfile.url, post=inputs, ref=False) + self.errmsg = None + + else: + self.parseError('FORM: %s' % (inputs['op'] if 'op' in inputs else 'UNKNOWN')) + + +getInfo = create_getInfo(StreamcloudEu) diff --git a/pyload/plugins/hoster/TurbobitNet.py b/pyload/plugins/hoster/TurbobitNet.py new file mode 100644 index 000000000..1fbdf9e87 --- /dev/null +++ b/pyload/plugins/hoster/TurbobitNet.py @@ -0,0 +1,167 @@ +# -*- coding: utf-8 -*- + +import random +import re +import time + +from Crypto.Cipher import ARC4 +from binascii import hexlify, unhexlify +from pycurl import HTTPHEADER +from urllib import quote + +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.CaptchaService import ReCaptcha +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, timestamp + + +class TurbobitNet(SimpleHoster): + __name__ = "TurbobitNet" + __type__ = "hoster" + __version__ = "0.11" + + __pattern__ = r'http://(?:www\.)?(turbobit.net|unextfiles.com)/(?!download/folder/)(?:download/free/)?(?P<ID>\w+).*' + + __description__ = """Turbobit.net plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_INFO_PATTERN = r"<span class='file-icon1[^>]*>(?P<N>[^<]+)</span>\s*\((?P<S>[^\)]+)\)\s*</h1>" #: long filenames are shortened + FILE_NAME_PATTERN = r'<meta name="keywords" content="\s+(?P<N>[^,]+)' #: full name but missing on page2 + OFFLINE_PATTERN = r'<h2>File Not Found</h2>|html\(\'File (?:was )?not found' + + FILE_URL_REPLACEMENTS = [(r"http://(?:www\.)?(turbobit.net|unextfiles.com)/(?:download/free/)?(?P<ID>\w+).*", + "http://turbobit.net/\g<ID>.html")] + SH_COOKIES = [(".turbobit.net", "user_lang", "en")] + + LINK_PATTERN = r'(?P<url>/download/redirect/[^"\']+)' + LIMIT_WAIT_PATTERN = r'<div id="time-limit-text">\s*.*?<span id=\'timeout\'>(\d+)</span>' + CAPTCHA_KEY_PATTERN = r'src="http://api\.recaptcha\.net/challenge\?k=([^"]+)"' + CAPTCHA_SRC_PATTERN = r'<img alt="Captcha" src="(.*?)"' + + + def handleFree(self): + self.url = "http://turbobit.net/download/free/%s" % self.file_info['ID'] + self.html = self.load(self.url) + + rtUpdate = self.getRtUpdate() + + self.solveCaptcha() + self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"]) + self.url = self.getDownloadUrl(rtUpdate) + + self.wait() + self.html = self.load(self.url) + self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With:"]) + self.downloadFile() + + def solveCaptcha(self): + for _ in xrange(5): + m = re.search(self.LIMIT_WAIT_PATTERN, self.html) + if m: + wait_time = int(m.group(1)) + self.wait(wait_time, wait_time > 60) + self.retry() + + action, inputs = self.parseHtmlForm("action='#'") + if not inputs: + self.parseError("captcha form") + self.logDebug(inputs) + + if inputs['captcha_type'] == 'recaptcha': + recaptcha = ReCaptcha(self) + m = re.search(self.CAPTCHA_KEY_PATTERN, self.html) + captcha_key = m.group(1) if m else '6LcTGLoSAAAAAHCWY9TTIrQfjUlxu6kZlTYP50_c' + inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge( + captcha_key) + else: + m = re.search(self.CAPTCHA_SRC_PATTERN, self.html) + if m is None: + self.parseError('captcha') + captcha_url = m.group(1) + inputs['captcha_response'] = self.decryptCaptcha(captcha_url) + + self.logDebug(inputs) + self.html = self.load(self.url, post=inputs) + + if not "<div class='download-timer-header'>" in self.html: + self.invalidCaptcha() + else: + self.correctCaptcha() + break + else: + self.fail("Invalid captcha") + + def getRtUpdate(self): + rtUpdate = self.getStorage("rtUpdate") + if not rtUpdate: + if self.getStorage("version") != self.__version__ or int( + self.getStorage("timestamp", 0)) + 86400000 < timestamp(): + # that's right, we are even using jdownloader updates + rtUpdate = getURL("http://update0.jdownloader.org/pluginstuff/tbupdate.js") + rtUpdate = self.decrypt(rtUpdate.splitlines()[1]) + # but we still need to fix the syntax to work with other engines than rhino + rtUpdate = re.sub(r'for each\(var (\w+) in(\[[^\]]+\])\)\{', + r'zza=\2;for(var zzi=0;zzi<zza.length;zzi++){\1=zza[zzi];', rtUpdate) + rtUpdate = re.sub(r"for\((\w+)=", r"for(var \1=", rtUpdate) + + self.logDebug("rtUpdate") + self.setStorage("rtUpdate", rtUpdate) + self.setStorage("timestamp", timestamp()) + self.setStorage("version", self.__version__) + else: + self.logError("Unable to download, wait for update...") + self.tempOffline() + + return rtUpdate + + def getDownloadUrl(self, rtUpdate): + self.req.http.lastURL = self.url + + m = re.search("(/\w+/timeout\.js\?\w+=)([^\"\'<>]+)", self.html) + url = "http://turbobit.net%s%s" % (m.groups() if m else ( + '/files/timeout.js?ver=', ''.join(random.choice('0123456789ABCDEF') for _ in xrange(32)))) + fun = self.load(url) + + self.setWait(65, False) + + for b in [1, 3]: + self.jscode = "var id = \'%s\';var b = %d;var inn = \'%s\';%sout" % ( + self.file_info['ID'], b, quote(fun), rtUpdate) + + try: + out = self.js.eval(self.jscode) + self.logDebug("URL", self.js.engine, out) + if out.startswith('/download/'): + return "http://turbobit.net%s" % out.strip() + except Exception, e: + self.logError(e) + else: + if self.retries >= 2: + # retry with updated js + self.delStorage("rtUpdate") + self.retry() + + def decrypt(self, data): + cipher = ARC4.new(hexlify('E\x15\xa1\x9e\xa3M\xa0\xc6\xa0\x84\xb6H\x83\xa8o\xa0')) + return unhexlify(cipher.encrypt(unhexlify(data))) + + def getLocalTimeString(self): + lt = time.localtime() + tz = time.altzone if lt.tm_isdst else time.timezone + return "%s GMT%+03d%02d" % (time.strftime("%a %b %d %Y %H:%M:%S", lt), -tz // 3600, tz % 3600) + + def handlePremium(self): + self.logDebug("Premium download as user %s" % self.user) + self.html = self.load(self.pyfile.url) # Useless in 0.5 + self.downloadFile() + + def downloadFile(self): + m = re.search(self.LINK_PATTERN, self.html) + if m is None: + self.parseError("download link") + self.url = "http://turbobit.net" + m.group('url') + self.logDebug(self.url) + self.download(self.url) + + +getInfo = create_getInfo(TurbobitNet) diff --git a/pyload/plugins/hoster/TurbouploadCom.py b/pyload/plugins/hoster/TurbouploadCom.py new file mode 100644 index 000000000..eb5978145 --- /dev/null +++ b/pyload/plugins/hoster/TurbouploadCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class TurbouploadCom(DeadHoster): + __name__ = "TurbouploadCom" + __type__ = "hoster" + __version__ = "0.03" + + __pattern__ = r'http://(?:www\.)?turboupload.com/(\w+).*' + + __description__ = """Turboupload.com hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + +getInfo = create_getInfo(TurbouploadCom) diff --git a/pyload/plugins/hoster/TusfilesNet.py b/pyload/plugins/hoster/TusfilesNet.py new file mode 100644 index 000000000..0e01ec805 --- /dev/null +++ b/pyload/plugins/hoster/TusfilesNet.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class TusfilesNet(XFileSharingPro): + __name__ = "TusfilesNet" + __type__ = "hoster" + __version__ = "0.03" + + __pattern__ = r'https?://(?:www\.)?tusfiles\.net/(?P<ID>\w+)' + + __description__ = """Tusfiles.net hoster plugin""" + __author_name__ = "Walter Purcaro" + __author_mail__ = "vuolter@gmail.com" + + HOSTER_NAME = "tusfiles.net" + + FILE_INFO_PATTERN = r'\](?P<N>.+) - (?P<S>[\d.]+) (?P<U>\w+)\[' + OFFLINE_PATTERN = r'>File Not Found|<Title>TusFiles - Fast Sharing Files!' + + SH_COOKIES = [(".tusfiles.net", "lang", "english")] + + + def setup(self): + self.multiDL = False + self.chunkLimit = -1 + self.resumeDownload = True + + +getInfo = create_getInfo(TusfilesNet) diff --git a/pyload/plugins/hoster/TwoSharedCom.py b/pyload/plugins/hoster/TwoSharedCom.py new file mode 100644 index 000000000..108d31c6f --- /dev/null +++ b/pyload/plugins/hoster/TwoSharedCom.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class TwoSharedCom(SimpleHoster): + __name__ = "TwoSharedCom" + __type__ = "hoster" + __version__ = "0.11" + + __pattern__ = r'http://(?:www\.)?2shared.com/(account/)?(download|get|file|document|photo|video|audio)/.*' + + __description__ = """2Shared.com hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_NAME_PATTERN = r'<h1>(?P<N>.*)</h1>' + FILE_SIZE_PATTERN = r'<span class="dtitle">File size:</span>\s*(?P<S>[0-9,.]+) (?P<U>[kKMG])i?B' + OFFLINE_PATTERN = r'The file link that you requested is not valid\.|This file was deleted\.' + + LINK_PATTERN = r"window.location ='([^']+)';" + + + def setup(self): + self.resumeDownload = self.multiDL = True + + def handleFree(self): + m = re.search(self.LINK_PATTERN, self.html) + if m is None: + self.parseError('Download link') + link = m.group(1) + self.logDebug("Download URL %s" % link) + + self.download(link) + + +getInfo = create_getInfo(TwoSharedCom) diff --git a/pyload/plugins/hoster/UlozTo.py b/pyload/plugins/hoster/UlozTo.py new file mode 100644 index 000000000..2f1fdc595 --- /dev/null +++ b/pyload/plugins/hoster/UlozTo.py @@ -0,0 +1,158 @@ +# -*- coding: utf-8 -*- + +import re +import time + +from pyload.common.json_layer import json_loads +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +def convertDecimalPrefix(m): + # decimal prefixes used in filesize and traffic + return ("%%.%df" % {'k': 3, 'M': 6, 'G': 9}[m.group(2)] % float(m.group(1))).replace('.', '') + + +class UlozTo(SimpleHoster): + __name__ = "UlozTo" + __type__ = "hoster" + __version__ = "0.98" + + __pattern__ = r'http://(?:www\.)?(uloz\.to|ulozto\.(cz|sk|net)|bagruj.cz|zachowajto.pl)/(?:live/)?(?P<id>\w+/[^/?]*)' + + __description__ = """Uloz.to hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_INFO_PATTERN = r'<p>File <strong>(?P<N>[^<]+)</strong> is password protected</p>' + FILE_NAME_PATTERN = r'<title>(?P<N>[^<]+) \| Uloz.to</title>' + FILE_SIZE_PATTERN = r'<span id="fileSize">.*?(?P<S>[0-9.]+\s[kMG]?B)</span>' + OFFLINE_PATTERN = r'<title>404 - Page not found</title>|<h1 class="h1">File (has been deleted|was banned)</h1>' + + FILE_SIZE_REPLACEMENTS = [('([0-9.]+)\s([kMG])B', convertDecimalPrefix)] + FILE_URL_REPLACEMENTS = [(r"(?<=http://)([^/]+)", "www.ulozto.net")] + + ADULT_PATTERN = r'<form action="(?P<link>[^\"]*)" method="post" id="frm-askAgeForm">' + PASSWD_PATTERN = r'<div class="passwordProtectedFile">' + VIPLINK_PATTERN = r'<a href="[^"]*\?disclaimer=1" class="linkVip">' + FREE_URL_PATTERN = r'<div class="freeDownloadForm"><form action="([^"]+)"' + PREMIUM_URL_PATTERN = r'<div class="downloadForm"><form action="([^"]+)"' + TOKEN_PATTERN = r'<input type="hidden" name="_token_" id="[^\"]*" value="(?P<token>[^\"]*)" />' + + + def setup(self): + self.multiDL = self.premium + self.resumeDownload = True + + def process(self, pyfile): + pyfile.url = re.sub(r"(?<=http://)([^/]+)", "www.ulozto.net", pyfile.url) + self.html = self.load(pyfile.url, decode=True, cookies=True) + + if re.search(self.ADULT_PATTERN, self.html): + self.logInfo("Adult content confirmation needed. Proceeding..") + + m = re.search(self.TOKEN_PATTERN, self.html) + if m is None: + self.parseError('TOKEN') + token = m.group(1) + + self.html = self.load(pyfile.url, get={"do": "askAgeForm-submit"}, + post={"agree": "Confirm", "_token_": token}, cookies=True) + + passwords = self.getPassword().splitlines() + while self.PASSWD_PATTERN in self.html: + if passwords: + password = passwords.pop(0) + self.logInfo("Password protected link, trying " + password) + self.html = self.load(pyfile.url, get={"do": "passwordProtectedForm-submit"}, + post={"password": password, "password_send": 'Send'}, cookies=True) + else: + self.fail("No or incorrect password") + + if re.search(self.VIPLINK_PATTERN, self.html): + self.html = self.load(pyfile.url, get={"disclaimer": "1"}) + + self.file_info = self.getFileInfo() + + if self.premium and self.checkTrafficLeft(): + self.handlePremium() + else: + self.handleFree() + + self.doCheckDownload() + + def handleFree(self): + action, inputs = self.parseHtmlForm('id="frm-downloadDialog-freeDownloadForm"') + if not action or not inputs: + self.parseError("free download form") + + self.logDebug('inputs.keys() = ' + str(inputs.keys())) + # get and decrypt captcha + if all(key in inputs for key in ("captcha_value", "captcha_id", "captcha_key")): + # Old version - last seen 9.12.2013 + self.logDebug('Using "old" version') + + captcha_value = self.decryptCaptcha("http://img.uloz.to/captcha/%s.png" % inputs['captcha_id']) + self.logDebug('CAPTCHA ID: ' + inputs['captcha_id'] + ", CAPTCHA VALUE: " + captcha_value) + + inputs.update({'captcha_id': inputs['captcha_id'], 'captcha_key': inputs['captcha_key'], 'captcha_value': captcha_value}) + + elif all(key in inputs for key in ("captcha_value", "timestamp", "salt", "hash")): + # New version - better to get new parameters (like captcha reload) because of image url - since 6.12.2013 + self.logDebug('Using "new" version') + + xapca = self.load("http://www.ulozto.net/reloadXapca.php", get={"rnd": str(int(time.time()))}) + self.logDebug('xapca = ' + str(xapca)) + + data = json_loads(xapca) + captcha_value = self.decryptCaptcha(str(data['image'])) + self.logDebug("CAPTCHA HASH: " + data['hash'] + ", CAPTCHA SALT: " + str(data['salt']) + ", CAPTCHA VALUE: " + captcha_value) + + inputs.update({'timestamp': data['timestamp'], 'salt': data['salt'], 'hash': data['hash'], 'captcha_value': captcha_value}) + else: + self.parseError("CAPTCHA form changed") + + self.multiDL = True + self.download("http://www.ulozto.net" + action, post=inputs, cookies=True, disposition=True) + + def handlePremium(self): + self.download(self.pyfile.url + "?do=directDownload", disposition=True) + #parsed_url = self.findDownloadURL(premium=True) + #self.download(parsed_url, post={"download": "Download"}) + + def findDownloadURL(self, premium=False): + msg = "%s link" % ("Premium" if premium else "Free") + m = re.search(self.PREMIUM_URL_PATTERN if premium else self.FREE_URL_PATTERN, self.html) + if m is None: + self.parseError(msg) + parsed_url = "http://www.ulozto.net" + m.group(1) + self.logDebug("%s: %s" % (msg, parsed_url)) + return parsed_url + + def doCheckDownload(self): + check = self.checkDownload({ + "wrong_captcha": re.compile(r'<ul class="error">\s*<li>Error rewriting the text.</li>'), + "offline": re.compile(self.OFFLINE_PATTERN), + "passwd": self.PASSWD_PATTERN, + "server_error": 'src="http://img.ulozto.cz/error403/vykricnik.jpg"', # paralell dl, server overload etc. + "not_found": "<title>UloÅŸ.to</title>" + }) + + if check == "wrong_captcha": + #self.delStorage("captcha_id") + #self.delStorage("captcha_text") + self.invalidCaptcha() + self.retry(reason="Wrong captcha code") + elif check == "offline": + self.offline() + elif check == "passwd": + self.fail("Wrong password") + elif check == "server_error": + self.logError("Server error, try downloading later") + self.multiDL = False + self.wait(1 * 60 * 60, True) + self.retry() + elif check == "not_found": + self.fail("Server error - file not downloadable") + + +getInfo = create_getInfo(UlozTo) diff --git a/pyload/plugins/hoster/UloziskoSk.py b/pyload/plugins/hoster/UloziskoSk.py new file mode 100644 index 000000000..f78a6e29a --- /dev/null +++ b/pyload/plugins/hoster/UloziskoSk.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class UloziskoSk(SimpleHoster): + __name__ = "UloziskoSk" + __type__ = "hoster" + __version__ = "0.23" + + __pattern__ = r'http://(?:www\.)?ulozisko.sk/.*' + + __description__ = """Ulozisko.sk hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_NAME_PATTERN = r'<div class="down1">(?P<N>[^<]+)</div>' + FILE_SIZE_PATTERN = ur'VeÄŸkosÅ¥ súboru: <strong>(?P<S>[0-9.]+) (?P<U>[kKMG])i?B</strong><br />' + OFFLINE_PATTERN = ur'<span class = "red">ZadanÜ súbor neexistuje z jedného z nasledujúcich dÃŽvodov:</span>' + + LINK_PATTERN = r'<form name = "formular" action = "([^"]+)" method = "post">' + ID_PATTERN = r'<input type = "hidden" name = "id" value = "([^"]+)" />' + CAPTCHA_PATTERN = r'<img src="(/obrazky/obrazky.php\?fid=[^"]+)" alt="" />' + IMG_PATTERN = ur'<strong>PRE ZVÃÄÅ ENIE KLIKNITE NA OBRÃZOK</strong><br /><a href = "([^"]+)">' + + + def process(self, pyfile): + self.html = self.load(pyfile.url, decode=True) + self.getFileInfo() + + m = re.search(self.IMG_PATTERN, self.html) + if m: + url = "http://ulozisko.sk" + m.group(1) + self.download(url) + else: + self.handleFree() + + def handleFree(self): + m = re.search(self.LINK_PATTERN, self.html) + if m is None: + self.parseError('URL') + parsed_url = 'http://www.ulozisko.sk' + m.group(1) + + m = re.search(self.ID_PATTERN, self.html) + if m is None: + self.parseError('ID') + id = m.group(1) + + self.logDebug('URL:' + parsed_url + ' ID:' + id) + + m = re.search(self.CAPTCHA_PATTERN, self.html) + if m is None: + self.parseError('CAPTCHA') + captcha_url = 'http://www.ulozisko.sk' + m.group(1) + + captcha = self.decryptCaptcha(captcha_url, cookies=True) + + self.logDebug('CAPTCHA_URL:' + captcha_url + ' CAPTCHA:' + captcha) + + self.download(parsed_url, post={ + "antispam": captcha, + "id": id, + "name": self.pyfile.name, + "but": "++++STIAHNI+S%DABOR++++" + }) + + +getInfo = create_getInfo(UloziskoSk) diff --git a/pyload/plugins/hoster/UnibytesCom.py b/pyload/plugins/hoster/UnibytesCom.py new file mode 100644 index 000000000..1541265d9 --- /dev/null +++ b/pyload/plugins/hoster/UnibytesCom.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- + +import re + +from pycurl import FOLLOWLOCATION + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class UnibytesCom(SimpleHoster): + __name__ = "UnibytesCom" + __type__ = "hoster" + __version__ = "0.1" + + __pattern__ = r'http://(?:www\.)?unibytes\.com/[a-zA-Z0-9-._ ]{11}B' + + __description__ = """UniBytes.com hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_INFO_PATTERN = r'<span[^>]*?id="fileName"[^>]*>(?P<N>[^>]+)</span>\s*\((?P<S>\d.*?)\)' + + HOSTER_NAME = "unibytes.com" + WAIT_PATTERN = r'Wait for <span id="slowRest">(\d+)</span> sec' + LINK_PATTERN = r'<a href="([^"]+)">Download</a>' + + + def handleFree(self): + domain = "http://www." + self.HOSTER_NAME + action, post_data = self.parseHtmlForm('id="startForm"') + self.req.http.c.setopt(FOLLOWLOCATION, 0) + + for _ in xrange(8): + self.logDebug(action, post_data) + self.html = self.load(domain + action, post=post_data) + + m = re.search(r'location:\s*(\S+)', self.req.http.header, re.I) + if m: + url = m.group(1) + break + + if '>Somebody else is already downloading using your IP-address<' in self.html: + self.wait(10 * 60, True) + self.retry() + + if post_data['step'] == 'last': + m = re.search(self.LINK_PATTERN, self.html) + if m: + url = m.group(1) + self.correctCaptcha() + break + else: + self.invalidCaptcha() + + last_step = post_data['step'] + action, post_data = self.parseHtmlForm('id="stepForm"') + + if last_step == 'timer': + m = re.search(self.WAIT_PATTERN, self.html) + self.wait(int(m.group(1)) if m else 60, False) + elif last_step in ("captcha", "last"): + post_data['captcha'] = self.decryptCaptcha(domain + '/captcha.jpg') + else: + self.fail("No valid captcha code entered") + + self.logDebug('Download link: ' + url) + self.req.http.c.setopt(FOLLOWLOCATION, 1) + self.download(url) + + +getInfo = create_getInfo(UnibytesCom) diff --git a/pyload/plugins/hoster/UnrestrictLi.py b/pyload/plugins/hoster/UnrestrictLi.py new file mode 100644 index 000000000..2cad6616f --- /dev/null +++ b/pyload/plugins/hoster/UnrestrictLi.py @@ -0,0 +1,89 @@ +# -*- coding: utf-8 -*- + +import re + +from datetime import datetime, timedelta + +from pyload.common.json_layer import json_loads +from pyload.plugins.Hoster import Hoster + + +def secondsToMidnight(gmt=0): + now = datetime.utcnow() + timedelta(hours=gmt) + if now.hour is 0 and now.minute < 10: + midnight = now + else: + midnight = now + timedelta(days=1) + midnight = midnight.replace(hour=0, minute=10, second=0, microsecond=0) + return int((midnight - now).total_seconds()) + + +class UnrestrictLi(Hoster): + __name__ = "UnrestrictLi" + __type__ = "hoster" + __version__ = "0.12" + + __pattern__ = r'https?://(?:[^/]*\.)?(unrestrict|unr)\.li' + + __description__ = """Unrestrict.li hoster plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + + def setup(self): + self.chunkLimit = 16 + self.resumeDownload = True + + def process(self, pyfile): + if re.match(self.__pattern__, pyfile.url): + new_url = pyfile.url + elif not self.account: + self.logError(_("Please enter your %s account or deactivate this plugin") % "Unrestrict.li") + self.fail("No Unrestrict.li account provided") + else: + self.logDebug("Old URL: %s" % pyfile.url) + for _ in xrange(5): + page = self.req.load('https://unrestrict.li/unrestrict.php', + post={'link': pyfile.url, 'domain': 'long'}) + self.logDebug("JSON data: " + page) + if page != '': + break + else: + self.logInfo("Unable to get API data, waiting 1 minute and retry") + self.retry(5, 60, "Unable to get API data") + + if 'Expired session' in page or ("You are not allowed to " + "download from this host" in page and self.premium): + self.account.relogin(self.user) + self.retry() + elif "File offline" in page: + self.offline() + elif "You are not allowed to download from this host" in page: + self.fail("You are not allowed to download from this host") + elif "You have reached your daily limit for this host" in page: + self.logWarning("Reached daily limit for this host") + self.retry(5, secondsToMidnight(gmt=2), "Daily limit for this host reached") + elif "ERROR_HOSTER_TEMPORARILY_UNAVAILABLE" in page: + self.logInfo("Hoster temporarily unavailable, waiting 1 minute and retry") + self.retry(5, 60, "Hoster is temporarily unavailable") + page = json_loads(page) + new_url = page.keys()[0] + self.api_data = page[new_url] + + if new_url != pyfile.url: + self.logDebug("New URL: " + new_url) + + if hasattr(self, 'api_data'): + self.setNameSize() + + self.download(new_url, disposition=True) + + if self.getConfig("history"): + self.load("https://unrestrict.li/history/&delete=all") + self.logInfo("Download history deleted") + + def setNameSize(self): + if 'name' in self.api_data: + self.pyfile.name = self.api_data['name'] + if 'size' in self.api_data: + self.pyfile.size = self.api_data['size'] diff --git a/pyload/plugins/hoster/UploadStationCom.py b/pyload/plugins/hoster/UploadStationCom.py new file mode 100644 index 000000000..4671b2dc5 --- /dev/null +++ b/pyload/plugins/hoster/UploadStationCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class UploadStationCom(DeadHoster): + __name__ = "UploadStationCom" + __type__ = "hoster" + __version__ = "0.52" + + __pattern__ = r'http://(?:www\.)?uploadstation\.com/file/(?P<id>[A-Za-z0-9]+)' + + __description__ = """UploadStation.com hoster plugin""" + __author_name__ = ("fragonib", "zoidberg") + __author_mail__ = ("fragonib[AT]yahoo[DOT]es", "zoidberg@mujmail.cz") + + +getInfo = create_getInfo(UploadStationCom) diff --git a/pyload/plugins/hoster/UploadedTo.py b/pyload/plugins/hoster/UploadedTo.py new file mode 100644 index 000000000..db620eea6 --- /dev/null +++ b/pyload/plugins/hoster/UploadedTo.py @@ -0,0 +1,240 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# http://ul.to/044yug9o +# http://ul.to/gzfhd0xs + +import re + +from time import sleep + +from pyload.network.RequestFactory import getURL +from pyload.plugins.Hoster import Hoster +from pyload.plugins.Plugin import chunks +from pyload.plugins.internal.CaptchaService import ReCaptcha +from pyload.utils import html_unescape, parseFileSize + + +key = "bGhGMkllZXByd2VEZnU5Y2NXbHhYVlZ5cEE1bkEzRUw=".decode('base64') + + +def getID(url): + """ returns id from file url""" + m = re.match(UploadedTo.__pattern__, url) + return m.group('ID') + + +def getAPIData(urls): + post = {"apikey": key} + + idMap = {} + + for i, url in enumerate(urls): + id = getID(url) + post['id_%s' % i] = id + idMap[id] = url + + for _ in xrange(5): + api = unicode(getURL("http://uploaded.net/api/filemultiple", post=post, decode=False), 'iso-8859-1') + if api != "can't find request": + break + else: + sleep(3) + + result = {} + + if api: + for line in api.splitlines(): + data = line.split(",", 4) + if data[1] in idMap: + result[data[1]] = (data[0], data[2], data[4], data[3], idMap[data[1]]) + + return result + + +def parseFileInfo(self, url='', html=''): + if not html and hasattr(self, "html"): + html = self.html + + name = url + size = 0 + fileid = None + + if re.search(self.OFFLINE_PATTERN, html): + # File offline + status = 1 + else: + m = re.search(self.FILE_INFO_PATTERN, html) + if m: + name, fileid = html_unescape(m.group('N')), m.group('ID') + size = parseFileSize(m.group('S')) + status = 2 + else: + status = 3 + + return name, size, status, fileid + + +def getInfo(urls): + for chunk in chunks(urls, 80): + result = [] + + api = getAPIData(chunk) + + for data in api.itervalues(): + if data[0] == "online": + result.append((html_unescape(data[2]), data[1], 2, data[4])) + + elif data[0] == "offline": + result.append((data[4], 0, 1, data[4])) + + yield result + + +class UploadedTo(Hoster): + __name__ = "UploadedTo" + __type__ = "hoster" + __version__ = "0.73" + + __pattern__ = r'https?://(?:www\.)?(uploaded\.(to|net)|ul\.to)(/file/|/?\?id=|.*?&id=|/)(?P<ID>\w+)' + + __description__ = """Uploaded.net hoster plugin""" + __author_name__ = ("spoob", "mkaay", "zoidberg", "netpok", "stickell") + __author_mail__ = ("spoob@pyload.org", "mkaay@mkaay.de", "zoidberg@mujmail.cz", + "netpok@gmail.com", "l.stickell@yahoo.it") + + FILE_INFO_PATTERN = r'<a href="file/(?P<ID>\w+)" id="filename">(?P<N>[^<]+)</a> \s*<small[^>]*>(?P<S>[^<]+)</small>' + OFFLINE_PATTERN = r'<small class="cL">Error: 404</small>' + DL_LIMIT_PATTERN = r'You have reached the max. number of possible free downloads for this hour' + + + def setup(self): + self.multiDL = self.resumeDownload = self.premium + self.chunkLimit = 1 # critical problems with more chunks + + self.fileID = getID(self.pyfile.url) + self.pyfile.url = "http://uploaded.net/file/%s" % self.fileID + + def process(self, pyfile): + self.load("http://uploaded.net/language/en", just_header=True) + + api = getAPIData([pyfile.url]) + + # TODO: fallback to parse from site, because api sometimes delivers wrong status codes + + if not api: + self.logWarning("No response for API call") + + self.html = unicode(self.load(pyfile.url, decode=False), 'iso-8859-1') + name, size, status, self.fileID = parseFileInfo(self) + self.logDebug(name, size, status, self.fileID) + if status == 1: + self.offline() + elif status == 2: + pyfile.name, pyfile.size = name, size + else: + self.fail('Parse error - file info') + elif api == 'Access denied': + self.fail(_("API key invalid")) + + else: + if self.fileID not in api: + self.offline() + + self.data = api[self.fileID] + if self.data[0] != "online": + self.offline() + + pyfile.name = html_unescape(self.data[2]) + + # pyfile.name = self.get_file_name() + + if self.premium: + self.handlePremium() + else: + self.handleFree() + + def handlePremium(self): + info = self.account.getAccountInfo(self.user, True) + self.logDebug("%(name)s: Use Premium Account (%(left)sGB left)" % {"name": self.__name__, + "left": info['trafficleft'] / 1024 / 1024}) + if int(self.data[1]) / 1024 > info['trafficleft']: + self.logInfo(_("%s: Not enough traffic left" % self.__name__)) + self.account.empty(self.user) + self.resetAccount() + self.fail(_("Traffic exceeded")) + + header = self.load("http://uploaded.net/file/%s" % self.fileID, just_header=True) + if "location" in header: + #Direct download + print "Direct Download: " + header['location'] + self.download(header['location']) + else: + #Indirect download + self.html = self.load("http://uploaded.net/file/%s" % self.fileID) + m = re.search(r'<div class="tfree".*\s*<form method="post" action="(.*?)"', self.html) + if m is None: + self.fail("Download URL not m. Try to enable direct downloads.") + url = m.group(1) + print "Premium URL: " + url + self.download(url, post={}) + + def handleFree(self): + self.html = self.load(self.pyfile.url, decode=True) + + if 'var free_enabled = false;' in self.html: + self.logError("Free-download capacities exhausted.") + self.retry(max_tries=24, wait_time=5 * 60) + + m = re.search(r"Current waiting period: <span>(\d+)</span> seconds", self.html) + if m is None: + self.fail("File not downloadable for free users") + self.setWait(int(m.group(1))) + + js = self.load("http://uploaded.net/js/download.js", decode=True) + + challengeId = re.search(r'Recaptcha\.create\("([^"]+)', js) + + url = "http://uploaded.net/io/ticket/captcha/%s" % self.fileID + downloadURL = "" + + for _ in xrange(5): + re_captcha = ReCaptcha(self) + challenge, result = re_captcha.challenge(challengeId.group(1)) + options = {"recaptcha_challenge_field": challenge, "recaptcha_response_field": result} + self.wait() + + result = self.load(url, post=options) + self.logDebug("result: %s" % result) + + if "limit-size" in result: + self.fail("File too big for free download") + elif "limit-slot" in result: # Temporary restriction so just wait a bit + self.setWait(30 * 60, True) + self.wait() + self.retry() + elif "limit-parallel" in result: + self.fail("Cannot download in parallel") + elif self.DL_LIMIT_PATTERN in result: # limit-dl + self.setWait(3 * 60 * 60, True) + self.wait() + self.retry() + elif '"err":"captcha"' in result: + self.logError("ul.net captcha is disabled") + self.invalidCaptcha() + elif "type:'download'" in result: + self.correctCaptcha() + downloadURL = re.search("url:'([^']+)", result).group(1) + break + else: + self.fail("Unknown error '%s'" % result) + + if not downloadURL: + self.fail("No Download url retrieved/all captcha attempts failed") + + self.download(downloadURL, disposition=True) + check = self.checkDownload({"limit-dl": self.DL_LIMIT_PATTERN}) + if check == "limit-dl": + self.setWait(3 * 60 * 60, True) + self.wait() + self.retry() diff --git a/pyload/plugins/hoster/UploadheroCom.py b/pyload/plugins/hoster/UploadheroCom.py new file mode 100644 index 000000000..f1f893c30 --- /dev/null +++ b/pyload/plugins/hoster/UploadheroCom.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# http://uploadhero.co/dl/wQBRAVSM + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class UploadheroCom(SimpleHoster): + __name__ = "UploadheroCom" + __type__ = "hoster" + __version__ = "0.15" + + __pattern__ = r'http://(?:www\.)?uploadhero\.com?/dl/\w+' + + __description__ = """UploadHero.co plugin""" + __author_name__ = ("mcmyst", "zoidberg") + __author_mail__ = ("mcmyst@hotmail.fr", "zoidberg@mujmail.cz") + + FILE_NAME_PATTERN = r'<div class="nom_de_fichier">(?P<N>.*?)</div>' + FILE_SIZE_PATTERN = r'Taille du fichier : </span><strong>(?P<S>.*?)</strong>' + OFFLINE_PATTERN = r'<p class="titre_dl_2">|<div class="raison"><strong>Le lien du fichier ci-dessus n\'existe plus.' + + SH_COOKIES = [(".uploadhero.co", "lang", "en")] + + IP_BLOCKED_PATTERN = r'href="(/lightbox_block_download.php\?min=.*?)"' + IP_WAIT_PATTERN = r'<span id="minutes">(\d+)</span>.*\s*<span id="seconds">(\d+)</span>' + + CAPTCHA_PATTERN = r'"(/captchadl\.php\?[a-z0-9]+)"' + FREE_URL_PATTERN = r'var magicomfg = \'<a href="(http://[^<>"]*?)"|"(http://storage\d+\.uploadhero\.co/\?d=[A-Za-z0-9]+/[^<>"/]+)"' + PREMIUM_URL_PATTERN = r'<a href="([^"]+)" id="downloadnow"' + + + def handleFree(self): + self.checkErrors() + + m = re.search(self.CAPTCHA_PATTERN, self.html) + if m is None: + self.parseError("Captcha URL") + captcha_url = "http://uploadhero.co" + m.group(1) + + for _ in xrange(5): + captcha = self.decryptCaptcha(captcha_url) + self.html = self.load(self.pyfile.url, get={"code": captcha}) + m = re.search(self.FREE_URL_PATTERN, self.html) + if m: + self.correctCaptcha() + download_url = m.group(1) or m.group(2) + break + else: + self.invalidCaptcha() + else: + self.fail("No valid captcha code entered") + + self.download(download_url) + + def handlePremium(self): + self.logDebug("%s: Use Premium Account" % self.__name__) + self.html = self.load(self.pyfile.url) + link = re.search(self.PREMIUM_URL_PATTERN, self.html).group(1) + self.logDebug("Downloading link : '%s'" % link) + self.download(link) + + def checkErrors(self): + m = re.search(self.IP_BLOCKED_PATTERN, self.html) + if m: + self.html = self.load("http://uploadhero.co%s" % m.group(1)) + + m = re.search(self.IP_WAIT_PATTERN, self.html) + wait_time = (int(m.group(1)) * 60 + int(m.group(2))) if m else 5 * 60 + self.wait(wait_time, True) + self.retry() + + +getInfo = create_getInfo(UploadheroCom) diff --git a/pyload/plugins/hoster/UploadingCom.py b/pyload/plugins/hoster/UploadingCom.py new file mode 100644 index 000000000..a7c328eec --- /dev/null +++ b/pyload/plugins/hoster/UploadingCom.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- + +import re + +from pycurl import HTTPHEADER + +from pyload.common.json_layer import json_loads +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, timestamp + + +class UploadingCom(SimpleHoster): + __name__ = "UploadingCom" + __type__ = "hoster" + __version__ = "0.36" + + __pattern__ = r'http://(?:www\.)?uploading\.com/files/(?:get/)?(?P<ID>[\w\d]+)' + + __description__ = """Uploading.com hoster plugin""" + __author_name__ = ("jeix", "mkaay", "zoidberg") + __author_mail__ = ("jeix@hasnomail.de", "mkaay@mkaay.de", "zoidberg@mujmail.cz") + + FILE_NAME_PATTERN = r'id="file_title">(?P<N>.+)</' + FILE_SIZE_PATTERN = r'size tip_container">(?P<S>[\d.]+) (?P<U>\w+)<' + OFFLINE_PATTERN = r'(Page|file) not found' + + + def process(self, pyfile): + # set lang to english + self.req.cj.setCookie(".uploading.com", "lang", "1") + self.req.cj.setCookie(".uploading.com", "language", "1") + self.req.cj.setCookie(".uploading.com", "setlang", "en") + self.req.cj.setCookie(".uploading.com", "_lang", "en") + + if not "/get/" in pyfile.url: + pyfile.url = pyfile.url.replace("/files", "/files/get") + + self.html = self.load(pyfile.url, decode=True) + self.file_info = self.getFileInfo() + + if self.premium: + self.handlePremium() + else: + self.handleFree() + + def handlePremium(self): + postData = {'action': 'get_link', + 'code': self.file_info['ID'], + 'pass': 'undefined'} + + self.html = self.load('http://uploading.com/files/get/?JsHttpRequest=%d-xml' % timestamp(), post=postData) + url = re.search(r'"link"\s*:\s*"(.*?)"', self.html) + if url: + url = url.group(1).replace("\\/", "/") + self.download(url) + + raise Exception("Plugin defect.") + + def handleFree(self): + m = re.search('<h2>((Daily )?Download Limit)</h2>', self.html) + if m: + self.pyfile.error = m.group(1) + self.logWarning(self.pyfile.error) + self.retry(max_tries=6, wait_time=6 * 60 * 60 if m.group(2) else 15 * 60, reason=self.pyfile.error) + + ajax_url = "http://uploading.com/files/get/?ajax" + self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"]) + self.req.http.lastURL = self.pyfile.url + + response = json_loads(self.load(ajax_url, post={'action': 'second_page', 'code': self.file_info['ID']})) + if 'answer' in response and 'wait_time' in response['answer']: + wait_time = int(response['answer']['wait_time']) + self.logInfo("%s: Waiting %d seconds." % (self.__name__, wait_time)) + self.wait(wait_time) + else: + self.parseError("AJAX/WAIT") + + response = json_loads( + self.load(ajax_url, post={'action': 'get_link', 'code': self.file_info['ID'], 'pass': 'false'})) + if 'answer' in response and 'link' in response['answer']: + url = response['answer']['link'] + else: + self.parseError("AJAX/URL") + + self.html = self.load(url) + m = re.search(r'<form id="file_form" action="(.*?)"', self.html) + if m: + url = m.group(1) + else: + self.parseError("URL") + + self.download(url) + + check = self.checkDownload({"html": re.compile("\A<!DOCTYPE html PUBLIC")}) + if check == "html": + self.logWarning("Redirected to a HTML page, wait 10 minutes and retry") + self.wait(10 * 60, True) + + +getInfo = create_getInfo(UploadingCom) diff --git a/pyload/plugins/hoster/UpstoreNet.py b/pyload/plugins/hoster/UpstoreNet.py new file mode 100644 index 000000000..bd084612c --- /dev/null +++ b/pyload/plugins/hoster/UpstoreNet.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.CaptchaService import ReCaptcha +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class UpstoreNet(SimpleHoster): + __name__ = "UpstoreNet" + __type__ = "hoster" + __version__ = "0.02" + + __pattern__ = r'https?://(?:www\.)?upstore\.net/' + + __description__ = """Upstore.Net File Download Hoster""" + __author_name__ = "igel" + __author_mail__ = "igelkun@myopera.com" + + FILE_INFO_PATTERN = r'<div class="comment">.*?</div>\s*\n<h2 style="margin:0">(?P<N>.*?)</h2>\s*\n<div class="comment">\s*\n\s*(?P<S>[\d.]+) (?P<U>\w+)' + OFFLINE_PATTERN = r'<span class="error">File not found</span>' + + WAIT_PATTERN = r'var sec = (\d+)' + CHASH_PATTERN = r'<input type="hidden" name="hash" value="([^"]*)">' + LINK_PATTERN = r'<a href="(https?://.*?)" target="_blank"><b>' + + + def handleFree(self): + # STAGE 1: get link to continue + m = re.search(self.CHASH_PATTERN, self.html) + if m is None: + self.parseError("could not detect hash") + chash = m.group(1) + self.logDebug("read hash " + chash) + # continue to stage2 + post_data = {'hash': chash, 'free': 'Slow download'} + self.html = self.load(self.pyfile.url, post=post_data, decode=True) + + # STAGE 2: solv captcha and wait + # first get the infos we need: recaptcha key and wait time + recaptcha = ReCaptcha(self) + if not recaptcha.detect_key(self.html): + self.parseError("could not find recaptcha pattern") + self.logDebug("using captcha key " + recaptcha.recaptcha_key) + # try the captcha 5 times + for i in xrange(5): + m = re.search(self.WAIT_PATTERN, self.html) + if m is None: + self.parseError("could not find wait pattern") + wait_time = m.group(1) + + # then, do the waiting + self.wait(wait_time) + + # then, handle the captcha + challenge, code = recaptcha.challenge() + post_data['recaptcha_challenge_field'] = challenge + post_data['recaptcha_response_field'] = code + + self.html = self.load(self.pyfile.url, post=post_data, decode=True) + + # STAGE 3: get direct link + m = re.search(self.LINK_PATTERN, self.html, re.DOTALL) + if m: + break + + if m is None: + self.parseError("could not detect direct link") + + direct = m.group(1) + self.logDebug('found direct link: ' + direct) + self.download(direct, disposition=True) + + +getInfo = create_getInfo(UpstoreNet) diff --git a/pyload/plugins/hoster/UptoboxCom.py b/pyload/plugins/hoster/UptoboxCom.py new file mode 100644 index 000000000..8fd5e6fa7 --- /dev/null +++ b/pyload/plugins/hoster/UptoboxCom.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- + +import re + +from urllib import unquote + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo +from pyload.plugins.internal.CaptchaService import ReCaptcha, SolveMedia +from pyload.utils import html_unescape + + +class UptoboxCom(XFileSharingPro): + __name__ = "UptoboxCom" + __type__ = "hoster" + __version__ = "0.09" + + __pattern__ = r'https?://(?:www\.)?uptobox\.com/\w+' + + __description__ = """Uptobox.com hoster plugin""" + __author_name__ = "Walter Purcaro" + __author_mail__ = "vuolter@gmail.com" + + HOSTER_NAME = "uptobox.com" + + FILE_INFO_PATTERN = r'"para_title">(?P<N>.+) \((?P<S>[\d\.]+) (?P<U>\w+)\)' + OFFLINE_PATTERN = r'>(File not found|Access Denied|404 Not Found)' + TEMP_OFFLINE_PATTERN = r'>This server is in maintenance mode' + + WAIT_PATTERN = r'>(\d+)</span> seconds<' + + LINK_PATTERN = r'"(https?://\w+\.uptobox\.com/d/.*?)"' + + + def handleCaptcha(self, inputs): + m = re.search(self.SOLVEMEDIA_PATTERN, self.html) + if m: + captcha_key = m.group(1) + captcha = SolveMedia(self) + inputs['adcopy_challenge'], inputs['adcopy_response'] = captcha.challenge(captcha_key) + return 4 + else: + m = re.search(self.CAPTCHA_URL_PATTERN, self.html) + if m: + captcha_url = m.group(1) + inputs['code'] = self.decryptCaptcha(captcha_url) + return 2 + else: + m = re.search(self.CAPTCHA_DIV_PATTERN, self.html, re.DOTALL) + if m: + captcha_div = m.group(1) + self.logDebug(captcha_div) + numerals = re.findall(r'<span.*?padding-left\s*:\s*(\d+).*?>(\d)</span>', + html_unescape(captcha_div)) + inputs['code'] = "".join([a[1] for a in sorted(numerals, key=lambda num: int(num[0]))]) + self.logDebug("CAPTCHA", inputs['code'], numerals) + return 3 + else: + m = re.search(self.RECAPTCHA_URL_PATTERN, self.html) + if m: + recaptcha_key = unquote(m.group(1)) + self.logDebug("RECAPTCHA KEY: %s" % recaptcha_key) + recaptcha = ReCaptcha(self) + inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge( + recaptcha_key) + return 1 + return 0 + + +getInfo = create_getInfo(UptoboxCom) diff --git a/pyload/plugins/hoster/VeehdCom.py b/pyload/plugins/hoster/VeehdCom.py new file mode 100644 index 000000000..4d76c3525 --- /dev/null +++ b/pyload/plugins/hoster/VeehdCom.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.Hoster import Hoster + + +class VeehdCom(Hoster): + __name__ = "VeehdCom" + __type__ = "hoster" + __version__ = "0.23" + + __pattern__ = r'http://veehd\.com/video/\d+_\S+' + __config__ = [("filename_spaces", "bool", "Allow spaces in filename", False), + ("replacement_char", "str", "Filename replacement character", "_")] + + __description__ = """Veehd.com hoster plugin""" + __author_name__ = "cat" + __author_mail__ = "cat@pyload" + + + def _debug(self, msg): + self.logDebug('[%s] %s' % (self.__name__, msg)) + + def setup(self): + self.multiDL = True + self.req.canContinue = True + + def process(self, pyfile): + self.download_html() + if not self.file_exists(): + self.offline() + + pyfile.name = self.get_file_name() + self.download(self.get_file_url()) + + def download_html(self): + url = self.pyfile.url + self._debug("Requesting page: %s" % (repr(url),)) + self.html = self.load(url) + + def file_exists(self): + if not self.html: + self.download_html() + + if '<title>Veehd</title>' in self.html: + return False + return True + + def get_file_name(self): + if not self.html: + self.download_html() + + m = re.search(r'<title[^>]*>([^<]+) on Veehd</title>', self.html) + if m is None: + self.fail("video title not found") + + name = m.group(1) + + # replace unwanted characters in filename + if self.getConfig('filename_spaces'): + pattern = '[^0-9A-Za-z\.\ ]+' + else: + pattern = '[^0-9A-Za-z\.]+' + + return re.sub(pattern, self.getConfig('replacement_char'), name) + '.avi' + + def get_file_url(self): + """ returns the absolute downloadable filepath + """ + if not self.html: + self.download_html() + + m = re.search(r'<embed type="video/divx" src="(http://([^/]*\.)?veehd\.com/dl/[^"]+)"', + self.html) + if m is None: + self.fail("embedded video url not found") + + return m.group(1) diff --git a/pyload/plugins/hoster/VeohCom.py b/pyload/plugins/hoster/VeohCom.py new file mode 100644 index 000000000..31b21420a --- /dev/null +++ b/pyload/plugins/hoster/VeohCom.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class VeohCom(SimpleHoster): + __name__ = "VeohCom" + __type__ = "hoster" + __version__ = "0.2" + + __pattern__ = r'http://(?:www\.)?veoh\.com/(tv/)?(watch|videos)/(?P<ID>v\w+)' + __config__ = [("quality", "Low;High;Auto", "Quality", "Auto")] + + __description__ = """Veoh.com hoster plugin""" + __author_name__ = "Walter Purcaro" + __author_mail__ = "vuolter@gmail.com" + + FILE_NAME_PATTERN = r'<meta name="title" content="(?P<N>.*?)"' + OFFLINE_PATTERN = r'>Sorry, we couldn\'t find the video you were looking for' + + FILE_URL_REPLACEMENTS = [(__pattern__, r'http://www.veoh.com/watch/\g<ID>')] + + SH_COOKIES = [(".veoh.com", "lassieLocale", "en")] + + + def setup(self): + self.resumeDownload = self.multiDL = True + self.chunkLimit = -1 + + def handleFree(self): + quality = self.getConfig("quality") + if quality == "Auto": + quality = ("High", "Low") + for q in quality: + pattern = r'"fullPreviewHash%sPath":"(.+?)"' % q + m = re.search(pattern, self.html) + if m: + self.pyfile.name += ".mp4" + link = m.group(1).replace("\\", "") + self.logDebug("Download link: " + link) + self.download(link) + return + else: + self.logInfo("No %s quality video found" % q.upper()) + else: + self.fail("No video found!") + + +getInfo = create_getInfo(VeohCom) diff --git a/pyload/plugins/hoster/VidPlayNet.py b/pyload/plugins/hoster/VidPlayNet.py new file mode 100644 index 000000000..82afde07d --- /dev/null +++ b/pyload/plugins/hoster/VidPlayNet.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# BigBuckBunny_320x180.mp4 - 61.7 Mb - http://vidplay.net/38lkev0h3jv0 + +from pyload.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo + + +class VidPlayNet(XFileSharingPro): + __name__ = "VidPlayNet" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'https?://(?:www\.)?vidplay\.net/\w{12}' + + __description__ = """VidPlay.net hoster plugin""" + __author_name__ = "t4skforce" + __author_mail__ = "t4skforce1337[AT]gmail[DOT]com" + + HOSTER_NAME = "vidplay.net" + + OFFLINE_PATTERN = r'<b>File Not Found</b><br>\s*<br>' + FILE_NAME_PATTERN = r'<b>Password:</b></div>\s*<h[1-6]>(?P<N>[^<]+)</h[1-6]>' + LINK_PATTERN = r'(http://([^/]*?%s|\d+\.\d+\.\d+\.\d+)(:\d+)?(/d/|(?:/files)?/\d+/\w+/)[^"\'<&]+)' % HOSTER_NAME + + +getInfo = create_getInfo(VidPlayNet) diff --git a/pyload/plugins/hoster/VimeoCom.py b/pyload/plugins/hoster/VimeoCom.py new file mode 100644 index 000000000..aebf1c344 --- /dev/null +++ b/pyload/plugins/hoster/VimeoCom.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class VimeoCom(SimpleHoster): + __name__ = "VimeoCom" + __type__ = "hoster" + __version__ = "0.02" + + __pattern__ = r'https?://(?:www\.)?(player\.)?vimeo\.com/(video/)?(?P<ID>\d+)' + __config__ = [("quality", "Lowest;Mobile;SD;HD;Highest", "Quality", "Highest"), + ("original", "bool", "Try to download the original file first", True)] + + __description__ = """Vimeo.com hoster plugin""" + __author_name__ = "Walter Purcaro" + __author_mail__ = "vuolter@gmail.com" + + FILE_NAME_PATTERN = r'<title>(?P<N>.+) on Vimeo<' + OFFLINE_PATTERN = r'class="exception_header"' + TEMP_OFFLINE_PATTERN = r'Please try again in a few minutes.<' + + FILE_URL_REPLACEMENTS = [(__pattern__, r'https://www.vimeo.com/\g<ID>')] + + SH_COOKIES = [(".vimeo.com", "language", "en")] + + + def setup(self): + self.resumeDownload = self.multiDL = True + self.chunkLimit = -1 + + def handleFree(self): + password = self.getPassword() + + if self.js and 'class="btn iconify_down_b"' in self.html: + html = self.js.eval(self.load(self.pyfile.url, get={'action': "download", 'password': password}, decode=True)) + pattern = r'href="(?P<URL>http://vimeo\.com.+?)".*?\>(?P<QL>.+?) ' + else: + id = re.match(self.__pattern__, self.pyfile.url).group("ID") + html = self.load("https://player.vimeo.com/video/" + id, get={'password': password}) + pattern = r'"(?P<QL>\w+)":{"profile".*?"(?P<URL>http://pdl\.vimeocdn\.com.+?)"' + + link = dict([(l.group('QL').lower(), l.group('URL')) for l in re.finditer(pattern, html)]) + + if self.getConfig("original"): + if "original" in link: + self.download(link[q]) + return + else: + self.logInfo("Original file not downloadable") + + quality = self.getConfig("quality") + if quality == "Highest": + qlevel = ("hd", "sd", "mobile") + elif quality == "Lowest": + qlevel = ("mobile", "sd", "hd") + else: + qlevel = quality.lower() + + for q in qlevel: + if q in link: + self.download(link[q]) + return + else: + self.logInfo("No %s quality video found" % q.upper()) + else: + self.fail("No video found!") + + +getInfo = create_getInfo(VimeoCom) diff --git a/pyload/plugins/hoster/Vipleech4uCom.py b/pyload/plugins/hoster/Vipleech4uCom.py new file mode 100644 index 000000000..436b7d484 --- /dev/null +++ b/pyload/plugins/hoster/Vipleech4uCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class Vipleech4uCom(DeadHoster): + __name__ = "Vipleech4uCom" + __type__ = "hoster" + __version__ = "0.2" + + __pattern__ = r'http://(?:www\.)?vipleech4u\.com/manager\.php' + + __description__ = """Vipleech4u.com hoster plugin""" + __author_name__ = "Kagenoshin" + __author_mail__ = "kagenoshin@gmx.ch" + + +getInfo = create_getInfo(Vipleech4uCom) diff --git a/pyload/plugins/hoster/WarserverCz.py b/pyload/plugins/hoster/WarserverCz.py new file mode 100644 index 000000000..365f0f0fa --- /dev/null +++ b/pyload/plugins/hoster/WarserverCz.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class WarserverCz(DeadHoster): + __name__ = "WarserverCz" + __type__ = "hoster" + __version__ = "0.13" + + __pattern__ = r'http://(?:www\.)?warserver\.cz/stahnout/\d+' + + __description__ = """Warserver.cz hoster plugin""" + __author_name__ = "Walter Purcaro" + __author_mail__ = "vuolter@gmail.com" + + +getInfo = create_getInfo(WarserverCz) diff --git a/pyload/plugins/hoster/WebshareCz.py b/pyload/plugins/hoster/WebshareCz.py new file mode 100644 index 000000000..6ca8d8882 --- /dev/null +++ b/pyload/plugins/hoster/WebshareCz.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.network.RequestFactory import getRequest +from pyload.plugins.internal.SimpleHoster import SimpleHoster + + +def getInfo(urls): + h = getRequest() + for url in urls: + h.load(url) + fid = re.search(WebshareCz.__pattern__, url).group('ID') + api_data = h.load('https://webshare.cz/api/file_info/', post={'ident': fid}) + if 'File not found' in api_data: + file_info = (url, 0, 1, url) + else: + name = re.search('<name>(.+)</name>', api_data).group(1) + size = re.search('<size>(.+)</size>', api_data).group(1) + file_info = (name, size, 2, url) + yield file_info + + +class WebshareCz(SimpleHoster): + __name__ = "WebshareCz" + __type__ = "hoster" + __version__ = "0.13" + + __pattern__ = r'https?://(?:www\.)?webshare.cz/(?:#/)?file/(?P<ID>\w+)' + + __description__ = """WebShare.cz hoster plugin""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + + def handleFree(self): + api_data = self.load('https://webshare.cz/api/file_link/', post={'ident': self.fid}) + self.logDebug("API data: " + api_data) + m = re.search('<link>(.+)</link>', api_data) + if m is None: + self.parseError('Unable to detect direct link') + direct = m.group(1) + self.logDebug("Direct link: " + direct) + self.download(direct, disposition=True) + + def getFileInfo(self): + self.logDebug("URL: %s" % self.pyfile.url) + + self.fid = re.match(self.__pattern__, self.pyfile.url).group('ID') + + self.load(self.pyfile.url) + api_data = self.load('https://webshare.cz/api/file_info/', post={'ident': self.fid}) + + if 'File not found' in api_data: + self.offline() + else: + self.pyfile.name = re.search('<name>(.+)</name>', api_data).group(1) + self.pyfile.size = re.search('<size>(.+)</size>', api_data).group(1) + + self.logDebug("FILE NAME: %s FILE SIZE: %s" % (self.pyfile.name, self.pyfile.size)) diff --git a/pyload/plugins/hoster/WrzucTo.py b/pyload/plugins/hoster/WrzucTo.py new file mode 100644 index 000000000..b766ea785 --- /dev/null +++ b/pyload/plugins/hoster/WrzucTo.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- + +import re + +from pycurl import HTTPHEADER + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class WrzucTo(SimpleHoster): + __name__ = "WrzucTo" + __type__ = "hoster" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?wrzuc\.to/([a-zA-Z0-9]+(\.wt|\.html)|(\w+/?linki/[a-zA-Z0-9]+))' + + __description__ = """Wrzuc.to hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_NAME_PATTERN = r'id="file_info">\s*<strong>(?P<N>.*?)</strong>' + FILE_SIZE_PATTERN = r'class="info">\s*<tr>\s*<td>(?P<S>.*?)</td>' + + SH_COOKIES = [(".wrzuc.to", "language", "en")] + + + def setup(self): + self.multiDL = True + + def handleFree(self): + data = dict(re.findall(r'(md5|file): "(.*?)"', self.html)) + if len(data) != 2: + self.parseError('File ID') + + self.req.http.c.setopt(HTTPHEADER, ["X-Requested-With: XMLHttpRequest"]) + self.req.http.lastURL = self.pyfile.url + self.load("http://www.wrzuc.to/ajax/server/prepair", post={"md5": data['md5']}) + + self.req.http.lastURL = self.pyfile.url + self.html = self.load("http://www.wrzuc.to/ajax/server/download_link", post={"file": data['file']}) + + data.update(re.findall(r'"(download_link|server_id)":"(.*?)"', self.html)) + if len(data) != 4: + self.parseError('Download URL') + + download_url = "http://%s.wrzuc.to/pobierz/%s" % (data['server_id'], data['download_link']) + self.logDebug("Download URL: %s" % download_url) + self.download(download_url) + + +getInfo = create_getInfo(WrzucTo) diff --git a/pyload/plugins/hoster/WuploadCom.py b/pyload/plugins/hoster/WuploadCom.py new file mode 100644 index 000000000..5bc933ae5 --- /dev/null +++ b/pyload/plugins/hoster/WuploadCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class WuploadCom(DeadHoster): + __name__ = "WuploadCom" + __type__ = "hoster" + __version__ = "0.23" + + __pattern__ = r'http://(?:www\.)?wupload\..*?/file/(([a-z][0-9]+/)?[0-9]+)(/.*)?' + + __description__ = """Wupload.com hoster plugin""" + __author_name__ = ("jeix", "Paul King") + __author_mail__ = ("jeix@hasnomail.de", "") + + +getInfo = create_getInfo(WuploadCom) diff --git a/pyload/plugins/hoster/X7To.py b/pyload/plugins/hoster/X7To.py new file mode 100644 index 000000000..8df1d0ab3 --- /dev/null +++ b/pyload/plugins/hoster/X7To.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadHoster import DeadHoster, create_getInfo + + +class X7To(DeadHoster): + __name__ = "X7To" + __type__ = "hoster" + __version__ = "0.41" + + __pattern__ = r'http://(?:www\.)?x7.to/' + + __description__ = """X7.to hoster plugin""" + __author_name__ = "ernieb" + __author_mail__ = "ernieb" + + +getInfo = create_getInfo(X7To) diff --git a/pyload/plugins/hoster/XFileSharingPro.py b/pyload/plugins/hoster/XFileSharingPro.py new file mode 100644 index 000000000..c7733600b --- /dev/null +++ b/pyload/plugins/hoster/XFileSharingPro.py @@ -0,0 +1,324 @@ +# -*- coding: utf-8 -*- + +import re + +from pycurl import FOLLOWLOCATION, LOW_SPEED_TIME +from random import random +from urllib import unquote +from urlparse import urlparse + +from pyload.network.RequestFactory import getURL +from pyload.plugins.internal.CaptchaService import ReCaptcha, SolveMedia +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, PluginParseError, replace_patterns +from pyload.utils import html_unescape + + +class XFileSharingPro(SimpleHoster): + """ + Common base for XFileSharingPro hosters like EasybytezCom, CramitIn, FiledinoCom... + Some hosters may work straight away when added to __pattern__ + However, most of them will NOT work because they are either down or running a customized version + """ + __name__ = "XFileSharingPro" + __type__ = "hoster" + __version__ = "0.32" + + __pattern__ = r'^unmatchable$' + + __description__ = """XFileSharingPro base hoster plugin""" + __author_name__ = ("zoidberg", "stickell") + __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") + + FILE_INFO_PATTERN = r'<tr><td align=right><b>Filename:</b></td><td nowrap>(?P<N>[^<]+)</td></tr>\s*.*?<small>\((?P<S>[^<]+)\)</small>' + FILE_NAME_PATTERN = r'<input type="hidden" name="fname" value="(?P<N>[^"]+)"' + FILE_SIZE_PATTERN = r'You have requested .*\((?P<S>[\d\.\,]+) ?(?P<U>\w+)?\)</font>' + OFFLINE_PATTERN = r'>\w+ (Not Found|file (was|has been) removed)' + + WAIT_PATTERN = r'<span id="countdown_str">.*?>(\d+)</span>' + + OVR_LINK_PATTERN = r'<h2>Download Link</h2>\s*<textarea[^>]*>([^<]+)' + + CAPTCHA_URL_PATTERN = r'(http://[^"\']+?/captchas?/[^"\']+)' + RECAPTCHA_URL_PATTERN = r'http://[^"\']+?recaptcha[^"\']+?\?k=([^"\']+)"' + CAPTCHA_DIV_PATTERN = r'>Enter code.*?<div.*?>(.*?)</div>' + SOLVEMEDIA_PATTERN = r'http:\/\/api\.solvemedia\.com\/papi\/challenge\.script\?k=(.*?)"' + + ERROR_PATTERN = r'class=["\']err["\'][^>]*>(.*?)</' + + + def setup(self): + if self.__name__ == "XFileSharingPro": + self.__pattern__ = self.core.pluginManager.hosterPlugins[self.__name__]['pattern'] + self.multiDL = True + else: + self.resumeDownload = self.multiDL = self.premium + + self.chunkLimit = 1 + + def process(self, pyfile): + self.prepare() + + pyfile.url = replace_patterns(pyfile.url, self.FILE_URL_REPLACEMENTS) + + if not re.match(self.__pattern__, pyfile.url): + if self.premium: + self.handleOverriden() + else: + self.fail("Only premium users can download from other hosters with %s" % self.HOSTER_NAME) + else: + try: + # Due to a 0.4.9 core bug self.load would use cookies even if + # cookies=False. Workaround using getURL to avoid cookies. + # Can be reverted in 0.5 as the cookies bug has been fixed. + self.html = getURL(pyfile.url, decode=True) + self.file_info = self.getFileInfo() + except PluginParseError: + self.file_info = None + + self.location = self.getDirectDownloadLink() + + if not self.file_info: + pyfile.name = html_unescape(unquote(urlparse( + self.location if self.location else pyfile.url).path.split("/")[-1])) + + if self.location: + self.startDownload(self.location) + elif self.premium: + self.handlePremium() + else: + self.handleFree() + + def prepare(self): + """ Initialize important variables """ + if not hasattr(self, "HOSTER_NAME"): + self.HOSTER_NAME = re.match(self.__pattern__, self.pyfile.url).group(1) + if not hasattr(self, "LINK_PATTERN"): + self.LINK_PATTERN = r'(http://([^/]*?%s|\d+\.\d+\.\d+\.\d+)(:\d+)?(/d/|(?:/files)?/\d+/\w+/)[^"\'<]+)' % self.HOSTER_NAME + + self.captcha = self.errmsg = None + self.passwords = self.getPassword().splitlines() + + def getDirectDownloadLink(self): + """ Get download link for premium users with direct download enabled """ + self.req.http.lastURL = self.pyfile.url + + self.req.http.c.setopt(FOLLOWLOCATION, 0) + self.html = self.load(self.pyfile.url, cookies=True, decode=True) + self.header = self.req.http.header + self.req.http.c.setopt(FOLLOWLOCATION, 1) + + location = None + m = re.search(r"Location\s*:\s*(.*)", self.header, re.I) + if m and re.match(self.LINK_PATTERN, m.group(1)): + location = m.group(1).strip() + + return location + + def handleFree(self): + url = self.getDownloadLink() + self.logDebug("Download URL: %s" % url) + self.startDownload(url) + + def getDownloadLink(self): + for i in xrange(5): + self.logDebug("Getting download link: #%d" % i) + data = self.getPostParameters() + + self.req.http.c.setopt(FOLLOWLOCATION, 0) + self.html = self.load(self.pyfile.url, post=data, ref=True, decode=True) + self.header = self.req.http.header + self.req.http.c.setopt(FOLLOWLOCATION, 1) + + m = re.search(r"Location\s*:\s*(.*)", self.header, re.I) + if m: + break + + m = re.search(self.LINK_PATTERN, self.html, re.S) + if m: + break + + else: + if self.errmsg and 'captcha' in self.errmsg: + self.fail("No valid captcha code entered") + else: + self.fail("Download link not found") + + return m.group(1) + + def handlePremium(self): + self.html = self.load(self.pyfile.url, post=self.getPostParameters()) + m = re.search(self.LINK_PATTERN, self.html) + if m is None: + self.parseError('DIRECT LINK') + self.startDownload(m.group(1)) + + def handleOverriden(self): + #only tested with easybytez.com + self.html = self.load("http://www.%s/" % self.HOSTER_NAME) + action, inputs = self.parseHtmlForm('') + upload_id = "%012d" % int(random() * 10 ** 12) + action += upload_id + "&js_on=1&utype=prem&upload_type=url" + inputs['tos'] = '1' + inputs['url_mass'] = self.pyfile.url + inputs['up1oad_type'] = 'url' + + self.logDebug(self.HOSTER_NAME, action, inputs) + #wait for file to upload to easybytez.com + self.req.http.c.setopt(LOW_SPEED_TIME, 600) + self.html = self.load(action, post=inputs) + + action, inputs = self.parseHtmlForm('F1') + if not inputs: + self.parseError('TEXTAREA') + self.logDebug(self.HOSTER_NAME, inputs) + if inputs['st'] == 'OK': + self.html = self.load(action, post=inputs) + elif inputs['st'] == 'Can not leech file': + self.retry(max_tries=20, wait_time=3 * 60, reason=inputs['st']) + else: + self.fail(inputs['st']) + + #get easybytez.com link for uploaded file + m = re.search(self.OVR_LINK_PATTERN, self.html) + if m is None: + self.parseError('DIRECT LINK (OVR)') + self.pyfile.url = m.group(1) + header = self.load(self.pyfile.url, just_header=True) + if 'location' in header: # Direct link + self.startDownload(self.pyfile.url) + else: + self.retry() + + def startDownload(self, link): + link = link.strip() + if self.captcha: + self.correctCaptcha() + self.logDebug('DIRECT LINK: %s' % link) + self.download(link, disposition=True) + + def checkErrors(self): + m = re.search(self.ERROR_PATTERN, self.html) + if m: + self.errmsg = m.group(1) + self.logWarning(re.sub(r"<.*?>", " ", self.errmsg)) + + if 'wait' in self.errmsg: + wait_time = sum([int(v) * {"hour": 3600, "minute": 60, "second": 1}[u] for v, u in + re.findall(r'(\d+)\s*(hour|minute|second)', self.errmsg)]) + self.wait(wait_time, True) + elif 'captcha' in self.errmsg: + self.invalidCaptcha() + elif 'premium' in self.errmsg and 'require' in self.errmsg: + self.fail("File can be downloaded by premium users only") + elif 'limit' in self.errmsg: + self.wait(1 * 60 * 60, True) + self.retry(25) + elif 'countdown' in self.errmsg or 'Expired' in self.errmsg: + self.retry() + elif 'maintenance' in self.errmsg: + self.tempOffline() + elif 'download files up to' in self.errmsg: + self.fail("File too large for free download") + else: + self.fail(self.errmsg) + + else: + self.errmsg = None + + return self.errmsg + + def getPostParameters(self): + for _ in xrange(3): + if not self.errmsg: + self.checkErrors() + + if hasattr(self, "FORM_PATTERN"): + action, inputs = self.parseHtmlForm(self.FORM_PATTERN) + else: + action, inputs = self.parseHtmlForm(input_names={"op": re.compile("^download")}) + + if not inputs: + action, inputs = self.parseHtmlForm('F1') + if not inputs: + if self.errmsg: + self.retry() + else: + self.parseError("Form not found") + + self.logDebug(self.HOSTER_NAME, inputs) + + if 'op' in inputs and inputs['op'] in ("download2", "download3"): + if "password" in inputs: + if self.passwords: + inputs['password'] = self.passwords.pop(0) + else: + self.fail("No or invalid passport") + + if not self.premium: + m = re.search(self.WAIT_PATTERN, self.html) + if m: + wait_time = int(m.group(1)) + 1 + self.setWait(wait_time, False) + else: + wait_time = 0 + + self.captcha = self.handleCaptcha(inputs) + + if wait_time: + self.wait() + + self.errmsg = None + return inputs + + else: + inputs['referer'] = self.pyfile.url + + if self.premium: + inputs['method_premium'] = "Premium Download" + if 'method_free' in inputs: + del inputs['method_free'] + else: + inputs['method_free'] = "Free Download" + if 'method_premium' in inputs: + del inputs['method_premium'] + + self.html = self.load(self.pyfile.url, post=inputs, ref=True) + self.errmsg = None + + else: + self.parseError('FORM: %s' % (inputs['op'] if 'op' in inputs else 'UNKNOWN')) + + def handleCaptcha(self, inputs): + m = re.search(self.RECAPTCHA_URL_PATTERN, self.html) + if m: + recaptcha_key = unquote(m.group(1)) + self.logDebug("RECAPTCHA KEY: %s" % recaptcha_key) + recaptcha = ReCaptcha(self) + inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge(recaptcha_key) + return 1 + else: + m = re.search(self.CAPTCHA_URL_PATTERN, self.html) + if m: + captcha_url = m.group(1) + inputs['code'] = self.decryptCaptcha(captcha_url) + return 2 + else: + m = re.search(self.CAPTCHA_DIV_PATTERN, self.html, re.DOTALL) + if m: + captcha_div = m.group(1) + self.logDebug(captcha_div) + numerals = re.findall(r'<span.*?padding-left\s*:\s*(\d+).*?>(\d)</span>', html_unescape(captcha_div)) + inputs['code'] = "".join([a[1] for a in sorted(numerals, key=lambda num: int(num[0]))]) + self.logDebug("CAPTCHA", inputs['code'], numerals) + return 3 + else: + m = re.search(self.SOLVEMEDIA_PATTERN, self.html) + if m: + captcha_key = m.group(1) + captcha = SolveMedia(self) + inputs['adcopy_challenge'], inputs['adcopy_response'] = captcha.challenge(captcha_key) + return 4 + return 0 + + +getInfo = create_getInfo(XFileSharingPro) diff --git a/pyload/plugins/hoster/XHamsterCom.py b/pyload/plugins/hoster/XHamsterCom.py new file mode 100644 index 000000000..0afb94b74 --- /dev/null +++ b/pyload/plugins/hoster/XHamsterCom.py @@ -0,0 +1,123 @@ +# -*- coding: utf-8 -*- + +import re + +from urllib import unquote + +from pyload.common.json_layer import json_loads +from pyload.plugins.Hoster import Hoster + + +def clean_json(json_expr): + json_expr = re.sub('[\n\r]', '', json_expr) + json_expr = re.sub(' +', '', json_expr) + json_expr = re.sub('\'', '"', json_expr) + + return json_expr + + +class XHamsterCom(Hoster): + __name__ = "XHamsterCom" + __type__ = "hoster" + __version__ = "0.12" + + __pattern__ = r'http://(?:www\.)?xhamster\.com/movies/.+' + __config__ = [("type", ".mp4;.flv", "Preferred type", ".mp4")] + + __description__ = """XHamster.com hoster plugin""" + __author_name__ = None + __author_mail__ = None + + + def process(self, pyfile): + self.pyfile = pyfile + + if not self.file_exists(): + self.offline() + + if self.getConfig("type"): + self.desired_fmt = self.getConfig("type") + + pyfile.name = self.get_file_name() + self.desired_fmt + self.download(self.get_file_url()) + + def download_html(self): + url = self.pyfile.url + self.html = self.load(url) + + def get_file_url(self): + """ returns the absolute downloadable filepath + """ + if not self.html: + self.download_html() + + flashvar_pattern = re.compile('flashvars = ({.*?});', re.DOTALL) + json_flashvar = flashvar_pattern.search(self.html) + + if not json_flashvar: + self.fail("Parse error (flashvars)") + + j = clean_json(json_flashvar.group(1)) + flashvars = json_loads(j) + + if flashvars['srv']: + srv_url = flashvars['srv'] + '/' + else: + self.fail("Parse error (srv_url)") + + if flashvars['url_mode']: + url_mode = flashvars['url_mode'] + else: + self.fail("Parse error (url_mode)") + + if self.desired_fmt == ".mp4": + file_url = re.search(r"<a href=\"" + srv_url + "(.+?)\"", self.html) + if file_url is None: + self.fail("Parse error (file_url)") + file_url = file_url.group(1) + long_url = srv_url + file_url + self.logDebug("long_url: %s" % long_url) + else: + if flashvars['file']: + file_url = unquote(flashvars['file']) + else: + self.fail("Parse error (file_url)") + + if url_mode == '3': + long_url = file_url + self.logDebug("long_url: %s" % long_url) + else: + long_url = srv_url + "key=" + file_url + self.logDebug("long_url: %s" % long_url) + + return long_url + + def get_file_name(self): + if not self.html: + self.download_html() + + pattern = r"<title>(.*?) - xHamster\.com</title>" + name = re.search(pattern, self.html) + if name is None: + pattern = r"<h1 >(.*)</h1>" + name = re.search(pattern, self.html) + if name is None: + pattern = r"http://[www.]+xhamster\.com/movies/.*/(.*?)\.html?" + name = re.match(file_name_pattern, self.pyfile.url) + if name is None: + pattern = r"<div id=\"element_str_id\" style=\"display:none;\">(.*)</div>" + name = re.search(pattern, self.html) + if name is None: + return "Unknown" + + return name.group(1) + + def file_exists(self): + """ returns True or False + """ + if not self.html: + self.download_html() + if re.search(r"(.*Video not found.*)", self.html) is not None: + return False + else: + return True diff --git a/pyload/plugins/hoster/XVideosCom.py b/pyload/plugins/hoster/XVideosCom.py new file mode 100644 index 000000000..75162955a --- /dev/null +++ b/pyload/plugins/hoster/XVideosCom.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- + +import re + +from urllib import unquote + +from pyload.plugins.Hoster import Hoster + + +class XVideosCom(Hoster): + __name__ = "XVideos.com" + __type__ = "hoster" + __version__ = "0.1" + + __pattern__ = r'http://(?:www\.)?xvideos\.com/video([0-9]+)/.*' + + __description__ = """XVideos.com hoster plugin""" + __author_name__ = None + __author_mail__ = None + + + def process(self, pyfile): + site = self.load(pyfile.url) + pyfile.name = "%s (%s).flv" % ( + re.search(r"<h2>([^<]+)<span", site).group(1), + re.match(self.__pattern__, pyfile.url).group(1), + ) + self.download(unquote(re.search(r"flv_url=([^&]+)&", site).group(1))) diff --git a/pyload/plugins/hoster/Xdcc.py b/pyload/plugins/hoster/Xdcc.py new file mode 100644 index 000000000..8b427cfdc --- /dev/null +++ b/pyload/plugins/hoster/Xdcc.py @@ -0,0 +1,205 @@ +# -*- coding: utf-8 -*- + +import re +import socket +import struct +import sys +import time + +from os import makedirs +from os.path import exists, join +from select import select + +from pyload.plugins.Hoster import Hoster +from pyload.utils import safe_join + + +class Xdcc(Hoster): + __name__ = "Xdcc" + __type__ = "hoster" + __version__ = "0.32" + + __config__ = [("nick", "str", "Nickname", "pyload"), + ("ident", "str", "Ident", "pyloadident"), + ("realname", "str", "Realname", "pyloadreal")] + + __description__ = """Download from IRC XDCC bot""" + __author_name__ = "jeix" + __author_mail__ = "jeix@hasnomail.com" + + + def setup(self): + self.debug = 0 # 0,1,2 + self.timeout = 30 + self.multiDL = False + + def process(self, pyfile): + # change request type + self.req = pyfile.m.core.requestFactory.getRequest(self.__name__, type="XDCC") + + self.pyfile = pyfile + for _ in xrange(0, 3): + try: + nmn = self.doDownload(pyfile.url) + self.logDebug("%s: Download of %s finished." % (self.__name__, nmn)) + return + except socket.error, e: + if hasattr(e, "errno"): + errno = e.errno + else: + errno = e.args[0] + + if errno == 10054: + self.logDebug("XDCC: Server blocked our ip, retry in 5 min") + self.setWait(300) + self.wait() + continue + + self.fail("Failed due to socket errors. Code: %d" % errno) + + self.fail("Server blocked our ip, retry again later manually") + + def doDownload(self, url): + self.pyfile.setStatus("waiting") # real link + + m = re.match(r'xdcc://(.*?)/#?(.*?)/(.*?)/#?(\d+)/?', url) + server = m.group(1) + chan = m.group(2) + bot = m.group(3) + pack = m.group(4) + nick = self.getConfig('nick') + ident = self.getConfig('ident') + real = self.getConfig('realname') + + temp = server.split(':') + ln = len(temp) + if ln == 2: + host, port = temp + elif ln == 1: + host, port = temp[0], 6667 + else: + self.fail("Invalid hostname for IRC Server (%s)" % server) + + ####################### + # CONNECT TO IRC AND IDLE FOR REAL LINK + dl_time = time.time() + + sock = socket.socket() + sock.connect((host, int(port))) + if nick == "pyload": + nick = "pyload-%d" % (time.time() % 1000) # last 3 digits + sock.send("NICK %s\r\n" % nick) + sock.send("USER %s %s bla :%s\r\n" % (ident, host, real)) + time.sleep(3) + sock.send("JOIN #%s\r\n" % chan) + sock.send("PRIVMSG %s :xdcc send #%s\r\n" % (bot, pack)) + + # IRC recv loop + readbuffer = "" + done = False + retry = None + m = None + while True: + + # done is set if we got our real link + if done: + break + + if retry: + if time.time() > retry: + retry = None + dl_time = time.time() + sock.send("PRIVMSG %s :xdcc send #%s\r\n" % (bot, pack)) + + else: + if (dl_time + self.timeout) < time.time(): # todo: add in config + sock.send("QUIT :byebye\r\n") + sock.close() + self.fail("XDCC Bot did not answer") + + fdset = select([sock], [], [], 0) + if sock not in fdset[0]: + continue + + readbuffer += sock.recv(1024) + temp = readbuffer.split("\n") + readbuffer = temp.pop() + + for line in temp: + if self.debug is 2: + print "*> " + unicode(line, errors='ignore') + line = line.rstrip() + first = line.split() + + if first[0] == "PING": + sock.send("PONG %s\r\n" % first[1]) + + if first[0] == "ERROR": + self.fail("IRC-Error: %s" % line) + + msg = line.split(None, 3) + if len(msg) != 4: + continue + + msg = { + "origin": msg[0][1:], + "action": msg[1], + "target": msg[2], + "text": msg[3][1:] + } + + if nick == msg['target'][0:len(nick)] and "PRIVMSG" == msg['action']: + if msg['text'] == "\x01VERSION\x01": + self.logDebug("XDCC: Sending CTCP VERSION.") + sock.send("NOTICE %s :%s\r\n" % (msg['origin'], "pyLoad! IRC Interface")) + elif msg['text'] == "\x01TIME\x01": + self.logDebug("Sending CTCP TIME.") + sock.send("NOTICE %s :%d\r\n" % (msg['origin'], time.time())) + elif msg['text'] == "\x01LAG\x01": + pass # don't know how to answer + + if not (bot == msg['origin'][0:len(bot)] + and nick == msg['target'][0:len(nick)] + and msg['action'] in ("PRIVMSG", "NOTICE")): + continue + + if self.debug is 1: + print "%s: %s" % (msg['origin'], msg['text']) + + if "You already requested that pack" in msg['text']: + retry = time.time() + 300 + + if "you must be on a known channel to request a pack" in msg['text']: + self.fail("Wrong channel") + + m = re.match('\x01DCC SEND (.*?) (\d+) (\d+)(?: (\d+))?\x01', msg['text']) + if m: + done = True + + # get connection data + ip = socket.inet_ntoa(struct.pack('L', socket.ntohl(int(m.group(2))))) + port = int(m.group(3)) + packname = m.group(1) + + if len(m.groups()) > 3: + self.req.filesize = int(m.group(4)) + + self.pyfile.name = packname + + download_folder = self.config['general']['download_folder'] + filename = safe_join(download_folder, packname) + + self.logInfo("XDCC: Downloading %s from %s:%d" % (packname, ip, port)) + + self.pyfile.setStatus("downloading") + newname = self.req.download(ip, port, filename, sock, self.pyfile.setProgress) + if newname and newname != filename: + self.logInfo("%(name)s saved as %(newname)s" % {"name": self.pyfile.name, "newname": newname}) + filename = newname + + # kill IRC socket + # sock.send("QUIT :byebye\r\n") + sock.close() + + self.lastDownload = filename + return self.lastDownload diff --git a/pyload/plugins/hoster/YibaishiwuCom.py b/pyload/plugins/hoster/YibaishiwuCom.py new file mode 100644 index 000000000..b6d06d234 --- /dev/null +++ b/pyload/plugins/hoster/YibaishiwuCom.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.common.json_layer import json_loads +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class YibaishiwuCom(SimpleHoster): + __name__ = "YibaishiwuCom" + __type__ = "hoster" + __version__ = "0.12" + + __pattern__ = r'http://(?:www\.)?(?:u\.)?115.com/file/(?P<ID>\w+)' + + __description__ = """115.com hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + FILE_NAME_PATTERN = r"file_name: '(?P<N>[^']+)'" + FILE_SIZE_PATTERN = r"file_size: '(?P<S>[^']+)'" + OFFLINE_PATTERN = ur'<h3><i style="color:red;">ååïŒæåç äžååšïŒäžåŠšææçå§ïŒ</i></h3>' + + LINK_PATTERN = r'(/\?ct=(pickcode|download)[^"\']+)' + + + def handleFree(self): + m = re.search(self.LINK_PATTERN, self.html) + if m is None: + self.parseError("AJAX URL") + url = m.group(1) + self.logDebug(('FREEUSER' if m.group(2) == 'download' else 'GUEST') + ' URL', url) + + response = json_loads(self.load("http://115.com" + url, decode=False)) + if "urls" in response: + mirrors = response['urls'] + elif "data" in response: + mirrors = response['data'] + else: + mirrors = None + + for mr in mirrors: + try: + url = mr['url'].replace("\\", "") + self.logDebug("Trying URL: " + url) + self.download(url) + break + except: + continue + else: + self.fail('No working link found') + + +getInfo = create_getInfo(YibaishiwuCom) diff --git a/pyload/plugins/hoster/YoupornCom.py b/pyload/plugins/hoster/YoupornCom.py new file mode 100644 index 000000000..de23780c3 --- /dev/null +++ b/pyload/plugins/hoster/YoupornCom.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.Hoster import Hoster + + +class YoupornCom(Hoster): + __name__ = "YoupornCom" + __type__ = "hoster" + __version__ = "0.2" + + __pattern__ = r'http://(?:www\.)?youporn\.com/watch/.+' + + __description__ = """Youporn.com hoster plugin""" + __author_name__ = "willnix" + __author_mail__ = "willnix@pyload.org" + + + def process(self, pyfile): + self.pyfile = pyfile + + if not self.file_exists(): + self.offline() + + pyfile.name = self.get_file_name() + self.download(self.get_file_url()) + + def download_html(self): + url = self.pyfile.url + self.html = self.load(url, post={"user_choice": "Enter"}, cookies=False) + + def get_file_url(self): + """ returns the absolute downloadable filepath + """ + if not self.html: + self.download_html() + + return re.search(r'(http://download\.youporn\.com/download/\d+\?save=1)">', self.html).group(1) + + def get_file_name(self): + if not self.html: + self.download_html() + + file_name_pattern = r"<title>(.*) - Free Porn Videos - YouPorn</title>" + return re.search(file_name_pattern, self.html).group(1).replace("&", "&").replace("/", "") + '.flv' + + def file_exists(self): + """ returns True or False + """ + if not self.html: + self.download_html() + if re.search(r"(.*invalid video_id.*)", self.html) is not None: + return False + else: + return True diff --git a/pyload/plugins/hoster/YourfilesTo.py b/pyload/plugins/hoster/YourfilesTo.py new file mode 100644 index 000000000..2de636b4b --- /dev/null +++ b/pyload/plugins/hoster/YourfilesTo.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- + +import re + +from urllib import unquote + +from pyload.plugins.Hoster import Hoster + + +class YourfilesTo(Hoster): + __name__ = "YourfilesTo" + __type__ = "hoster" + __version__ = "0.21" + + __pattern__ = r'(http://)?(?:www\.)?yourfiles\.(to|biz)/\?d=[a-zA-Z0-9]+' + + __description__ = """Youfiles.to hoster plugin""" + __author_name__ = ("jeix", "skydancer") + __author_mail__ = ("jeix@hasnomail.de", "skydancer@hasnomail.de") + + + def process(self, pyfile): + self.pyfile = pyfile + self.prepare() + self.download(self.get_file_url()) + + def prepare(self): + if not self.file_exists(): + self.offline() + + self.pyfile.name = self.get_file_name() + + wait_time = self.get_waiting_time() + self.setWait(wait_time) + self.logDebug("%s: Waiting %d seconds." % (self.__name__, wait_time)) + self.wait() + + def get_waiting_time(self): + if not self.html: + self.download_html() + + #var zzipitime = 15; + m = re.search(r'var zzipitime = (\d+);', self.html) + if m: + sec = int(m.group(1)) + else: + sec = 0 + + return sec + + def download_html(self): + url = self.pyfile.url + self.html = self.load(url) + + def get_file_url(self): + """ returns the absolute downloadable filepath + """ + url = re.search(r"var bla = '(.*?)';", self.html) + if url: + url = url.group(1) + url = unquote(url.replace("http://http:/http://", "http://").replace("dumdidum", "")) + return url + else: + self.fail("absolute filepath could not be found. offline? ") + + def get_file_name(self): + if not self.html: + self.download_html() + + return re.search("<title>(.*)</title>", self.html).group(1) + + def file_exists(self): + """ returns True or False + """ + if not self.html: + self.download_html() + + if re.search(r"HTTP Status 404", self.html) is not None: + return False + else: + return True diff --git a/pyload/plugins/hoster/YoutubeCom.py b/pyload/plugins/hoster/YoutubeCom.py new file mode 100644 index 000000000..6869d8b86 --- /dev/null +++ b/pyload/plugins/hoster/YoutubeCom.py @@ -0,0 +1,180 @@ +# -*- coding: utf-8 -*- + +import os +import re +import subprocess + +from urllib import unquote + +from pyload.plugins.Hoster import Hoster +from pyload.plugins.internal.SimpleHoster import replace_patterns +from pyload.utils import html_unescape + + +def which(program): + """Works exactly like the unix command which + + Courtesy of http://stackoverflow.com/a/377028/675646""" + + def is_exe(fpath): + return os.path.isfile(fpath) and os.access(fpath, os.X_OK) + + fpath, fname = os.path.split(program) + if fpath: + if is_exe(program): + return program + else: + for path in os.environ['PATH'].split(os.pathsep): + path = path.strip('"') + exe_file = os.path.join(path, program) + if is_exe(exe_file): + return exe_file + + return None + + +class YoutubeCom(Hoster): + __name__ = "YoutubeCom" + __type__ = "hoster" + __version__ = "0.40" + + __pattern__ = r'https?://(?:[^/]*\.)?(?:youtube\.com|youtu\.be)/watch.*?[?&]v=.*' + __config__ = [("quality", "sd;hd;fullhd;240p;360p;480p;720p;1080p;3072p", "Quality Setting", "hd"), + ("fmt", "int", "FMT/ITAG Number (5-102, 0 for auto)", 0), + (".mp4", "bool", "Allow .mp4", True), + (".flv", "bool", "Allow .flv", True), + (".webm", "bool", "Allow .webm", False), + (".3gp", "bool", "Allow .3gp", False), + ("3d", "bool", "Prefer 3D", False)] + + __description__ = """Youtube.com hoster plugin""" + __author_name__ = ("spoob", "zoidberg") + __author_mail__ = ("spoob@pyload.org", "zoidberg@mujmail.cz") + + FILE_URL_REPLACEMENTS = [(r'youtu\.be/', 'youtube.com/')] + + # Invalid characters that must be removed from the file name + invalidChars = u'\u2605:?><"|\\' + + # name, width, height, quality ranking, 3D + formats = {5: (".flv", 400, 240, 1, False), + 6: (".flv", 640, 400, 4, False), + 17: (".3gp", 176, 144, 0, False), + 18: (".mp4", 480, 360, 2, False), + 22: (".mp4", 1280, 720, 8, False), + 43: (".webm", 640, 360, 3, False), + 34: (".flv", 640, 360, 4, False), + 35: (".flv", 854, 480, 6, False), + 36: (".3gp", 400, 240, 1, False), + 37: (".mp4", 1920, 1080, 9, False), + 38: (".mp4", 4096, 3072, 10, False), + 44: (".webm", 854, 480, 5, False), + 45: (".webm", 1280, 720, 7, False), + 46: (".webm", 1920, 1080, 9, False), + 82: (".mp4", 640, 360, 3, True), + 83: (".mp4", 400, 240, 1, True), + 84: (".mp4", 1280, 720, 8, True), + 85: (".mp4", 1920, 1080, 9, True), + 100: (".webm", 640, 360, 3, True), + 101: (".webm", 640, 360, 4, True), + 102: (".webm", 1280, 720, 8, True)} + + + def setup(self): + self.resumeDownload = self.multiDL = True + + def process(self, pyfile): + pyfile.url = replace_patterns(pyfile.url, self.FILE_URL_REPLACEMENTS) + html = self.load(pyfile.url, decode=True) + + if re.search(r'<div id="player-unavailable" class="\s*player-width player-height\s*">', html): + self.offline() + + if "We have been receiving a large volume of requests from your network." in html: + self.tempOffline() + + #get config + use3d = self.getConfig("3d") + if use3d: + quality = {"sd": 82, "hd": 84, "fullhd": 85, "240p": 83, "360p": 82, + "480p": 82, "720p": 84, "1080p": 85, "3072p": 85} + else: + quality = {"sd": 18, "hd": 22, "fullhd": 37, "240p": 5, "360p": 18, + "480p": 35, "720p": 22, "1080p": 37, "3072p": 38} + desired_fmt = self.getConfig("fmt") + if desired_fmt and desired_fmt not in self.formats: + self.logWarning("FMT %d unknown - using default." % desired_fmt) + desired_fmt = 0 + if not desired_fmt: + desired_fmt = quality.get(self.getConfig("quality"), 18) + + #parse available streams + streams = re.search(r'"url_encoded_fmt_stream_map": "(.*?)",', html).group(1) + streams = [x.split('\u0026') for x in streams.split(',')] + streams = [dict((y.split('=', 1)) for y in x) for x in streams] + streams = [(int(x['itag']), unquote(x['url'])) for x in streams] + #self.logDebug("Found links: %s" % streams) + self.logDebug("AVAILABLE STREAMS: %s" % [x[0] for x in streams]) + + #build dictionary of supported itags (3D/2D) + allowed = lambda x: self.getConfig(self.formats[x][0]) + streams = [x for x in streams if x[0] in self.formats and allowed(x[0])] + if not streams: + self.fail("No available stream meets your preferences") + fmt_dict = dict([x for x in streams if self.formats[x[0]][4] == use3d] or streams) + + self.logDebug("DESIRED STREAM: ITAG:%d (%s) %sfound, %sallowed" % + (desired_fmt, "%s %dx%d Q:%d 3D:%s" % self.formats[desired_fmt], + "" if desired_fmt in fmt_dict else "NOT ", "" if allowed(desired_fmt) else "NOT ")) + + #return fmt nearest to quality index + if desired_fmt in fmt_dict and allowed(desired_fmt): + fmt = desired_fmt + else: + sel = lambda x: self.formats[x][3] # select quality index + comp = lambda x, y: abs(sel(x) - sel(y)) + + self.logDebug("Choosing nearest fmt: %s" % [(x, allowed(x), comp(x, desired_fmt)) for x in fmt_dict.keys()]) + fmt = reduce(lambda x, y: x if comp(x, desired_fmt) <= comp(y, desired_fmt) and + sel(x) > sel(y) else y, fmt_dict.keys()) + + self.logDebug("Chosen fmt: %s" % fmt) + url = fmt_dict[fmt] + self.logDebug("URL: %s" % url) + + #set file name + file_suffix = self.formats[fmt][0] if fmt in self.formats else ".flv" + file_name_pattern = '<meta name="title" content="(.+?)">' + name = re.search(file_name_pattern, html).group(1).replace("/", "") + + # Cleaning invalid characters from the file name + name = name.encode('ascii', 'replace') + for c in self.invalidChars: + name = name.replace(c, '_') + + pyfile.name = html_unescape(name) + + time = re.search(r"t=((\d+)m)?(\d+)s", pyfile.url) + ffmpeg = which("ffmpeg") + if ffmpeg and time: + m, s = time.groups()[1:] + if m is None: + m = "0" + + pyfile.name += " (starting at %s:%s)" % (m, s) + pyfile.name += file_suffix + + filename = self.download(url) + + if ffmpeg and time: + inputfile = filename + "_" + os.rename(filename, inputfile) + + subprocess.call([ + ffmpeg, + "-ss", "00:%s:%s" % (m, s), + "-i", inputfile, + "-vcodec", "copy", + "-acodec", "copy", + filename]) + os.remove(inputfile) diff --git a/pyload/plugins/hoster/ZDF.py b/pyload/plugins/hoster/ZDF.py new file mode 100644 index 000000000..d7bd5469a --- /dev/null +++ b/pyload/plugins/hoster/ZDF.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- + +import re + +from xml.etree.ElementTree import fromstring + +from pyload.plugins.Hoster import Hoster + + +# Based on zdfm by Roland Beermann (http://github.com/enkore/zdfm/) +class ZDF(Hoster): + __name__ = "ZDF Mediathek" + __type__ = "hoster" + __version__ = "0.8" + + __pattern__ = r'http://(?:www\.)?zdf\.de/ZDFmediathek/[^0-9]*([0-9]+)[^0-9]*' + + __description__ = """ZDF.de hoster plugin""" + __author_name__ = None + __author_mail__ = None + + XML_API = "http://www.zdf.de/ZDFmediathek/xmlservice/web/beitragsDetails?id=%i" + + + @staticmethod + def video_key(video): + return ( + int(video.findtext("videoBitrate", "0")), + any(f.text == "progressive" for f in video.iter("facet")), + ) + + @staticmethod + def video_valid(video): + return video.findtext("url").startswith("http") and video.findtext("url").endswith(".mp4") and \ + video.findtext("facets/facet").startswith("progressive") + + @staticmethod + def get_id(url): + return int(re.search(r"[^0-9]*([0-9]{4,})[^0-9]*", url).group(1)) + + def process(self, pyfile): + xml = fromstring(self.load(self.XML_API % self.get_id(pyfile.url))) + + status = xml.findtext("./status/statuscode") + if status != "ok": + self.fail("Error retrieving manifest.") + + video = xml.find("video") + title = video.findtext("information/title") + + pyfile.name = title + + target_url = sorted((v for v in video.iter("formitaet") if self.video_valid(v)), + key=self.video_key)[-1].findtext("url") + + self.download(target_url) diff --git a/pyload/plugins/hoster/ZeveraCom.py b/pyload/plugins/hoster/ZeveraCom.py new file mode 100644 index 000000000..f76290ea5 --- /dev/null +++ b/pyload/plugins/hoster/ZeveraCom.py @@ -0,0 +1,108 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Hoster import Hoster + + +class ZeveraCom(Hoster): + __name__ = "ZeveraCom" + __type__ = "hoster" + __version__ = "0.21" + + __pattern__ = r'http://(?:www\.)?zevera.com/.*' + + __description__ = """Zevera.com hoster plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + + def setup(self): + self.resumeDownload = self.multiDL = True + self.chunkLimit = 1 + + def process(self, pyfile): + if not self.account: + self.logError(_("Please enter your %s account or deactivate this plugin") % "zevera.com") + self.fail("No zevera.com account provided") + + self.logDebug("zevera.com: Old URL: %s" % pyfile.url) + + if self.account.getAPIData(self.req, cmd="checklink", olink=pyfile.url) != "Alive": + self.fail("Offline or not downloadable - contact Zevera support") + + header = self.account.getAPIData(self.req, just_header=True, cmd="generatedownloaddirect", olink=pyfile.url) + if not "location" in header: + self.fail("Unable to initialize download - contact Zevera support") + + self.download(header['location'], disposition=True) + + check = self.checkDownload({"error": 'action="ErrorDownload.aspx'}) + if check == "error": + self.fail("Error response received - contact Zevera support") + + # BitAPI not used - defunct, probably abandoned by Zevera + # + # api_url = "http://zevera.com/API.ashx" + # + # def process(self, pyfile): + # if not self.account: + # self.logError(_("Please enter your zevera.com account or deactivate this plugin")) + # self.fail("No zevera.com account provided") + # + # self.logDebug("zevera.com: Old URL: %s" % pyfile.url) + # + # last_size = retries = 0 + # olink = pyfile.url #quote(pyfile.url.encode('utf_8')) + # + # for _ in xrange(100): + # self.retData = self.account.loadAPIRequest(self.req, cmd = 'download_request', olink = olink) + # self.checkAPIErrors(self.retData) + # + # if self.retData['FileInfo']['StatusID'] == 100: + # break + # elif self.retData['FileInfo']['StatusID'] == 99: + # self.fail('Failed to initialize download (99)') + # else: + # if self.retData['FileInfo']['Progress']['BytesReceived'] <= last_size: + # if retries >= 6: + # self.fail('Failed to initialize download (%d)' % self.retData['FileInfo']['StatusID'] ) + # retries += 1 + # else: + # retries = 0 + # + # last_size = self.retData['FileInfo']['Progress']['BytesReceived'] + # + # self.setWait(self.retData['Update_Wait']) + # self.wait() + # + # pyfile.name = self.retData['FileInfo']['RealFileName'] + # pyfile.size = self.retData['FileInfo']['FileSizeInBytes'] + # + # self.retData = self.account.loadAPIRequest(self.req, cmd = 'download_start', + # FileID = self.retData['FileInfo']['FileID']) + # self.checkAPIErrors(self.retData) + # + # self.download(self.api_url, get = { + # 'cmd': "open_stream", + # 'login': self.account.loginname, + # 'pass': self.account.password, + # 'FileID': self.retData['FileInfo']['FileID'], + # 'startBytes': 0 + # } + # ) + # + # def checkAPIErrors(self, retData): + # if not retData: + # self.fail('Unknown API response') + # + # if retData['ErrorCode']: + # self.logError(retData['ErrorCode'], retData['ErrorMessage']) + # #self.fail('ERROR: ' + retData['ErrorMessage']) + # + # if pyfile.size / 1024000 > retData['AccountInfo']['AvailableTODAYTrafficForUseInMBytes']: + # self.logWarning("Not enough data left to download the file") + # + # def crazyDecode(self, ustring): + # # accepts decoded ie. unicode string - API response is double-quoted, double-utf8-encoded + # # no idea what the proper order of calling these functions would be :-/ + # return html_unescape(unquote(unquote(ustring.replace( + # '@DELIMITER@','#'))).encode('raw_unicode_escape').decode('utf-8')) diff --git a/pyload/plugins/hoster/ZippyshareCom.py b/pyload/plugins/hoster/ZippyshareCom.py new file mode 100644 index 000000000..d6b7375e2 --- /dev/null +++ b/pyload/plugins/hoster/ZippyshareCom.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- +# +# Test links: +# http://www13.zippyshare.com/v/18665333/file.html + +import re + +from pyload.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo + + +class ZippyshareCom(SimpleHoster): + __name__ = "ZippyshareCom" + __type__ = "hoster" + __version__ = "0.49" + + __pattern__ = r'(?P<HOST>http://www\d{0,2}\.zippyshare.com)/v(?:/|iew.jsp.*key=)(?P<KEY>\d+)' + + __description__ = """Zippyshare.com hoster plugin""" + __author_name__ = ("spoob", "zoidberg", "stickell", "skylab") + __author_mail__ = ("spoob@pyload.org", "zoidberg@mujmail.cz", "l.stickell@yahoo.it", "development@sky-lab.de") + + FILE_NAME_PATTERN = r'<title>Zippyshare\.com - (?P<N>[^<]+)</title>' + FILE_SIZE_PATTERN = r'>Size:</font>\s*<font [^>]*>(?P<S>[0-9.,]+) (?P<U>[kKMG]+)i?B</font><br />' + FILE_INFO_PATTERN = r'document\.getElementById\(\'dlbutton\'\)\.href = "[^;]*/(?P<N>[^"]+)";' + OFFLINE_PATTERN = r'>File does not exist on this server</div>' + + SH_COOKIES = [(".zippyshare.com", "ziplocale", "en")] + + + def setup(self): + self.multiDL = True + + def handleFree(self): + url = self.get_file_url() + if not url: + self.fail("Download URL not found.") + self.logDebug("Download URL: %s" % url) + self.download(url) + + def get_file_url(self): + """returns the absolute downloadable filepath""" + url_parts = re.search(r'(addthis:url="(http://www(\d+).zippyshare.com/v/(\d*)/file.html))', self.html) + number = url_parts.group(4) + check = re.search(r'<script type="text/javascript">([^<]*?)(var a = (\d*);)', self.html) + if check: + a = int(re.search(r'<script type="text/javascript">([^<]*?)(var a = (\d*);)', self.html).group(3)) + k = int(re.search(r'<script type="text/javascript">([^<]*?)(\d*%(\d*))', self.html).group(3)) + checksum = ((a + 3) % k) * ((a + 3) % 3) + 18 + else: + # This might work but is insecure + # checksum = eval(re.search("((\d*)\s\%\s(\d*)\s\+\s(\d*)\s\%\s(\d*))", self.html).group(0)) + + m = re.search(r"((?P<a>\d*)\s%\s(?P<b>\d*)\s\+\s(?P<c>\d*)\s%\s(?P<k>\d*))", self.html) + if m is None: + self.parseError("Unable to detect values to calculate direct link") + a = int(m.group("a")) + b = int(m.group("b")) + c = int(m.group("c")) + k = int(m.group("k")) + if a == c: + checksum = ((a % b) + (a % k)) + else: + checksum = ((a % b) + (c % k)) + + self.logInfo('Checksum: %s' % checksum) + + filename = re.search(r'>Name:</font>\s*<font [^>]*>(?P<N>[^<]+)</font><br />', self.html).group('N') + + url = "/d/%s/%s/%s" % (number, checksum, filename) + self.logInfo(self.file_info['HOST'] + url) + return self.file_info['HOST'] + url + + +getInfo = create_getInfo(ZippyshareCom) diff --git a/module/plugins/hoster/__init__.py b/pyload/plugins/hoster/__init__.py index e69de29bb..e69de29bb 100644 --- a/module/plugins/hoster/__init__.py +++ b/pyload/plugins/hoster/__init__.py diff --git a/module/plugins/internal/AbstractExtractor.py b/pyload/plugins/internal/AbstractExtractor.py index d1d1a09cb..d1d1a09cb 100644 --- a/module/plugins/internal/AbstractExtractor.py +++ b/pyload/plugins/internal/AbstractExtractor.py diff --git a/module/plugins/internal/CaptchaService.py b/pyload/plugins/internal/CaptchaService.py index b247ba654..b247ba654 100644 --- a/module/plugins/internal/CaptchaService.py +++ b/pyload/plugins/internal/CaptchaService.py diff --git a/pyload/plugins/internal/DeadCrypter.py b/pyload/plugins/internal/DeadCrypter.py new file mode 100644 index 000000000..ea9c414cb --- /dev/null +++ b/pyload/plugins/internal/DeadCrypter.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Crypter import Crypter as _Crypter + + +class DeadCrypter(_Crypter): + __name__ = "DeadCrypter" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = None + + __description__ = """Crypter is no longer available""" + __author_name__ = "stickell" + __author_mail__ = "l.stickell@yahoo.it" + + + def setup(self): + self.fail("Crypter is no longer available") diff --git a/pyload/plugins/internal/DeadHoster.py b/pyload/plugins/internal/DeadHoster.py new file mode 100644 index 000000000..0b2398020 --- /dev/null +++ b/pyload/plugins/internal/DeadHoster.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.Hoster import Hoster as _Hoster + + +def create_getInfo(plugin): + + def getInfo(urls): + yield [('#N/A: ' + url, 0, 1, url) for url in urls] + + return getInfo + + +class DeadHoster(_Hoster): + __name__ = "DeadHoster" + __type__ = "hoster" + __version__ = "0.11" + + __pattern__ = None + + __description__ = """Hoster is no longer available""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + + def setup(self): + self.fail("Hoster is no longer available") diff --git a/pyload/plugins/internal/MultiHoster.py b/pyload/plugins/internal/MultiHoster.py new file mode 100644 index 000000000..d99ae6ff9 --- /dev/null +++ b/pyload/plugins/internal/MultiHoster.py @@ -0,0 +1,192 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.Hook import Hook +from pyload.utils import remove_chars + + +class MultiHoster(Hook): + __name__ = "MultiHoster" + __type__ = "hook" + __version__ = "0.20" + + __description__ = """Generic MultiHoster plugin""" + __author_name__ = "pyLoad Team" + __author_mail__ = "admin@pyload.org" + + replacements = [("2shared.com", "twoshared.com"), ("4shared.com", "fourshared.com"), ("cloudnator.com", "shragle.com"), + ("ifile.it", "filecloud.io"), ("easy-share.com", "crocko.com"), ("freakshare.net", "freakshare.com"), + ("hellshare.com", "hellshare.cz"), ("share-rapid.cz", "sharerapid.com"), ("sharerapid.cz", "sharerapid.com"), + ("ul.to", "uploaded.to"), ("uploaded.net", "uploaded.to"), ("1fichier.com", "onefichier.com")] + ignored = [] + interval = 24 * 60 * 60 #: reload hosters daily + + + def setup(self): + self.hosters = [] + self.supported = [] + self.new_supported = [] + + def getConfig(self, option, default=''): + """getConfig with default value - subclass may not implements all config options""" + try: + # Fixed loop due to getConf deprecation in 0.4.10 + return super(MultiHoster, self).getConfig(option) + except KeyError: + return default + + def getHosterCached(self): + if not self.hosters: + try: + hosterSet = self.toHosterSet(self.getHoster()) - set(self.ignored) + except Exception, e: + self.logError("%s" % str(e)) + return [] + + try: + configMode = self.getConfig('hosterListMode', 'all') + if configMode in ("listed", "unlisted"): + configSet = self.toHosterSet(self.getConfig('hosterList', '').replace('|', ',').replace(';', ',').split(',')) + + if configMode == "listed": + hosterSet &= configSet + else: + hosterSet -= configSet + + except Exception, e: + self.logError("%s" % str(e)) + + self.hosters = list(hosterSet) + + return self.hosters + + def toHosterSet(self, hosters): + hosters = set((str(x).strip().lower() for x in hosters)) + + for rep in self.replacements: + if rep[0] in hosters: + hosters.remove(rep[0]) + hosters.add(rep[1]) + + hosters.discard('') + return hosters + + def getHoster(self): + """Load list of supported hoster + + :return: List of domain names + """ + raise NotImplementedError + + def coreReady(self): + if self.cb: + self.core.scheduler.removeJob(self.cb) + + self.setConfig("activated", True) #: config not in sync after plugin reload + + cfg_interval = self.getConfig("interval", None) #: reload interval in hours + if cfg_interval is not None: + self.interval = cfg_interval * 60 * 60 + + if self.interval: + self._periodical() + else: + self.periodical() + + def initPeriodical(self): + pass + + def periodical(self): + """reload hoster list periodically""" + self.logInfo("Reloading supported hoster list") + + old_supported = self.supported + self.supported, self.new_supported, self.hosters = [], [], [] + + self.overridePlugins() + + old_supported = [hoster for hoster in old_supported if hoster not in self.supported] + if old_supported: + self.logDebug("UNLOAD: %s" % ", ".join(old_supported)) + for hoster in old_supported: + self.unloadHoster(hoster) + + def overridePlugins(self): + pluginMap = {} + for name in self.core.pluginManager.hosterPlugins.keys(): + pluginMap[name.lower()] = name + + accountList = [name.lower() for name, data in self.core.accountManager.accounts.items() if data] + excludedList = [] + + for hoster in self.getHosterCached(): + name = remove_chars(hoster.lower(), "-.") + + if name in accountList: + excludedList.append(hoster) + else: + if name in pluginMap: + self.supported.append(pluginMap[name]) + else: + self.new_supported.append(hoster) + + if not self.supported and not self.new_supported: + self.logError(_("No Hoster loaded")) + return + + module = self.core.pluginManager.getPlugin(self.__name__) + klass = getattr(module, self.__name__) + + # inject plugin plugin + self.logDebug("Overwritten Hosters: %s" % ", ".join(sorted(self.supported))) + for hoster in self.supported: + dict = self.core.pluginManager.hosterPlugins[hoster] + dict['new_module'] = module + dict['new_name'] = self.__name__ + + if excludedList: + self.logInfo("The following hosters were not overwritten - account exists: %s" % ", ".join(sorted(excludedList))) + + if self.new_supported: + self.logDebug("New Hosters: %s" % ", ".join(sorted(self.new_supported))) + + # create new regexp + regexp = r".*(%s).*" % "|".join([x.replace(".", "\\.") for x in self.new_supported]) + if hasattr(klass, "__pattern__") and isinstance(klass.__pattern__, basestring) and '://' in klass.__pattern__: + regexp = r"%s|%s" % (klass.__pattern__, regexp) + + self.logDebug("Regexp: %s" % regexp) + + dict = self.core.pluginManager.hosterPlugins[self.__name__] + dict['pattern'] = regexp + dict['re'] = re.compile(regexp) + + def unloadHoster(self, hoster): + dict = self.core.pluginManager.hosterPlugins[hoster] + if "module" in dict: + del dict['module'] + + if "new_module" in dict: + del dict['new_module'] + del dict['new_name'] + + def unload(self): + """Remove override for all hosters. Scheduler job is removed by hookmanager""" + for hoster in self.supported: + self.unloadHoster(hoster) + + # reset pattern + klass = getattr(self.core.pluginManager.getPlugin(self.__name__), self.__name__) + dict = self.core.pluginManager.hosterPlugins[self.__name__] + dict['pattern'] = getattr(klass, "__pattern__", r'^unmatchable$') + dict['re'] = re.compile(dict['pattern']) + + def downloadFailed(self, pyfile): + """remove plugin override if download fails but not if file is offline/temp.offline""" + if pyfile.hasStatus("failed") and self.getConfig("unloadFailing", True): + hdict = self.core.pluginManager.hosterPlugins[pyfile.pluginname] + if "new_name" in hdict and hdict['new_name'] == self.__name__: + self.logDebug("Unload MultiHoster", pyfile.pluginname, hdict) + self.unloadHoster(pyfile.pluginname) + pyfile.setStatus("queued") diff --git a/pyload/plugins/internal/SimpleCrypter.py b/pyload/plugins/internal/SimpleCrypter.py new file mode 100644 index 000000000..6e639c946 --- /dev/null +++ b/pyload/plugins/internal/SimpleCrypter.py @@ -0,0 +1,118 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.Crypter import Crypter +from pyload.plugins.internal.SimpleHoster import PluginParseError, replace_patterns, set_cookies +from pyload.utils import html_unescape + + +class SimpleCrypter(Crypter): + __name__ = "SimpleCrypter" + __type__ = "crypter" + __version__ = "0.10" + + __pattern__ = None + + __description__ = """Simple decrypter plugin""" + __author_name__ = ("stickell", "zoidberg", "Walter Purcaro") + __author_mail__ = ("l.stickell@yahoo.it", "zoidberg@mujmail.cz", "vuolter@gmail.com") + + """ + Following patterns should be defined by each crypter: + + LINK_PATTERN: group(1) must be a download link or a regex to catch more links + example: LINK_PATTERN = r'<div class="link"><a href="(http://speedload.org/\w+)' + + TITLE_PATTERN: (optional) The group defined by 'title' should be the title + example: TITLE_PATTERN = r'<title>Files of: (?P<title>[^<]+) folder</title>' + + OFFLINE_PATTERN: (optional) Checks if the file is yet available online + example: OFFLINE_PATTERN = r'File (deleted|not found)' + + TEMP_OFFLINE_PATTERN: (optional) Checks if the file is temporarily offline + example: TEMP_OFFLINE_PATTERN = r'Server maintainance' + + + If it's impossible to extract the links using the LINK_PATTERN only you can override the getLinks method. + + If the links are disposed on multiple pages you need to define a pattern: + + PAGES_PATTERN: The group defined by 'pages' must be the total number of pages + example: PAGES_PATTERN = r'Pages: (?P<pages>\d+)' + + and a function: + + loadPage(self, page_n): + return the html of the page number 'page_n' + """ + + URL_REPLACEMENTS = [] + + SH_COOKIES = True # or False or list of tuples [(domain, name, value)] + + + def setup(self): + if isinstance(self.SH_COOKIES, list): + set_cookies(self.req.cj, self.SH_COOKIES) + + def decrypt(self, pyfile): + pyfile.url = replace_patterns(pyfile.url, self.URL_REPLACEMENTS) + + self.html = self.load(pyfile.url, decode=True) + + self.checkOnline() + + package_name, folder_name = self.getPackageNameAndFolder() + + self.package_links = self.getLinks() + + if hasattr(self, 'PAGES_PATTERN') and hasattr(self, 'loadPage'): + self.handleMultiPages() + + self.logDebug('Package has %d links' % len(self.package_links)) + + if self.package_links: + self.packages = [(package_name, self.package_links, folder_name)] + else: + self.fail('Could not extract any links') + + def getLinks(self): + """ + Returns the links extracted from self.html + You should override this only if it's impossible to extract links using only the LINK_PATTERN. + """ + return re.findall(self.LINK_PATTERN, self.html) + + def checkOnline(self): + if hasattr(self, "OFFLINE_PATTERN") and re.search(self.OFFLINE_PATTERN, self.html): + self.offline() + elif hasattr(self, "TEMP_OFFLINE_PATTERN") and re.search(self.TEMP_OFFLINE_PATTERN, self.html): + self.tempOffline() + + def getPackageNameAndFolder(self): + if hasattr(self, 'TITLE_PATTERN'): + m = re.search(self.TITLE_PATTERN, self.html) + if m: + name = folder = html_unescape(m.group('title').strip()) + self.logDebug("Found name [%s] and folder [%s] in package info" % (name, folder)) + return name, folder + + name = self.pyfile.package().name + folder = self.pyfile.package().folder + self.logDebug("Package info not found, defaulting to pyfile name [%s] and folder [%s]" % (name, folder)) + return name, folder + + def handleMultiPages(self): + pages = re.search(self.PAGES_PATTERN, self.html) + if pages: + pages = int(pages.group('pages')) + else: + pages = 1 + + for p in xrange(2, pages + 1): + self.html = self.loadPage(p) + self.package_links += self.getLinks() + + def parseError(self, msg): + raise PluginParseError(msg) diff --git a/pyload/plugins/internal/SimpleHoster.py b/pyload/plugins/internal/SimpleHoster.py new file mode 100644 index 000000000..ca320732f --- /dev/null +++ b/pyload/plugins/internal/SimpleHoster.py @@ -0,0 +1,292 @@ +# -*- coding: utf-8 -*- + +import re + +from time import time +from urlparse import urlparse + +from pyload.network.CookieJar import CookieJar +from pyload.network.RequestFactory import getURL +from pyload.plugins.Hoster import Hoster +from pyload.utils import fixup, html_unescape, parseFileSize + + +def replace_patterns(string, ruleslist): + for r in ruleslist: + rf, rt = r + string = re.sub(rf, rt, string) + #self.logDebug(rf, rt, string) + return string + + +def set_cookies(cj, cookies): + for cookie in cookies: + if isinstance(cookie, tuple) and len(cookie) == 3: + domain, name, value = cookie + cj.setCookie(domain, name, value) + + +def parseHtmlTagAttrValue(attr_name, tag): + m = re.search(r"%s\s*=\s*([\"']?)((?<=\")[^\"]+|(?<=')[^']+|[^>\s\"'][^>\s]*)\1" % attr_name, tag, re.I) + return m.group(2) if m else None + + +def parseHtmlForm(attr_str, html, input_names=None): + for form in re.finditer(r"(?P<tag><form[^>]*%s[^>]*>)(?P<content>.*?)</?(form|body|html)[^>]*>" % attr_str, + html, re.S | re.I): + inputs = {} + action = parseHtmlTagAttrValue("action", form.group('tag')) + for inputtag in re.finditer(r'(<(input|textarea)[^>]*>)([^<]*(?=</\2)|)', form.group('content'), re.S | re.I): + name = parseHtmlTagAttrValue("name", inputtag.group(1)) + if name: + value = parseHtmlTagAttrValue("value", inputtag.group(1)) + if not value: + inputs[name] = inputtag.group(3) or '' + else: + inputs[name] = value + + if isinstance(input_names, dict): + # check input attributes + for key, val in input_names.items(): + if key in inputs: + if isinstance(val, basestring) and inputs[key] == val: + continue + elif isinstance(val, tuple) and inputs[key] in val: + continue + elif hasattr(val, "search") and re.match(val, inputs[key]): + continue + break # attibute value does not match + else: + break # attibute name does not match + else: + return action, inputs # passed attribute check + else: + # no attribute check + return action, inputs + + return {}, None # no matching form found + + +def parseFileInfo(self, url='', html=''): + info = {"name": url, "size": 0, "status": 3} + + if hasattr(self, "pyfile"): + url = self.pyfile.url + + if hasattr(self, "req") and self.req.http.code == '404': + info['status'] = 1 + else: + if not html and hasattr(self, "html"): + html = self.html + if isinstance(self.SH_BROKEN_ENCODING, (str, unicode)): + html = unicode(html, self.SH_BROKEN_ENCODING) + if hasattr(self, "html"): + self.html = html + + if hasattr(self, "OFFLINE_PATTERN") and re.search(self.OFFLINE_PATTERN, html): + info['status'] = 1 + elif hasattr(self, "FILE_OFFLINE_PATTERN") and re.search(self.FILE_OFFLINE_PATTERN, html): #@TODO: Remove in 0.4.10 + info['status'] = 1 + elif hasattr(self, "TEMP_OFFLINE_PATTERN") and re.search(self.TEMP_OFFLINE_PATTERN, html): + info['status'] = 6 + else: + online = False + try: + info.update(re.match(self.__pattern__, url).groupdict()) + except: + pass + + for pattern in ("FILE_INFO_PATTERN", "FILE_NAME_PATTERN", "FILE_SIZE_PATTERN"): + try: + info.update(re.search(getattr(self, pattern), html).groupdict()) + online = True + except AttributeError: + continue + + if online: + # File online, return name and size + info['status'] = 2 + if 'N' in info: + info['name'] = replace_patterns(info['N'], self.FILE_NAME_REPLACEMENTS) + if 'S' in info: + size = replace_patterns(info['S'] + info['U'] if 'U' in info else info['S'], + self.FILE_SIZE_REPLACEMENTS) + info['size'] = parseFileSize(size) + elif isinstance(info['size'], (str, unicode)): + if 'units' in info: + info['size'] += info['units'] + info['size'] = parseFileSize(info['size']) + + if hasattr(self, "file_info"): + self.file_info = info + + return info['name'], info['size'], info['status'], url + + +def create_getInfo(plugin): + + def getInfo(urls): + for url in urls: + cj = CookieJar(plugin.__name__) + if isinstance(plugin.SH_COOKIES, list): + set_cookies(cj, plugin.SH_COOKIES) + file_info = parseFileInfo(plugin, url, getURL(replace_patterns(url, plugin.FILE_URL_REPLACEMENTS), + decode=not plugin.SH_BROKEN_ENCODING, cookies=cj)) + yield file_info + + return getInfo + + +def timestamp(): + return int(time() * 1000) + + +class PluginParseError(Exception): + + def __init__(self, msg): + Exception.__init__(self) + self.value = 'Parse error (%s) - plugin may be out of date' % msg + + def __str__(self): + return repr(self.value) + + +class SimpleHoster(Hoster): + __name__ = "SimpleHoster" + __type__ = "hoster" + __version__ = "0.35" + + __pattern__ = None + + __description__ = """Simple hoster plugin""" + __author_name__ = ("zoidberg", "stickell") + __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") + + """ + Following patterns should be defined by each hoster: + + FILE_INFO_PATTERN: Name and Size of the file + example: FILE_INFO_PATTERN = r'(?P<N>file_name) (?P<S>file_size) (?P<U>size_unit)' + or + FILE_NAME_PATTERN: Name that will be set for the file + example: FILE_NAME_PATTERN = r'(?P<N>file_name)' + FILE_SIZE_PATTERN: Size that will be checked for the file + example: FILE_SIZE_PATTERN = r'(?P<S>file_size) (?P<U>size_unit)' + + OFFLINE_PATTERN: Checks if the file is yet available online + example: OFFLINE_PATTERN = r'File (deleted|not found)' + + TEMP_OFFLINE_PATTERN: Checks if the file is temporarily offline + example: TEMP_OFFLINE_PATTERN = r'Server maintainance' + + PREMIUM_ONLY_PATTERN: (optional) Checks if the file can be downloaded only with a premium account + example: PREMIUM_ONLY_PATTERN = r'Premium account required' + """ + + FILE_NAME_REPLACEMENTS = [("&#?\w+;", fixup)] + FILE_SIZE_REPLACEMENTS = [] + FILE_URL_REPLACEMENTS = [] + + SH_BROKEN_ENCODING = False # Set to True or encoding name if encoding in http header is not correct + SH_COOKIES = True # or False or list of tuples [(domain, name, value)] + SH_CHECK_TRAFFIC = False # True = force check traffic left for a premium account + + + def init(self): + self.file_info = {} + + def setup(self): + self.resumeDownload = self.multiDL = self.premium + if isinstance(self.SH_COOKIES, list): + set_cookies(self.req.cj, self.SH_COOKIES) + + def process(self, pyfile): + pyfile.url = replace_patterns(pyfile.url, self.FILE_URL_REPLACEMENTS) + self.req.setOption("timeout", 120) + # Due to a 0.4.9 core bug self.load would keep previous cookies even if overridden by cookies parameter. + # Workaround using getURL. Can be reverted in 0.5 as the cookies bug has been fixed. + self.html = getURL(pyfile.url, decode=not self.SH_BROKEN_ENCODING, cookies=self.SH_COOKIES) + premium_only = hasattr(self, 'PREMIUM_ONLY_PATTERN') and re.search(self.PREMIUM_ONLY_PATTERN, self.html) + if not premium_only: # Usually premium only pages doesn't show the file information + self.getFileInfo() + + if self.premium and (not self.SH_CHECK_TRAFFIC or self.checkTrafficLeft()): + self.handlePremium() + elif premium_only: + self.fail("This link require a premium account") + else: + # This line is required due to the getURL workaround. Can be removed in 0.5 + self.html = self.load(pyfile.url, decode=not self.SH_BROKEN_ENCODING, cookies=self.SH_COOKIES) + self.handleFree() + + def load(self, url, get={}, post={}, ref=True, cookies=True, just_header=False, decode=False): + if type(url) == unicode: + url = url.encode('utf8') + return Hoster.load(self, url=url, get=get, post=post, ref=ref, cookies=cookies, + just_header=just_header, decode=decode) + + def getFileInfo(self): + self.logDebug("URL: %s" % self.pyfile.url) + + name, size, status = parseFileInfo(self)[:3] + + if status == 1: + self.offline() + elif status == 6: + self.tempOffline() + elif status != 2: + self.logDebug(self.file_info) + self.parseError('File info') + + if name: + self.pyfile.name = name + else: + self.pyfile.name = html_unescape(urlparse(self.pyfile.url).path.split("/")[-1]) + + if size: + self.pyfile.size = size + else: + self.logError("File size not parsed") + + self.logDebug("FILE NAME: %s FILE SIZE: %s" % (self.pyfile.name, self.pyfile.size)) + return self.file_info + + def handleFree(self): + self.fail("Free download not implemented") + + def handlePremium(self): + self.fail("Premium download not implemented") + + def parseError(self, msg): + raise PluginParseError(msg) + + def longWait(self, wait_time=None, max_tries=3): + if wait_time and isinstance(wait_time, (int, long, float)): + time_str = "%dh %dm" % divmod(wait_time / 60, 60) + else: + wait_time = 900 + time_str = "(unknown time)" + max_tries = 100 + + self.logInfo("Download limit reached, reconnect or wait %s" % time_str) + + self.setWait(wait_time, True) + self.wait() + self.retry(max_tries=max_tries, reason="Download limit reached") + + def parseHtmlForm(self, attr_str='', input_names=None): + return parseHtmlForm(attr_str, self.html, input_names) + + def checkTrafficLeft(self): + traffic = self.account.getAccountInfo(self.user, True)['trafficleft'] + if traffic == -1: + return True + size = self.pyfile.size / 1024 + self.logInfo("Filesize: %i KiB, Traffic left for user %s: %i KiB" % (size, self.user, traffic)) + return size <= traffic + + # TODO: Remove in 0.5 + def wait(self, seconds=False, reconnect=False): + if seconds: + self.setWait(seconds, reconnect) + super(SimpleHoster, self).wait() diff --git a/pyload/plugins/internal/UnRar.py b/pyload/plugins/internal/UnRar.py new file mode 100644 index 000000000..ed8478a3a --- /dev/null +++ b/pyload/plugins/internal/UnRar.py @@ -0,0 +1,212 @@ +# -*- coding: utf-8 -*- + +import os +import re + +from glob import glob +from os.path import join +from string import digits +from subprocess import Popen, PIPE + +from pyload.plugins.internal.AbstractExtractor import AbtractExtractor, WrongPassword, ArchiveError, CRCError +from pyload.utils import safe_join, decode + + +class UnRar(AbtractExtractor): + __name__ = "UnRar" + __version__ = "0.16" + + __description__ = """Rar extractor plugin""" + __author_name__ = "RaNaN" + __author_mail__ = "RaNaN@pyload.org" + + CMD = "unrar" + + # there are some more uncovered rar formats + re_version = re.compile(r"(UNRAR 5[\.\d]+(.*?)freeware)") + re_splitfile = re.compile(r"(.*)\.part(\d+)\.rar$", re.I) + re_partfiles = re.compile(r".*\.(rar|r[0-9]+)", re.I) + re_filelist = re.compile(r"(.+)\s+(\d+)\s+(\d+)\s+") + re_filelist5 = re.compile(r"(.+)\s+(\d+)\s+\d\d-\d\d-\d\d\s+\d\d:\d\d\s+(.+)") + re_wrongpwd = re.compile("(Corrupt file or wrong password|password incorrect)", re.I) + + + @staticmethod + def checkDeps(): + if os.name == "nt": + UnRar.CMD = join(pypath, "UnRAR.exe") + p = Popen([UnRar.CMD], stdout=PIPE, stderr=PIPE) + p.communicate() + else: + try: + p = Popen([UnRar.CMD], stdout=PIPE, stderr=PIPE) + p.communicate() + except OSError: + + # fallback to rar + UnRar.CMD = "rar" + p = Popen([UnRar.CMD], stdout=PIPE, stderr=PIPE) + p.communicate() + + return True + + @staticmethod + def getTargets(files_ids): + result = [] + + for file, id in files_ids: + if not file.endswith(".rar"): + continue + + match = UnRar.re_splitfile.findall(file) + if match: + # only add first parts + if int(match[0][1]) == 1: + result.append((file, id)) + else: + result.append((file, id)) + + return result + + def init(self): + self.passwordProtected = False + self.headerProtected = False #: list files will not work without password + self.smallestFile = None #: small file to test passwords + self.password = "" #: save the correct password + + def checkArchive(self): + p = self.call_unrar("l", "-v", self.file) + out, err = p.communicate() + if self.re_wrongpwd.search(err): + self.passwordProtected = True + self.headerProtected = True + return True + + # output only used to check if passworded files are present + if self.re_version.search(out): + for attr, size, name in self.re_filelist5.findall(out): + if attr.startswith("*"): + self.passwordProtected = True + return True + else: + for name, size, packed in self.re_filelist.findall(out): + if name.startswith("*"): + self.passwordProtected = True + return True + + self.listContent() + if not self.files: + raise ArchiveError("Empty Archive") + + return False + + def checkPassword(self, password): + # at this point we can only verify header protected files + if self.headerProtected: + p = self.call_unrar("l", "-v", self.file, password=password) + out, err = p.communicate() + if self.re_wrongpwd.search(err): + return False + + return True + + def extract(self, progress, password=None): + command = "x" if self.fullpath else "e" + + p = self.call_unrar(command, self.file, self.out, password=password) + renice(p.pid, self.renice) + + progress(0) + progressstring = "" + while True: + c = p.stdout.read(1) + # quit loop on eof + if not c: + break + # reading a percentage sign -> set progress and restart + if c == '%': + progress(int(progressstring)) + progressstring = "" + # not reading a digit -> therefore restart + elif c not in digits: + progressstring = "" + # add digit to progressstring + else: + progressstring = progressstring + c + progress(100) + + # retrieve stderr + err = p.stderr.read() + + if "CRC failed" in err and not password and not self.passwordProtected: + raise CRCError + elif "CRC failed" in err: + raise WrongPassword + if err.strip(): #: raise error if anything is on stderr + raise ArchiveError(err.strip()) + if p.returncode: + raise ArchiveError("Process terminated") + + if not self.files: + self.password = password + self.listContent() + + def getDeleteFiles(self): + if ".part" in self.file: + return glob(re.sub("(?<=\.part)([01]+)", "*", self.file, re.IGNORECASE)) + # get files which matches .r* and filter unsuited files out + parts = glob(re.sub(r"(?<=\.r)ar$", "*", self.file, re.IGNORECASE)) + return filter(lambda x: self.re_partfiles.match(x), parts) + + def listContent(self): + command = "vb" if self.fullpath else "lb" + p = self.call_unrar(command, "-v", self.file, password=self.password) + out, err = p.communicate() + + if "Cannot open" in err: + raise ArchiveError("Cannot open file") + + if err.strip(): #: only log error at this point + self.m.logError(err.strip()) + + result = set() + + for f in decode(out).splitlines(): + f = f.strip() + result.add(safe_join(self.out, f)) + + self.files = result + + def call_unrar(self, command, *xargs, **kwargs): + args = [] + # overwrite flag + args.append("-o+") if self.overwrite else args.append("-o-") + + if self.excludefiles: + for word in self.excludefiles.split(';'): + args.append("-x%s" % word) + + # assume yes on all queries + args.append("-y") + + # set a password + if "password" in kwargs and kwargs['password']: + args.append("-p%s" % kwargs['password']) + else: + args.append("-p-") + + # NOTE: return codes are not reliable, some kind of threading, cleanup whatever issue + call = [self.CMD, command] + args + list(xargs) + self.m.logDebug(" ".join(call)) + + p = Popen(call, stdout=PIPE, stderr=PIPE) + + return p + + +def renice(pid, value): + if os.name != "nt" and value: + try: + Popen(["renice", str(value), str(pid)], stdout=PIPE, stderr=PIPE, bufsize=-1) + except: + print "Renice failed" diff --git a/pyload/plugins/internal/UnZip.py b/pyload/plugins/internal/UnZip.py new file mode 100644 index 000000000..65a5a82bb --- /dev/null +++ b/pyload/plugins/internal/UnZip.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- + +import sys +import zipfile + +from pyload.plugins.internal.AbstractExtractor import AbtractExtractor + + +class UnZip(AbtractExtractor): + __name__ = "UnZip" + __version__ = "0.1" + + __description__ = """Zip extractor plugin""" + __author_name__ = "RaNaN" + __author_mail__ = "RaNaN@pyload.org" + + + @staticmethod + def checkDeps(): + return sys.version_info[:2] >= (2, 6) + + @staticmethod + def getTargets(files_ids): + result = [] + + for file, id in files_ids: + if file.endswith(".zip"): + result.append((file, id)) + + return result + + def extract(self, progress, password=None): + z = zipfile.ZipFile(self.file) + self.files = z.namelist() + z.extractall(self.out) + + def getDeleteFiles(self): + return [self.file] diff --git a/pyload/plugins/internal/XFSPAccount.py b/pyload/plugins/internal/XFSPAccount.py new file mode 100644 index 000000000..aec9b7dbc --- /dev/null +++ b/pyload/plugins/internal/XFSPAccount.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- + +import re + +from time import mktime, strptime + +from pyload.plugins.Account import Account +from pyload.plugins.internal.SimpleHoster import parseHtmlForm +from pyload.utils import parseFileSize + + +class XFSPAccount(Account): + __name__ = "XFSPAccount" + __type__ = "account" + __version__ = "0.06" + + __description__ = """XFileSharingPro base account plugin""" + __author_name__ = "zoidberg" + __author_mail__ = "zoidberg@mujmail.cz" + + MAIN_PAGE = None + + VALID_UNTIL_PATTERN = r'>Premium.[Aa]ccount expire:</TD><TD><b>([^<]+)</b>' + TRAFFIC_LEFT_PATTERN = r'>Traffic available today:</TD><TD><b>([^<]+)</b>' + LOGIN_FAIL_PATTERN = r'Incorrect Login or Password|>Error<' + PREMIUM_PATTERN = r'>Renew premium<' + + + def loadAccountInfo(self, user, req): + html = req.load(self.MAIN_PAGE + "?op=my_account", decode=True) + + validuntil = trafficleft = None + premium = True if re.search(self.PREMIUM_PATTERN, html) else False + + m = re.search(self.VALID_UNTIL_PATTERN, html) + if m: + premium = True + trafficleft = -1 + try: + self.logDebug(m.group(1)) + validuntil = mktime(strptime(m.group(1), "%d %B %Y")) + except Exception, e: + self.logError(e) + else: + m = re.search(self.TRAFFIC_LEFT_PATTERN, html) + if m: + trafficleft = m.group(1) + if "Unlimited" in trafficleft: + premium = True + else: + trafficleft = parseFileSize(trafficleft) / 1024 + + return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium} + + def login(self, user, data, req): + html = req.load('%slogin.html' % self.MAIN_PAGE, decode=True) + + action, inputs = parseHtmlForm('name="FL"', html) + if not inputs: + inputs = {"op": "login", + "redirect": self.MAIN_PAGE} + + inputs.update({"login": user, + "password": data['password']}) + + html = req.load(self.MAIN_PAGE, post=inputs, decode=True) + + if re.search(self.LOGIN_FAIL_PATTERN, html): + self.wrongPassword() diff --git a/module/plugins/internal/__init__.py b/pyload/plugins/internal/__init__.py index e69de29bb..e69de29bb 100644 --- a/module/plugins/internal/__init__.py +++ b/pyload/plugins/internal/__init__.py diff --git a/pyload/plugins/ocr/GigasizeCom.py b/pyload/plugins/ocr/GigasizeCom.py new file mode 100644 index 000000000..b139c304e --- /dev/null +++ b/pyload/plugins/ocr/GigasizeCom.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.OCR import OCR + + +class GigasizeCom(OCR): + __name__ = "GigasizeCom" + __type__ = "ocr" + __version__ = "0.1" + + __description__ = """Gigasize.com ocr plugin""" + __author_name__ = "pyLoad Team" + __author_mail__ = "admin@pyload.org" + + + def __init__(self): + OCR.__init__(self) + + def get_captcha(self, image): + self.load_image(image) + self.threshold(2.8) + self.run_tesser(True, False, False, True) + return self.result_captcha diff --git a/pyload/plugins/ocr/LinksaveIn.py b/pyload/plugins/ocr/LinksaveIn.py new file mode 100644 index 000000000..1eb8bd796 --- /dev/null +++ b/pyload/plugins/ocr/LinksaveIn.py @@ -0,0 +1,149 @@ +# -*- coding: utf-8 -*- + +from glob import glob +from PIL import Image +from os import sep +from os.path import abspath, dirname + +from pyload.plugins.OCR import OCR + + +class LinksaveIn(OCR): + __name__ = "LinksaveIn" + __type__ = "ocr" + __version__ = "0.1" + + __description__ = """Linksave.in ocr plugin""" + __author_name__ = "pyLoad Team" + __author_mail__ = "admin@pyload.org" + + + def __init__(self): + OCR.__init__(self) + self.data_dir = dirname(abspath(__file__)) + sep + "LinksaveIn" + sep + + def load_image(self, image): + im = Image.open(image) + frame_nr = 0 + + lut = im.resize((256, 1)) + lut.putdata(range(256)) + lut = list(lut.convert("RGB").getdata()) + + new = Image.new("RGB", im.size) + npix = new.load() + while True: + try: + im.seek(frame_nr) + except EOFError: + break + frame = im.copy() + pix = frame.load() + for x in xrange(frame.size[0]): + for y in xrange(frame.size[1]): + if lut[pix[x, y]] != (0,0,0): + npix[x, y] = lut[pix[x, y]] + frame_nr += 1 + new.save(self.data_dir+"unblacked.png") + self.image = new.copy() + self.pixels = self.image.load() + self.result_captcha = '' + + def get_bg(self): + stat = {} + cstat = {} + img = self.image.convert("P") + for bgpath in glob(self.data_dir+"bg/*.gif"): + stat[bgpath] = 0 + bg = Image.open(bgpath) + + bglut = bg.resize((256, 1)) + bglut.putdata(range(256)) + bglut = list(bglut.convert("RGB").getdata()) + + lut = img.resize((256, 1)) + lut.putdata(range(256)) + lut = list(lut.convert("RGB").getdata()) + + bgpix = bg.load() + pix = img.load() + for x in xrange(bg.size[0]): + for y in xrange(bg.size[1]): + rgb_bg = bglut[bgpix[x, y]] + rgb_c = lut[pix[x, y]] + try: + cstat[rgb_c] += 1 + except: + cstat[rgb_c] = 1 + if rgb_bg == rgb_c: + stat[bgpath] += 1 + max_p = 0 + bg = "" + for bgpath, value in stat.items(): + if max_p < value: + bg = bgpath + max_p = value + return bg + + def substract_bg(self, bgpath): + bg = Image.open(bgpath) + img = self.image.convert("P") + + bglut = bg.resize((256, 1)) + bglut.putdata(range(256)) + bglut = list(bglut.convert("RGB").getdata()) + + lut = img.resize((256, 1)) + lut.putdata(range(256)) + lut = list(lut.convert("RGB").getdata()) + + bgpix = bg.load() + pix = img.load() + orgpix = self.image.load() + for x in xrange(bg.size[0]): + for y in xrange(bg.size[1]): + rgb_bg = bglut[bgpix[x, y]] + rgb_c = lut[pix[x, y]] + if rgb_c == rgb_bg: + orgpix[x, y] = (255,255,255) + + def eval_black_white(self): + new = Image.new("RGB", (140, 75)) + pix = new.load() + orgpix = self.image.load() + thresh = 4 + for x in xrange(new.size[0]): + for y in xrange(new.size[1]): + rgb = orgpix[x, y] + r, g, b = rgb + pix[x, y] = (255,255,255) + if r > max(b, g)+thresh: + pix[x, y] = (0,0,0) + if g < min(r, b): + pix[x, y] = (0,0,0) + if g > max(r, b)+thresh: + pix[x, y] = (0,0,0) + if b > max(r, g)+thresh: + pix[x, y] = (0,0,0) + self.image = new + self.pixels = self.image.load() + + def get_captcha(self, image): + self.load_image(image) + bg = self.get_bg() + self.substract_bg(bg) + self.eval_black_white() + self.to_greyscale() + self.image.save(self.data_dir+"cleaned_pass1.png") + self.clean(4) + self.clean(4) + self.image.save(self.data_dir+"cleaned_pass2.png") + letters = self.split_captcha_letters() + final = "" + for n, letter in enumerate(letters): + self.image = letter + self.image.save(ocr.data_dir+"letter%d.png" % n) + self.run_tesser(True, True, False, False) + final += self.result_captcha + + return final diff --git a/pyload/plugins/ocr/NetloadIn.py b/pyload/plugins/ocr/NetloadIn.py new file mode 100644 index 000000000..d31c30989 --- /dev/null +++ b/pyload/plugins/ocr/NetloadIn.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.OCR import OCR + +class NetloadIn(OCR): + __name__ = "NetloadIn" + __type__ = "ocr" + __version__ = "0.1" + + __description__ = """Netload.in ocr plugin""" + __author_name__ = "pyLoad Team" + __author_mail__ = "admin@pyload.org" + + + def __init__(self): + OCR.__init__(self) + + def get_captcha(self, image): + self.load_image(image) + self.to_greyscale() + self.clean(3) + self.clean(3) + self.run_tesser(True, True, False, False) + + self.result_captcha = self.result_captcha.replace(" ", "")[:4] # cut to 4 numbers + + return self.result_captcha diff --git a/pyload/plugins/ocr/ShareonlineBiz.py b/pyload/plugins/ocr/ShareonlineBiz.py new file mode 100644 index 000000000..3cee0348e --- /dev/null +++ b/pyload/plugins/ocr/ShareonlineBiz.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.OCR import OCR + + +class ShareonlineBiz(OCR): + __name__ = "ShareonlineBiz" + __type__ = "ocr" + __version__ = "0.1" + + __description__ = """Shareonline.biz ocr plugin""" + __author_name__ = "RaNaN" + __author_mail__ = "RaNaN@pyload.org" + + + def __init__(self): + OCR.__init__(self) + + def get_captcha(self, image): + self.load_image(image) + self.to_greyscale() + self.image = self.image.resize((160, 50)) + self.pixels = self.image.load() + self.threshold(1.85) + #self.eval_black_white(240) + #self.derotate_by_average() + + letters = self.split_captcha_letters() + + final = "" + for letter in letters: + self.image = letter + self.run_tesser(True, True, False, False) + final += self.result_captcha + + return final + + #tesseract at 60% diff --git a/module/plugins/ocr/__init__.py b/pyload/plugins/ocr/__init__.py index e69de29bb..e69de29bb 100644 --- a/module/plugins/ocr/__init__.py +++ b/pyload/plugins/ocr/__init__.py diff --git a/module/remote/ClickAndLoadBackend.py b/pyload/remote/ClickAndLoadBackend.py index 82167f6e3..82167f6e3 100644 --- a/module/remote/ClickAndLoadBackend.py +++ b/pyload/remote/ClickAndLoadBackend.py diff --git a/pyload/remote/RemoteManager.py b/pyload/remote/RemoteManager.py new file mode 100644 index 000000000..e53e317e3 --- /dev/null +++ b/pyload/remote/RemoteManager.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: mkaay +""" + +from threading import Thread +from traceback import print_exc + +class BackendBase(Thread): + def __init__(self, manager): + Thread.__init__(self) + self.m = manager + self.core = manager.core + self.enabled = True + self.running = False + + def run(self): + self.running = True + try: + self.serve() + except Exception, e: + self.core.log.error(_("Remote backend error: %s") % e) + if self.core.debug: + print_exc() + finally: + self.running = False + + def setup(self, host, port): + pass + + def checkDeps(self): + return True + + def serve(self): + pass + + def shutdown(self): + pass + + def stop(self): + self.enabled = False# set flag and call shutdowm message, so thread can react + self.shutdown() + + +class RemoteManager: + available = [] + + def __init__(self, core): + self.core = core + self.backends = [] + + if self.core.remote: + self.available.append("ThriftBackend") +# else: +# self.available.append("SocketBackend") + + + def startBackends(self): + host = self.core.config["remote"]["listenaddr"] + port = self.core.config["remote"]["port"] + + for b in self.available: + klass = getattr(__import__("pyload.remote.%s" % b, globals(), locals(), [b], -1), b) + backend = klass(self) + if not backend.checkDeps(): + continue + try: + backend.setup(host, port) + self.core.log.info(_("Starting %(name)s: %(addr)s:%(port)s") % {"name": b, "addr": host, "port": port}) + except Exception, e: + self.core.log.error(_("Failed loading backend %(name)s | %(error)s") % {"name": b, "error": str(e)}) + if self.core.debug: + print_exc() + else: + backend.start() + self.backends.append(backend) + + port += 1 diff --git a/module/remote/SocketBackend.py b/pyload/remote/SocketBackend.py index 1a157cf1d..1a157cf1d 100644 --- a/module/remote/SocketBackend.py +++ b/pyload/remote/SocketBackend.py diff --git a/pyload/remote/ThriftBackend.py b/pyload/remote/ThriftBackend.py new file mode 100644 index 000000000..2c65578be --- /dev/null +++ b/pyload/remote/ThriftBackend.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: mkaay, RaNaN +""" +from os.path import exists + +from pyload.remote.RemoteManager import BackendBase + +from thriftbackend.Processor import Processor +from thriftbackend.Protocol import ProtocolFactory +from thriftbackend.Socket import ServerSocket +from thriftbackend.Transport import TransportFactory +#from thriftbackend.Transport import TransportFactoryCompressed + +from thrift.server import TServer + +class ThriftBackend(BackendBase): + def setup(self, host, port): + processor = Processor(self.core.api) + + key = None + cert = None + + if self.core.config['ssl']['activated']: + if exists(self.core.config['ssl']['cert']) and exists(self.core.config['ssl']['key']): + self.core.log.info(_("Using SSL ThriftBackend")) + key = self.core.config['ssl']['key'] + cert = self.core.config['ssl']['cert'] + + transport = ServerSocket(port, host, key, cert) + + +# tfactory = TransportFactoryCompressed() + tfactory = TransportFactory() + pfactory = ProtocolFactory() + + self.server = TServer.TThreadedServer(processor, transport, tfactory, pfactory) + #self.server = TNonblockingServer.TNonblockingServer(processor, transport, tfactory, pfactory) + + #server = TServer.TThreadPoolServer(processor, transport, tfactory, pfactory) + + def serve(self): + self.server.serve() diff --git a/module/remote/__init__.py b/pyload/remote/__init__.py index 60dfa77c7..60dfa77c7 100644 --- a/module/remote/__init__.py +++ b/pyload/remote/__init__.py diff --git a/module/remote/socketbackend/__init__.py b/pyload/remote/socketbackend/__init__.py index e69de29bb..e69de29bb 100644 --- a/module/remote/socketbackend/__init__.py +++ b/pyload/remote/socketbackend/__init__.py diff --git a/module/remote/socketbackend/create_ttypes.py b/pyload/remote/socketbackend/create_ttypes.py index 64398c3e7..64398c3e7 100644 --- a/module/remote/socketbackend/create_ttypes.py +++ b/pyload/remote/socketbackend/create_ttypes.py diff --git a/module/remote/socketbackend/ttypes.py b/pyload/remote/socketbackend/ttypes.py index 3fd02fac8..3fd02fac8 100644 --- a/module/remote/socketbackend/ttypes.py +++ b/pyload/remote/socketbackend/ttypes.py diff --git a/module/remote/thriftbackend/Processor.py b/pyload/remote/thriftbackend/Processor.py index a8b87c82c..a8b87c82c 100644 --- a/module/remote/thriftbackend/Processor.py +++ b/pyload/remote/thriftbackend/Processor.py diff --git a/module/remote/thriftbackend/Protocol.py b/pyload/remote/thriftbackend/Protocol.py index a5822df18..a5822df18 100644 --- a/module/remote/thriftbackend/Protocol.py +++ b/pyload/remote/thriftbackend/Protocol.py diff --git a/module/remote/thriftbackend/Socket.py b/pyload/remote/thriftbackend/Socket.py index b9fa7edbf..b9fa7edbf 100644 --- a/module/remote/thriftbackend/Socket.py +++ b/pyload/remote/thriftbackend/Socket.py diff --git a/module/remote/thriftbackend/ThriftClient.py b/pyload/remote/thriftbackend/ThriftClient.py index 913719ed9..913719ed9 100644 --- a/module/remote/thriftbackend/ThriftClient.py +++ b/pyload/remote/thriftbackend/ThriftClient.py diff --git a/module/remote/thriftbackend/ThriftTest.py b/pyload/remote/thriftbackend/ThriftTest.py index aec20fa33..aec20fa33 100644 --- a/module/remote/thriftbackend/ThriftTest.py +++ b/pyload/remote/thriftbackend/ThriftTest.py diff --git a/module/remote/thriftbackend/Transport.py b/pyload/remote/thriftbackend/Transport.py index b5b6c8104..b5b6c8104 100644 --- a/module/remote/thriftbackend/Transport.py +++ b/pyload/remote/thriftbackend/Transport.py diff --git a/module/remote/thriftbackend/__init__.py b/pyload/remote/thriftbackend/__init__.py index e69de29bb..e69de29bb 100644 --- a/module/remote/thriftbackend/__init__.py +++ b/pyload/remote/thriftbackend/__init__.py diff --git a/module/remote/thriftbackend/pyload.thrift b/pyload/remote/thriftbackend/pyload.thrift index 3aef7af00..3aef7af00 100644 --- a/module/remote/thriftbackend/pyload.thrift +++ b/pyload/remote/thriftbackend/pyload.thrift diff --git a/module/remote/thriftbackend/thriftgen/__init__.py b/pyload/remote/thriftbackend/thriftgen/__init__.py index e69de29bb..e69de29bb 100644 --- a/module/remote/thriftbackend/thriftgen/__init__.py +++ b/pyload/remote/thriftbackend/thriftgen/__init__.py diff --git a/module/remote/thriftbackend/thriftgen/pyload/Pyload-remote b/pyload/remote/thriftbackend/thriftgen/pyload/Pyload-remote index ddc1dd451..ddc1dd451 100755..100644 --- a/module/remote/thriftbackend/thriftgen/pyload/Pyload-remote +++ b/pyload/remote/thriftbackend/thriftgen/pyload/Pyload-remote diff --git a/module/remote/thriftbackend/thriftgen/pyload/Pyload.py b/pyload/remote/thriftbackend/thriftgen/pyload/Pyload.py index f0b356375..f0b356375 100644 --- a/module/remote/thriftbackend/thriftgen/pyload/Pyload.py +++ b/pyload/remote/thriftbackend/thriftgen/pyload/Pyload.py diff --git a/module/remote/thriftbackend/thriftgen/pyload/__init__.py b/pyload/remote/thriftbackend/thriftgen/pyload/__init__.py index 9a0fb88bf..9a0fb88bf 100644 --- a/module/remote/thriftbackend/thriftgen/pyload/__init__.py +++ b/pyload/remote/thriftbackend/thriftgen/pyload/__init__.py diff --git a/module/remote/thriftbackend/thriftgen/pyload/constants.py b/pyload/remote/thriftbackend/thriftgen/pyload/constants.py index 3bdd64cc1..3bdd64cc1 100644 --- a/module/remote/thriftbackend/thriftgen/pyload/constants.py +++ b/pyload/remote/thriftbackend/thriftgen/pyload/constants.py diff --git a/module/remote/thriftbackend/thriftgen/pyload/ttypes.py b/pyload/remote/thriftbackend/thriftgen/pyload/ttypes.py index c2c50924e..c2c50924e 100644 --- a/module/remote/thriftbackend/thriftgen/pyload/ttypes.py +++ b/pyload/remote/thriftbackend/thriftgen/pyload/ttypes.py diff --git a/pyload/setup.py b/pyload/setup.py new file mode 100644 index 000000000..6a98cc6f3 --- /dev/null +++ b/pyload/setup.py @@ -0,0 +1,538 @@ +# -*- coding: utf-8 -*- + +import os +import sys + +import pyload.common.pylgettext as gettext + +from getpass import getpass +from os import makedirs +from os.path import abspath, dirname, exists, join +from subprocess import PIPE, call + +from pyload.utils import get_console_encoding, versiontuple + + +class Setup: + """ pyLoads initial setup configuration assistant """ + + def __init__(self, path, config): + self.path = path + self.config = config + self.stdin_encoding = get_console_encoding(sys.stdin.encoding) + + + def start(self): + langs = self.config.getMetaData("general", "language")["type"].split(";") + lang = self.ask(u"Choose setup language", "en", langs) + gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None]) + translation = gettext.translation("setup", join(self.path, "locale"), languages=[lang, "en"], fallback=True) + translation.install(True) + + #Input shorthand for yes + self.yes = _("y") + #Input shorthand for no + self.no = _("n") + + # print + # print _("Would you like to configure pyLoad via Webinterface?") + # print _("You need a Browser and a connection to this PC for it.") + # viaweb = self.ask(_("Start initial webinterface for configuration?"), "y", bool=True) + # if viaweb: + # try: + # from pyload.threads import ServerThread + # ServerThread.setup = self + # import pyload.webui as webinterface + # webinterface.run_simple() + # return False + # except Exception, e: + # print "Setup failed with this error: ", e + # print "Falling back to commandline setup." + + print + print + print _("Welcome to the pyLoad Configuration Assistant.") + print _("It will check your system and make a basic setup in order to run pyLoad.") + print + print _("The value in brackets [] always is the default value,") + print _("in case you don't want to change it or you are unsure what to choose, just hit enter.") + print _( + "Don't forget: You can always rerun this assistant with --setup or -s parameter, when you start pyload.py .") + print _("If you have any problems with this assistant hit STRG-C,") + print _("to abort and don't let him start with pyload.py automatically anymore.") + print + print + raw_input(_("When you are ready for system check, hit enter.")) + print + print + + basic, ssl, captcha, web, js = self.system_check() + print + print + + if not basic: + print _("You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad.") + print _("Please correct this and re-run pyLoad.") + print + print _("Setup will now close.") + print + print + raw_input(_("Press Enter to exit.")) + return False + + raw_input(_("System check finished, hit enter to see your status report.")) + print + print + print _("## Status ##") + print + + avail = [] + if self.check_module("Crypto"): + avail.append(_("container decrypting")) + if ssl: + avail.append(_("ssl connection")) + if captcha: + avail.append(_("automatic captcha decryption")) + if web: + avail.append(_("webinterface")) + if js: + avail.append(_("extended Click'N'Load")) + + string = "" + + for av in avail: + string += ", " + av + + print _("AVAILABLE FEATURES:") + string[1:] + print + + if len(avail) < 5: + print _("MISSING FEATURES: ") + + if not self.check_module("Crypto"): + print _("- no py-crypto available") + print _("You need this if you want to decrypt container files.") + print + + if not ssl: + print _("- no SSL available") + print _("This is needed if you want to establish a secure connection to core or webinterface.") + print _("If you only want to access locally to pyLoad ssl is not usefull.") + print + + if not captcha: + print _("- no Captcha Recognition available") + print _("Only needed for some hosters and as freeuser.") + print + + if not js: + print _("- no JavaScript engine found") + print _("You will need this for some Click'N'Load links. Install Spidermonkey, ossp-js, pyv8 or rhino") + print + + print + print _("You can abort the setup now and fix some dependicies if you want.") + + print + con = self.ask(_("Continue with setup?"), self.yes, bool=True) + + if not con: + return False + + print + print + print _("CURRENT CONFIG PATH: %s") % abspath("") + print + print _("NOTE: If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it.") + path = self.ask(_("Do you want to change the config path?"), self.no, bool=True) + if path: + print + self.conf_path() + #calls exit when changed + + print + print _("Do you want to configure login data and basic settings?") + print _("This is recommend for first run.") + con = self.ask(_("Make basic setup?"), self.yes, bool=True) + + if con: + print + print + self.conf_basic() + + if ssl: + print + print _("Do you want to configure ssl?") + ssl = self.ask(_("Configure ssl?"), self.no, bool=True) + if ssl: + print + print + self.conf_ssl() + + if web: + print + print _("Do you want to configure webinterface?") + web = self.ask(_("Configure webinterface?"), self.yes, bool=True) + if web: + print + print + self.conf_web() + + print + print + print _("Setup finished successfully!") + print + print + raw_input(_("Hit enter to exit and restart pyLoad.")) + return True + + + def system_check(self): + """ make a systemcheck and return the results""" + + print _("## System Information ##") + print + print _("Platform: %s") % sys.platform + print _("Operating System: %s") % os.name + print _("Python: %s") % sys.version.replace("\n", "") + print + print + + print _("## System Check ##") + print + + if sys.version_info[:2] > (2, 7): + print _("Your python version is to new, Please use Python 2.6/2.7") + python = False + elif sys.version_info[:2] < (2, 5): + print _("Your python version is to old, Please use at least Python 2.5") + python = False + else: + print _("Python Version: OK") + python = True + + curl = self.check_module("pycurl") + self.print_dep("pycurl", curl) + + sqlite = self.check_module("sqlite3") + self.print_dep("sqlite3", sqlite) + + basic = python and curl and sqlite + + print + + crypto = self.check_module("Crypto") + self.print_dep("pycrypto", crypto) + + ssl = self.check_module("OpenSSL") + self.print_dep("py-OpenSSL", ssl) + + print + + pil = self.check_module("PIL.Image") + self.print_dep("PIL/Pillow", pil) + + if os.name == "nt": + tesser = self.check_prog([join(pypath, "tesseract", "tesseract.exe"), "-v"]) + else: + tesser = self.check_prog(["tesseract", "-v"]) + + self.print_dep("tesseract", tesser) + + captcha = pil and tesser + + print + + try: + import jinja2 + + v = jinja2.__version__ + if v and versiontuple(v) < (2, 5, 0): + jinja = False + else: + jinja = True + except: + jinja = False + + jinja = self.print_dep("jinja2", jinja) + + beaker = self.check_module("beaker") + self.print_dep("beaker", beaker) + + bjoern = self.check_module("bjoern") + self.print_dep("bjoern", bjoern) + + web = sqlite and beaker + + from pyload.common import JsEngine + js = True if JsEngine.ENGINE else False + self.print_dep(_("JS engine"), js) + + if not jinja: + print + print + print _("WARNING: Your installed jinja2 version %s seems too old.") % jinja2.__version__ + print _("You can safely continue but if the webinterface is not working,") + print _("please upgrade or uninstall it, because pyLoad self-includes jinja2 libary.") + + return basic, ssl, captcha, web, js + + + def conf_basic(self): + print _("## Basic Setup ##") + + print + print _("The following logindata is valid for CLI and webinterface.") + + from pyload.database import DatabaseBackend + + db = DatabaseBackend(None) + db.setup() + print _("NOTE: Consider a password of 10 or more symbols if you expect to access from outside your local network (ex. internet).") + print + username = self.ask(_("Username"), "User") + password = self.ask("", "", password=True) + db.addUser(username, password) + db.shutdown() + + print + print _("External clients (GUI, CLI or other) need remote access to work over the network.") + print _("However, if you only want to use the webinterface you may disable it to save ram.") + self.config["remote"]["activated"] = self.ask(_("Enable remote access"), self.no, bool=True) + + print + langs = self.config.getMetaData("general", "language") + self.config["general"]["language"] = self.ask(_("Choose pyLoad language"), "en", langs["type"].split(";")) + + print + self.config["general"]["download_folder"] = self.ask(_("Download folder"), "Downloads") + print + self.config["download"]["max_downloads"] = self.ask(_("Max parallel downloads"), "3") + print + reconnect = self.ask(_("Use Reconnect?"), self.no, bool=True) + self.config["reconnect"]["activated"] = reconnect + if reconnect: + self.config["reconnect"]["method"] = self.ask(_("Reconnect script location"), "./reconnect.sh") + + + def conf_web(self): + print _("## Webinterface Setup ##") + + print + self.config["webinterface"]["activated"] = self.ask(_("Activate webinterface?"), self.yes, bool=True) + print + print _("Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally.") + self.config["webinterface"]["host"] = self.ask(_("Address"), "0.0.0.0") + self.config["webinterface"]["port"] = self.ask(_("Port"), "8000") + print + print _("pyLoad offers several server backends, now following a short explanation.") + print "- builtin:", _("Default server; best choice if you plan to use pyLoad just for you.") + print "- threaded:", _("Support SSL connection and can serve simultaneously more client flawlessly.") + print "- fastcgi:", _( + "Can be used by apache, lighttpd, etc.; needs to be properly configured before.") + if os.name != "nt": + print "- lightweight:", _("Very fast alternative to builtin; requires libev and bjoern packages.") + + print + print _("NOTE: In some rare cases the builtin server is not working, if you notice problems with the webinterface") + print _("come back here and change the builtin server to the threaded one here.") + + if os.name == "nt": + servers = ["builtin", "threaded", "fastcgi"] + default = "threaded" + else: + servers = ["builtin", "threaded", "fastcgi", "lightweight"] + default = "lightweight" if self.check_module("bjoern") else "builtin" + + self.config["webinterface"]["server"] = self.ask(_("Server"), default, servers) + + + def conf_ssl(self): + print _("## SSL Setup ##") + print + print _("Execute these commands from pyLoad config folder to make ssl certificates:") + print + print "openssl genrsa -out ssl.key 1024" + print "openssl req -new -key ssl.key -out ssl.csr" + print "openssl req -days 36500 -x509 -key ssl.key -in ssl.csr > ssl.crt " + print + print _("If you're done and everything went fine, you can activate ssl now.") + + self.config["ssl"]["activated"] = self.ask(_("Activate SSL?"), self.yes, bool=True) + + + def set_user(self): + gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None]) + translation = gettext.translation("setup", join(self.path, "locale"), + languages=[self.config["general"]["language"], "en"], fallback=True) + translation.install(True) + + from pyload.database import DatabaseBackend + + db = DatabaseBackend(None) + db.setup() + + noaction = True + try: + while True: + print _("Select action") + print _("1 - Create/Edit user") + print _("2 - List users") + print _("3 - Remove user") + print _("4 - Quit") + action = raw_input("[1]/2/3/4: ") + if not action in ("1", "2", "3", "4"): + continue + elif action == "1": + print + username = self.ask(_("Username"), "User") + password = self.ask("", "", password=True) + db.addUser(username, password) + noaction = False + elif action == "2": + print + print _("Users") + print "-----" + users = db.listUsers() + noaction = False + for user in users: + print user + print "-----" + print + elif action == "3": + print + username = self.ask(_("Username"), "") + if username: + db.removeUser(username) + noaction = False + elif action == "4": + break + finally: + if not noaction: + db.shutdown() + + + def conf_path(self, trans=False): + if trans: + gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None]) + translation = gettext.translation("setup", join(self.path, "locale"), + languages=[self.config["general"]["language"], "en"], fallback=True) + translation.install(True) + + print _("Setting new config path, current configuration will not be transfered!") + path = self.ask(_("CONFIG PATH"), abspath("")) + try: + path = join(pypath, path) + if not exists(path): + makedirs(path) + f = open(join(pypath, "pyload", "config", "configdir"), "wb") + f.write(path) + f.close() + print + print + print _("pyLoad config path changed, setup will now close!") + print + print + raw_input(_("Press Enter to exit.")) + sys.exit() + except Exception, e: + print _("Setting config path failed: %s") % str(e) + + + def print_dep(self, name, value): + """Print Status of dependency""" + if value: + print _("%s: OK") % name + else: + print _("%s: MISSING") % name + + + def check_module(self, module): + try: + __import__(module) + return True + except: + return False + + + def check_prog(self, command): + pipe = PIPE + try: + call(command, stdout=pipe, stderr=pipe) + return True + except: + return False + + + def ask(self, qst, default, answers=[], bool=False, password=False): + """produce one line to asking for input""" + if answers: + info = "(" + + for i, answer in enumerate(answers): + info += (", " if i != 0 else "") + str((answer == default and "[%s]" % answer) or answer) + + info += ")" + elif bool: + if default == self.yes: + info = "([%s]/%s)" % (self.yes, self.no) + else: + info = "(%s/[%s])" % (self.yes, self.no) + else: + info = "[%s]" % default + + if password: + p1 = True + p2 = False + pwlen = 8 + while p1 != p2: + # getpass(_("Password: ")) will crash on systems with broken locales (Win, NAS) + sys.stdout.write(_("Password: ")) + p1 = getpass("") + + if len(p1) < pwlen: + print _("Password too short! Use at least %s symbols." % pwlen) + continue + elif not p1.isalnum(): + print _("Password must be alphanumeric.") + continue + + sys.stdout.write(_("Password (again): ")) + p2 = getpass("") + + if p1 == p2: + return p1 + else: + print _("Passwords did not match.") + + while True: + try: + input = raw_input(qst + " %s: " % info) + except KeyboardInterrupt: + print "\nSetup interrupted" + sys.exit() + + input = input.decode(self.stdin_encoding) + + if input.strip() == "": + input = default + + if bool: + # yes, true, t are inputs for booleans with value true + if input.lower().strip() in [self.yes, _("yes"), _("true"), _("t"), "yes"]: + return True + # no, false, f are inputs for booleans with value false + elif input.lower().strip() in [self.no, _("no"), _("false"), _("f"), "no"]: + return False + else: + print _("Invalid Input") + continue + + if not answers: + return input + + else: + if input in answers: + return input + else: + print _("Invalid Input") diff --git a/pyload/threads/PluginThread.py b/pyload/threads/PluginThread.py new file mode 100644 index 000000000..ca1d396dc --- /dev/null +++ b/pyload/threads/PluginThread.py @@ -0,0 +1,675 @@ +# -*- coding: utf-8 -*- + +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: RaNaN +""" + +from Queue import Queue +from threading import Thread +from os import listdir, stat +from os.path import join +from time import sleep, time, strftime, gmtime +from traceback import print_exc, format_exc +from pprint import pformat +from sys import exc_info, exc_clear +from copy import copy +from types import MethodType + +from pycurl import error + +from pyload.PyFile import PyFile +from pyload.plugins.Plugin import Abort, Fail, Reconnect, Retry, SkipDownload +from pyload.common.packagetools import parseNames +from pyload.utils import safe_join +from pyload.Api import OnlineStatus + +class PluginThread(Thread): + """abstract base class for thread types""" + + #-------------------------------------------------------------------------- + def __init__(self, manager): + """Constructor""" + Thread.__init__(self) + self.setDaemon(True) + self.m = manager #thread manager + + + def writeDebugReport(self, pyfile): + """ writes a + :return: + """ + + dump_name = "debug_%s_%s.zip" % (pyfile.pluginname, strftime("%d-%m-%Y_%H-%M-%S")) + dump = self.getDebugDump(pyfile) + + try: + import zipfile + + zip = zipfile.ZipFile(dump_name, "w") + + for f in listdir(join("tmp", pyfile.pluginname)): + try: + # avoid encoding errors + zip.write(join("tmp", pyfile.pluginname, f), safe_join(pyfile.pluginname, f)) + except: + pass + + info = zipfile.ZipInfo(safe_join(pyfile.pluginname, "debug_Report.txt"), gmtime()) + info.external_attr = 0644 << 16L # change permissions + + zip.writestr(info, dump) + zip.close() + + if not stat(dump_name).st_size: + raise Exception("Empty Zipfile") + + except Exception, e: + self.m.log.debug("Error creating zip file: %s" % e) + + dump_name = dump_name.replace(".zip", ".txt") + f = open(dump_name, "wb") + f.write(dump) + f.close() + + self.m.core.log.info("Debug Report written to %s" % dump_name) + + def getDebugDump(self, pyfile): + dump = "pyLoad %s Debug Report of %s %s \n\nTRACEBACK:\n %s \n\nFRAMESTACK:\n" % ( + self.m.core.api.getServerVersion(), pyfile.pluginname, pyfile.plugin.__version__, format_exc()) + + tb = exc_info()[2] + stack = [] + while tb: + stack.append(tb.tb_frame) + tb = tb.tb_next + + for frame in stack[1:]: + dump += "\nFrame %s in %s at line %s\n" % (frame.f_code.co_name, + frame.f_code.co_filename, + frame.f_lineno) + + for key, value in frame.f_locals.items(): + dump += "\t%20s = " % key + try: + dump += pformat(value) + "\n" + except Exception, e: + dump += "<ERROR WHILE PRINTING VALUE> " + str(e) + "\n" + + del frame + + del stack #delete it just to be sure... + + dump += "\n\nPLUGIN OBJECT DUMP: \n\n" + + for name in dir(pyfile.plugin): + attr = getattr(pyfile.plugin, name) + if not name.endswith("__") and type(attr) != MethodType: + dump += "\t%20s = " % name + try: + dump += pformat(attr) + "\n" + except Exception, e: + dump += "<ERROR WHILE PRINTING VALUE> " + str(e) + "\n" + + dump += "\nPYFILE OBJECT DUMP: \n\n" + + for name in dir(pyfile): + attr = getattr(pyfile, name) + if not name.endswith("__") and type(attr) != MethodType: + dump += "\t%20s = " % name + try: + dump += pformat(attr) + "\n" + except Exception, e: + dump += "<ERROR WHILE PRINTING VALUE> " + str(e) + "\n" + + if pyfile.pluginname in self.m.core.config.plugin: + dump += "\n\nCONFIG: \n\n" + dump += pformat(self.m.core.config.plugin[pyfile.pluginname]) + "\n" + + return dump + + def clean(self, pyfile): + """ set thread unactive and release pyfile """ + self.active = False + pyfile.release() + + +class DownloadThread(PluginThread): + """thread for downloading files from 'real' hoster plugins""" + + #-------------------------------------------------------------------------- + def __init__(self, manager): + """Constructor""" + PluginThread.__init__(self, manager) + + self.queue = Queue() # job queue + self.active = False + + self.start() + + #-------------------------------------------------------------------------- + def run(self): + """run method""" + pyfile = None + + while True: + del pyfile + self.active = self.queue.get() + pyfile = self.active + + if self.active == "quit": + self.active = False + self.m.threads.remove(self) + return True + + try: + if not pyfile.hasPlugin(): continue + #this pyfile was deleted while queueing + + pyfile.plugin.checkForSameFiles(starting=True) + self.m.log.info(_("Download starts: %s" % pyfile.name)) + + # start download + self.m.core.hookManager.downloadPreparing(pyfile) + pyfile.plugin.preprocessing(self) + + self.m.log.info(_("Download finished: %s") % pyfile.name) + self.m.core.hookManager.downloadFinished(pyfile) + self.m.core.files.checkPackageFinished(pyfile) + + except NotImplementedError: + self.m.log.error(_("Plugin %s is missing a function.") % pyfile.pluginname) + pyfile.setStatus("failed") + pyfile.error = "Plugin does not work" + self.clean(pyfile) + continue + + except Abort: + try: + self.m.log.info(_("Download aborted: %s") % pyfile.name) + except: + pass + + pyfile.setStatus("aborted") + + self.clean(pyfile) + continue + + except Reconnect: + self.queue.put(pyfile) + #pyfile.req.clearCookies() + + while self.m.reconnecting.isSet(): + sleep(0.5) + + continue + + except Retry, e: + reason = e.args[0] + self.m.log.info(_("Download restarted: %(name)s | %(msg)s") % {"name": pyfile.name, "msg": reason}) + self.queue.put(pyfile) + continue + + except Fail, e: + msg = e.args[0] + + if msg == "offline": + pyfile.setStatus("offline") + self.m.log.warning(_("Download is offline: %s") % pyfile.name) + elif msg == "temp. offline": + pyfile.setStatus("temp. offline") + self.m.log.warning(_("Download is temporary offline: %s") % pyfile.name) + else: + pyfile.setStatus("failed") + self.m.log.warning(_("Download failed: %(name)s | %(msg)s") % {"name": pyfile.name, "msg": msg}) + pyfile.error = msg + + self.m.core.hookManager.downloadFailed(pyfile) + self.clean(pyfile) + continue + + except error, e: + if len(e.args) == 2: + code, msg = e.args + else: + code = 0 + msg = e.args + + self.m.log.debug("pycurl exception %s: %s" % (code, msg)) + + if code in (7, 18, 28, 52, 56): + self.m.log.warning(_("Couldn't connect to host or connection reset, waiting 1 minute and retry.")) + wait = time() + 60 + + pyfile.waitUntil = wait + pyfile.setStatus("waiting") + while time() < wait: + sleep(1) + if pyfile.abort: + break + + if pyfile.abort: + self.m.log.info(_("Download aborted: %s") % pyfile.name) + pyfile.setStatus("aborted") + + self.clean(pyfile) + else: + self.queue.put(pyfile) + + continue + + else: + pyfile.setStatus("failed") + self.m.log.error("pycurl error %s: %s" % (code, msg)) + if self.m.core.debug: + print_exc() + self.writeDebugReport(pyfile) + + self.m.core.hookManager.downloadFailed(pyfile) + + self.clean(pyfile) + continue + + except SkipDownload, e: + pyfile.setStatus("skipped") + + self.m.log.info( + _("Download skipped: %(name)s due to %(plugin)s") % {"name": pyfile.name, "plugin": e.message}) + + self.clean(pyfile) + + self.m.core.files.checkPackageFinished(pyfile) + + self.active = False + self.m.core.files.save() + + continue + + + except Exception, e: + pyfile.setStatus("failed") + self.m.log.warning(_("Download failed: %(name)s | %(msg)s") % {"name": pyfile.name, "msg": str(e)}) + pyfile.error = str(e) + + if self.m.core.debug: + print_exc() + self.writeDebugReport(pyfile) + + self.m.core.hookManager.downloadFailed(pyfile) + self.clean(pyfile) + continue + + finally: + self.m.core.files.save() + pyfile.checkIfProcessed() + exc_clear() + + #pyfile.plugin.req.clean() + + self.active = False + pyfile.finishIfDone() + self.m.core.files.save() + + + def put(self, job): + """assing job to thread""" + self.queue.put(job) + + + def stop(self): + """stops the thread""" + self.put("quit") + + +class DecrypterThread(PluginThread): + """thread for decrypting""" + + def __init__(self, manager, pyfile): + """constructor""" + PluginThread.__init__(self, manager) + + self.active = pyfile + manager.localThreads.append(self) + + pyfile.setStatus("decrypting") + + self.start() + + def getActiveFiles(self): + return [self.active] + + def run(self): + """run method""" + + pyfile = self.active + retry = False + + try: + self.m.log.info(_("Decrypting starts: %s") % self.active.name) + self.active.plugin.preprocessing(self) + + except NotImplementedError: + self.m.log.error(_("Plugin %s is missing a function.") % self.active.pluginname) + return + + except Fail, e: + msg = e.args[0] + + if msg == "offline": + self.active.setStatus("offline") + self.m.log.warning(_("Download is offline: %s") % self.active.name) + else: + self.active.setStatus("failed") + self.m.log.error(_("Decrypting failed: %(name)s | %(msg)s") % {"name": self.active.name, "msg": msg}) + self.active.error = msg + + return + + except Abort: + self.m.log.info(_("Download aborted: %s") % pyfile.name) + pyfile.setStatus("aborted") + + return + + except Retry: + self.m.log.info(_("Retrying %s") % self.active.name) + retry = True + return self.run() + + except Exception, e: + self.active.setStatus("failed") + self.m.log.error(_("Decrypting failed: %(name)s | %(msg)s") % {"name": self.active.name, "msg": str(e)}) + self.active.error = str(e) + + if self.m.core.debug: + print_exc() + self.writeDebugReport(pyfile) + + return + + + finally: + if not retry: + self.active.release() + self.active = False + self.m.core.files.save() + self.m.localThreads.remove(self) + exc_clear() + + + #self.m.core.hookManager.downloadFinished(pyfile) + + + #self.m.localThreads.remove(self) + #self.active.finishIfDone() + if not retry: + pyfile.delete() + + +class HookThread(PluginThread): + """thread for hooks""" + + #-------------------------------------------------------------------------- + def __init__(self, m, function, args, kwargs): + """Constructor""" + PluginThread.__init__(self, m) + + self.f = function + self.args = args + self.kwargs = kwargs + + self.active = [] + + m.localThreads.append(self) + + self.start() + + def getActiveFiles(self): + return self.active + + def addActive(self, pyfile): + """ Adds a pyfile to active list and thus will be displayed on overview""" + if pyfile not in self.active: + self.active.append(pyfile) + + def finishFile(self, pyfile): + if pyfile in self.active: + self.active.remove(pyfile) + + pyfile.finishIfDone() + + def run(self): + try: + try: + self.kwargs["thread"] = self + self.f(*self.args, **self.kwargs) + except TypeError, e: + #dirty method to filter out exceptions + if "unexpected keyword argument 'thread'" not in e.args[0]: + raise + + del self.kwargs["thread"] + self.f(*self.args, **self.kwargs) + finally: + local = copy(self.active) + for x in local: + self.finishFile(x) + + self.m.localThreads.remove(self) + + +class InfoThread(PluginThread): + def __init__(self, manager, data, pid=-1, rid=-1, add=False): + """Constructor""" + PluginThread.__init__(self, manager) + + self.data = data + self.pid = pid # package id + # [ .. (name, plugin) .. ] + + self.rid = rid #result id + self.add = add #add packages instead of return result + + self.cache = [] #accumulated data + + self.start() + + def run(self): + """run method""" + + plugins = {} + container = [] + + for url, plugin in self.data: + if plugin in plugins: + plugins[plugin].append(url) + else: + plugins[plugin] = [url] + + + # filter out container plugins + for name in self.m.core.pluginManager.containerPlugins: + if name in plugins: + container.extend([(name, url) for url in plugins[name]]) + + del plugins[name] + + #directly write to database + if self.pid > -1: + for pluginname, urls in plugins.iteritems(): + plugin = self.m.core.pluginManager.getPlugin(pluginname, True) + if hasattr(plugin, "getInfo"): + self.fetchForPlugin(pluginname, plugin, urls, self.updateDB) + self.m.core.files.save() + + elif self.add: + for pluginname, urls in plugins.iteritems(): + plugin = self.m.core.pluginManager.getPlugin(pluginname, True) + if hasattr(plugin, "getInfo"): + self.fetchForPlugin(pluginname, plugin, urls, self.updateCache, True) + + else: + #generate default result + result = [(url, 0, 3, url) for url in urls] + + self.updateCache(pluginname, result) + + packs = parseNames([(name, url) for name, x, y, url in self.cache]) + + self.m.log.debug("Fetched and generated %d packages" % len(packs)) + + for k, v in packs: + self.m.core.api.addPackage(k, v) + + #empty cache + del self.cache[:] + + else: #post the results + + + for name, url in container: + #attach container content + try: + data = self.decryptContainer(name, url) + except: + print_exc() + self.m.log.error("Could not decrypt container.") + data = [] + + for url, plugin in data: + if plugin in plugins: + plugins[plugin].append(url) + else: + plugins[plugin] = [url] + + self.m.infoResults[self.rid] = {} + + for pluginname, urls in plugins.iteritems(): + plugin = self.m.core.pluginManager.getPlugin(pluginname, True) + if hasattr(plugin, "getInfo"): + self.fetchForPlugin(pluginname, plugin, urls, self.updateResult, True) + + #force to process cache + if self.cache: + self.updateResult(pluginname, [], True) + + else: + #generate default result + result = [(url, 0, 3, url) for url in urls] + + self.updateResult(pluginname, result, True) + + self.m.infoResults[self.rid]["ALL_INFO_FETCHED"] = {} + + self.m.timestamp = time() + 5 * 60 + + + def updateDB(self, plugin, result): + self.m.core.files.updateFileInfo(result, self.pid) + + def updateResult(self, plugin, result, force=False): + #parse package name and generate result + #accumulate results + + self.cache.extend(result) + + if len(self.cache) >= 20 or force: + #used for package generating + tmp = [(name, (url, OnlineStatus(name, plugin, "unknown", status, int(size)))) + for name, size, status, url in self.cache] + + data = parseNames(tmp) + result = {} + for k, v in data.iteritems(): + for url, status in v: + status.packagename = k + result[url] = status + + self.m.setInfoResults(self.rid, result) + + self.cache = [] + + def updateCache(self, plugin, result): + self.cache.extend(result) + + def fetchForPlugin(self, pluginname, plugin, urls, cb, err=None): + try: + result = [] #result loaded from cache + process = [] #urls to process + for url in urls: + if url in self.m.infoCache: + result.append(self.m.infoCache[url]) + else: + process.append(url) + + if result: + self.m.log.debug("Fetched %d values from cache for %s" % (len(result), pluginname)) + cb(pluginname, result) + + if process: + self.m.log.debug("Run Info Fetching for %s" % pluginname) + for result in plugin.getInfo(process): + #result = [ .. (name, size, status, url) .. ] + if not type(result) == list: result = [result] + + for res in result: + self.m.infoCache[res[3]] = res + + cb(pluginname, result) + + self.m.log.debug("Finished Info Fetching for %s" % pluginname) + except Exception, e: + self.m.log.warning(_("Info Fetching for %(name)s failed | %(err)s") % + {"name": pluginname, "err": str(e)}) + if self.m.core.debug: + print_exc() + + # generate default results + if err: + result = [(url, 0, 3, url) for url in urls] + cb(pluginname, result) + + + def decryptContainer(self, plugin, url): + data = [] + # only works on container plugins + + self.m.log.debug("Pre decrypting %s with %s" % (url, plugin)) + + # dummy pyfile + pyfile = PyFile(self.m.core.files, -1, url, url, 0, 0, "", plugin, -1, -1) + + pyfile.initPlugin() + + # little plugin lifecycle + try: + pyfile.plugin.setup() + pyfile.plugin.loadToDisk() + pyfile.plugin.decrypt(pyfile) + pyfile.plugin.deleteTmp() + + for pack in pyfile.plugin.packages: + pyfile.plugin.urls.extend(pack[1]) + + data = self.m.core.pluginManager.parseUrls(pyfile.plugin.urls) + + self.m.log.debug("Got %d links." % len(data)) + + except Exception, e: + self.m.log.debug("Pre decrypting error: %s" % str(e)) + finally: + pyfile.release() + + return data diff --git a/pyload/threads/ServerThread.py b/pyload/threads/ServerThread.py new file mode 100644 index 000000000..7de3b1ca1 --- /dev/null +++ b/pyload/threads/ServerThread.py @@ -0,0 +1,108 @@ +from __future__ import with_statement +from os.path import exists + +import os +import threading +import logging + +core = None +setup = None +log = logging.getLogger("log") + +class WebServer(threading.Thread): + def __init__(self, pycore): + global core + threading.Thread.__init__(self) + self.core = pycore + core = pycore + self.running = True + self.server = pycore.config['webinterface']['server'] + self.https = pycore.config['webinterface']['https'] + self.cert = pycore.config["ssl"]["cert"] + self.key = pycore.config["ssl"]["key"] + self.host = pycore.config['webinterface']['host'] + self.port = pycore.config['webinterface']['port'] + + self.setDaemon(True) + + def run(self): + import pyload.webui as webinterface + global webinterface + + reset = False + + if self.https and (not exists(self.cert) or not exists(self.key)): + log.warning(_("SSL certificates not found.")) + self.https = False + + if self.server in ("lighttpd", "nginx"): + log.warning(_("Sorry, we dropped support for starting %s directly within pyLoad") % self.server) + log.warning(_("You can use the threaded server which offers good performance and ssl,")) + log.warning(_("of course you can still use your existing %s with pyLoads fastcgi server") % self.server) + log.warning(_("sample configs are located in the pyload/web/servers directory")) + reset = True + elif self.server == "fastcgi": + try: + import flup + except: + log.warning(_("Can't use %(server)s, python-flup is not installed!") % { + "server": self.server}) + reset = True + + if reset or self.server == "lightweight": + if os.name != "nt": + try: + import bjoern + except Exception, e: + log.error(_("Error importing lightweight server: %s") % e) + log.warning(_("You need to download and compile bjoern, https://github.com/jonashaag/bjoern")) + log.warning(_("Copy the boern.so to pyload/lib folder or use setup.py install")) + log.warning(_("Of course you need to be familiar with linux and know how to compile software")) + self.server = "builtin" + else: + self.core.log.info(_("Server set to threaded, due to known performance problems on windows.")) + self.core.config['webinterface']['server'] = "threaded" + self.server = "threaded" + + if self.server == "threaded": + self.start_threaded() + elif self.server == "fastcgi": + self.start_fcgi() + elif self.server == "lightweight": + self.start_lightweight() + else: + self.start_builtin() + + def start_builtin(self): + + if self.https: + log.warning(_("This server offers no SSL, please consider using threaded instead")) + + self.core.log.info(_("Starting builtin webserver: %(host)s:%(port)d") % {"host": self.host, "port": self.port}) + webinterface.run_simple(host=self.host, port=self.port) + + def start_threaded(self): + if self.https: + self.core.log.info(_("Starting threaded SSL webserver: %(host)s:%(port)d") % {"host": self.host, "port": self.port}) + else: + self.cert = "" + self.key = "" + self.core.log.info(_("Starting threaded webserver: %(host)s:%(port)d") % {"host": self.host, "port": self.port}) + + webinterface.run_threaded(host=self.host, port=self.port, cert=self.cert, key=self.key) + + def start_fcgi(self): + + self.core.log.info(_("Starting fastcgi server: %(host)s:%(port)d") % {"host": self.host, "port": self.port}) + webinterface.run_fcgi(host=self.host, port=self.port) + + + def start_lightweight(self): + if self.https: + log.warning(_("This server offers no SSL, please consider using threaded instead")) + + self.core.log.info(_("Starting lightweight webserver (bjoern): %(host)s:%(port)d") % {"host": self.host, "port": self.port}) + webinterface.run_lightweight(host=self.host, port=self.port) + + def quit(self): + self.running = False diff --git a/module/threads/__init__.py b/pyload/threads/__init__.py index e69de29bb..e69de29bb 100644 --- a/module/threads/__init__.py +++ b/pyload/threads/__init__.py diff --git a/pyload/unescape.py b/pyload/unescape.py new file mode 100644 index 000000000..7bcc1aa72 --- /dev/null +++ b/pyload/unescape.py @@ -0,0 +1,3 @@ +from pyload.utils import html_unescape +#deprecated +unescape = html_unescape diff --git a/module/utils.py b/pyload/utils.py index b9eb8c88e..b9eb8c88e 100644 --- a/module/utils.py +++ b/pyload/utils.py diff --git a/pyload/webui/__init__.py b/pyload/webui/__init__.py new file mode 100644 index 000000000..c421b632e --- /dev/null +++ b/pyload/webui/__init__.py @@ -0,0 +1,147 @@ +# -*- coding: utf-8 -*- +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: RaNaN +""" + +import sys +import pyload.common.pylgettext as gettext + +import os +from os.path import join, abspath, dirname, exists +from os import makedirs + +THEME_DIR = abspath(join(dirname(__file__), "themes")) +PYLOAD_DIR = abspath(join(THEME_DIR, "..", "..", "..")) + +sys.path.append(PYLOAD_DIR) + +from pyload import InitHomeDir +from pyload.utils import decode, formatSize + +import bottle +from bottle import run, app + +from jinja2 import Environment, FileSystemLoader, PrefixLoader, FileSystemBytecodeCache +from middlewares import StripPathMiddleware, GZipMiddleWare, PrefixMiddleware + +SETUP = None +PYLOAD = None + +from pyload.threads import ServerThread + +if not ServerThread.core: + if ServerThread.setup: + SETUP = ServerThread.setup + config = SETUP.config + else: + raise Exception("Could not access pyLoad Core") +else: + PYLOAD = ServerThread.core.api + config = ServerThread.core.config + +from pyload.common.JsEngine import JsEngine + +JS = JsEngine() + +THEME = config.get('webinterface', 'theme') +DL_ROOT = config.get('general', 'download_folder') +LOG_ROOT = config.get('log', 'log_folder') +PREFIX = config.get('webinterface', 'prefix') + +if PREFIX: + PREFIX = PREFIX.rstrip("/") + if not PREFIX.startswith("/"): + PREFIX = "/" + PREFIX + +DEBUG = config.get("general", "debug_mode") or "-d" in sys.argv or "--debug" in sys.argv +bottle.debug(DEBUG) + +cache = join("tmp", "jinja_cache") +if not exists(cache): + makedirs(cache) + +bcc = FileSystemBytecodeCache(cache, '%s.cache') + +loader = FileSystemLoader(THEME_DIR) + +env = Environment(loader=loader, extensions=['jinja2.ext.i18n', 'jinja2.ext.autoescape'], trim_blocks=True, auto_reload=False, + bytecode_cache=bcc) + +from filters import quotepath, path_make_relative, path_make_absolute, truncate, date + +env.filters["quotepath"] = quotepath +env.filters["truncate"] = truncate +env.filters["date"] = date +env.filters["path_make_relative"] = path_make_relative +env.filters["path_make_absolute"] = path_make_absolute +env.filters["decode"] = decode +env.filters["type"] = lambda x: str(type(x)) +env.filters["formatsize"] = formatSize +env.filters["getitem"] = lambda x, y: x.__getitem__(y) +if PREFIX: + env.filters["url"] = lambda x: x +else: + env.filters["url"] = lambda x: PREFIX + x if x.startswith("/") else x + +gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None]) +translation = gettext.translation("django", join(PYLOAD_DIR, "locale"), + languages=[config.get("general", "language"), "en"],fallback=True) +translation.install(True) +env.install_gettext_translations(translation) + +from beaker.middleware import SessionMiddleware + +session_opts = { + 'session.type': 'file', + 'session.cookie_expires': False, + 'session.data_dir': './tmp', + 'session.auto': False +} + +web = StripPathMiddleware(SessionMiddleware(app(), session_opts)) +web = GZipMiddleWare(web) + +if PREFIX: + web = PrefixMiddleware(web, prefix=PREFIX) + +import pyload.webui.app + +def run_simple(host="0.0.0.0", port="8000"): + run(app=web, host=host, port=port, quiet=True) + + +def run_lightweight(host="0.0.0.0", port="8000"): + run(app=web, host=host, port=port, server="bjoern", quiet=True) + + +def run_threaded(host="0.0.0.0", port="8000", theads=3, cert="", key=""): + from wsgiserver import CherryPyWSGIServer + + if cert and key: + CherryPyWSGIServer.ssl_certificate = cert + CherryPyWSGIServer.ssl_private_key = key + + CherryPyWSGIServer.numthreads = theads + + from pyload.webui.app.utils import CherryPyWSGI + + run(app=web, host=host, port=port, server=CherryPyWSGI, quiet=True) + + +def run_fcgi(host="0.0.0.0", port="8000"): + from bottle import FlupFCGIServer + + run(app=web, host=host, port=port, server=FlupFCGIServer, quiet=True) diff --git a/pyload/webui/app/__init__.py b/pyload/webui/app/__init__.py new file mode 100644 index 000000000..39d0fadd5 --- /dev/null +++ b/pyload/webui/app/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from pyload.webui.app import api, cnl, json, pyload diff --git a/pyload/webui/app/api.py b/pyload/webui/app/api.py new file mode 100644 index 000000000..eb178f177 --- /dev/null +++ b/pyload/webui/app/api.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- + +from urllib import unquote +from itertools import chain +from traceback import format_exc, print_exc + +from bottle import route, request, response, HTTPError + +from utils import toDict, set_session +from pyload.webui import PYLOAD + +from pyload.common.json_layer import json +from pyload.lib.SafeEval import const_eval as literal_eval +from pyload.Api import BaseObject + +# json encoder that accepts TBase objects +class TBaseEncoder(json.JSONEncoder): + + def default(self, o): + if isinstance(o, BaseObject): + return toDict(o) + return json.JSONEncoder.default(self, o) + + +# accepting positional arguments, as well as kwargs via post and get + +@route('/api/<func><args:re:[a-zA-Z0-9\-_/\"\'\[\]%{}]*>') +@route('/api/<func><args:re:[a-zA-Z0-9\-_/\"\'\[\]%{}]*>', method='POST') +def call_api(func, args=""): + response.headers.replace("Content-type", "application/json") + response.headers.append("Cache-Control", "no-cache, must-revalidate") + + s = request.environ.get('beaker.session') + if 'session' in request.POST: + s = s.get_by_id(request.POST['session']) + + if not s or not s.get("authenticated", False): + return HTTPError(403, json.dumps("Forbidden")) + + if not PYLOAD.isAuthorized(func, {"role": s["role"], "permission": s["perms"]}): + return HTTPError(401, json.dumps("Unauthorized")) + + args = args.split("/")[1:] + kwargs = {} + + for x, y in chain(request.GET.iteritems(), request.POST.iteritems()): + if x == "session": continue + kwargs[x] = unquote(y) + + try: + return callApi(func, *args, **kwargs) + except Exception, e: + print_exc() + return HTTPError(500, json.dumps({"error": e.message, "traceback": format_exc()})) + + +def callApi(func, *args, **kwargs): + if not hasattr(PYLOAD.EXTERNAL, func) or func.startswith("_"): + print "Invalid API call", func + return HTTPError(404, json.dumps("Not Found")) + + result = getattr(PYLOAD, func)(*[literal_eval(x) for x in args], + **dict([(x, literal_eval(y)) for x, y in kwargs.iteritems()])) + + # null is invalid json response + if result is None: result = True + + return json.dumps(result, cls=TBaseEncoder) + + +#post -> username, password +@route('/api/login', method='POST') +def login(): + response.headers.replace("Content-type", "application/json") + response.headers.append("Cache-Control", "no-cache, must-revalidate") + + user = request.forms.get("username") + password = request.forms.get("password") + + info = PYLOAD.checkAuth(user, password) + + if not info: + return json.dumps(False) + + s = set_session(request, info) + + # get the session id by dirty way, documentations seems wrong + try: + sid = s._headers["cookie_out"].split("=")[1].split(";")[0] + return json.dumps(sid) + except: + return json.dumps(True) + + +@route('/api/logout') +def logout(): + response.headers.replace("Content-type", "application/json") + response.headers.append("Cache-Control", "no-cache, must-revalidate") + + s = request.environ.get('beaker.session') + s.delete() diff --git a/pyload/webui/app/cnl.py b/pyload/webui/app/cnl.py new file mode 100644 index 000000000..47c38f4ab --- /dev/null +++ b/pyload/webui/app/cnl.py @@ -0,0 +1,168 @@ +# -*- coding: utf-8 -*- +from os.path import join +import re +from urllib import unquote +from base64 import standard_b64decode +from binascii import unhexlify + +from bottle import route, request, HTTPError +from pyload.webui import PYLOAD, DL_ROOT, JS + + +try: + from Crypto.Cipher import AES +except: + pass + + +def local_check(function): + def _view(*args, **kwargs): + if request.environ.get("REMOTE_ADDR", "0") in ("127.0.0.1", "localhost") \ + or request.environ.get("HTTP_HOST", "0") in ("127.0.0.1:9666", "localhost:9666"): + return function(*args, **kwargs) + else: + return HTTPError(403, "Forbidden") + + return _view + + +@route('/flash') +@route('/flash/<id>') +@route('/flash', method='POST') +@local_check +def flash(id="0"): + return "JDownloader\r\n" + + +@route('/flash/add', method='POST') +@local_check +def add(request): + package = request.POST.get('referer', None) + urls = filter(lambda x: x != "", request.POST['urls'].split("\n")) + + if package: + PYLOAD.addPackage(package, urls, 0) + else: + PYLOAD.generateAndAddPackages(urls, 0) + + return "" + + +@route('/flash/addcrypted', method='POST') +@local_check +def addcrypted(): + package = request.forms.get('referer', 'ClickAndLoad Package') + dlc = request.forms['crypted'].replace(" ", "+") + + dlc_path = join(DL_ROOT, package.replace("/", "").replace("\\", "").replace(":", "") + ".dlc") + dlc_file = open(dlc_path, "wb") + dlc_file.write(dlc) + dlc_file.close() + + try: + PYLOAD.addPackage(package, [dlc_path], 0) + except: + return HTTPError() + else: + return "success\r\n" + + +@route('/flash/addcrypted2', method='POST') +@local_check +def addcrypted2(): + package = request.forms.get("source", None) + crypted = request.forms["crypted"] + jk = request.forms["jk"] + + crypted = standard_b64decode(unquote(crypted.replace(" ", "+"))) + if JS: + jk = "%s f()" % jk + jk = JS.eval(jk) + + else: + try: + jk = re.findall(r"return ('|\")(.+)('|\")", jk)[0][1] + except: + ## Test for some known js functions to decode + if jk.find("dec") > -1 and jk.find("org") > -1: + org = re.findall(r"var org = ('|\")([^\"']+)", jk)[0][1] + jk = list(org) + jk.reverse() + jk = "".join(jk) + else: + print "Could not decrypt key, please install py-spidermonkey or ossp-js" + + try: + Key = unhexlify(jk) + except: + print "Could not decrypt key, please install py-spidermonkey or ossp-js" + return "failed" + + IV = Key + + obj = AES.new(Key, AES.MODE_CBC, IV) + result = obj.decrypt(crypted).replace("\x00", "").replace("\r", "").split("\n") + + result = filter(lambda x: x != "", result) + + try: + if package: + PYLOAD.addPackage(package, result, 0) + else: + PYLOAD.generateAndAddPackages(result, 0) + except: + return "failed can't add" + else: + return "success\r\n" + + +@route('/flashgot_pyload') +@route('/flashgot_pyload', method='POST') +@route('/flashgot') +@route('/flashgot', method='POST') +@local_check +def flashgot(): + if request.environ['HTTP_REFERER'] != "http://localhost:9666/flashgot" and \ + request.environ['HTTP_REFERER'] != "http://127.0.0.1:9666/flashgot": + return HTTPError() + + autostart = int(request.forms.get('autostart', 0)) + package = request.forms.get('package', None) + urls = filter(lambda x: x != "", request.forms['urls'].split("\n")) + folder = request.forms.get('dir', None) + + if package: + PYLOAD.addPackage(package, urls, autostart) + else: + PYLOAD.generateAndAddPackages(urls, autostart) + + return "" + + +@route('/crossdomain.xml') +@local_check +def crossdomain(): + rep = "<?xml version=\"1.0\"?>\n" + rep += "<!DOCTYPE cross-domain-policy SYSTEM \"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd\">\n" + rep += "<cross-domain-policy>\n" + rep += "<allow-access-from domain=\"*\" />\n" + rep += "</cross-domain-policy>" + return rep + + +@route('/flash/checkSupportForUrl') +@local_check +def checksupport(): + url = request.GET.get("url") + res = PYLOAD.checkURLs([url]) + supported = (not res[0][1] is None) + + return str(supported).lower() + + +@route('/jdcheck.js') +@local_check +def jdcheck(): + rep = "jdownloader=true;\n" + rep += "var version='9.581;'" + return rep diff --git a/pyload/webui/app/json.py b/pyload/webui/app/json.py new file mode 100644 index 000000000..8fa675865 --- /dev/null +++ b/pyload/webui/app/json.py @@ -0,0 +1,311 @@ +# -*- coding: utf-8 -*- + +from os.path import join +from traceback import print_exc +from shutil import copyfileobj + +from bottle import route, request, HTTPError + +from pyload.webui import PYLOAD + +from utils import login_required, render_to_response, toDict + +from pyload.utils import decode, formatSize + + +def format_time(seconds): + seconds = int(seconds) + + hours, seconds = divmod(seconds, 3600) + minutes, seconds = divmod(seconds, 60) + return "%.2i:%.2i:%.2i" % (hours, minutes, seconds) + + +def get_sort_key(item): + return item["order"] + + +@route('/json/status') +@route('/json/status', method='POST') +@login_required('LIST') +def status(): + try: + status = toDict(PYLOAD.statusServer()) + status['captcha'] = PYLOAD.isCaptchaWaiting() + return status + except: + return HTTPError() + + +@route('/json/links') +@route('/json/links', method='POST') +@login_required('LIST') +def links(): + try: + links = [toDict(x) for x in PYLOAD.statusDownloads()] + ids = [] + for link in links: + ids.append(link['fid']) + + if link['status'] == 12: + link['info'] = "%s @ %s/s" % (link['format_eta'], formatSize(link['speed'])) + elif link['status'] == 5: + link['percent'] = 0 + link['size'] = 0 + link['bleft'] = 0 + link['info'] = _("waiting %s") % link['format_wait'] + else: + link['info'] = "" + + data = {'links': links, 'ids': ids} + return data + except Exception, e: + print_exc() + return HTTPError() + + +@route('/json/packages') +@login_required('LIST') +def packages(): + print "/json/packages" + try: + data = PYLOAD.getQueue() + + for package in data: + package['links'] = [] + for file in PYLOAD.get_package_files(package['id']): + package['links'].append(PYLOAD.get_file_info(file)) + + return data + + except: + return HTTPError() + + +@route('/json/package/<id:int>') +@login_required('LIST') +def package(id): + try: + data = toDict(PYLOAD.getPackageData(id)) + data["links"] = [toDict(x) for x in data["links"]] + + for pyfile in data["links"]: + if pyfile["status"] == 0: + pyfile["icon"] = "status_finished.png" + elif pyfile["status"] in (2, 3): + pyfile["icon"] = "status_queue.png" + elif pyfile["status"] in (9, 1): + pyfile["icon"] = "status_offline.png" + elif pyfile["status"] == 5: + pyfile["icon"] = "status_waiting.png" + elif pyfile["status"] == 8: + pyfile["icon"] = "status_failed.png" + elif pyfile["status"] == 4: + pyfile["icon"] = "arrow_right.png" + elif pyfile["status"] in (11, 13): + pyfile["icon"] = "status_proc.png" + else: + pyfile["icon"] = "status_downloading.png" + + tmp = data["links"] + tmp.sort(key=get_sort_key) + data["links"] = tmp + return data + + except: + print_exc() + return HTTPError() + + +@route('/json/package_order/<ids>') +@login_required('ADD') +def package_order(ids): + try: + pid, pos = ids.split("|") + PYLOAD.orderPackage(int(pid), int(pos)) + return {"response": "success"} + except: + return HTTPError() + + +@route('/json/abort_link/<id:int>') +@login_required('DELETE') +def abort_link(id): + try: + PYLOAD.stopDownloads([id]) + return {"response": "success"} + except: + return HTTPError() + + +@route('/json/link_order/<ids>') +@login_required('ADD') +def link_order(ids): + try: + pid, pos = ids.split("|") + PYLOAD.orderFile(int(pid), int(pos)) + return {"response": "success"} + except: + return HTTPError() + + +@route('/json/add_package') +@route('/json/add_package', method='POST') +@login_required('ADD') +def add_package(): + name = request.forms.get("add_name", "New Package").strip() + queue = int(request.forms['add_dest']) + links = decode(request.forms['add_links']) + links = links.split("\n") + pw = request.forms.get("add_password", "").strip("\n\r") + + try: + f = request.files['add_file'] + + if not name or name == "New Package": + name = f.name + + fpath = join(PYLOAD.getConfigValue("general", "download_folder"), "tmp_" + f.filename) + destination = open(fpath, 'wb') + copyfileobj(f.file, destination) + destination.close() + links.insert(0, fpath) + except: + pass + + name = name.decode("utf8", "ignore") + + links = map(lambda x: x.strip(), links) + links = filter(lambda x: x != "", links) + + pack = PYLOAD.addPackage(name, links, queue) + if pw: + pw = pw.decode("utf8", "ignore") + data = {"password": pw} + PYLOAD.setPackageData(pack, data) + + +@route('/json/move_package/<dest:int>/<id:int>') +@login_required('MODIFY') +def move_package(dest, id): + try: + PYLOAD.movePackage(dest, id) + return {"response": "success"} + except: + return HTTPError() + + +@route('/json/edit_package', method='POST') +@login_required('MODIFY') +def edit_package(): + try: + id = int(request.forms.get("pack_id")) + data = {"name": request.forms.get("pack_name").decode("utf8", "ignore"), + "folder": request.forms.get("pack_folder").decode("utf8", "ignore"), + "password": request.forms.get("pack_pws").decode("utf8", "ignore")} + + PYLOAD.setPackageData(id, data) + return {"response": "success"} + + except: + return HTTPError() + + +@route('/json/set_captcha') +@route('/json/set_captcha', method='POST') +@login_required('ADD') +def set_captcha(): + if request.environ.get('REQUEST_METHOD', "GET") == "POST": + try: + PYLOAD.setCaptchaResult(request.forms["cap_id"], request.forms["cap_result"]) + except: + pass + + task = PYLOAD.getCaptchaTask() + + if task.tid >= 0: + src = "data:image/%s;base64,%s" % (task.type, task.data) + + return {'captcha': True, 'id': task.tid, 'src': src, 'result_type' : task.resultType} + else: + return {'captcha': False} + + +@route('/json/load_config/<category>/<section>') +@login_required("SETTINGS") +def load_config(category, section): + conf = None + if category == "general": + conf = PYLOAD.getConfigDict() + elif category == "plugin": + conf = PYLOAD.getPluginConfigDict() + + for key, option in conf[section].iteritems(): + if key in ("desc", "outline"): continue + + if ";" in option["type"]: + option["list"] = option["type"].split(";") + + option["value"] = decode(option["value"]) + + return render_to_response("settings_item.html", {"skey": section, "section": conf[section]}) + + +@route('/json/save_config/<category>', method='POST') +@login_required("SETTINGS") +def save_config(category): + for key, value in request.POST.iteritems(): + try: + section, option = key.split("|") + except: + continue + + if category == "general": category = "core" + + PYLOAD.setConfigValue(section, option, decode(value), category) + + +@route('/json/add_account', method='POST') +@login_required("ACCOUNTS") +def add_account(): + login = request.POST["account_login"] + password = request.POST["account_password"] + type = request.POST["account_type"] + + PYLOAD.updateAccount(type, login, password) + + +@route('/json/update_accounts', method='POST') +@login_required("ACCOUNTS") +def update_accounts(): + deleted = [] #dont update deleted accs or they will be created again + + for name, value in request.POST.iteritems(): + value = value.strip() + if not value: continue + + tmp, user = name.split(";") + plugin, action = tmp.split("|") + + if (plugin, user) in deleted: continue + + if action == "password": + PYLOAD.updateAccount(plugin, user, value) + elif action == "time" and "-" in value: + PYLOAD.updateAccount(plugin, user, options={"time": [value]}) + elif action == "limitdl" and value.isdigit(): + PYLOAD.updateAccount(plugin, user, options={"limitDL": [value]}) + elif action == "delete": + deleted.append((plugin,user)) + PYLOAD.removeAccount(plugin, user) + +@route('/json/change_password', method='POST') +def change_password(): + + user = request.POST["user_login"] + oldpw = request.POST["login_current_password"] + newpw = request.POST["login_new_password"] + + if not PYLOAD.changePassword(user, oldpw, newpw): + print "Wrong password" + return HTTPError() diff --git a/pyload/webui/app/pyload.py b/pyload/webui/app/pyload.py new file mode 100644 index 000000000..6887d71f2 --- /dev/null +++ b/pyload/webui/app/pyload.py @@ -0,0 +1,544 @@ +# -*- coding: utf-8 -*- +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: RaNaN +""" +from datetime import datetime +from operator import itemgetter, attrgetter + +import time +import os +import sys +from os import listdir +from os.path import isdir, isfile, join, abspath +from sys import getfilesystemencoding +from urllib import unquote + +from bottle import route, static_file, request, response, redirect, error + +from pyload.webui import PYLOAD, PYLOAD_DIR, THEME_DIR, SETUP, env + +from utils import render_to_response, parse_permissions, parse_userdata, \ + login_required, get_permission, set_permission, permlist, toDict, set_session + +from pyload.webui.filters import relpath, unquotepath + +from pyload.utils import formatSize, safe_join, fs_encode, fs_decode + +# Helper + +def pre_processor(): + s = request.environ.get('beaker.session') + user = parse_userdata(s) + perms = parse_permissions(s) + status = {} + captcha = False + update = False + plugins = False + if user["is_authenticated"]: + status = PYLOAD.statusServer() + info = PYLOAD.getInfoByPlugin("UpdateManager") + captcha = PYLOAD.isCaptchaWaiting() + + # check if update check is available + if info: + if info["pyload"] == "True": + update = info["version"] + if info["plugins"] == "True": + plugins = True + + + return {"user": user, + 'status': status, + 'captcha': captcha, + 'perms': perms, + 'url': request.url, + 'update': update, + 'plugins': plugins} + + +def base(messages): + return render_to_response('base.html', {'messages': messages}, [pre_processor]) + + +## Views +@error(403) +def error403(code): + return "The parameter you passed has the wrong format" + + +@error(404) +def error404(code): + return "Sorry, this page does not exist" + + +@error(500) +def error500(error): + traceback = error.traceback + if traceback: + print traceback + return base(["An Error occured, please enable debug mode to get more details.", error, + traceback.replace("\n", "<br>") if traceback else "No Traceback"]) + + +@route('/<theme>/<file:re:(.+/)?[^/]+\.min\.[^/]+>') +def server_min(theme, file): + filename = join(THEME_DIR, theme, file) + if not isfile(filename): + file = file.replace(".min.", ".") + if file.endswith(".js"): + return server_js(theme, file) + else: + return server_static(theme, file) + + +@route('/<theme>/<file_static:re:.+\.js>') +def server_js(theme, file): + response.headers['Content-Type'] = "text/javascript; charset=UTF-8" + + if "/render/" in file or ".render." in file: + response.headers['Expires'] = time.strftime("%a, %d %b %Y %H:%M:%S GMT", + time.gmtime(time.time() + 24 * 7 * 60 * 60)) + response.headers['Cache-control'] = "public" + + path = join(theme, file) + return env.get_template(path).render() + else: + return server_static(theme, file) + + +@route('/<theme>/<file:path>') +def server_static(theme, file): + response.headers['Expires'] = time.strftime("%a, %d %b %Y %H:%M:%S GMT", + time.gmtime(time.time() + 24 * 7 * 60 * 60)) + response.headers['Cache-control'] = "public" + + return static_file(file, root=join(THEME_DIR, theme)) + + +@route('/favicon.ico') +def favicon(): + return static_file("icon.ico", root=join(PYLOAD_DIR, "docs", "resources")) + + +@route('/login', method="GET") +def login(): + if not PYLOAD and SETUP: + redirect("/setup") + else: + return render_to_response("login.html", proc=[pre_processor]) + + +@route('/nopermission') +def nopermission(): + return base([_("You dont have permission to access this page.")]) + + +@route('/login', method='POST') +def login_post(): + user = request.forms.get("username") + password = request.forms.get("password") + + info = PYLOAD.checkAuth(user, password) + + if not info: + return render_to_response("login.html", {"errors": True}, [pre_processor]) + + set_session(request, info) + return redirect("/") + + +@route('/logout') +def logout(): + s = request.environ.get('beaker.session') + s.delete() + return render_to_response("logout.html", proc=[pre_processor]) + + +@route('/') +@route('/home') +@login_required("LIST") +def home(): + try: + res = [toDict(x) for x in PYLOAD.statusDownloads()] + except: + s = request.environ.get('beaker.session') + s.delete() + return redirect("/login") + + for link in res: + if link["status"] == 12: + link["information"] = "%s kB @ %s kB/s" % (link["size"] - link["bleft"], link["speed"]) + + return render_to_response("home.html", {"res": res}, [pre_processor]) + + +@route('/queue') +@login_required("LIST") +def queue(): + queue = PYLOAD.getQueue() + + queue.sort(key=attrgetter("order")) + + return render_to_response('queue.html', {'content': queue, 'target': 1}, [pre_processor]) + + +@route('/collector') +@login_required('LIST') +def collector(): + queue = PYLOAD.getCollector() + + queue.sort(key=attrgetter("order")) + + return render_to_response('queue.html', {'content': queue, 'target': 0}, [pre_processor]) + + +@route('/downloads') +@login_required('DOWNLOAD') +def downloads(): + root = PYLOAD.getConfigValue("general", "download_folder") + + if not isdir(root): + return base([_('Download directory not found.')]) + data = { + 'folder': [], + 'files': [] + } + + items = listdir(fs_encode(root)) + + for item in sorted([fs_decode(x) for x in items]): + if isdir(safe_join(root, item)): + folder = { + 'name': item, + 'path': item, + 'files': [] + } + files = listdir(safe_join(root, item)) + for file in sorted([fs_decode(x) for x in files]): + try: + if isfile(safe_join(root, item, file)): + folder['files'].append(file) + except: + pass + + data['folder'].append(folder) + elif isfile(join(root, item)): + data['files'].append(item) + + return render_to_response('downloads.html', {'files': data}, [pre_processor]) + + +@route('/downloads/get/<path:path>') +@login_required("DOWNLOAD") +def get_download(path): + path = unquote(path).decode("utf8") + #@TODO some files can not be downloaded + + root = PYLOAD.getConfigValue("general", "download_folder") + + path = path.replace("..", "") + return static_file(fs_encode(path), fs_encode(root)) + + + +@route('/settings') +@login_required('SETTINGS') +def config(): + conf = PYLOAD.getConfig() + plugin = PYLOAD.getPluginConfig() + + conf_menu = [] + plugin_menu = [] + + for entry in sorted(conf.keys()): + conf_menu.append((entry, conf[entry].description)) + + for entry in sorted(plugin.keys()): + plugin_menu.append((entry, plugin[entry].description)) + + accs = PYLOAD.getAccounts(False) + + for data in accs: + if data.trafficleft == -1: + data.trafficleft = _("unlimited") + elif not data.trafficleft: + data.trafficleft = _("not available") + else: + data.trafficleft = formatSize(data.trafficleft * 1024) + + if data.validuntil == -1: + data.validuntil = _("unlimited") + elif not data.validuntil : + data.validuntil = _("not available") + else: + t = time.localtime(data.validuntil) + data.validuntil = time.strftime("%d.%m.%Y - %H:%M:%S", t) + + try: + data.options["time"] = data.options["time"][0] + except: + data.options["time"] = "0:00-0:00" + + if "limitDL" in data.options: + data.options["limitdl"] = data.options["limitDL"][0] + else: + data.options["limitdl"] = "0" + + return render_to_response('settings.html', + {'conf': {'plugin': plugin_menu, 'general': conf_menu, 'accs': accs}, 'types': PYLOAD.getAccountTypes()}, + [pre_processor]) + + +@route('/filechooser') +@route('/pathchooser') +@route('/filechooser/<file:path>') +@route('/pathchooser/<path:path>') +@login_required('STATUS') +def path(file="", path=""): + if file: + type = "file" + else: + type = "folder" + + path = os.path.normpath(unquotepath(path)) + + if os.path.isfile(path): + oldfile = path + path = os.path.dirname(path) + else: + oldfile = '' + + abs = False + + if os.path.isdir(path): + if os.path.isabs(path): + cwd = os.path.abspath(path) + abs = True + else: + cwd = relpath(path) + else: + cwd = os.getcwd() + + try: + cwd = cwd.encode("utf8") + except: + pass + + cwd = os.path.normpath(os.path.abspath(cwd)) + parentdir = os.path.dirname(cwd) + if not abs: + if os.path.abspath(cwd) == "/": + cwd = relpath(cwd) + else: + cwd = relpath(cwd) + os.path.sep + parentdir = relpath(parentdir) + os.path.sep + + if os.path.abspath(cwd) == "/": + parentdir = "" + + try: + folders = os.listdir(cwd) + except: + folders = [] + + files = [] + + for f in folders: + try: + f = f.decode(getfilesystemencoding()) + data = {'name': f, 'fullpath': join(cwd, f)} + data['sort'] = data['fullpath'].lower() + data['modified'] = datetime.fromtimestamp(int(os.path.getmtime(join(cwd, f)))) + data['ext'] = os.path.splitext(f)[1] + except: + continue + + if os.path.isdir(join(cwd, f)): + data['type'] = 'dir' + else: + data['type'] = 'file' + + if os.path.isfile(join(cwd, f)): + data['size'] = os.path.getsize(join(cwd, f)) + + power = 0 + while (data['size'] / 1024) > 0.3: + power += 1 + data['size'] /= 1024. + units = ('', 'K', 'M', 'G', 'T') + data['unit'] = units[power] + 'Byte' + else: + data['size'] = '' + + files.append(data) + + files = sorted(files, key=itemgetter('type', 'sort')) + + return render_to_response('pathchooser.html', + {'cwd': cwd, 'files': files, 'parentdir': parentdir, 'type': type, 'oldfile': oldfile, + 'absolute': abs}, []) + + +@route('/logs') +@route('/logs', method='POST') +@route('/logs/<item>') +@route('/logs/<item>', method='POST') +@login_required('LOGS') +def logs(item=-1): + s = request.environ.get('beaker.session') + + perpage = s.get('perpage', 34) + reversed = s.get('reversed', False) + + warning = "" + conf = PYLOAD.getConfigValue("log", "file_log") + if not conf: + warning = "Warning: File log is disabled, see settings page." + + perpage_p = ((20, 20), (34, 34), (40, 40), (100, 100), (0, 'all')) + fro = None + + if request.environ.get('REQUEST_METHOD', "GET") == "POST": + try: + fro = datetime.strptime(request.forms['from'], '%d.%m.%Y %H:%M:%S') + except: + pass + try: + perpage = int(request.forms['perpage']) + s['perpage'] = perpage + + reversed = bool(request.forms.get('reversed', False)) + s['reversed'] = reversed + except: + pass + + s.save() + + try: + item = int(item) + except: + pass + + log = PYLOAD.getLog() + if not perpage: + item = 0 + + if item < 1 or type(item) is not int: + item = 1 if len(log) - perpage + 1 < 1 else len(log) - perpage + 1 + + if type(fro) is datetime: # we will search for datetime + item = -1 + + data = [] + counter = 0 + perpagecheck = 0 + for l in log: + counter += 1 + + if counter >= item: + try: + date, time, level, message = l.decode("utf8", "ignore").split(" ", 3) + dtime = datetime.strptime(date + ' ' + time, '%d.%m.%Y %H:%M:%S') + except: + dtime = None + date = '?' + time = ' ' + level = '?' + message = l + if item == -1 and dtime is not None and fro <= dtime: + item = counter #found our datetime + if item >= 0: + data.append({'line': counter, 'date': date + " " + time, 'level': level, 'message': message}) + perpagecheck += 1 + if fro is None and dtime is not None: #if fro not set set it to first showed line + fro = dtime + if perpagecheck >= perpage > 0: + break + + if fro is None: #still not set, empty log? + fro = datetime.now() + if reversed: + data.reverse() + return render_to_response('logs.html', {'warning': warning, 'log': data, 'from': fro.strftime('%d.%m.%Y %H:%M:%S'), + 'reversed': reversed, 'perpage': perpage, 'perpage_p': sorted(perpage_p), + 'iprev': 1 if item - perpage < 1 else item - perpage, + 'inext': (item + perpage) if item + perpage < len(log) else item}, + [pre_processor]) + + +@route('/admin') +@route('/admin', method='POST') +@login_required("ADMIN") +def admin(): + # convert to dict + user = dict([(name, toDict(y)) for name, y in PYLOAD.getAllUserData().iteritems()]) + perms = permlist() + + for data in user.itervalues(): + data["perms"] = {} + get_permission(data["perms"], data["permission"]) + data["perms"]["admin"] = True if data["role"] is 0 else False + + + s = request.environ.get('beaker.session') + if request.environ.get('REQUEST_METHOD', "GET") == "POST": + for name in user: + if request.POST.get("%s|admin" % name, False): + user[name]["role"] = 0 + user[name]["perms"]["admin"] = True + elif name != s["name"]: + user[name]["role"] = 1 + user[name]["perms"]["admin"] = False + + # set all perms to false + for perm in perms: + user[name]["perms"][perm] = False + + for perm in request.POST.getall("%s|perms" % name): + user[name]["perms"][perm] = True + + user[name]["permission"] = set_permission(user[name]["perms"]) + + PYLOAD.setUserPermission(name, user[name]["permission"], user[name]["role"]) + + return render_to_response("admin.html", {"users": user, "permlist": perms}, [pre_processor]) + + +@route('/setup') +def setup(): + return base([_("Run pyload.py -s to access the setup.")]) + + +@route('/info') +def info(): + conf = PYLOAD.getConfigDict() + + if hasattr(os, "uname"): + extra = os.uname() + else: + extra = tuple() + + data = {"python": sys.version, + "os": " ".join((os.name, sys.platform) + extra), + "version": PYLOAD.getServerVersion(), + "folder": abspath(PYLOAD_DIR), "config": abspath(""), + "download": abspath(conf["general"]["download_folder"]["value"]), + "freespace": formatSize(PYLOAD.freeSpace()), + "remote": conf["remote"]["port"]["value"], + "webif": conf["webinterface"]["port"]["value"], + "language": conf["general"]["language"]["value"]} + + return render_to_response("info.html", data, [pre_processor]) diff --git a/pyload/webui/app/utils.py b/pyload/webui/app/utils.py new file mode 100644 index 000000000..895696c19 --- /dev/null +++ b/pyload/webui/app/utils.py @@ -0,0 +1,138 @@ +# -*- coding: utf-8 -*- +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this plrogram; if not, see <http://www.gnu.org/licenses/>. + + @author: RaNaN +""" + +from os.path import join + +from bottle import request, HTTPError, redirect, ServerAdapter + +from pyload.webui import env, THEME + +from pyload.Api import has_permission, PERMS, ROLE + +def render_to_response(file, args={}, proc=[]): + for p in proc: + args.update(p()) + path = join(THEME, "tml", file) + return env.get_template(path).render(**args) + + +def parse_permissions(session): + perms = dict([(x, False) for x in dir(PERMS) if not x.startswith("_")]) + perms["ADMIN"] = False + perms["is_admin"] = False + + if not session.get("authenticated", False): + return perms + + if session.get("role") == ROLE.ADMIN: + for k in perms.iterkeys(): + perms[k] = True + + elif session.get("perms"): + p = session.get("perms") + get_permission(perms, p) + + return perms + + +def permlist(): + return [x for x in dir(PERMS) if not x.startswith("_") and x != "ALL"] + + +def get_permission(perms, p): + """Returns a dict with permission key + + :param perms: dictionary + :param p: bits + """ + for name in permlist(): + perms[name] = has_permission(p, getattr(PERMS, name)) + + +def set_permission(perms): + """generates permission bits from dictionary + + :param perms: dict + """ + permission = 0 + for name in dir(PERMS): + if name.startswith("_"): continue + + if name in perms and perms[name]: + permission |= getattr(PERMS, name) + + return permission + + +def set_session(request, info): + s = request.environ.get('beaker.session') + s["authenticated"] = True + s["user_id"] = info["id"] + s["name"] = info["name"] + s["role"] = info["role"] + s["perms"] = info["permission"] + s["template"] = info["template"] + s.save() + + return s + + +def parse_userdata(session): + return {"name": session.get("name", "Anonymous"), + "is_admin": True if session.get("role", 1) == 0 else False, + "is_authenticated": session.get("authenticated", False)} + + +def login_required(perm=None): + def _dec(func): + def _view(*args, **kwargs): + s = request.environ.get('beaker.session') + if s.get("name", None) and s.get("authenticated", False): + if perm: + perms = parse_permissions(s) + if perm not in perms or not perms[perm]: + if request.headers.get('X-Requested-With') == 'XMLHttpRequest': + return HTTPError(403, "Forbidden") + else: + return redirect("/nopermission") + + return func(*args, **kwargs) + else: + if request.headers.get('X-Requested-With') == 'XMLHttpRequest': + return HTTPError(403, "Forbidden") + else: + return redirect("/login") + + return _view + + return _dec + + +def toDict(obj): + ret = {} + for att in obj.__slots__: + ret[att] = getattr(obj, att) + return ret + + +class CherryPyWSGI(ServerAdapter): + def run(self, handler): + from wsgiserver import CherryPyWSGIServer + + server = CherryPyWSGIServer((self.host, self.port), handler) + server.start() diff --git a/module/webui/filters.py b/pyload/webui/filters.py index c5e9447ee..c5e9447ee 100644 --- a/module/webui/filters.py +++ b/pyload/webui/filters.py diff --git a/module/webui/middlewares.py b/pyload/webui/middlewares.py index 5f56f81ee..5f56f81ee 100644 --- a/module/webui/middlewares.py +++ b/pyload/webui/middlewares.py diff --git a/pyload/webui/servers/lighttpd_default.conf b/pyload/webui/servers/lighttpd_default.conf new file mode 100644 index 000000000..d4cc00629 --- /dev/null +++ b/pyload/webui/servers/lighttpd_default.conf @@ -0,0 +1,153 @@ +# lighttpd configuration file +# +# use it as a base for lighttpd 1.0.0 and above +# +# $Id: lighttpd.conf,v 1.7 2004/11/03 22:26:05 weigon Exp $ + +############ Options you really have to take care of #################### + +## modules to load +# at least mod_access and mod_accesslog should be loaded +# all other module should only be loaded if really neccesary +# - saves some time +# - saves memory +server.modules = ( + "mod_rewrite", + "mod_redirect", + "mod_alias", + "mod_access", +# "mod_trigger_b4_dl", +# "mod_auth", +# "mod_status", +# "mod_setenv", + "mod_fastcgi", +# "mod_proxy", +# "mod_simple_vhost", +# "mod_evhost", +# "mod_userdir", +# "mod_cgi", +# "mod_compress", +# "mod_ssi", +# "mod_usertrack", +# "mod_expire", +# "mod_secdownload", +# "mod_rrdtool", +# "mod_accesslog" + ) + +## A static document-root. For virtual hosting take a look at the +## mod_simple_vhost pyload. +server.document-root = "%(path)" + +## where to send error-messages to +server.errorlog = "%(path)/error.log" + +# files to check for if .../ is requested +index-file.names = ( "index.php", "index.html", + "index.htm", "default.htm" ) + +## set the event-handler (read the performance section in the manual) +# server.event-handler = "freebsd-kqueue" # needed on OS X + +# mimetype mapping +mimetype.assign = ( + ".pdf" => "application/pdf", + ".sig" => "application/pgp-signature", + ".spl" => "application/futuresplash", + ".class" => "application/octet-stream", + ".ps" => "application/postscript", + ".torrent" => "application/x-bittorrent", + ".dvi" => "application/x-dvi", + ".gz" => "application/x-gzip", + ".pac" => "application/x-ns-proxy-autoconfig", + ".swf" => "application/x-shockwave-flash", + ".tar.gz" => "application/x-tgz", + ".tgz" => "application/x-tgz", + ".tar" => "application/x-tar", + ".zip" => "application/zip", + ".mp3" => "audio/mpeg", + ".m3u" => "audio/x-mpegurl", + ".wma" => "audio/x-ms-wma", + ".wax" => "audio/x-ms-wax", + ".ogg" => "application/ogg", + ".wav" => "audio/x-wav", + ".gif" => "image/gif", + ".jar" => "application/x-java-archive", + ".jpg" => "image/jpeg", + ".jpeg" => "image/jpeg", + ".png" => "image/png", + ".xbm" => "image/x-xbitmap", + ".xpm" => "image/x-xpixmap", + ".xwd" => "image/x-xwindowdump", + ".css" => "text/css", + ".html" => "text/html", + ".htm" => "text/html", + ".js" => "text/javascript", + ".asc" => "text/plain", + ".c" => "text/plain", + ".cpp" => "text/plain", + ".log" => "text/plain", + ".conf" => "text/plain", + ".text" => "text/plain", + ".txt" => "text/plain", + ".dtd" => "text/xml", + ".xml" => "text/xml", + ".mpeg" => "video/mpeg", + ".mpg" => "video/mpeg", + ".mov" => "video/quicktime", + ".qt" => "video/quicktime", + ".avi" => "video/x-msvideo", + ".asf" => "video/x-ms-asf", + ".asx" => "video/x-ms-asf", + ".wmv" => "video/x-ms-wmv", + ".bz2" => "application/x-bzip", + ".tbz" => "application/x-bzip-compressed-tar", + ".tar.bz2" => "application/x-bzip-compressed-tar", + # default mime type + "" => "application/octet-stream", + ) + +# Use the "Content-Type" extended attribute to obtain mime type if possible +#mimetype.use-xattr = "enable" + +#### accesslog module +accesslog.filename = "%(path)/access.log" + +url.access-deny = ( "~", ".inc" ) + +$HTTP["url"] =~ "\.pdf$" { + server.range-requests = "disable" +} +static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" ) + +server.pid-file = "%(path)/lighttpd.pid" + +server.bind = "%(host)" +server.port = %(port) + +#server.document-root = "/home/user/public_html" +fastcgi.server = ( + "/pyload.fcgi" => ( + "main" => ( + "host" => "127.0.0.1", + "port" => 9295, + "check-local" => "disable", + "docroot" => "/", + ) + ), +) + +alias.url = ( + "/media/" => "%(media)/", + "/admin/media/" => "/usr/lib/python%(version)/site-packages/django/contrib/admin/media/", +) + +url.rewrite-once = ( + "^(/media.*)$" => "$1", + "^(/admin/media.*)$" => "$1", + "^/favicon\.ico$" => "/media/img/favicon.ico", + "^(/pyload.fcgi.*)$" => "$1", + "^(/.*)$" => "/pyload.fcgi$1", +) + +%(ssl) diff --git a/module/webui/servers/nginx_default.conf b/pyload/webui/servers/nginx_default.conf index b4ebd1e02..b4ebd1e02 100644 --- a/module/webui/servers/nginx_default.conf +++ b/pyload/webui/servers/nginx_default.conf diff --git a/module/webui/themes/dark/css/MooDialog.css b/pyload/webui/themes/dark/css/MooDialog.css index dd0c0a601..dd0c0a601 100644 --- a/module/webui/themes/dark/css/MooDialog.css +++ b/pyload/webui/themes/dark/css/MooDialog.css diff --git a/module/webui/themes/dark/css/dark.css b/pyload/webui/themes/dark/css/dark.css index ca16d0621..ca16d0621 100644 --- a/module/webui/themes/dark/css/dark.css +++ b/pyload/webui/themes/dark/css/dark.css diff --git a/module/webui/themes/dark/css/log.css b/pyload/webui/themes/dark/css/log.css index 41aa19616..41aa19616 100644 --- a/module/webui/themes/dark/css/log.css +++ b/pyload/webui/themes/dark/css/log.css diff --git a/module/webui/themes/dark/css/pathchooser.css b/pyload/webui/themes/dark/css/pathchooser.css index 894cc335e..894cc335e 100644 --- a/module/webui/themes/dark/css/pathchooser.css +++ b/pyload/webui/themes/dark/css/pathchooser.css diff --git a/module/webui/themes/dark/css/window.css b/pyload/webui/themes/dark/css/window.css index 11ba84b39..11ba84b39 100644 --- a/module/webui/themes/dark/css/window.css +++ b/pyload/webui/themes/dark/css/window.css diff --git a/module/webui/themes/dark/img/MooDialog/dialog-close.png b/pyload/webui/themes/dark/img/MooDialog/dialog-close.png Binary files differindex 81ebb88b2..81ebb88b2 100644 --- a/module/webui/themes/dark/img/MooDialog/dialog-close.png +++ b/pyload/webui/themes/dark/img/MooDialog/dialog-close.png diff --git a/module/webui/themes/dark/img/MooDialog/dialog-error.png b/pyload/webui/themes/dark/img/MooDialog/dialog-error.png Binary files differindex d70328403..d70328403 100644 --- a/module/webui/themes/dark/img/MooDialog/dialog-error.png +++ b/pyload/webui/themes/dark/img/MooDialog/dialog-error.png diff --git a/module/webui/themes/dark/img/MooDialog/dialog-question.png b/pyload/webui/themes/dark/img/MooDialog/dialog-question.png Binary files differindex b0af3db5b..b0af3db5b 100644 --- a/module/webui/themes/dark/img/MooDialog/dialog-question.png +++ b/pyload/webui/themes/dark/img/MooDialog/dialog-question.png diff --git a/module/webui/themes/dark/img/MooDialog/dialog-warning.png b/pyload/webui/themes/dark/img/MooDialog/dialog-warning.png Binary files differindex aad64d4be..aad64d4be 100644 --- a/module/webui/themes/dark/img/MooDialog/dialog-warning.png +++ b/pyload/webui/themes/dark/img/MooDialog/dialog-warning.png diff --git a/module/webui/themes/dark/img/button.png b/pyload/webui/themes/dark/img/button.png Binary files differindex bb408a7d6..bb408a7d6 100644 --- a/module/webui/themes/dark/img/button.png +++ b/pyload/webui/themes/dark/img/button.png diff --git a/module/webui/themes/dark/img/dark-bg.jpg b/pyload/webui/themes/dark/img/dark-bg.jpg Binary files differindex 637fa6b93..637fa6b93 100644 --- a/module/webui/themes/dark/img/dark-bg.jpg +++ b/pyload/webui/themes/dark/img/dark-bg.jpg diff --git a/module/webui/themes/dark/img/default/add_folder.png b/pyload/webui/themes/dark/img/default/add_folder.png Binary files differindex 8acbc411b..8acbc411b 100644 --- a/module/webui/themes/dark/img/default/add_folder.png +++ b/pyload/webui/themes/dark/img/default/add_folder.png diff --git a/module/webui/themes/dark/img/default/ajax-loader.gif b/pyload/webui/themes/dark/img/default/ajax-loader.gif Binary files differindex 2fd8e0737..2fd8e0737 100644 --- a/module/webui/themes/dark/img/default/ajax-loader.gif +++ b/pyload/webui/themes/dark/img/default/ajax-loader.gif diff --git a/module/webui/themes/dark/img/default/arrow_refresh.png b/pyload/webui/themes/dark/img/default/arrow_refresh.png Binary files differindex 0de26566d..0de26566d 100644 --- a/module/webui/themes/dark/img/default/arrow_refresh.png +++ b/pyload/webui/themes/dark/img/default/arrow_refresh.png diff --git a/module/webui/themes/dark/img/default/arrow_right.png b/pyload/webui/themes/dark/img/default/arrow_right.png Binary files differindex b1a181923..b1a181923 100644 --- a/module/webui/themes/dark/img/default/arrow_right.png +++ b/pyload/webui/themes/dark/img/default/arrow_right.png diff --git a/module/webui/themes/dark/img/default/big_button.gif b/pyload/webui/themes/dark/img/default/big_button.gif Binary files differindex 7680490ea..7680490ea 100644 --- a/module/webui/themes/dark/img/default/big_button.gif +++ b/pyload/webui/themes/dark/img/default/big_button.gif diff --git a/module/webui/themes/dark/img/default/big_button_over.gif b/pyload/webui/themes/dark/img/default/big_button_over.gif Binary files differindex 2e3ee10d2..2e3ee10d2 100644 --- a/module/webui/themes/dark/img/default/big_button_over.gif +++ b/pyload/webui/themes/dark/img/default/big_button_over.gif diff --git a/module/webui/themes/dark/img/default/body.png b/pyload/webui/themes/dark/img/default/body.png Binary files differindex 7ff1043e0..7ff1043e0 100644 --- a/module/webui/themes/dark/img/default/body.png +++ b/pyload/webui/themes/dark/img/default/body.png diff --git a/module/webui/themes/dark/img/default/closebtn.gif b/pyload/webui/themes/dark/img/default/closebtn.gif Binary files differindex 3e27e6030..3e27e6030 100644 --- a/module/webui/themes/dark/img/default/closebtn.gif +++ b/pyload/webui/themes/dark/img/default/closebtn.gif diff --git a/module/webui/themes/dark/img/default/cog.png b/pyload/webui/themes/dark/img/default/cog.png Binary files differindex 67de2c6cc..67de2c6cc 100644 --- a/module/webui/themes/dark/img/default/cog.png +++ b/pyload/webui/themes/dark/img/default/cog.png diff --git a/module/webui/themes/dark/img/default/control_add.png b/pyload/webui/themes/dark/img/default/control_add.png Binary files differindex d39886893..d39886893 100644 --- a/module/webui/themes/dark/img/default/control_add.png +++ b/pyload/webui/themes/dark/img/default/control_add.png diff --git a/module/webui/themes/dark/img/default/control_add_blue.png b/pyload/webui/themes/dark/img/default/control_add_blue.png Binary files differindex d11b7f41d..d11b7f41d 100644 --- a/module/webui/themes/dark/img/default/control_add_blue.png +++ b/pyload/webui/themes/dark/img/default/control_add_blue.png diff --git a/module/webui/themes/dark/img/default/control_cancel.png b/pyload/webui/themes/dark/img/default/control_cancel.png Binary files differindex 7b9bc3fba..7b9bc3fba 100644 --- a/module/webui/themes/dark/img/default/control_cancel.png +++ b/pyload/webui/themes/dark/img/default/control_cancel.png diff --git a/module/webui/themes/dark/img/default/control_cancel_blue.png b/pyload/webui/themes/dark/img/default/control_cancel_blue.png Binary files differindex 0c5c96ce3..0c5c96ce3 100644 --- a/module/webui/themes/dark/img/default/control_cancel_blue.png +++ b/pyload/webui/themes/dark/img/default/control_cancel_blue.png diff --git a/module/webui/themes/dark/img/default/control_pause.png b/pyload/webui/themes/dark/img/default/control_pause.png Binary files differindex 2d9ce9c4e..2d9ce9c4e 100644 --- a/module/webui/themes/dark/img/default/control_pause.png +++ b/pyload/webui/themes/dark/img/default/control_pause.png diff --git a/module/webui/themes/dark/img/default/control_pause_blue.png b/pyload/webui/themes/dark/img/default/control_pause_blue.png Binary files differindex ec61099b0..ec61099b0 100644 --- a/module/webui/themes/dark/img/default/control_pause_blue.png +++ b/pyload/webui/themes/dark/img/default/control_pause_blue.png diff --git a/module/webui/themes/dark/img/default/control_play.png b/pyload/webui/themes/dark/img/default/control_play.png Binary files differindex 0846555d0..0846555d0 100644 --- a/module/webui/themes/dark/img/default/control_play.png +++ b/pyload/webui/themes/dark/img/default/control_play.png diff --git a/module/webui/themes/dark/img/default/control_play_blue.png b/pyload/webui/themes/dark/img/default/control_play_blue.png Binary files differindex f8c8ec683..f8c8ec683 100644 --- a/module/webui/themes/dark/img/default/control_play_blue.png +++ b/pyload/webui/themes/dark/img/default/control_play_blue.png diff --git a/module/webui/themes/dark/img/default/control_stop.png b/pyload/webui/themes/dark/img/default/control_stop.png Binary files differindex 893bb60e5..893bb60e5 100644 --- a/module/webui/themes/dark/img/default/control_stop.png +++ b/pyload/webui/themes/dark/img/default/control_stop.png diff --git a/module/webui/themes/dark/img/default/control_stop_blue.png b/pyload/webui/themes/dark/img/default/control_stop_blue.png Binary files differindex e6f75d232..e6f75d232 100644 --- a/module/webui/themes/dark/img/default/control_stop_blue.png +++ b/pyload/webui/themes/dark/img/default/control_stop_blue.png diff --git a/module/webui/themes/dark/img/default/delete.png b/pyload/webui/themes/dark/img/default/delete.png Binary files differindex 08f249365..08f249365 100644 --- a/module/webui/themes/dark/img/default/delete.png +++ b/pyload/webui/themes/dark/img/default/delete.png diff --git a/module/webui/themes/dark/img/default/drag_corner.gif b/pyload/webui/themes/dark/img/default/drag_corner.gif Binary files differindex befb1adf1..befb1adf1 100644 --- a/module/webui/themes/dark/img/default/drag_corner.gif +++ b/pyload/webui/themes/dark/img/default/drag_corner.gif diff --git a/module/webui/themes/dark/img/default/error.png b/pyload/webui/themes/dark/img/default/error.png Binary files differindex c37bd062e..c37bd062e 100644 --- a/module/webui/themes/dark/img/default/error.png +++ b/pyload/webui/themes/dark/img/default/error.png diff --git a/module/webui/themes/dark/img/default/folder.png b/pyload/webui/themes/dark/img/default/folder.png Binary files differindex 784e8fa48..784e8fa48 100644 --- a/module/webui/themes/dark/img/default/folder.png +++ b/pyload/webui/themes/dark/img/default/folder.png diff --git a/module/webui/themes/dark/img/default/full.png b/pyload/webui/themes/dark/img/default/full.png Binary files differindex fea52af76..fea52af76 100644 --- a/module/webui/themes/dark/img/default/full.png +++ b/pyload/webui/themes/dark/img/default/full.png diff --git a/module/webui/themes/dark/img/default/head-login.png b/pyload/webui/themes/dark/img/default/head-login.png Binary files differindex b59b7cbbf..b59b7cbbf 100644 --- a/module/webui/themes/dark/img/default/head-login.png +++ b/pyload/webui/themes/dark/img/default/head-login.png diff --git a/module/webui/themes/dark/img/default/head-menu-collector.png b/pyload/webui/themes/dark/img/default/head-menu-collector.png Binary files differindex 861be40bc..861be40bc 100644 --- a/module/webui/themes/dark/img/default/head-menu-collector.png +++ b/pyload/webui/themes/dark/img/default/head-menu-collector.png diff --git a/module/webui/themes/dark/img/default/head-menu-config.png b/pyload/webui/themes/dark/img/default/head-menu-config.png Binary files differindex bbf43d4f3..bbf43d4f3 100644 --- a/module/webui/themes/dark/img/default/head-menu-config.png +++ b/pyload/webui/themes/dark/img/default/head-menu-config.png diff --git a/module/webui/themes/dark/img/default/head-menu-development.png b/pyload/webui/themes/dark/img/default/head-menu-development.png Binary files differindex fad150fe1..fad150fe1 100644 --- a/module/webui/themes/dark/img/default/head-menu-development.png +++ b/pyload/webui/themes/dark/img/default/head-menu-development.png diff --git a/module/webui/themes/dark/img/default/head-menu-download.png b/pyload/webui/themes/dark/img/default/head-menu-download.png Binary files differindex 98c5da9db..98c5da9db 100644 --- a/module/webui/themes/dark/img/default/head-menu-download.png +++ b/pyload/webui/themes/dark/img/default/head-menu-download.png diff --git a/module/webui/themes/dark/img/default/head-menu-home.png b/pyload/webui/themes/dark/img/default/head-menu-home.png Binary files differindex 9d62109aa..9d62109aa 100644 --- a/module/webui/themes/dark/img/default/head-menu-home.png +++ b/pyload/webui/themes/dark/img/default/head-menu-home.png diff --git a/module/webui/themes/dark/img/default/head-menu-index.png b/pyload/webui/themes/dark/img/default/head-menu-index.png Binary files differindex 44d631064..44d631064 100644 --- a/module/webui/themes/dark/img/default/head-menu-index.png +++ b/pyload/webui/themes/dark/img/default/head-menu-index.png diff --git a/module/webui/themes/dark/img/default/head-menu-news.png b/pyload/webui/themes/dark/img/default/head-menu-news.png Binary files differindex 43950ebc9..43950ebc9 100644 --- a/module/webui/themes/dark/img/default/head-menu-news.png +++ b/pyload/webui/themes/dark/img/default/head-menu-news.png diff --git a/module/webui/themes/dark/img/default/head-menu-queue.png b/pyload/webui/themes/dark/img/default/head-menu-queue.png Binary files differindex be98793ce..be98793ce 100644 --- a/module/webui/themes/dark/img/default/head-menu-queue.png +++ b/pyload/webui/themes/dark/img/default/head-menu-queue.png diff --git a/module/webui/themes/dark/img/default/head-menu-recent.png b/pyload/webui/themes/dark/img/default/head-menu-recent.png Binary files differindex fc9b0497f..fc9b0497f 100644 --- a/module/webui/themes/dark/img/default/head-menu-recent.png +++ b/pyload/webui/themes/dark/img/default/head-menu-recent.png diff --git a/module/webui/themes/dark/img/default/head-menu-wiki.png b/pyload/webui/themes/dark/img/default/head-menu-wiki.png Binary files differindex 07cf0102d..07cf0102d 100644 --- a/module/webui/themes/dark/img/default/head-menu-wiki.png +++ b/pyload/webui/themes/dark/img/default/head-menu-wiki.png diff --git a/module/webui/themes/dark/img/default/head-search-noshadow.png b/pyload/webui/themes/dark/img/default/head-search-noshadow.png Binary files differindex aafdae015..aafdae015 100644 --- a/module/webui/themes/dark/img/default/head-search-noshadow.png +++ b/pyload/webui/themes/dark/img/default/head-search-noshadow.png diff --git a/module/webui/themes/dark/img/default/head_bg1.png b/pyload/webui/themes/dark/img/default/head_bg1.png Binary files differindex f2848c3cc..f2848c3cc 100644 --- a/module/webui/themes/dark/img/default/head_bg1.png +++ b/pyload/webui/themes/dark/img/default/head_bg1.png diff --git a/module/webui/themes/dark/img/default/images.png b/pyload/webui/themes/dark/img/default/images.png Binary files differindex 184860d1e..184860d1e 100644 --- a/module/webui/themes/dark/img/default/images.png +++ b/pyload/webui/themes/dark/img/default/images.png diff --git a/module/webui/themes/dark/img/default/notice.png b/pyload/webui/themes/dark/img/default/notice.png Binary files differindex 12cd1aef9..12cd1aef9 100644 --- a/module/webui/themes/dark/img/default/notice.png +++ b/pyload/webui/themes/dark/img/default/notice.png diff --git a/module/webui/themes/dark/img/default/package_go.png b/pyload/webui/themes/dark/img/default/package_go.png Binary files differindex aace63ad6..aace63ad6 100644 --- a/module/webui/themes/dark/img/default/package_go.png +++ b/pyload/webui/themes/dark/img/default/package_go.png diff --git a/module/webui/themes/dark/img/default/page-tools-backlinks.png b/pyload/webui/themes/dark/img/default/page-tools-backlinks.png Binary files differindex 3eb6a9ce3..3eb6a9ce3 100644 --- a/module/webui/themes/dark/img/default/page-tools-backlinks.png +++ b/pyload/webui/themes/dark/img/default/page-tools-backlinks.png diff --git a/module/webui/themes/dark/img/default/page-tools-edit.png b/pyload/webui/themes/dark/img/default/page-tools-edit.png Binary files differindex 188e1c12b..188e1c12b 100644 --- a/module/webui/themes/dark/img/default/page-tools-edit.png +++ b/pyload/webui/themes/dark/img/default/page-tools-edit.png diff --git a/module/webui/themes/dark/img/default/page-tools-revisions.png b/pyload/webui/themes/dark/img/default/page-tools-revisions.png Binary files differindex 5c3b8587f..5c3b8587f 100644 --- a/module/webui/themes/dark/img/default/page-tools-revisions.png +++ b/pyload/webui/themes/dark/img/default/page-tools-revisions.png diff --git a/module/webui/themes/dark/img/default/parseUri.png b/pyload/webui/themes/dark/img/default/parseUri.png Binary files differindex 937bded9d..937bded9d 100644 --- a/module/webui/themes/dark/img/default/parseUri.png +++ b/pyload/webui/themes/dark/img/default/parseUri.png diff --git a/module/webui/themes/dark/img/default/pencil.png b/pyload/webui/themes/dark/img/default/pencil.png Binary files differindex 0bfecd50e..0bfecd50e 100644 --- a/module/webui/themes/dark/img/default/pencil.png +++ b/pyload/webui/themes/dark/img/default/pencil.png diff --git a/module/webui/themes/dark/img/default/reconnect.png b/pyload/webui/themes/dark/img/default/reconnect.png Binary files differindex 49b269145..49b269145 100644 --- a/module/webui/themes/dark/img/default/reconnect.png +++ b/pyload/webui/themes/dark/img/default/reconnect.png diff --git a/module/webui/themes/dark/img/default/status_None.png b/pyload/webui/themes/dark/img/default/status_None.png Binary files differindex 293b13f77..293b13f77 100644 --- a/module/webui/themes/dark/img/default/status_None.png +++ b/pyload/webui/themes/dark/img/default/status_None.png diff --git a/module/webui/themes/dark/img/default/status_downloading.png b/pyload/webui/themes/dark/img/default/status_downloading.png Binary files differindex fb4ebc850..fb4ebc850 100644 --- a/module/webui/themes/dark/img/default/status_downloading.png +++ b/pyload/webui/themes/dark/img/default/status_downloading.png diff --git a/module/webui/themes/dark/img/default/status_failed.png b/pyload/webui/themes/dark/img/default/status_failed.png Binary files differindex c37bd062e..c37bd062e 100644 --- a/module/webui/themes/dark/img/default/status_failed.png +++ b/pyload/webui/themes/dark/img/default/status_failed.png diff --git a/module/webui/themes/dark/img/default/status_finished.png b/pyload/webui/themes/dark/img/default/status_finished.png Binary files differindex 89c8129a4..89c8129a4 100644 --- a/module/webui/themes/dark/img/default/status_finished.png +++ b/pyload/webui/themes/dark/img/default/status_finished.png diff --git a/module/webui/themes/dark/img/default/status_offline.png b/pyload/webui/themes/dark/img/default/status_offline.png Binary files differindex 0cfd58596..0cfd58596 100644 --- a/module/webui/themes/dark/img/default/status_offline.png +++ b/pyload/webui/themes/dark/img/default/status_offline.png diff --git a/module/webui/themes/dark/img/default/status_proc.png b/pyload/webui/themes/dark/img/default/status_proc.png Binary files differindex 67de2c6cc..67de2c6cc 100644 --- a/module/webui/themes/dark/img/default/status_proc.png +++ b/pyload/webui/themes/dark/img/default/status_proc.png diff --git a/module/webui/themes/dark/img/default/status_queue.png b/pyload/webui/themes/dark/img/default/status_queue.png Binary files differindex 293b13f77..293b13f77 100644 --- a/module/webui/themes/dark/img/default/status_queue.png +++ b/pyload/webui/themes/dark/img/default/status_queue.png diff --git a/module/webui/themes/dark/img/default/status_waiting.png b/pyload/webui/themes/dark/img/default/status_waiting.png Binary files differindex 2842cc338..2842cc338 100644 --- a/module/webui/themes/dark/img/default/status_waiting.png +++ b/pyload/webui/themes/dark/img/default/status_waiting.png diff --git a/module/webui/themes/dark/img/default/success.png b/pyload/webui/themes/dark/img/default/success.png Binary files differindex 89c8129a4..89c8129a4 100644 --- a/module/webui/themes/dark/img/default/success.png +++ b/pyload/webui/themes/dark/img/default/success.png diff --git a/module/webui/themes/dark/img/default/tabs-border-bottom.png b/pyload/webui/themes/dark/img/default/tabs-border-bottom.png Binary files differindex 02440f428..02440f428 100644 --- a/module/webui/themes/dark/img/default/tabs-border-bottom.png +++ b/pyload/webui/themes/dark/img/default/tabs-border-bottom.png diff --git a/module/webui/themes/dark/img/default/user-actions-logout.png b/pyload/webui/themes/dark/img/default/user-actions-logout.png Binary files differindex 0010931e2..0010931e2 100644 --- a/module/webui/themes/dark/img/default/user-actions-logout.png +++ b/pyload/webui/themes/dark/img/default/user-actions-logout.png diff --git a/module/webui/themes/dark/img/default/user-actions-profile.png b/pyload/webui/themes/dark/img/default/user-actions-profile.png Binary files differindex 46573fff6..46573fff6 100644 --- a/module/webui/themes/dark/img/default/user-actions-profile.png +++ b/pyload/webui/themes/dark/img/default/user-actions-profile.png diff --git a/module/webui/themes/dark/img/default/user-info.png b/pyload/webui/themes/dark/img/default/user-info.png Binary files differindex 6e643100f..6e643100f 100644 --- a/module/webui/themes/dark/img/default/user-info.png +++ b/pyload/webui/themes/dark/img/default/user-info.png diff --git a/module/webui/themes/dark/img/pyload-logo.png b/pyload/webui/themes/dark/img/pyload-logo.png Binary files differindex e878afee5..e878afee5 100644 --- a/module/webui/themes/dark/img/pyload-logo.png +++ b/pyload/webui/themes/dark/img/pyload-logo.png diff --git a/module/webui/themes/dark/img/tab-background.png b/pyload/webui/themes/dark/img/tab-background.png Binary files differindex ee96b8407..ee96b8407 100644 --- a/module/webui/themes/dark/img/tab-background.png +++ b/pyload/webui/themes/dark/img/tab-background.png diff --git a/module/webui/themes/dark/js/render/admin.coffee b/pyload/webui/themes/dark/js/render/admin.coffee index 5afbcbb66..5afbcbb66 100644 --- a/module/webui/themes/dark/js/render/admin.coffee +++ b/pyload/webui/themes/dark/js/render/admin.coffee diff --git a/module/webui/themes/dark/js/render/admin.min.js b/pyload/webui/themes/dark/js/render/admin.min.js index 94a5e494d..94a5e494d 100644 --- a/module/webui/themes/dark/js/render/admin.min.js +++ b/pyload/webui/themes/dark/js/render/admin.min.js diff --git a/module/webui/themes/dark/js/render/base.coffee b/pyload/webui/themes/dark/js/render/base.coffee index 07b8bfb6f..07b8bfb6f 100644 --- a/module/webui/themes/dark/js/render/base.coffee +++ b/pyload/webui/themes/dark/js/render/base.coffee diff --git a/module/webui/themes/dark/js/render/base.min.js b/pyload/webui/themes/dark/js/render/base.min.js index 1ba1d73f9..1ba1d73f9 100644 --- a/module/webui/themes/dark/js/render/base.min.js +++ b/pyload/webui/themes/dark/js/render/base.min.js diff --git a/module/webui/themes/dark/js/render/package.js b/pyload/webui/themes/dark/js/render/package.js index 659a8e6fc..659a8e6fc 100644 --- a/module/webui/themes/dark/js/render/package.js +++ b/pyload/webui/themes/dark/js/render/package.js diff --git a/module/webui/themes/dark/js/render/settings.coffee b/pyload/webui/themes/dark/js/render/settings.coffee index d522741b9..d522741b9 100644 --- a/module/webui/themes/dark/js/render/settings.coffee +++ b/pyload/webui/themes/dark/js/render/settings.coffee diff --git a/module/webui/themes/dark/js/render/settings.min.js b/pyload/webui/themes/dark/js/render/settings.min.js index 41d1cb25a..41d1cb25a 100644 --- a/module/webui/themes/dark/js/render/settings.min.js +++ b/pyload/webui/themes/dark/js/render/settings.min.js diff --git a/module/webui/themes/dark/js/static/MooDialog.js b/pyload/webui/themes/dark/js/static/MooDialog.js index 45a52496f..45a52496f 100644 --- a/module/webui/themes/dark/js/static/MooDialog.js +++ b/pyload/webui/themes/dark/js/static/MooDialog.js diff --git a/module/webui/themes/dark/js/static/MooDialog.min.js b/pyload/webui/themes/dark/js/static/MooDialog.min.js index 90b3ae100..90b3ae100 100644 --- a/module/webui/themes/dark/js/static/MooDialog.min.js +++ b/pyload/webui/themes/dark/js/static/MooDialog.min.js diff --git a/module/webui/themes/dark/js/static/MooDropMenu.js b/pyload/webui/themes/dark/js/static/MooDropMenu.js index ac0fa1874..ac0fa1874 100644 --- a/module/webui/themes/dark/js/static/MooDropMenu.js +++ b/pyload/webui/themes/dark/js/static/MooDropMenu.js diff --git a/module/webui/themes/dark/js/static/MooDropMenu.min.js b/pyload/webui/themes/dark/js/static/MooDropMenu.min.js index 552ae247a..552ae247a 100644 --- a/module/webui/themes/dark/js/static/MooDropMenu.min.js +++ b/pyload/webui/themes/dark/js/static/MooDropMenu.min.js diff --git a/module/webui/themes/dark/js/static/mootools-core.js b/pyload/webui/themes/dark/js/static/mootools-core.js index db83850fd..db83850fd 100644 --- a/module/webui/themes/dark/js/static/mootools-core.js +++ b/pyload/webui/themes/dark/js/static/mootools-core.js diff --git a/module/webui/themes/dark/js/static/mootools-core.min.js b/pyload/webui/themes/dark/js/static/mootools-core.min.js index 354f94196..354f94196 100644 --- a/module/webui/themes/dark/js/static/mootools-core.min.js +++ b/pyload/webui/themes/dark/js/static/mootools-core.min.js diff --git a/module/webui/themes/dark/js/static/mootools-more.js b/pyload/webui/themes/dark/js/static/mootools-more.js index c7f4a1a0e..c7f4a1a0e 100644 --- a/module/webui/themes/dark/js/static/mootools-more.js +++ b/pyload/webui/themes/dark/js/static/mootools-more.js diff --git a/module/webui/themes/dark/js/static/mootools-more.min.js b/pyload/webui/themes/dark/js/static/mootools-more.min.js index ce03a60fd..ce03a60fd 100644 --- a/module/webui/themes/dark/js/static/mootools-more.min.js +++ b/pyload/webui/themes/dark/js/static/mootools-more.min.js diff --git a/module/webui/themes/dark/js/static/purr.js b/pyload/webui/themes/dark/js/static/purr.js index 9cbc503d9..9cbc503d9 100644 --- a/module/webui/themes/dark/js/static/purr.js +++ b/pyload/webui/themes/dark/js/static/purr.js diff --git a/module/webui/themes/dark/js/static/purr.min.js b/pyload/webui/themes/dark/js/static/purr.min.js index bf70e357d..bf70e357d 100644 --- a/module/webui/themes/dark/js/static/purr.min.js +++ b/pyload/webui/themes/dark/js/static/purr.min.js diff --git a/module/webui/themes/dark/js/static/tinytab.js b/pyload/webui/themes/dark/js/static/tinytab.js index de50279fc..de50279fc 100644 --- a/module/webui/themes/dark/js/static/tinytab.js +++ b/pyload/webui/themes/dark/js/static/tinytab.js diff --git a/module/webui/themes/dark/js/static/tinytab.min.js b/pyload/webui/themes/dark/js/static/tinytab.min.js index 2f4fa0436..2f4fa0436 100644 --- a/module/webui/themes/dark/js/static/tinytab.min.js +++ b/pyload/webui/themes/dark/js/static/tinytab.min.js diff --git a/module/webui/themes/dark/tml/admin.html b/pyload/webui/themes/dark/tml/admin.html index 42118eda4..42118eda4 100644 --- a/module/webui/themes/dark/tml/admin.html +++ b/pyload/webui/themes/dark/tml/admin.html diff --git a/module/webui/themes/dark/tml/base.html b/pyload/webui/themes/dark/tml/base.html index e7179acfa..e7179acfa 100644 --- a/module/webui/themes/dark/tml/base.html +++ b/pyload/webui/themes/dark/tml/base.html diff --git a/module/webui/themes/dark/tml/captcha.html b/pyload/webui/themes/dark/tml/captcha.html index ae1afe444..ae1afe444 100644 --- a/module/webui/themes/dark/tml/captcha.html +++ b/pyload/webui/themes/dark/tml/captcha.html diff --git a/module/webui/themes/dark/tml/downloads.html b/pyload/webui/themes/dark/tml/downloads.html index 0c7fb9209..0c7fb9209 100644 --- a/module/webui/themes/dark/tml/downloads.html +++ b/pyload/webui/themes/dark/tml/downloads.html diff --git a/module/webui/themes/dark/tml/folder.html b/pyload/webui/themes/dark/tml/folder.html index 05176d51e..05176d51e 100644 --- a/module/webui/themes/dark/tml/folder.html +++ b/pyload/webui/themes/dark/tml/folder.html diff --git a/module/webui/themes/dark/tml/home.html b/pyload/webui/themes/dark/tml/home.html index b350b705e..b350b705e 100644 --- a/module/webui/themes/dark/tml/home.html +++ b/pyload/webui/themes/dark/tml/home.html diff --git a/module/webui/themes/dark/tml/info.html b/pyload/webui/themes/dark/tml/info.html index 7ff2b639b..7ff2b639b 100644 --- a/module/webui/themes/dark/tml/info.html +++ b/pyload/webui/themes/dark/tml/info.html diff --git a/module/webui/themes/dark/tml/login.html b/pyload/webui/themes/dark/tml/login.html index 9f5e2cb2f..9f5e2cb2f 100644 --- a/module/webui/themes/dark/tml/login.html +++ b/pyload/webui/themes/dark/tml/login.html diff --git a/module/webui/themes/dark/tml/logout.html b/pyload/webui/themes/dark/tml/logout.html index 5320e07f5..5320e07f5 100644 --- a/module/webui/themes/dark/tml/logout.html +++ b/pyload/webui/themes/dark/tml/logout.html diff --git a/module/webui/themes/dark/tml/logs.html b/pyload/webui/themes/dark/tml/logs.html index e178c6c5c..e178c6c5c 100644 --- a/module/webui/themes/dark/tml/logs.html +++ b/pyload/webui/themes/dark/tml/logs.html diff --git a/module/webui/themes/dark/tml/pathchooser.html b/pyload/webui/themes/dark/tml/pathchooser.html index 2b94f1019..2b94f1019 100644 --- a/module/webui/themes/dark/tml/pathchooser.html +++ b/pyload/webui/themes/dark/tml/pathchooser.html diff --git a/module/webui/themes/dark/tml/queue.html b/pyload/webui/themes/dark/tml/queue.html index f68079106..f68079106 100644 --- a/module/webui/themes/dark/tml/queue.html +++ b/pyload/webui/themes/dark/tml/queue.html diff --git a/module/webui/themes/dark/tml/settings.html b/pyload/webui/themes/dark/tml/settings.html index c9c0bed8a..c9c0bed8a 100644 --- a/module/webui/themes/dark/tml/settings.html +++ b/pyload/webui/themes/dark/tml/settings.html diff --git a/module/webui/themes/dark/tml/settings_item.html b/pyload/webui/themes/dark/tml/settings_item.html index e417e564c..e417e564c 100644 --- a/module/webui/themes/dark/tml/settings_item.html +++ b/pyload/webui/themes/dark/tml/settings_item.html diff --git a/module/webui/themes/dark/tml/window.html b/pyload/webui/themes/dark/tml/window.html index 0b4f5362b..0b4f5362b 100644 --- a/module/webui/themes/dark/tml/window.html +++ b/pyload/webui/themes/dark/tml/window.html diff --git a/module/webui/themes/default/css/MooDialog.css b/pyload/webui/themes/default/css/MooDialog.css index d26bf2ff2..d26bf2ff2 100644 --- a/module/webui/themes/default/css/MooDialog.css +++ b/pyload/webui/themes/default/css/MooDialog.css diff --git a/module/webui/themes/default/css/default.css b/pyload/webui/themes/default/css/default.css index 5d4b9ebf2..5d4b9ebf2 100644 --- a/module/webui/themes/default/css/default.css +++ b/pyload/webui/themes/default/css/default.css diff --git a/module/webui/themes/default/css/log.css b/pyload/webui/themes/default/css/log.css index 26449b244..26449b244 100644 --- a/module/webui/themes/default/css/log.css +++ b/pyload/webui/themes/default/css/log.css diff --git a/module/webui/themes/default/css/pathchooser.css b/pyload/webui/themes/default/css/pathchooser.css index 894cc335e..894cc335e 100644 --- a/module/webui/themes/default/css/pathchooser.css +++ b/pyload/webui/themes/default/css/pathchooser.css diff --git a/module/webui/themes/default/css/window.css b/pyload/webui/themes/default/css/window.css index 12829868b..12829868b 100644 --- a/module/webui/themes/default/css/window.css +++ b/pyload/webui/themes/default/css/window.css diff --git a/module/webui/themes/default/img/MooDialog/dialog-close.png b/pyload/webui/themes/default/img/MooDialog/dialog-close.png Binary files differindex 81ebb88b2..81ebb88b2 100644 --- a/module/webui/themes/default/img/MooDialog/dialog-close.png +++ b/pyload/webui/themes/default/img/MooDialog/dialog-close.png diff --git a/module/webui/themes/default/img/MooDialog/dialog-error.png b/pyload/webui/themes/default/img/MooDialog/dialog-error.png Binary files differindex d70328403..d70328403 100644 --- a/module/webui/themes/default/img/MooDialog/dialog-error.png +++ b/pyload/webui/themes/default/img/MooDialog/dialog-error.png diff --git a/module/webui/themes/default/img/MooDialog/dialog-question.png b/pyload/webui/themes/default/img/MooDialog/dialog-question.png Binary files differindex b0af3db5b..b0af3db5b 100644 --- a/module/webui/themes/default/img/MooDialog/dialog-question.png +++ b/pyload/webui/themes/default/img/MooDialog/dialog-question.png diff --git a/module/webui/themes/default/img/MooDialog/dialog-warning.png b/pyload/webui/themes/default/img/MooDialog/dialog-warning.png Binary files differindex aad64d4be..aad64d4be 100644 --- a/module/webui/themes/default/img/MooDialog/dialog-warning.png +++ b/pyload/webui/themes/default/img/MooDialog/dialog-warning.png diff --git a/module/webui/themes/default/img/add_folder.png b/pyload/webui/themes/default/img/add_folder.png Binary files differindex 8acbc411b..8acbc411b 100644 --- a/module/webui/themes/default/img/add_folder.png +++ b/pyload/webui/themes/default/img/add_folder.png diff --git a/module/webui/themes/default/img/ajax-loader.gif b/pyload/webui/themes/default/img/ajax-loader.gif Binary files differindex 2fd8e0737..2fd8e0737 100644 --- a/module/webui/themes/default/img/ajax-loader.gif +++ b/pyload/webui/themes/default/img/ajax-loader.gif diff --git a/module/webui/themes/default/img/arrow_refresh.png b/pyload/webui/themes/default/img/arrow_refresh.png Binary files differindex 0de26566d..0de26566d 100644 --- a/module/webui/themes/default/img/arrow_refresh.png +++ b/pyload/webui/themes/default/img/arrow_refresh.png diff --git a/module/webui/themes/default/img/arrow_right.png b/pyload/webui/themes/default/img/arrow_right.png Binary files differindex b1a181923..b1a181923 100644 --- a/module/webui/themes/default/img/arrow_right.png +++ b/pyload/webui/themes/default/img/arrow_right.png diff --git a/module/webui/themes/default/img/big_button.gif b/pyload/webui/themes/default/img/big_button.gif Binary files differindex 7680490ea..7680490ea 100644 --- a/module/webui/themes/default/img/big_button.gif +++ b/pyload/webui/themes/default/img/big_button.gif diff --git a/module/webui/themes/default/img/big_button_over.gif b/pyload/webui/themes/default/img/big_button_over.gif Binary files differindex 2e3ee10d2..2e3ee10d2 100644 --- a/module/webui/themes/default/img/big_button_over.gif +++ b/pyload/webui/themes/default/img/big_button_over.gif diff --git a/module/webui/themes/default/img/body.png b/pyload/webui/themes/default/img/body.png Binary files differindex 7ff1043e0..7ff1043e0 100644 --- a/module/webui/themes/default/img/body.png +++ b/pyload/webui/themes/default/img/body.png diff --git a/module/webui/themes/default/img/button.png b/pyload/webui/themes/default/img/button.png Binary files differindex 890160614..890160614 100644 --- a/module/webui/themes/default/img/button.png +++ b/pyload/webui/themes/default/img/button.png diff --git a/module/webui/themes/default/img/closebtn.gif b/pyload/webui/themes/default/img/closebtn.gif Binary files differindex 3e27e6030..3e27e6030 100644 --- a/module/webui/themes/default/img/closebtn.gif +++ b/pyload/webui/themes/default/img/closebtn.gif diff --git a/module/webui/themes/default/img/cog.png b/pyload/webui/themes/default/img/cog.png Binary files differindex 67de2c6cc..67de2c6cc 100644 --- a/module/webui/themes/default/img/cog.png +++ b/pyload/webui/themes/default/img/cog.png diff --git a/module/webui/themes/default/img/control_add.png b/pyload/webui/themes/default/img/control_add.png Binary files differindex d39886893..d39886893 100644 --- a/module/webui/themes/default/img/control_add.png +++ b/pyload/webui/themes/default/img/control_add.png diff --git a/module/webui/themes/default/img/control_add_blue.png b/pyload/webui/themes/default/img/control_add_blue.png Binary files differindex d11b7f41d..d11b7f41d 100644 --- a/module/webui/themes/default/img/control_add_blue.png +++ b/pyload/webui/themes/default/img/control_add_blue.png diff --git a/module/webui/themes/default/img/control_cancel.png b/pyload/webui/themes/default/img/control_cancel.png Binary files differindex 7b9bc3fba..7b9bc3fba 100644 --- a/module/webui/themes/default/img/control_cancel.png +++ b/pyload/webui/themes/default/img/control_cancel.png diff --git a/module/webui/themes/default/img/control_cancel_blue.png b/pyload/webui/themes/default/img/control_cancel_blue.png Binary files differindex 0c5c96ce3..0c5c96ce3 100644 --- a/module/webui/themes/default/img/control_cancel_blue.png +++ b/pyload/webui/themes/default/img/control_cancel_blue.png diff --git a/module/webui/themes/default/img/control_pause.png b/pyload/webui/themes/default/img/control_pause.png Binary files differindex 2d9ce9c4e..2d9ce9c4e 100644 --- a/module/webui/themes/default/img/control_pause.png +++ b/pyload/webui/themes/default/img/control_pause.png diff --git a/module/webui/themes/default/img/control_pause_blue.png b/pyload/webui/themes/default/img/control_pause_blue.png Binary files differindex ec61099b0..ec61099b0 100644 --- a/module/webui/themes/default/img/control_pause_blue.png +++ b/pyload/webui/themes/default/img/control_pause_blue.png diff --git a/module/webui/themes/default/img/control_play.png b/pyload/webui/themes/default/img/control_play.png Binary files differindex 0846555d0..0846555d0 100644 --- a/module/webui/themes/default/img/control_play.png +++ b/pyload/webui/themes/default/img/control_play.png diff --git a/module/webui/themes/default/img/control_play_blue.png b/pyload/webui/themes/default/img/control_play_blue.png Binary files differindex f8c8ec683..f8c8ec683 100644 --- a/module/webui/themes/default/img/control_play_blue.png +++ b/pyload/webui/themes/default/img/control_play_blue.png diff --git a/module/webui/themes/default/img/control_stop.png b/pyload/webui/themes/default/img/control_stop.png Binary files differindex 893bb60e5..893bb60e5 100644 --- a/module/webui/themes/default/img/control_stop.png +++ b/pyload/webui/themes/default/img/control_stop.png diff --git a/module/webui/themes/default/img/control_stop_blue.png b/pyload/webui/themes/default/img/control_stop_blue.png Binary files differindex e6f75d232..e6f75d232 100644 --- a/module/webui/themes/default/img/control_stop_blue.png +++ b/pyload/webui/themes/default/img/control_stop_blue.png diff --git a/module/webui/themes/default/img/delete.png b/pyload/webui/themes/default/img/delete.png Binary files differindex 08f249365..08f249365 100644 --- a/module/webui/themes/default/img/delete.png +++ b/pyload/webui/themes/default/img/delete.png diff --git a/module/webui/themes/default/img/drag_corner.gif b/pyload/webui/themes/default/img/drag_corner.gif Binary files differindex befb1adf1..befb1adf1 100644 --- a/module/webui/themes/default/img/drag_corner.gif +++ b/pyload/webui/themes/default/img/drag_corner.gif diff --git a/module/webui/themes/default/img/error.png b/pyload/webui/themes/default/img/error.png Binary files differindex c37bd062e..c37bd062e 100644 --- a/module/webui/themes/default/img/error.png +++ b/pyload/webui/themes/default/img/error.png diff --git a/module/webui/themes/default/img/folder.png b/pyload/webui/themes/default/img/folder.png Binary files differindex 784e8fa48..784e8fa48 100644 --- a/module/webui/themes/default/img/folder.png +++ b/pyload/webui/themes/default/img/folder.png diff --git a/module/webui/themes/default/img/full.png b/pyload/webui/themes/default/img/full.png Binary files differindex fea52af76..fea52af76 100644 --- a/module/webui/themes/default/img/full.png +++ b/pyload/webui/themes/default/img/full.png diff --git a/module/webui/themes/default/img/head-login.png b/pyload/webui/themes/default/img/head-login.png Binary files differindex b59b7cbbf..b59b7cbbf 100644 --- a/module/webui/themes/default/img/head-login.png +++ b/pyload/webui/themes/default/img/head-login.png diff --git a/module/webui/themes/default/img/head-menu-collector.png b/pyload/webui/themes/default/img/head-menu-collector.png Binary files differindex 861be40bc..861be40bc 100644 --- a/module/webui/themes/default/img/head-menu-collector.png +++ b/pyload/webui/themes/default/img/head-menu-collector.png diff --git a/module/webui/themes/default/img/head-menu-config.png b/pyload/webui/themes/default/img/head-menu-config.png Binary files differindex bbf43d4f3..bbf43d4f3 100644 --- a/module/webui/themes/default/img/head-menu-config.png +++ b/pyload/webui/themes/default/img/head-menu-config.png diff --git a/module/webui/themes/default/img/head-menu-development.png b/pyload/webui/themes/default/img/head-menu-development.png Binary files differindex fad150fe1..fad150fe1 100644 --- a/module/webui/themes/default/img/head-menu-development.png +++ b/pyload/webui/themes/default/img/head-menu-development.png diff --git a/module/webui/themes/default/img/head-menu-download.png b/pyload/webui/themes/default/img/head-menu-download.png Binary files differindex 98c5da9db..98c5da9db 100644 --- a/module/webui/themes/default/img/head-menu-download.png +++ b/pyload/webui/themes/default/img/head-menu-download.png diff --git a/module/webui/themes/default/img/head-menu-home.png b/pyload/webui/themes/default/img/head-menu-home.png Binary files differindex 9d62109aa..9d62109aa 100644 --- a/module/webui/themes/default/img/head-menu-home.png +++ b/pyload/webui/themes/default/img/head-menu-home.png diff --git a/module/webui/themes/default/img/head-menu-index.png b/pyload/webui/themes/default/img/head-menu-index.png Binary files differindex 44d631064..44d631064 100644 --- a/module/webui/themes/default/img/head-menu-index.png +++ b/pyload/webui/themes/default/img/head-menu-index.png diff --git a/module/webui/themes/default/img/head-menu-news.png b/pyload/webui/themes/default/img/head-menu-news.png Binary files differindex 43950ebc9..43950ebc9 100644 --- a/module/webui/themes/default/img/head-menu-news.png +++ b/pyload/webui/themes/default/img/head-menu-news.png diff --git a/module/webui/themes/default/img/head-menu-queue.png b/pyload/webui/themes/default/img/head-menu-queue.png Binary files differindex be98793ce..be98793ce 100644 --- a/module/webui/themes/default/img/head-menu-queue.png +++ b/pyload/webui/themes/default/img/head-menu-queue.png diff --git a/module/webui/themes/default/img/head-menu-recent.png b/pyload/webui/themes/default/img/head-menu-recent.png Binary files differindex fc9b0497f..fc9b0497f 100644 --- a/module/webui/themes/default/img/head-menu-recent.png +++ b/pyload/webui/themes/default/img/head-menu-recent.png diff --git a/module/webui/themes/default/img/head-menu-wiki.png b/pyload/webui/themes/default/img/head-menu-wiki.png Binary files differindex 07cf0102d..07cf0102d 100644 --- a/module/webui/themes/default/img/head-menu-wiki.png +++ b/pyload/webui/themes/default/img/head-menu-wiki.png diff --git a/module/webui/themes/default/img/head-search-noshadow.png b/pyload/webui/themes/default/img/head-search-noshadow.png Binary files differindex aafdae015..aafdae015 100644 --- a/module/webui/themes/default/img/head-search-noshadow.png +++ b/pyload/webui/themes/default/img/head-search-noshadow.png diff --git a/module/webui/themes/default/img/head_bg1.png b/pyload/webui/themes/default/img/head_bg1.png Binary files differindex f2848c3cc..f2848c3cc 100644 --- a/module/webui/themes/default/img/head_bg1.png +++ b/pyload/webui/themes/default/img/head_bg1.png diff --git a/module/webui/themes/default/img/images.png b/pyload/webui/themes/default/img/images.png Binary files differindex 184860d1e..184860d1e 100644 --- a/module/webui/themes/default/img/images.png +++ b/pyload/webui/themes/default/img/images.png diff --git a/module/webui/themes/default/img/notice.png b/pyload/webui/themes/default/img/notice.png Binary files differindex 12cd1aef9..12cd1aef9 100644 --- a/module/webui/themes/default/img/notice.png +++ b/pyload/webui/themes/default/img/notice.png diff --git a/module/webui/themes/default/img/package_go.png b/pyload/webui/themes/default/img/package_go.png Binary files differindex aace63ad6..aace63ad6 100644 --- a/module/webui/themes/default/img/package_go.png +++ b/pyload/webui/themes/default/img/package_go.png diff --git a/module/webui/themes/default/img/page-tools-backlinks.png b/pyload/webui/themes/default/img/page-tools-backlinks.png Binary files differindex 3eb6a9ce3..3eb6a9ce3 100644 --- a/module/webui/themes/default/img/page-tools-backlinks.png +++ b/pyload/webui/themes/default/img/page-tools-backlinks.png diff --git a/module/webui/themes/default/img/page-tools-edit.png b/pyload/webui/themes/default/img/page-tools-edit.png Binary files differindex 188e1c12b..188e1c12b 100644 --- a/module/webui/themes/default/img/page-tools-edit.png +++ b/pyload/webui/themes/default/img/page-tools-edit.png diff --git a/module/webui/themes/default/img/page-tools-revisions.png b/pyload/webui/themes/default/img/page-tools-revisions.png Binary files differindex 5c3b8587f..5c3b8587f 100644 --- a/module/webui/themes/default/img/page-tools-revisions.png +++ b/pyload/webui/themes/default/img/page-tools-revisions.png diff --git a/module/webui/themes/default/img/parseUri.png b/pyload/webui/themes/default/img/parseUri.png Binary files differindex 937bded9d..937bded9d 100644 --- a/module/webui/themes/default/img/parseUri.png +++ b/pyload/webui/themes/default/img/parseUri.png diff --git a/module/webui/themes/default/img/pencil.png b/pyload/webui/themes/default/img/pencil.png Binary files differindex 0bfecd50e..0bfecd50e 100644 --- a/module/webui/themes/default/img/pencil.png +++ b/pyload/webui/themes/default/img/pencil.png diff --git a/module/webui/themes/default/img/pyload-logo.png b/pyload/webui/themes/default/img/pyload-logo.png Binary files differindex 2443cd8b1..2443cd8b1 100644 --- a/module/webui/themes/default/img/pyload-logo.png +++ b/pyload/webui/themes/default/img/pyload-logo.png diff --git a/module/webui/themes/default/img/reconnect.png b/pyload/webui/themes/default/img/reconnect.png Binary files differindex 49b269145..49b269145 100644 --- a/module/webui/themes/default/img/reconnect.png +++ b/pyload/webui/themes/default/img/reconnect.png diff --git a/module/webui/themes/default/img/status_None.png b/pyload/webui/themes/default/img/status_None.png Binary files differindex 293b13f77..293b13f77 100644 --- a/module/webui/themes/default/img/status_None.png +++ b/pyload/webui/themes/default/img/status_None.png diff --git a/module/webui/themes/default/img/status_downloading.png b/pyload/webui/themes/default/img/status_downloading.png Binary files differindex fb4ebc850..fb4ebc850 100644 --- a/module/webui/themes/default/img/status_downloading.png +++ b/pyload/webui/themes/default/img/status_downloading.png diff --git a/module/webui/themes/default/img/status_failed.png b/pyload/webui/themes/default/img/status_failed.png Binary files differindex c37bd062e..c37bd062e 100644 --- a/module/webui/themes/default/img/status_failed.png +++ b/pyload/webui/themes/default/img/status_failed.png diff --git a/module/webui/themes/default/img/status_finished.png b/pyload/webui/themes/default/img/status_finished.png Binary files differindex 89c8129a4..89c8129a4 100644 --- a/module/webui/themes/default/img/status_finished.png +++ b/pyload/webui/themes/default/img/status_finished.png diff --git a/module/webui/themes/default/img/status_offline.png b/pyload/webui/themes/default/img/status_offline.png Binary files differindex 0cfd58596..0cfd58596 100644 --- a/module/webui/themes/default/img/status_offline.png +++ b/pyload/webui/themes/default/img/status_offline.png diff --git a/module/webui/themes/default/img/status_proc.png b/pyload/webui/themes/default/img/status_proc.png Binary files differindex 67de2c6cc..67de2c6cc 100644 --- a/module/webui/themes/default/img/status_proc.png +++ b/pyload/webui/themes/default/img/status_proc.png diff --git a/module/webui/themes/default/img/status_queue.png b/pyload/webui/themes/default/img/status_queue.png Binary files differindex 293b13f77..293b13f77 100644 --- a/module/webui/themes/default/img/status_queue.png +++ b/pyload/webui/themes/default/img/status_queue.png diff --git a/module/webui/themes/default/img/status_waiting.png b/pyload/webui/themes/default/img/status_waiting.png Binary files differindex 2842cc338..2842cc338 100644 --- a/module/webui/themes/default/img/status_waiting.png +++ b/pyload/webui/themes/default/img/status_waiting.png diff --git a/module/webui/themes/default/img/success.png b/pyload/webui/themes/default/img/success.png Binary files differindex 89c8129a4..89c8129a4 100644 --- a/module/webui/themes/default/img/success.png +++ b/pyload/webui/themes/default/img/success.png diff --git a/module/webui/themes/default/img/tab-background.png b/pyload/webui/themes/default/img/tab-background.png Binary files differindex 29a5d1991..29a5d1991 100644 --- a/module/webui/themes/default/img/tab-background.png +++ b/pyload/webui/themes/default/img/tab-background.png diff --git a/module/webui/themes/default/img/tabs-border-bottom.png b/pyload/webui/themes/default/img/tabs-border-bottom.png Binary files differindex 02440f428..02440f428 100644 --- a/module/webui/themes/default/img/tabs-border-bottom.png +++ b/pyload/webui/themes/default/img/tabs-border-bottom.png diff --git a/module/webui/themes/default/img/user-actions-logout.png b/pyload/webui/themes/default/img/user-actions-logout.png Binary files differindex 0010931e2..0010931e2 100644 --- a/module/webui/themes/default/img/user-actions-logout.png +++ b/pyload/webui/themes/default/img/user-actions-logout.png diff --git a/module/webui/themes/default/img/user-actions-profile.png b/pyload/webui/themes/default/img/user-actions-profile.png Binary files differindex 46573fff6..46573fff6 100644 --- a/module/webui/themes/default/img/user-actions-profile.png +++ b/pyload/webui/themes/default/img/user-actions-profile.png diff --git a/module/webui/themes/default/img/user-info.png b/pyload/webui/themes/default/img/user-info.png Binary files differindex 6e643100f..6e643100f 100644 --- a/module/webui/themes/default/img/user-info.png +++ b/pyload/webui/themes/default/img/user-info.png diff --git a/module/webui/themes/default/js/render/admin.coffee b/pyload/webui/themes/default/js/render/admin.coffee index 5afbcbb66..5afbcbb66 100644 --- a/module/webui/themes/default/js/render/admin.coffee +++ b/pyload/webui/themes/default/js/render/admin.coffee diff --git a/module/webui/themes/default/js/render/admin.min.js b/pyload/webui/themes/default/js/render/admin.min.js index 94a5e494d..94a5e494d 100644 --- a/module/webui/themes/default/js/render/admin.min.js +++ b/pyload/webui/themes/default/js/render/admin.min.js diff --git a/module/webui/themes/default/js/render/base.coffee b/pyload/webui/themes/default/js/render/base.coffee index 07b8bfb6f..07b8bfb6f 100644 --- a/module/webui/themes/default/js/render/base.coffee +++ b/pyload/webui/themes/default/js/render/base.coffee diff --git a/module/webui/themes/default/js/render/base.min.js b/pyload/webui/themes/default/js/render/base.min.js index 1ba1d73f9..1ba1d73f9 100644 --- a/module/webui/themes/default/js/render/base.min.js +++ b/pyload/webui/themes/default/js/render/base.min.js diff --git a/module/webui/themes/default/js/render/filemanager.js b/pyload/webui/themes/default/js/render/filemanager.js index f1ebed93f..f1ebed93f 100644 --- a/module/webui/themes/default/js/render/filemanager.js +++ b/pyload/webui/themes/default/js/render/filemanager.js diff --git a/module/webui/themes/default/js/render/package.js b/pyload/webui/themes/default/js/render/package.js index 659a8e6fc..659a8e6fc 100644 --- a/module/webui/themes/default/js/render/package.js +++ b/pyload/webui/themes/default/js/render/package.js diff --git a/module/webui/themes/default/js/render/settings.coffee b/pyload/webui/themes/default/js/render/settings.coffee index d522741b9..d522741b9 100644 --- a/module/webui/themes/default/js/render/settings.coffee +++ b/pyload/webui/themes/default/js/render/settings.coffee diff --git a/module/webui/themes/default/js/render/settings.min.js b/pyload/webui/themes/default/js/render/settings.min.js index 41d1cb25a..41d1cb25a 100644 --- a/module/webui/themes/default/js/render/settings.min.js +++ b/pyload/webui/themes/default/js/render/settings.min.js diff --git a/module/webui/themes/default/js/static/MooDialog.js b/pyload/webui/themes/default/js/static/MooDialog.js index 45a52496f..45a52496f 100644 --- a/module/webui/themes/default/js/static/MooDialog.js +++ b/pyload/webui/themes/default/js/static/MooDialog.js diff --git a/module/webui/themes/default/js/static/MooDialog.min.js b/pyload/webui/themes/default/js/static/MooDialog.min.js index 90b3ae100..90b3ae100 100644 --- a/module/webui/themes/default/js/static/MooDialog.min.js +++ b/pyload/webui/themes/default/js/static/MooDialog.min.js diff --git a/module/webui/themes/default/js/static/MooDropMenu.js b/pyload/webui/themes/default/js/static/MooDropMenu.js index ac0fa1874..ac0fa1874 100644 --- a/module/webui/themes/default/js/static/MooDropMenu.js +++ b/pyload/webui/themes/default/js/static/MooDropMenu.js diff --git a/module/webui/themes/default/js/static/MooDropMenu.min.js b/pyload/webui/themes/default/js/static/MooDropMenu.min.js index 552ae247a..552ae247a 100644 --- a/module/webui/themes/default/js/static/MooDropMenu.min.js +++ b/pyload/webui/themes/default/js/static/MooDropMenu.min.js diff --git a/module/webui/themes/default/js/static/mootools-core.js b/pyload/webui/themes/default/js/static/mootools-core.js index db83850fd..db83850fd 100644 --- a/module/webui/themes/default/js/static/mootools-core.js +++ b/pyload/webui/themes/default/js/static/mootools-core.js diff --git a/module/webui/themes/default/js/static/mootools-core.min.js b/pyload/webui/themes/default/js/static/mootools-core.min.js index 354f94196..354f94196 100644 --- a/module/webui/themes/default/js/static/mootools-core.min.js +++ b/pyload/webui/themes/default/js/static/mootools-core.min.js diff --git a/module/webui/themes/default/js/static/mootools-more.js b/pyload/webui/themes/default/js/static/mootools-more.js index c7f4a1a0e..c7f4a1a0e 100644 --- a/module/webui/themes/default/js/static/mootools-more.js +++ b/pyload/webui/themes/default/js/static/mootools-more.js diff --git a/module/webui/themes/default/js/static/mootools-more.min.js b/pyload/webui/themes/default/js/static/mootools-more.min.js index ce03a60fd..ce03a60fd 100644 --- a/module/webui/themes/default/js/static/mootools-more.min.js +++ b/pyload/webui/themes/default/js/static/mootools-more.min.js diff --git a/module/webui/themes/default/js/static/purr.js b/pyload/webui/themes/default/js/static/purr.js index 9cbc503d9..9cbc503d9 100644 --- a/module/webui/themes/default/js/static/purr.js +++ b/pyload/webui/themes/default/js/static/purr.js diff --git a/module/webui/themes/default/js/static/purr.min.js b/pyload/webui/themes/default/js/static/purr.min.js index bf70e357d..bf70e357d 100644 --- a/module/webui/themes/default/js/static/purr.min.js +++ b/pyload/webui/themes/default/js/static/purr.min.js diff --git a/module/webui/themes/default/js/static/tinytab.js b/pyload/webui/themes/default/js/static/tinytab.js index de50279fc..de50279fc 100644 --- a/module/webui/themes/default/js/static/tinytab.js +++ b/pyload/webui/themes/default/js/static/tinytab.js diff --git a/module/webui/themes/default/js/static/tinytab.min.js b/pyload/webui/themes/default/js/static/tinytab.min.js index 2f4fa0436..2f4fa0436 100644 --- a/module/webui/themes/default/js/static/tinytab.min.js +++ b/pyload/webui/themes/default/js/static/tinytab.min.js diff --git a/module/webui/themes/default/tml/admin.html b/pyload/webui/themes/default/tml/admin.html index ba94f7a74..ba94f7a74 100644 --- a/module/webui/themes/default/tml/admin.html +++ b/pyload/webui/themes/default/tml/admin.html diff --git a/module/webui/themes/default/tml/base.html b/pyload/webui/themes/default/tml/base.html index e2a62a116..e2a62a116 100644 --- a/module/webui/themes/default/tml/base.html +++ b/pyload/webui/themes/default/tml/base.html diff --git a/module/webui/themes/default/tml/captcha.html b/pyload/webui/themes/default/tml/captcha.html index 56892593f..56892593f 100644 --- a/module/webui/themes/default/tml/captcha.html +++ b/pyload/webui/themes/default/tml/captcha.html diff --git a/module/webui/themes/default/tml/downloads.html b/pyload/webui/themes/default/tml/downloads.html index ba0f77c18..ba0f77c18 100644 --- a/module/webui/themes/default/tml/downloads.html +++ b/pyload/webui/themes/default/tml/downloads.html diff --git a/module/webui/themes/default/tml/filemanager.html b/pyload/webui/themes/default/tml/filemanager.html index 7a370d04c..7a370d04c 100644 --- a/module/webui/themes/default/tml/filemanager.html +++ b/pyload/webui/themes/default/tml/filemanager.html diff --git a/module/webui/themes/default/tml/folder.html b/pyload/webui/themes/default/tml/folder.html index 227a46ba0..227a46ba0 100644 --- a/module/webui/themes/default/tml/folder.html +++ b/pyload/webui/themes/default/tml/folder.html diff --git a/module/webui/themes/default/tml/home.html b/pyload/webui/themes/default/tml/home.html index 0fff703b5..0fff703b5 100644 --- a/module/webui/themes/default/tml/home.html +++ b/pyload/webui/themes/default/tml/home.html diff --git a/module/webui/themes/default/tml/info.html b/pyload/webui/themes/default/tml/info.html index 2deaa6dce..2deaa6dce 100644 --- a/module/webui/themes/default/tml/info.html +++ b/pyload/webui/themes/default/tml/info.html diff --git a/module/webui/themes/default/tml/login.html b/pyload/webui/themes/default/tml/login.html index 089275219..089275219 100644 --- a/module/webui/themes/default/tml/login.html +++ b/pyload/webui/themes/default/tml/login.html diff --git a/module/webui/themes/default/tml/logout.html b/pyload/webui/themes/default/tml/logout.html index 196676de5..196676de5 100644 --- a/module/webui/themes/default/tml/logout.html +++ b/pyload/webui/themes/default/tml/logout.html diff --git a/module/webui/themes/default/tml/logs.html b/pyload/webui/themes/default/tml/logs.html index 1706be8a6..1706be8a6 100644 --- a/module/webui/themes/default/tml/logs.html +++ b/pyload/webui/themes/default/tml/logs.html diff --git a/module/webui/themes/default/tml/pathchooser.html b/pyload/webui/themes/default/tml/pathchooser.html index 8ce9ab072..8ce9ab072 100644 --- a/module/webui/themes/default/tml/pathchooser.html +++ b/pyload/webui/themes/default/tml/pathchooser.html diff --git a/module/webui/themes/default/tml/queue.html b/pyload/webui/themes/default/tml/queue.html index 035ee1808..035ee1808 100644 --- a/module/webui/themes/default/tml/queue.html +++ b/pyload/webui/themes/default/tml/queue.html diff --git a/module/webui/themes/default/tml/settings.html b/pyload/webui/themes/default/tml/settings.html index fddc6e35c..fddc6e35c 100644 --- a/module/webui/themes/default/tml/settings.html +++ b/pyload/webui/themes/default/tml/settings.html diff --git a/module/webui/themes/default/tml/settings_item.html b/pyload/webui/themes/default/tml/settings_item.html index 6642d34b4..6642d34b4 100644 --- a/module/webui/themes/default/tml/settings_item.html +++ b/pyload/webui/themes/default/tml/settings_item.html diff --git a/module/webui/themes/default/tml/window.html b/pyload/webui/themes/default/tml/window.html index e73eba2bd..e73eba2bd 100644 --- a/module/webui/themes/default/tml/window.html +++ b/pyload/webui/themes/default/tml/window.html diff --git a/module/webui/themes/flat/css/MooDialog.css b/pyload/webui/themes/flat/css/MooDialog.css index 3ba94cafd..3ba94cafd 100644 --- a/module/webui/themes/flat/css/MooDialog.css +++ b/pyload/webui/themes/flat/css/MooDialog.css diff --git a/module/webui/themes/flat/css/flat.css b/pyload/webui/themes/flat/css/flat.css index 1a542962f..1a542962f 100644 --- a/module/webui/themes/flat/css/flat.css +++ b/pyload/webui/themes/flat/css/flat.css diff --git a/module/webui/themes/flat/css/log.css b/pyload/webui/themes/flat/css/log.css index af2ea4fe8..af2ea4fe8 100644 --- a/module/webui/themes/flat/css/log.css +++ b/pyload/webui/themes/flat/css/log.css diff --git a/module/webui/themes/flat/css/pathchooser.css b/pyload/webui/themes/flat/css/pathchooser.css index 894cc335e..894cc335e 100644 --- a/module/webui/themes/flat/css/pathchooser.css +++ b/pyload/webui/themes/flat/css/pathchooser.css diff --git a/module/webui/themes/flat/css/window.css b/pyload/webui/themes/flat/css/window.css index 12829868b..12829868b 100644 --- a/module/webui/themes/flat/css/window.css +++ b/pyload/webui/themes/flat/css/window.css diff --git a/module/webui/themes/flat/img/MooDialog/dialog-close.png b/pyload/webui/themes/flat/img/MooDialog/dialog-close.png Binary files differindex 81ebb88b2..81ebb88b2 100644 --- a/module/webui/themes/flat/img/MooDialog/dialog-close.png +++ b/pyload/webui/themes/flat/img/MooDialog/dialog-close.png diff --git a/module/webui/themes/flat/img/MooDialog/dialog-error.png b/pyload/webui/themes/flat/img/MooDialog/dialog-error.png Binary files differindex d70328403..d70328403 100644 --- a/module/webui/themes/flat/img/MooDialog/dialog-error.png +++ b/pyload/webui/themes/flat/img/MooDialog/dialog-error.png diff --git a/module/webui/themes/flat/img/MooDialog/dialog-question.png b/pyload/webui/themes/flat/img/MooDialog/dialog-question.png Binary files differindex b0af3db5b..b0af3db5b 100644 --- a/module/webui/themes/flat/img/MooDialog/dialog-question.png +++ b/pyload/webui/themes/flat/img/MooDialog/dialog-question.png diff --git a/module/webui/themes/flat/img/MooDialog/dialog-warning.png b/pyload/webui/themes/flat/img/MooDialog/dialog-warning.png Binary files differindex aad64d4be..aad64d4be 100644 --- a/module/webui/themes/flat/img/MooDialog/dialog-warning.png +++ b/pyload/webui/themes/flat/img/MooDialog/dialog-warning.png diff --git a/module/webui/themes/flat/img/arrow_refresh.png b/pyload/webui/themes/flat/img/arrow_refresh.png Binary files differindex b1b6fa4dc..b1b6fa4dc 100644 --- a/module/webui/themes/flat/img/arrow_refresh.png +++ b/pyload/webui/themes/flat/img/arrow_refresh.png diff --git a/module/webui/themes/flat/img/arrow_right.png b/pyload/webui/themes/flat/img/arrow_right.png Binary files differindex 68f379fc7..68f379fc7 100644 --- a/module/webui/themes/flat/img/arrow_right.png +++ b/pyload/webui/themes/flat/img/arrow_right.png diff --git a/module/webui/themes/flat/img/button.png b/pyload/webui/themes/flat/img/button.png Binary files differindex bb408a7d6..bb408a7d6 100644 --- a/module/webui/themes/flat/img/button.png +++ b/pyload/webui/themes/flat/img/button.png diff --git a/module/webui/themes/flat/img/cog.png b/pyload/webui/themes/flat/img/cog.png Binary files differindex 833f779ac..833f779ac 100644 --- a/module/webui/themes/flat/img/cog.png +++ b/pyload/webui/themes/flat/img/cog.png diff --git a/module/webui/themes/flat/img/control_add.png b/pyload/webui/themes/flat/img/control_add.png Binary files differindex e3f29fab2..e3f29fab2 100644 --- a/module/webui/themes/flat/img/control_add.png +++ b/pyload/webui/themes/flat/img/control_add.png diff --git a/module/webui/themes/flat/img/control_add_blue.png b/pyload/webui/themes/flat/img/control_add_blue.png Binary files differindex e3f29fab2..e3f29fab2 100644 --- a/module/webui/themes/flat/img/control_add_blue.png +++ b/pyload/webui/themes/flat/img/control_add_blue.png diff --git a/module/webui/themes/flat/img/control_cancel.png b/pyload/webui/themes/flat/img/control_cancel.png Binary files differindex 07c9cad30..07c9cad30 100644 --- a/module/webui/themes/flat/img/control_cancel.png +++ b/pyload/webui/themes/flat/img/control_cancel.png diff --git a/module/webui/themes/flat/img/control_cancel_blue.png b/pyload/webui/themes/flat/img/control_cancel_blue.png Binary files differindex 07c9cad30..07c9cad30 100644 --- a/module/webui/themes/flat/img/control_cancel_blue.png +++ b/pyload/webui/themes/flat/img/control_cancel_blue.png diff --git a/module/webui/themes/flat/img/control_pause.png b/pyload/webui/themes/flat/img/control_pause.png Binary files differindex 24e3705fa..24e3705fa 100644 --- a/module/webui/themes/flat/img/control_pause.png +++ b/pyload/webui/themes/flat/img/control_pause.png diff --git a/module/webui/themes/flat/img/control_pause_blue.png b/pyload/webui/themes/flat/img/control_pause_blue.png Binary files differindex 24e3705fa..24e3705fa 100644 --- a/module/webui/themes/flat/img/control_pause_blue.png +++ b/pyload/webui/themes/flat/img/control_pause_blue.png diff --git a/module/webui/themes/flat/img/control_play.png b/pyload/webui/themes/flat/img/control_play.png Binary files differindex 15ced1e21..15ced1e21 100644 --- a/module/webui/themes/flat/img/control_play.png +++ b/pyload/webui/themes/flat/img/control_play.png diff --git a/module/webui/themes/flat/img/control_play_blue.png b/pyload/webui/themes/flat/img/control_play_blue.png Binary files differindex 15ced1e21..15ced1e21 100644 --- a/module/webui/themes/flat/img/control_play_blue.png +++ b/pyload/webui/themes/flat/img/control_play_blue.png diff --git a/module/webui/themes/flat/img/control_stop.png b/pyload/webui/themes/flat/img/control_stop.png Binary files differindex 71215ef67..71215ef67 100644 --- a/module/webui/themes/flat/img/control_stop.png +++ b/pyload/webui/themes/flat/img/control_stop.png diff --git a/module/webui/themes/flat/img/control_stop_blue.png b/pyload/webui/themes/flat/img/control_stop_blue.png Binary files differindex 71215ef67..71215ef67 100644 --- a/module/webui/themes/flat/img/control_stop_blue.png +++ b/pyload/webui/themes/flat/img/control_stop_blue.png diff --git a/module/webui/themes/flat/img/default/add_folder.png b/pyload/webui/themes/flat/img/default/add_folder.png Binary files differindex 8acbc411b..8acbc411b 100644 --- a/module/webui/themes/flat/img/default/add_folder.png +++ b/pyload/webui/themes/flat/img/default/add_folder.png diff --git a/module/webui/themes/flat/img/default/ajax-loader.gif b/pyload/webui/themes/flat/img/default/ajax-loader.gif Binary files differindex 2fd8e0737..2fd8e0737 100644 --- a/module/webui/themes/flat/img/default/ajax-loader.gif +++ b/pyload/webui/themes/flat/img/default/ajax-loader.gif diff --git a/module/webui/themes/flat/img/default/big_button.gif b/pyload/webui/themes/flat/img/default/big_button.gif Binary files differindex 7680490ea..7680490ea 100644 --- a/module/webui/themes/flat/img/default/big_button.gif +++ b/pyload/webui/themes/flat/img/default/big_button.gif diff --git a/module/webui/themes/flat/img/default/big_button_over.gif b/pyload/webui/themes/flat/img/default/big_button_over.gif Binary files differindex 2e3ee10d2..2e3ee10d2 100644 --- a/module/webui/themes/flat/img/default/big_button_over.gif +++ b/pyload/webui/themes/flat/img/default/big_button_over.gif diff --git a/module/webui/themes/flat/img/default/body.png b/pyload/webui/themes/flat/img/default/body.png Binary files differindex 7ff1043e0..7ff1043e0 100644 --- a/module/webui/themes/flat/img/default/body.png +++ b/pyload/webui/themes/flat/img/default/body.png diff --git a/module/webui/themes/flat/img/default/closebtn.gif b/pyload/webui/themes/flat/img/default/closebtn.gif Binary files differindex 3e27e6030..3e27e6030 100644 --- a/module/webui/themes/flat/img/default/closebtn.gif +++ b/pyload/webui/themes/flat/img/default/closebtn.gif diff --git a/module/webui/themes/flat/img/default/drag_corner.gif b/pyload/webui/themes/flat/img/default/drag_corner.gif Binary files differindex befb1adf1..befb1adf1 100644 --- a/module/webui/themes/flat/img/default/drag_corner.gif +++ b/pyload/webui/themes/flat/img/default/drag_corner.gif diff --git a/module/webui/themes/flat/img/default/full.png b/pyload/webui/themes/flat/img/default/full.png Binary files differindex fea52af76..fea52af76 100644 --- a/module/webui/themes/flat/img/default/full.png +++ b/pyload/webui/themes/flat/img/default/full.png diff --git a/module/webui/themes/flat/img/default/head-menu-recent.png b/pyload/webui/themes/flat/img/default/head-menu-recent.png Binary files differindex fc9b0497f..fc9b0497f 100644 --- a/module/webui/themes/flat/img/default/head-menu-recent.png +++ b/pyload/webui/themes/flat/img/default/head-menu-recent.png diff --git a/module/webui/themes/flat/img/default/head_bg1.png b/pyload/webui/themes/flat/img/default/head_bg1.png Binary files differindex f2848c3cc..f2848c3cc 100644 --- a/module/webui/themes/flat/img/default/head_bg1.png +++ b/pyload/webui/themes/flat/img/default/head_bg1.png diff --git a/module/webui/themes/flat/img/default/images.png b/pyload/webui/themes/flat/img/default/images.png Binary files differindex 184860d1e..184860d1e 100644 --- a/module/webui/themes/flat/img/default/images.png +++ b/pyload/webui/themes/flat/img/default/images.png diff --git a/module/webui/themes/flat/img/default/parseUri.png b/pyload/webui/themes/flat/img/default/parseUri.png Binary files differindex 937bded9d..937bded9d 100644 --- a/module/webui/themes/flat/img/default/parseUri.png +++ b/pyload/webui/themes/flat/img/default/parseUri.png diff --git a/module/webui/themes/flat/img/default/pyload-logo.png b/pyload/webui/themes/flat/img/default/pyload-logo.png Binary files differindex 2443cd8b1..2443cd8b1 100644 --- a/module/webui/themes/flat/img/default/pyload-logo.png +++ b/pyload/webui/themes/flat/img/default/pyload-logo.png diff --git a/module/webui/themes/flat/img/default/tab-background.png b/pyload/webui/themes/flat/img/default/tab-background.png Binary files differindex 29a5d1991..29a5d1991 100644 --- a/module/webui/themes/flat/img/default/tab-background.png +++ b/pyload/webui/themes/flat/img/default/tab-background.png diff --git a/module/webui/themes/flat/img/default/tabs-border-bottom.png b/pyload/webui/themes/flat/img/default/tabs-border-bottom.png Binary files differindex 02440f428..02440f428 100644 --- a/module/webui/themes/flat/img/default/tabs-border-bottom.png +++ b/pyload/webui/themes/flat/img/default/tabs-border-bottom.png diff --git a/module/webui/themes/flat/img/delete.png b/pyload/webui/themes/flat/img/delete.png Binary files differindex 4539cff12..4539cff12 100644 --- a/module/webui/themes/flat/img/delete.png +++ b/pyload/webui/themes/flat/img/delete.png diff --git a/module/webui/themes/flat/img/error.png b/pyload/webui/themes/flat/img/error.png Binary files differindex 6c565c99c..6c565c99c 100644 --- a/module/webui/themes/flat/img/error.png +++ b/pyload/webui/themes/flat/img/error.png diff --git a/module/webui/themes/flat/img/folder.png b/pyload/webui/themes/flat/img/folder.png Binary files differindex 0b067dd3c..0b067dd3c 100644 --- a/module/webui/themes/flat/img/folder.png +++ b/pyload/webui/themes/flat/img/folder.png diff --git a/module/webui/themes/flat/img/head-login.png b/pyload/webui/themes/flat/img/head-login.png Binary files differindex 6b57515bc..6b57515bc 100644 --- a/module/webui/themes/flat/img/head-login.png +++ b/pyload/webui/themes/flat/img/head-login.png diff --git a/module/webui/themes/flat/img/head-menu-collector.png b/pyload/webui/themes/flat/img/head-menu-collector.png Binary files differindex bbcbe6406..bbcbe6406 100644 --- a/module/webui/themes/flat/img/head-menu-collector.png +++ b/pyload/webui/themes/flat/img/head-menu-collector.png diff --git a/module/webui/themes/flat/img/head-menu-config.png b/pyload/webui/themes/flat/img/head-menu-config.png Binary files differindex 93e8f83ac..93e8f83ac 100644 --- a/module/webui/themes/flat/img/head-menu-config.png +++ b/pyload/webui/themes/flat/img/head-menu-config.png diff --git a/module/webui/themes/flat/img/head-menu-development.png b/pyload/webui/themes/flat/img/head-menu-development.png Binary files differindex 33d8b062f..33d8b062f 100644 --- a/module/webui/themes/flat/img/head-menu-development.png +++ b/pyload/webui/themes/flat/img/head-menu-development.png diff --git a/module/webui/themes/flat/img/head-menu-download.png b/pyload/webui/themes/flat/img/head-menu-download.png Binary files differindex 3691deebc..3691deebc 100644 --- a/module/webui/themes/flat/img/head-menu-download.png +++ b/pyload/webui/themes/flat/img/head-menu-download.png diff --git a/module/webui/themes/flat/img/head-menu-home.png b/pyload/webui/themes/flat/img/head-menu-home.png Binary files differindex b77bef5eb..b77bef5eb 100644 --- a/module/webui/themes/flat/img/head-menu-home.png +++ b/pyload/webui/themes/flat/img/head-menu-home.png diff --git a/module/webui/themes/flat/img/head-menu-index.png b/pyload/webui/themes/flat/img/head-menu-index.png Binary files differindex 8bc6e9604..8bc6e9604 100644 --- a/module/webui/themes/flat/img/head-menu-index.png +++ b/pyload/webui/themes/flat/img/head-menu-index.png diff --git a/module/webui/themes/flat/img/head-menu-news.png b/pyload/webui/themes/flat/img/head-menu-news.png Binary files differindex 44e79a9a9..44e79a9a9 100644 --- a/module/webui/themes/flat/img/head-menu-news.png +++ b/pyload/webui/themes/flat/img/head-menu-news.png diff --git a/module/webui/themes/flat/img/head-menu-queue.png b/pyload/webui/themes/flat/img/head-menu-queue.png Binary files differindex e4fa41ad8..e4fa41ad8 100644 --- a/module/webui/themes/flat/img/head-menu-queue.png +++ b/pyload/webui/themes/flat/img/head-menu-queue.png diff --git a/module/webui/themes/flat/img/head-menu-wiki.png b/pyload/webui/themes/flat/img/head-menu-wiki.png Binary files differindex 61b0e54ea..61b0e54ea 100644 --- a/module/webui/themes/flat/img/head-menu-wiki.png +++ b/pyload/webui/themes/flat/img/head-menu-wiki.png diff --git a/module/webui/themes/flat/img/head-search-noshadow.png b/pyload/webui/themes/flat/img/head-search-noshadow.png Binary files differindex 16d39bd06..16d39bd06 100644 --- a/module/webui/themes/flat/img/head-search-noshadow.png +++ b/pyload/webui/themes/flat/img/head-search-noshadow.png diff --git a/module/webui/themes/flat/img/notice.png b/pyload/webui/themes/flat/img/notice.png Binary files differindex a52b067cb..a52b067cb 100644 --- a/module/webui/themes/flat/img/notice.png +++ b/pyload/webui/themes/flat/img/notice.png diff --git a/module/webui/themes/flat/img/package_go.png b/pyload/webui/themes/flat/img/package_go.png Binary files differindex 80b2c42ee..80b2c42ee 100644 --- a/module/webui/themes/flat/img/package_go.png +++ b/pyload/webui/themes/flat/img/package_go.png diff --git a/module/webui/themes/flat/img/page-tools-backlinks.png b/pyload/webui/themes/flat/img/page-tools-backlinks.png Binary files differindex fb8f55b38..fb8f55b38 100644 --- a/module/webui/themes/flat/img/page-tools-backlinks.png +++ b/pyload/webui/themes/flat/img/page-tools-backlinks.png diff --git a/module/webui/themes/flat/img/page-tools-edit.png b/pyload/webui/themes/flat/img/page-tools-edit.png Binary files differindex 67177cf89..67177cf89 100644 --- a/module/webui/themes/flat/img/page-tools-edit.png +++ b/pyload/webui/themes/flat/img/page-tools-edit.png diff --git a/module/webui/themes/flat/img/page-tools-revisions.png b/pyload/webui/themes/flat/img/page-tools-revisions.png Binary files differindex 088fe0087..088fe0087 100644 --- a/module/webui/themes/flat/img/page-tools-revisions.png +++ b/pyload/webui/themes/flat/img/page-tools-revisions.png diff --git a/module/webui/themes/flat/img/pencil.png b/pyload/webui/themes/flat/img/pencil.png Binary files differindex e39c93cd8..e39c93cd8 100644 --- a/module/webui/themes/flat/img/pencil.png +++ b/pyload/webui/themes/flat/img/pencil.png diff --git a/module/webui/themes/flat/img/reconnect.png b/pyload/webui/themes/flat/img/reconnect.png Binary files differindex cd35c9325..cd35c9325 100644 --- a/module/webui/themes/flat/img/reconnect.png +++ b/pyload/webui/themes/flat/img/reconnect.png diff --git a/module/webui/themes/flat/img/status_None.png b/pyload/webui/themes/flat/img/status_None.png Binary files differindex 1400d3eb3..1400d3eb3 100644 --- a/module/webui/themes/flat/img/status_None.png +++ b/pyload/webui/themes/flat/img/status_None.png diff --git a/module/webui/themes/flat/img/status_downloading.png b/pyload/webui/themes/flat/img/status_downloading.png Binary files differindex db8ad8cd6..db8ad8cd6 100644 --- a/module/webui/themes/flat/img/status_downloading.png +++ b/pyload/webui/themes/flat/img/status_downloading.png diff --git a/module/webui/themes/flat/img/status_failed.png b/pyload/webui/themes/flat/img/status_failed.png Binary files differindex 6c565c99c..6c565c99c 100644 --- a/module/webui/themes/flat/img/status_failed.png +++ b/pyload/webui/themes/flat/img/status_failed.png diff --git a/module/webui/themes/flat/img/status_finished.png b/pyload/webui/themes/flat/img/status_finished.png Binary files differindex 2c4aca40d..2c4aca40d 100644 --- a/module/webui/themes/flat/img/status_finished.png +++ b/pyload/webui/themes/flat/img/status_finished.png diff --git a/module/webui/themes/flat/img/status_offline.png b/pyload/webui/themes/flat/img/status_offline.png Binary files differindex 6c565c99c..6c565c99c 100644 --- a/module/webui/themes/flat/img/status_offline.png +++ b/pyload/webui/themes/flat/img/status_offline.png diff --git a/module/webui/themes/flat/img/status_proc.png b/pyload/webui/themes/flat/img/status_proc.png Binary files differindex 833f779ac..833f779ac 100644 --- a/module/webui/themes/flat/img/status_proc.png +++ b/pyload/webui/themes/flat/img/status_proc.png diff --git a/module/webui/themes/flat/img/status_queue.png b/pyload/webui/themes/flat/img/status_queue.png Binary files differindex 1400d3eb3..1400d3eb3 100644 --- a/module/webui/themes/flat/img/status_queue.png +++ b/pyload/webui/themes/flat/img/status_queue.png diff --git a/module/webui/themes/flat/img/status_waiting.png b/pyload/webui/themes/flat/img/status_waiting.png Binary files differindex fd038175e..fd038175e 100644 --- a/module/webui/themes/flat/img/status_waiting.png +++ b/pyload/webui/themes/flat/img/status_waiting.png diff --git a/module/webui/themes/flat/img/success.png b/pyload/webui/themes/flat/img/success.png Binary files differindex 2c4aca40d..2c4aca40d 100644 --- a/module/webui/themes/flat/img/success.png +++ b/pyload/webui/themes/flat/img/success.png diff --git a/module/webui/themes/flat/img/user-actions-logout.png b/pyload/webui/themes/flat/img/user-actions-logout.png Binary files differindex d4ef360e8..d4ef360e8 100644 --- a/module/webui/themes/flat/img/user-actions-logout.png +++ b/pyload/webui/themes/flat/img/user-actions-logout.png diff --git a/module/webui/themes/flat/img/user-actions-profile.png b/pyload/webui/themes/flat/img/user-actions-profile.png Binary files differindex 9ec410b13..9ec410b13 100644 --- a/module/webui/themes/flat/img/user-actions-profile.png +++ b/pyload/webui/themes/flat/img/user-actions-profile.png diff --git a/module/webui/themes/flat/img/user-info.png b/pyload/webui/themes/flat/img/user-info.png Binary files differindex 345ed52e4..345ed52e4 100644 --- a/module/webui/themes/flat/img/user-info.png +++ b/pyload/webui/themes/flat/img/user-info.png diff --git a/module/webui/themes/flat/js/render/admin.coffee b/pyload/webui/themes/flat/js/render/admin.coffee index 5afbcbb66..5afbcbb66 100644 --- a/module/webui/themes/flat/js/render/admin.coffee +++ b/pyload/webui/themes/flat/js/render/admin.coffee diff --git a/module/webui/themes/flat/js/render/admin.min.js b/pyload/webui/themes/flat/js/render/admin.min.js index 94a5e494d..94a5e494d 100644 --- a/module/webui/themes/flat/js/render/admin.min.js +++ b/pyload/webui/themes/flat/js/render/admin.min.js diff --git a/module/webui/themes/flat/js/render/base.coffee b/pyload/webui/themes/flat/js/render/base.coffee index 07b8bfb6f..07b8bfb6f 100644 --- a/module/webui/themes/flat/js/render/base.coffee +++ b/pyload/webui/themes/flat/js/render/base.coffee diff --git a/module/webui/themes/flat/js/render/base.min.js b/pyload/webui/themes/flat/js/render/base.min.js index 1ba1d73f9..1ba1d73f9 100644 --- a/module/webui/themes/flat/js/render/base.min.js +++ b/pyload/webui/themes/flat/js/render/base.min.js diff --git a/module/webui/themes/flat/js/render/package.js b/pyload/webui/themes/flat/js/render/package.js index 659a8e6fc..659a8e6fc 100644 --- a/module/webui/themes/flat/js/render/package.js +++ b/pyload/webui/themes/flat/js/render/package.js diff --git a/module/webui/themes/flat/js/render/settings.coffee b/pyload/webui/themes/flat/js/render/settings.coffee index d522741b9..d522741b9 100644 --- a/module/webui/themes/flat/js/render/settings.coffee +++ b/pyload/webui/themes/flat/js/render/settings.coffee diff --git a/module/webui/themes/flat/js/render/settings.min.js b/pyload/webui/themes/flat/js/render/settings.min.js index 41d1cb25a..41d1cb25a 100644 --- a/module/webui/themes/flat/js/render/settings.min.js +++ b/pyload/webui/themes/flat/js/render/settings.min.js diff --git a/module/webui/themes/flat/js/static/MooDialog.js b/pyload/webui/themes/flat/js/static/MooDialog.js index 45a52496f..45a52496f 100644 --- a/module/webui/themes/flat/js/static/MooDialog.js +++ b/pyload/webui/themes/flat/js/static/MooDialog.js diff --git a/module/webui/themes/flat/js/static/MooDialog.min.js b/pyload/webui/themes/flat/js/static/MooDialog.min.js index 90b3ae100..90b3ae100 100644 --- a/module/webui/themes/flat/js/static/MooDialog.min.js +++ b/pyload/webui/themes/flat/js/static/MooDialog.min.js diff --git a/module/webui/themes/flat/js/static/MooDropMenu.js b/pyload/webui/themes/flat/js/static/MooDropMenu.js index ac0fa1874..ac0fa1874 100644 --- a/module/webui/themes/flat/js/static/MooDropMenu.js +++ b/pyload/webui/themes/flat/js/static/MooDropMenu.js diff --git a/module/webui/themes/flat/js/static/MooDropMenu.min.js b/pyload/webui/themes/flat/js/static/MooDropMenu.min.js index 552ae247a..552ae247a 100644 --- a/module/webui/themes/flat/js/static/MooDropMenu.min.js +++ b/pyload/webui/themes/flat/js/static/MooDropMenu.min.js diff --git a/module/webui/themes/flat/js/static/mootools-core.js b/pyload/webui/themes/flat/js/static/mootools-core.js index db83850fd..db83850fd 100644 --- a/module/webui/themes/flat/js/static/mootools-core.js +++ b/pyload/webui/themes/flat/js/static/mootools-core.js diff --git a/module/webui/themes/flat/js/static/mootools-core.min.js b/pyload/webui/themes/flat/js/static/mootools-core.min.js index 354f94196..354f94196 100644 --- a/module/webui/themes/flat/js/static/mootools-core.min.js +++ b/pyload/webui/themes/flat/js/static/mootools-core.min.js diff --git a/module/webui/themes/flat/js/static/mootools-more.js b/pyload/webui/themes/flat/js/static/mootools-more.js index c7f4a1a0e..c7f4a1a0e 100644 --- a/module/webui/themes/flat/js/static/mootools-more.js +++ b/pyload/webui/themes/flat/js/static/mootools-more.js diff --git a/module/webui/themes/flat/js/static/mootools-more.min.js b/pyload/webui/themes/flat/js/static/mootools-more.min.js index ce03a60fd..ce03a60fd 100644 --- a/module/webui/themes/flat/js/static/mootools-more.min.js +++ b/pyload/webui/themes/flat/js/static/mootools-more.min.js diff --git a/module/webui/themes/flat/js/static/purr.js b/pyload/webui/themes/flat/js/static/purr.js index 9cbc503d9..9cbc503d9 100644 --- a/module/webui/themes/flat/js/static/purr.js +++ b/pyload/webui/themes/flat/js/static/purr.js diff --git a/module/webui/themes/flat/js/static/purr.min.js b/pyload/webui/themes/flat/js/static/purr.min.js index bf70e357d..bf70e357d 100644 --- a/module/webui/themes/flat/js/static/purr.min.js +++ b/pyload/webui/themes/flat/js/static/purr.min.js diff --git a/module/webui/themes/flat/js/static/tinytab.js b/pyload/webui/themes/flat/js/static/tinytab.js index de50279fc..de50279fc 100644 --- a/module/webui/themes/flat/js/static/tinytab.js +++ b/pyload/webui/themes/flat/js/static/tinytab.js diff --git a/module/webui/themes/flat/js/static/tinytab.min.js b/pyload/webui/themes/flat/js/static/tinytab.min.js index 2f4fa0436..2f4fa0436 100644 --- a/module/webui/themes/flat/js/static/tinytab.min.js +++ b/pyload/webui/themes/flat/js/static/tinytab.min.js diff --git a/module/webui/themes/flat/tml/admin.html b/pyload/webui/themes/flat/tml/admin.html index c7bdd7894..c7bdd7894 100644 --- a/module/webui/themes/flat/tml/admin.html +++ b/pyload/webui/themes/flat/tml/admin.html diff --git a/module/webui/themes/flat/tml/base.html b/pyload/webui/themes/flat/tml/base.html index 17349c5f1..17349c5f1 100644 --- a/module/webui/themes/flat/tml/base.html +++ b/pyload/webui/themes/flat/tml/base.html diff --git a/module/webui/themes/flat/tml/captcha.html b/pyload/webui/themes/flat/tml/captcha.html index ae1afe444..ae1afe444 100644 --- a/module/webui/themes/flat/tml/captcha.html +++ b/pyload/webui/themes/flat/tml/captcha.html diff --git a/module/webui/themes/flat/tml/downloads.html b/pyload/webui/themes/flat/tml/downloads.html index 445f8da37..445f8da37 100644 --- a/module/webui/themes/flat/tml/downloads.html +++ b/pyload/webui/themes/flat/tml/downloads.html diff --git a/module/webui/themes/flat/tml/folder.html b/pyload/webui/themes/flat/tml/folder.html index 89b84e7bb..89b84e7bb 100644 --- a/module/webui/themes/flat/tml/folder.html +++ b/pyload/webui/themes/flat/tml/folder.html diff --git a/module/webui/themes/flat/tml/home.html b/pyload/webui/themes/flat/tml/home.html index 838a351ad..838a351ad 100644 --- a/module/webui/themes/flat/tml/home.html +++ b/pyload/webui/themes/flat/tml/home.html diff --git a/module/webui/themes/flat/tml/info.html b/pyload/webui/themes/flat/tml/info.html index 26b46736d..26b46736d 100644 --- a/module/webui/themes/flat/tml/info.html +++ b/pyload/webui/themes/flat/tml/info.html diff --git a/module/webui/themes/flat/tml/login.html b/pyload/webui/themes/flat/tml/login.html index 76365a79c..76365a79c 100644 --- a/module/webui/themes/flat/tml/login.html +++ b/pyload/webui/themes/flat/tml/login.html diff --git a/module/webui/themes/flat/tml/logout.html b/pyload/webui/themes/flat/tml/logout.html index 370031b25..370031b25 100644 --- a/module/webui/themes/flat/tml/logout.html +++ b/pyload/webui/themes/flat/tml/logout.html diff --git a/module/webui/themes/flat/tml/logs.html b/pyload/webui/themes/flat/tml/logs.html index 87e5a0f30..87e5a0f30 100644 --- a/module/webui/themes/flat/tml/logs.html +++ b/pyload/webui/themes/flat/tml/logs.html diff --git a/module/webui/themes/flat/tml/pathchooser.html b/pyload/webui/themes/flat/tml/pathchooser.html index 95a1a3be5..95a1a3be5 100644 --- a/module/webui/themes/flat/tml/pathchooser.html +++ b/pyload/webui/themes/flat/tml/pathchooser.html diff --git a/module/webui/themes/flat/tml/queue.html b/pyload/webui/themes/flat/tml/queue.html index 0d3022ddd..0d3022ddd 100644 --- a/module/webui/themes/flat/tml/queue.html +++ b/pyload/webui/themes/flat/tml/queue.html diff --git a/module/webui/themes/flat/tml/settings.html b/pyload/webui/themes/flat/tml/settings.html index 1bd0d1e17..1bd0d1e17 100644 --- a/module/webui/themes/flat/tml/settings.html +++ b/pyload/webui/themes/flat/tml/settings.html diff --git a/module/webui/themes/flat/tml/settings_item.html b/pyload/webui/themes/flat/tml/settings_item.html index 813383343..813383343 100644 --- a/module/webui/themes/flat/tml/settings_item.html +++ b/pyload/webui/themes/flat/tml/settings_item.html diff --git a/module/webui/themes/flat/tml/window.html b/pyload/webui/themes/flat/tml/window.html index 8f57843c6..8f57843c6 100644 --- a/module/webui/themes/flat/tml/window.html +++ b/pyload/webui/themes/flat/tml/window.html diff --git a/scripts/clonedigger.sh b/scripts/clonedigger.sh index 87c3437cf..358c1b68b 100644 --- a/scripts/clonedigger.sh +++ b/scripts/clonedigger.sh @@ -1,4 +1,4 @@ #!/bin/sh -PYLOAD="../module" # Check ~/pyload/module directory +PYLOAD="../pyload" # Check pyload directory clonedigger -o cpd.xml --cpd-output --fast --ignore-dir="lib" --ignore-dir="remote" $PYLOAD diff --git a/scripts/code_analysis.sh b/scripts/code_analysis.sh index dce93d63d..c853652bf 100644 --- a/scripts/code_analysis.sh +++ b/scripts/code_analysis.sh @@ -1,6 +1,6 @@ #!/bin/sh -PYLOAD="../module" # Check ~/pyload/module directory +PYLOAD="../pyload" # Check pyload directory echo "Running sloccount ..." REPORT="sloccount.sc" |