Esempio n. 1
0
class OfflineManager(QObject):
    def __init__(self):
        QObject.__init__(self)
        self.setExceptionHandler(self.exceptionHandler)
        self.setActionHandler(self.handler)

        self.offlineparser = OfflineParser()

    def setActionHandler(self, handler):
        backend.pm.Iface().setHandler(handler)

    def setExceptionHandler(self, handler):
        backend.pm.Iface().setExceptionHandler(handler)

    def updateExportingProgress(self):
        try:
            percent = (self.packageNo * 100) / self.totalPackages
        except ZeroDivisionError:
            percent = 0

        self.emit(SIGNAL("exportingProgress(int)"), percent)

    def updateTotalOperationPercent(self):
        try:
            percent = (self.operationNo * 100) / self.totalOperations
        except ZeroDivisionError:
            percent = 0

        self.emit(SIGNAL("totalProgress(int)"), percent)

    def updateOperationPercent(self):
        try:
            percent = (self.packageNo * 100) / self.totalPackages
        except ZeroDivisionError:
            percent = 0

        self.emit(SIGNAL("currentProgress(int)"), percent)

    def importIndex(self, filename):
        backend.pm.Iface().setIndex(filename)

    def exportIndex(self, filename):
        iface = backend.pm.Iface()

        source = iface.source  # store current source
        iface.setSource(None)  # set source None

        list_installed = iface.getPackageList()  # get installed package list
        packages = []

        self.totalPackages = len(list_installed)
        self.packageNo = 0

        for name in list_installed:
            packages.append(iface.getPackage(name))
            self.packageNo += 1
            self.updateExportingProgress()

        session = SessionManager()
        session.setSession(session.OFFLINE)

        try:
            backend.pm.Iface().writeIndex(packages, filename)
            print "Index file is written successfully."
        except:
            print "Index file could not written!"

        # set source and session to their previous states
        session.setSession(session.NORMAL)
        iface.setSource(source)

    def saveSession(self, filename):
        self.offlineparser.saveArchive(filename)

    def openSession(self, filename):
        self.offlineparser.extractArchive(filename)

        self.initOperations()
        self.getOperation()

    def initOperations(self):
        self.operations = self.offlineparser.parseOperations()
        self.totalOperations = len(self.operations)
        self.operationNo = 0
        self.signalCounter = 0

    def getOperation(self):
        self.updateTotalOperationPercent()
        self.operationNo += 1

        try:
            operation = self.operations[0][0]
            packages = self.operations[0][1]

            self.operations.pop(0)
            self.startOperation(operation, packages)
        except IndexError:
            self.emit(SIGNAL("finished()"))

    def startOperation(self, operation, packages):
        self.totalPackages = len(packages)
        self.packageNo = 0

        if operation == "install":
            backend.pm.Iface().installPackages(packages)

        elif operation == "remove":
            backend.pm.Iface().removePackages(packages)

        else:
            raise Exception("Unknown operation")

    def exceptionHandler(self, exception):
        self.emit(SIGNAL("exception(QString)"), str(exception))

    def handler(self, package, signal, args):
        if signal == "status":
            signal = str(args[0])
            args = args[1:]

            packageName = args[0]

            if signal == "installing":
                self.emit(SIGNAL("operationChanged(QString)"),
                          i18n("Installing %s" % packageName))

            elif signal == "removing":
                self.emit(SIGNAL("operationChanged(QString)"),
                          i18n("Removing %s" % packageName))

            elif signal in ["installed", "removed"]:
                self.packageNo += 1
                self.updateOperationPercent()

        elif signal == "finished":
            # it must wait for second finish signal to start next operation
            if self.signalCounter == 1:
                self.getOperation()
                self.signalCounter = 0
            else:
                self.signalCounter += 1
Esempio n. 2
0
class OfflineManager(QObject):
    def __init__(self):
        QObject.__init__(self)
        self.setExceptionHandler(self.exceptionHandler)
        self.setActionHandler(self.handler)
        
        self.offlineparser = OfflineParser()

    def setActionHandler(self, handler):
        backend.pm.Iface().setHandler(handler)

    def setExceptionHandler(self, handler):
        backend.pm.Iface().setExceptionHandler(handler)

    def updateExportingProgress(self):
        try:
            percent = (self.packageNo * 100) / self.totalPackages
        except ZeroDivisionError:
            percent = 0

        self.emit(SIGNAL("exportingProgress(int)"), percent)

    def updateTotalOperationPercent(self):
        try:
            percent = (self.operationNo * 100) / self.totalOperations
        except ZeroDivisionError:
            percent = 0

        self.emit(SIGNAL("totalProgress(int)"), percent)

    def updateOperationPercent(self):
        try:
            percent = (self.packageNo * 100) / self.totalPackages
        except ZeroDivisionError:
            percent = 0

        self.emit(SIGNAL("currentProgress(int)"), percent)

    def importIndex(self, filename):        
        backend.pm.Iface().setIndex(filename)

    def exportIndex(self, filename):
        iface = backend.pm.Iface()

        source = iface.source  # store current source
        iface.setSource(None)  # set source None

        list_installed = iface.getPackageList()  # get installed package list
        packages = []

        self.totalPackages = len(list_installed)
        self.packageNo = 0

        for name in list_installed:
            packages.append(iface.getPackage(name))
            self.packageNo += 1
            self.updateExportingProgress()

        session = SessionManager()
        session.setSession(session.OFFLINE)

        try:
            backend.pm.Iface().writeIndex(packages, filename)
            print "Index file is written successfully."
        except:
            print "Index file could not written!"

        # set source and session to their previous states
        session.setSession(session.NORMAL)
        iface.setSource(source)

    def saveSession(self, filename):
        self.offlineparser.saveArchive(filename)

    def openSession(self, filename):
        self.offlineparser.extractArchive(filename)
        
        self.initOperations()
        self.getOperation()

    def initOperations(self):
        self.operations = self.offlineparser.parseOperations()
        self.totalOperations = len(self.operations)
        self.operationNo = 0
        self.signalCounter = 0

    def getOperation(self):
        self.updateTotalOperationPercent()
        self.operationNo += 1

        try:
            operation = self.operations[0][0]
            packages = self.operations[0][1]

            self.operations.pop(0)
            self.startOperation(operation, packages)
        except IndexError:
            self.emit(SIGNAL("finished()"))

    def startOperation(self, operation, packages):
        self.totalPackages = len(packages)
        self.packageNo = 0

        if operation == "install":
            backend.pm.Iface().installPackages(packages)

        elif operation == "remove":
            backend.pm.Iface().removePackages(packages)

        else:
            raise Exception("Unknown operation")

    def exceptionHandler(self, exception):
        self.emit(SIGNAL("exception(QString)"), str(exception))

    def handler(self, package, signal, args):
        if signal == "status":
            signal = str(args[0])
            args = args[1:]

            packageName = args[0]

            if signal == "installing":
                self.emit(SIGNAL("operationChanged(QString)"), i18n("Installing %s" % packageName))

            elif signal == "removing":
                self.emit(SIGNAL("operationChanged(QString)"), i18n("Removing %s" % packageName))

            elif signal in ["installed", "removed"]:
                self.packageNo += 1
                self.updateOperationPercent()

        elif signal == "finished":
            # it must wait for second finish signal to start next operation
            if self.signalCounter == 1:
                self.getOperation()
                self.signalCounter = 0
            else:
                self.signalCounter += 1