Ejemplo n.º 1
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from module.Api import Api, RequirePerm, Permission

from ApiComponent import ApiComponent

class AddonApi(ApiComponent):
    """ Methods to interact with addons """

    def getAllInfo(self):
        """Returns all information stored by addon plugins. Values are always strings

        :return: {"plugin": {"name": value } }
        """
        return self.core.addonManager.getAllInfo()

    def getInfoByPlugin(self, plugin):
        """Returns information stored by a specific plugin.

        :param plugin: pluginname
        :return: dict of attr names mapped to value {"name": value}
        """
        return self.core.addonManager.getInfo(plugin)

if Api.extend(AddonApi):
    del AddonApi
Ejemplo n.º 2
0
        """Check online status of all files in a package, also a default action when package is added. """
        self.core.files.reCheckPackage(pid)

    @RequirePerm(Permission.Modify)
    def restartFailed(self):
        """Restarts all failed failes."""
        self.core.files.restartFailed()

    @RequirePerm(Permission.Modify)
    def stopAllDownloads(self):
        """Aborts all running downloads."""

        pyfiles = self.core.files.cachedFiles()
        for pyfile in pyfiles:
            pyfile.abortDownload()

    @RequirePerm(Permission.Modify)
    def stopDownloads(self, fids):
        """Aborts specific downloads.

        :param fids: list of file ids
        :return:
        """
        pyfiles = self.core.files.cachedFiles()
        for pyfile in pyfiles:
            if pyfile.id in fids:
                pyfile.abortDownload()


if Api.extend(DownloadApi):
    del DownloadApi
