diff options
| -rw-r--r-- | module/FileDatabase.py | 89 | ||||
| -rw-r--r-- | module/PluginManager.py | 2 | ||||
| -rw-r--r-- | module/plugins/hooks/MultiHome.py | 7 | 
3 files changed, 63 insertions, 35 deletions
| diff --git a/module/FileDatabase.py b/module/FileDatabase.py index 2f9715d0f..e2b7a47a4 100644 --- a/module/FileDatabase.py +++ b/module/FileDatabase.py @@ -347,40 +347,53 @@ class FileHandler:      @change      def setPackageLocation(self, id, queue):          """push package to queue""" -        pack = self.getPackage(id) +         +        pack = self.db.getPackage(id)          e = RemoveEvent("pack", id, "collector" if not pack.queue else "queue")          self.core.pullManager.addEvent(e) +        self.db.clearPackageOrder(pack) +         +        pack = self.db.getPackage(id) +                  pack.queue = queue -        pack.sync() -        self.db.commit() +        self.db.updatePackage(pack) +         +        self.db.reorderPackage(pack, -1, True) -        e = InsertEvent("pack", id, -1, "collector" if not pack.queue else "queue") +        self.db.commit() +        self.releasePackage(id) +        pack = self.getPackage(id) +        e = InsertEvent("pack", id, pack.order, "collector" if not pack.queue else "queue")          self.core.pullManager.addEvent(e)      @change      def reorderPackage(self, id, position): -        e = RemoveEvent("pack", id, "collector" if not self.db.getPackage(id).queue else "queue") +        p = self.db.getPackage(id) +         +        e = RemoveEvent("pack", id, "collector" if not p.queue else "queue")          self.core.pullManager.addEvent(e) -        self.db.reorderPackage(id, position) +        self.db.reorderPackage(p, position)          self.db.commit() -        e = ReloadAllEvent("collector" if not self.db.getPackage(id).package().queue else "queue") +        e = ReloadAllEvent("collector" if not p.queue else "queue")          self.core.pullManager.addEvent(e)      @change      def reorderFile(self, id, position): -        e = RemoveEvent("file", id, "collector" if not self.db.getFile(id).package().queue else "queue") +        f = self.db.getFile(id) +         +        e = RemoveEvent("file", id, "collector" if not f.package().queue else "queue")          self.core.pullManager.addEvent(e) -        self.db.reorderFile(id, position) +        self.db.reorderFile(f, position)          self.db.commit() -        e = ReloadAllEvent("collector" if not self.db.getFile(id).queue else "queue") +        e = ReloadAllEvent("collector" if not f.package().queue else "queue")          self.core.pullManager.addEvent(e)  ######################################################################### @@ -476,14 +489,20 @@ class FileDatabaseBackend(Thread):          return len(r)      def _nextPackageOrder(self, queue=0): -        self.c.execute('SELECT max(packageorder) FROM packages WHERE queue=?', (queue, )) -        r = self.c.fetchone() -        return r[0] if r[0] else 0 +        self.c.execute('SELECT packageorder FROM packages WHERE queue=?', (queue, )) +        rs = self.c.fetchall() +        o = -1 +        for r in rs: +            if r[0] > o: o = r[0] +        return o+1      def _nextFileOrder(self, package): -        self.c.execute('SELECT max(linkorder) FROM links WHERE package=?', (package, )) -        r = self.c.fetchone() -        return r[0] if r[0] else 0 +        self.c.execute('SELECT linkorder FROM links WHERE package=?', (package, )) +        rs = self.c.fetchall() +        o = -1 +        for r in rs: +            if r[0] > o: o = r[0] +        return o+1      @queue      def addLink(self, url, name, plugin, package): @@ -507,14 +526,18 @@ class FileDatabaseBackend(Thread):      @queue      def deletePackage(self, id): +        p = self.getPackage(id)          self.c.execute('DELETE FROM links WHERE package=?', (str(id), ))          self.c.execute('DELETE FROM packages WHERE id=?', (str(id), )) +        self.c.execute('UPDATE packages SET packageorder=packageorder-1 WHERE packageorder > ? AND queue=?', ( p.order, p.queue) )      @queue      def deleteLink(self, id): +        f = self.getFile(id)          self.c.execute('DELETE FROM links WHERE id=?', (str(id), )) +        self.c.execute('UPDATE links SET linkorder=linkorder-1 WHERE linkorder > ? AND package=?', ( f.order, str(f.packageid)) )      @queue @@ -531,7 +554,7 @@ class FileDatabaseBackend(Thread):          }          """ -        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.id', (q, )) +        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 p.packageorder, l.linkorder', (q, ))          data = {}          for r in self.c:              data[str(r[0])] = { @@ -563,7 +586,7 @@ class FileDatabaseBackend(Thread):              id: {'name': name ... 'links': {} }, ...          }          """ -        self.c.execute('SELECT id,name,folder,site,password,queue,packageorder,priority FROM packages WHERE queue=? ORDER BY id', str(q)) +        self.c.execute('SELECT id,name,folder,site,password,queue,packageorder,priority FROM packages WHERE queue=? ORDER BY packageorder', str(q))          data = {}          for r in self.c: @@ -588,7 +611,7 @@ class FileDatabaseBackend(Thread):      @queue      def getPackageData(self, id):          """get package data""" -        self.c.execute('SELECT id,url,name,size,status,error,plugin,package,linkorder FROM links WHERE package=? ORDER BY id', (str(id),)) +        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: @@ -612,28 +635,32 @@ class FileDatabaseBackend(Thread):      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))) -    @async +    @queue      def updatePackage(self, p):          self.c.execute('UPDATE packages SET name=?,folder=?,site=?,password=?,queue=?,priority=? WHERE id=?', (p.name, p.folder, p.site, p.password, p.queue, p.priority, str(p.id))) -    @async -    def reorderPackage(self, id, position): -        p = self.getPackage(id) -        self.c.execute('UPDATE packages SET packageorder=packageorder-1 WHERE packageorder > ? AND queue=?', ( p.order, p.queue) ) -        self.c.execute('UPDATE packages SET packageorder=packageorder+1 WHERE packageorder >= ? AND queue=?', ( position, p.queue) ) +    @queue +    def reorderPackage(self, p, position, noMove=False): +        if position == -1: +            position = self._nextPackageOrder(p.queue) +        if not noMove: +            self.c.execute('UPDATE packages SET packageorder=packageorder-1 WHERE packageorder > ? AND queue=? AND packageorder > 0', ( p.order, p.queue) ) +            self.c.execute('UPDATE packages SET packageorder=packageorder+1 WHERE packageorder >= ? AND queue=? AND packageorder > 0', ( position, p.queue) )          self.c.execute('UPDATE packages SET packageorder=? WHERE id=?', ( position, str(p.id) ) ) -        p.order = position -        p.sync() -    @async -    def reorderLink(self, id, position): -        f = self.getFile(id) +    @queue +    def reorderLink(self, f, position):          self.c.execute('UPDATE links SET linkorder=linkorder-1 WHERE linkorder > ? AND package=?', ( f.order, str(f.packageid) ) )          self.c.execute('UPDATE links SET linkorder=linkorder+1 WHERE linkorder >= ? AND package=?', ( position, str(f.packageid) ) )          self.c.execute('UPDATE links SET linkorder=? WHERE id=?', ( position, str(f.id) ) )          f.order = position          f.sync() +    @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)) ) +          @async      def restartFile(self, id):          self.c.execute('UPDATE links SET status=3 WHERE id=?', ( str(id), ) ) @@ -680,7 +707,7 @@ class FileDatabaseBackend(Thread):          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 AND l.status IN (2,3,6) LIMIT 5" % 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 AND l.status IN (2,3,6) Order BY p.packageorder, l.linkorder LIMIT 5" % cmd          self.c.execute(cmd) # very bad! diff --git a/module/PluginManager.py b/module/PluginManager.py index 6cff2d50f..6815fed52 100644 --- a/module/PluginManager.py +++ b/module/PluginManager.py @@ -262,4 +262,4 @@ if __name__ == "__main__":      b = time()      print b-a ,"s" -    
\ No newline at end of file +     diff --git a/module/plugins/hooks/MultiHome.py b/module/plugins/hooks/MultiHome.py index 9e2bcbe5f..cfea5952d 100644 --- a/module/plugins/hooks/MultiHome.py +++ b/module/plugins/hooks/MultiHome.py @@ -25,7 +25,7 @@ class MultiHome(Hook):      __version__ = "0.1"      __description__ = """ip address changer"""      __config__ = [ ("activated", "bool", "Activated" , "False"), -                   ("interfaces", "str", "Interfaces" , "") ] +                   ("interfaces", "str", "Interfaces" , "None") ]      __author_name__ = ("mkaay")      __author_mail__ = ("mkaay@mkaay.de") @@ -51,8 +51,9 @@ class MultiHome(Hook):      	oldGetRequest = requestFactory.getRequest          def getRequest(pluginName, account=None, type="HTTP"):              iface = self.bestInterface(pluginName, account) -            iface.useFor(pluginName, account) -            requestFactory.iface = iface.adress +            if iface: +                iface.useFor(pluginName, account) +                requestFactory.iface = iface.adress              return oldGetRequest(pluginName, account, type)          requestFactory.getRequest = getRequest | 