Ejemplo n.º 3
0
        :param fids: list of file ids
        :param pid: destination package
        :return: False if files can't be moved
        """
        return self.core.files.moveFiles(fids, pid)

    @RequirePerm(Permission.Modify)
    def orderPackage(self, pid, position):
        """Set new position for a package.

        :param pid: package id
        :param position: new position, 0 for very beginning
        """
        self.core.files.orderPackage(pid, position)

    @RequirePerm(Permission.Modify)
    def orderFiles(self, fids, pid, position):
        """ Set a new position for a bunch of files within a package.
        All files have to be in the same package and must be **continuous**\
        in the package. That means no gaps between them.

        :param fids: list of file ids
        :param pid: package id of parent package
        :param position:  new position: 0 for very beginning
        """
        self.core.files.orderFiles(fids, pid, position)


if Api.extend(FileApi):
    del FileApi
Ejemplo n.º 4
0
            if t.type == Interaction.Notification:
                t.setWaiting(self.core.interactionManager.CLIENT_THRESHOLD)

        return tasks

    @RequirePerm(Permission.Interaction)
    def setInteractionResult(self, iid, result):
        """Set Result for a interaction task. It will be immediately removed from task queue afterwards

        :param iid: interaction id
        :param result: result as json string
        """
        task = self.core.interactionManager.getTaskByID(iid)
        if task and self.primaryUID == task.owner:
            task.setResult(result)

    @RequirePerm(Permission.Interaction)
    def getAddonHandler(self):
        pass

    @RequirePerm(Permission.Interaction)
    def callAddonHandler(self, plugin, func, pid_or_fid):
        pass

    @RequirePerm(Permission.Download)
    def generateDownloadLink(self, fid, timeout):
        pass


if Api.extend(UserInteractionApi):
    del UserInteractionApi
Ejemplo n.º 5
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from module.Api import Api, RequirePerm, Permission

from ApiComponent import ApiComponent


class AddonApi(ApiComponent):
    """ Methods to interact with addons """
    def getAllInfo(self):
        """Returns all information stored by addon plugins. Values are always strings

        :return: {"plugin": {"name": value } }
        """
        return self.core.addonManager.getAllInfo()

    def getInfoByPlugin(self, plugin):
        """Returns information stored by a specific plugin.

        :param plugin: pluginname
        :return: dict of attr names mapped to value {"name": value}
        """
        return self.core.addonManager.getInfo(plugin)


if Api.extend(AddonApi):
    del AddonApi
        return self.checkOnlineStatus(urls)

    @RequirePerm(Permission.Add)
    def pollResults(self, rid):
        """ Polls the result available for ResultID

        :param rid: `ResultID`
        :return: `OnlineCheck`, if rid is -1 then there is no more data available
        """
        result = self.core.threadManager.getInfoResult(rid)

        if "ALL_INFO_FETCHED" in result:
            del result["ALL_INFO_FETCHED"]
            return OnlineCheck(-1, result)
        else:
            return OnlineCheck(rid, result)


    @RequirePerm(Permission.Add)
    def generatePackages(self, links):
        """ Parses links, generates packages names from urls

        :param links: list of urls
        :return: package names mapped to urls
        """
        result = parseNames((x, x) for x in links)
        return result


if Api.extend(DownloadPreparingApi):
    del DownloadPreparingApi
Ejemplo n.º 7
0
        accounts = []
        for plugin in accs.itervalues():
            accounts.extend(plugin.values())

        return accounts

    @RequirePerm(Permission.All)
    def getAccountTypes(self):
        """All available account types.

        :return: string list
        """
        return self.core.pluginManager.getPlugins("accounts").keys()

    @RequirePerm(Permission.Accounts)
    def updateAccount(self, plugin, account, password=None, options={}):
        """Changes pw/options for specific account."""
        self.core.accountManager.updateAccount(plugin, account, password, options)

    @RequirePerm(Permission.Accounts)
    def removeAccount(self, plugin, account):
        """Remove account from pyload.

        :param plugin: pluginname
        :param account: accountname
        """
        self.core.accountManager.removeAccount(plugin, account)


if Api.extend(AccountApi):
    del AccountApi
Ejemplo n.º 8
0
        urls.append(th.name)
        return self.checkOnlineStatus(urls)

    @RequirePerm(Permission.Add)
    def pollResults(self, rid):
        """ Polls the result available for ResultID

        :param rid: `ResultID`
        :return: `OnlineCheck`, if rid is -1 then there is no more data available
        """
        result = self.core.threadManager.getInfoResult(rid)

        if "ALL_INFO_FETCHED" in result:
            del result["ALL_INFO_FETCHED"]
            return OnlineCheck(-1, result)
        else:
            return OnlineCheck(rid, result)

    @RequirePerm(Permission.Add)
    def generatePackages(self, links):
        """ Parses links, generates packages names from urls

        :param links: list of urls
        :return: package names mapped to urls
        """
        result = parseNames((x, x) for x in links)
        return result


if Api.extend(DownloadPreparingApi):
    del DownloadPreparingApi
Ejemplo n.º 9
0
        return accounts

    @RequirePerm(Permission.All)
    def getAccountTypes(self):
        """All available account types.

        :return: string list
        """
        return self.core.pluginManager.getPlugins("accounts").keys()

    @RequirePerm(Permission.Accounts)
    def updateAccount(self, plugin, login, password):
        """Changes pw/options for specific account."""
        # TODO: options
        self.core.accountManager.updateAccount(plugin, login, password, {})

    def updateAccountInfo(self, account):
        """ Update account from :class:`AccountInfo` """
        #TODO

    @RequirePerm(Permission.Accounts)
    def removeAccount(self, account):
        """Remove account from pyload.

        :param account: :class:`ÀccountInfo` instance
        """
        self.core.accountManager.removeAccount(account.plugin, account.loginname)


if Api.extend(AccountApi):
    del AccountApi
Ejemplo n.º 10
0
            fh.close()
            if offset >= len(lines):
                return []
            return lines[offset:]
        except:
            return ['No log available']

    @RequirePerm(Permission.All)
    def isTimeDownload(self):
        """Checks if pyload will start new downloads according to time in config.

        :return: bool
        """
        start = self.core.config['downloadTime']['start'].split(":")
        end = self.core.config['downloadTime']['end'].split(":")
        return compare_time(start, end)

    @RequirePerm(Permission.All)
    def isTimeReconnect(self):
        """Checks if pyload will try to make a reconnect

        :return: bool
        """
        start = self.core.config['reconnect']['startTime'].split(":")
        end = self.core.config['reconnect']['endTime'].split(":")
        return compare_time(start,
                            end) and self.core.config["reconnect"]["activated"]


if Api.extend(CoreApi):
    del CoreApi
Ejemplo n.º 11
0
            fh = open(filename, "r")
            lines = fh.readlines()
            fh.close()
            if offset >= len(lines):
                return []
            return lines[offset:]
        except:
            return ['No log available']

    @RequirePerm(Permission.All)
    def isTimeDownload(self):
        """Checks if pyload will start new downloads according to time in config.

        :return: bool
        """
        start = self.core.config['downloadTime']['start'].split(":")
        end = self.core.config['downloadTime']['end'].split(":")
        return compare_time(start, end)

    @RequirePerm(Permission.All)
    def isTimeReconnect(self):
        """Checks if pyload will try to make a reconnect

        :return: bool
        """
        start = self.core.config['reconnect']['startTime'].split(":")
        end = self.core.config['reconnect']['endTime'].split(":")
        return compare_time(start, end) and self.core.config["reconnect"]["activated"]

if Api.extend(CoreApi):
    del CoreApi
Ejemplo n.º 12
0
        :param fids: list of file ids
        :param pid: destination package
        :return: False if files can't be moved
        """
        return self.core.files.moveFiles(fids, pid)

    @RequirePerm(Permission.Modify)
    def orderPackage(self, pid, position):
        """Set new position for a package.

        :param pid: package id
        :param position: new position, 0 for very beginning
        """
        self.core.files.orderPackage(pid, position)

    @RequirePerm(Permission.Modify)
    def orderFiles(self, fids, pid, position):
        """ Set a new position for a bunch of files within a package.
        All files have to be in the same package and must be **continuous**\
        in the package. That means no gaps between them.

        :param fids: list of file ids
        :param pid: package id of parent package
        :param position:  new position: 0 for very beginning
        """
        self.core.files.orderFiles(fids, pid, position)


if Api.extend(FileApi):
    del FileApi
Ejemplo n.º 13
0
class CollectorApi(ApiComponent):
    """ Link collector """

    @RequirePerm(Permission.All)
    def getCollector(self):
        pass

    @RequirePerm(Permission.Add)
    def addToCollector(self, links):
        pass

    @RequirePerm(Permission.Add)
    def addFromCollector(self, name, new_name):
        pass

    @RequirePerm(Permission.Delete)
    def deleteCollPack(self, name):
        pass

    @RequirePerm(Permission.Add)
    def renameCollPack(self, name, new_name):
        pass

    @RequirePerm(Permission.Delete)
    def deleteCollLink(self, url):
        pass


if Api.extend(CollectorApi):
    del CollectorApi
Ejemplo n.º 14
0
        """Check online status of all files in a package, also a default action when package is added. """
        self.core.files.reCheckPackage(pid)

    @RequirePerm(Permission.Modify)
    def restartFailed(self):
        """Restarts all failed failes."""
        self.core.files.restartFailed()

    @RequirePerm(Permission.Modify)
    def stopAllDownloads(self):
        """Aborts all running downloads."""

        pyfiles = self.core.files.cachedFiles()
        for pyfile in pyfiles:
            pyfile.abortDownload()

    @RequirePerm(Permission.Modify)
    def stopDownloads(self, fids):
        """Aborts specific downloads.

        :param fids: list of file ids
        :return:
        """
        pyfiles = self.core.files.cachedFiles()
        for pyfile in pyfiles:
            if pyfile.id in fids:
                pyfile.abortDownload()


if Api.extend(DownloadApi):
    del DownloadApi
Ejemplo n.º 15
0
            if t.type == Interaction.Notification:
                t.setWaiting(self.core.interactionManager.CLIENT_THRESHOLD)

        return tasks

    @RequirePerm(Permission.Interaction)
    def setInteractionResult(self, iid, result):
        """Set Result for a interaction task. It will be immediately removed from task queue afterwards

        :param iid: interaction id
        :param result: result as json string
        """
        task = self.core.interactionManager.getTaskByID(iid)
        if task and self.primaryUID == task.owner:
            task.setResult(result)

    @RequirePerm(Permission.Interaction)
    def getAddonHandler(self):
        pass

    @RequirePerm(Permission.Interaction)
    def callAddonHandler(self, plugin, func, pid_or_fid):
        pass

    @RequirePerm(Permission.Download)
    def generateDownloadLink(self, fid, timeout):
        pass


if Api.extend(UserInteractionApi):
    del UserInteractionApi
Ejemplo n.º 16
0
        # requires at least plugin permissions, but only admin can load core config
        config, values = self.core.config.getSection(name, self.primaryUID)
        return toConfigHolder(name, config, values)

    @RequirePerm(Permission.Plugins)
    def saveConfig(self, config):
        """Used to save a configuration, core config can only be saved by admins

        :param config: :class:`ConfigHolder`
        """
        for item in config.items:
            self.core.config.set(config.name,
                                 item.name,
                                 item.value,
                                 sync=False,
                                 user=self.primaryUID)
            # save the changes
        self.core.config.saveValues(self.primaryUID, config.name)

    @RequirePerm(Permission.Plugins)
    def deleteConfig(self, plugin):
        """Deletes modified config

        :param plugin: plugin name
        """
        #TODO: delete should deactivate addons?
        self.core.config.delete(plugin, self.primaryUID)


if Api.extend(ConfigApi):
    del ConfigApi
Ejemplo n.º 17
0
        :param name: Name of plugin or config section
        :rtype: ConfigHolder
        """
        # requires at least plugin permissions, but only admin can load core config
        config, values = self.core.config.getSection(name, self.primaryUID)
        return toConfigHolder(name, config, values)


    @RequirePerm(Permission.Plugins)
    def saveConfig(self, config):
        """Used to save a configuration, core config can only be saved by admins

        :param config: :class:`ConfigHolder`
        """
        for item in config.items:
            self.core.config.set(config.name, item.name, item.value, sync=False, user=self.primaryUID)
            # save the changes
        self.core.config.saveValues(self.primaryUID, config.name)

    @RequirePerm(Permission.Plugins)
    def deleteConfig(self, plugin):
        """Deletes modified config

        :param plugin: plugin name
        """
        #TODO: delete should deactivate addons?
        self.core.config.delete(plugin, self.primaryUID)


if Api.extend(ConfigApi):
    del ConfigApi
Ejemplo n.º 18
0

class CollectorApi(ApiComponent):
    """ Link collector """
    @RequirePerm(Permission.All)
    def getCollector(self):
        pass

    @RequirePerm(Permission.Add)
    def addToCollector(self, links):
        pass

    @RequirePerm(Permission.Add)
    def addFromCollector(self, name, new_name):
        pass

    @RequirePerm(Permission.Delete)
    def deleteCollPack(self, name):
        pass

    @RequirePerm(Permission.Add)
    def renameCollPack(self, name, new_name):
        pass

    @RequirePerm(Permission.Delete)
    def deleteCollLink(self, url):
        pass


if Api.extend(CollectorApi):
    del CollectorApi