def actionFailedCallback(self, actionType, pkgName):
        '''Installing failed callback.'''
        if actionType == ACTION_INSTALL:
            if self.repoCache.cache.has_key(pkgName):
                # Update application information.
                appInfo = self.repoCache.cache[pkgName]
                appInfo.switchStatus(APP_STATE_NORMAL)
                
                # Update recommend view.
                recommendView = self.recommendPage.recommendView
                recommendView.initNormalStatus(pkgName, True)
                
                # Update repo view.
                repoView = self.repoPage.repoView
                repoView.initNormalStatus(pkgName, True, True)
                
                # Update detail view.
                for pageId in [PAGE_RECOMMEND, PAGE_REPO, PAGE_UPGRADE, PAGE_UNINSTALL]:
                    if self.detailViewDict.has_key(pageId):
                        detailView = self.detailViewDict[pageId]
                        detailView.initNormalStatus(pkgName, True)
                    elif pageId == PAGE_REPO and self.searchViewDict.has_key(pageId):
                        searchView = self.searchViewDict[pageId].searchView
                        searchView.initNormalStatus(pkgName, True, True)
            else:
                print "Impossible: %s not in RepoCache" % (pkgName)
        elif actionType == ACTION_UPGRADE:
            if self.repoCache.cache.has_key(pkgName):
                # Update application information.
                appInfo = self.repoCache.cache[pkgName]
                appInfo.switchStatus(APP_STATE_UPGRADE)

                # Update recommend view.
                recommendView = self.recommendPage.recommendView
                recommendView.switchToStatus(pkgName, APP_STATE_UPGRADE)
                
                # Update repo view.
                repoView = self.repoPage.repoView
                repoView.switchToStatus(pkgName, APP_STATE_UPGRADE, True)
                
                # Update update view.
                updateView = self.updatePage.updateView
                updateView.switchToStatus(pkgName, APP_STATE_UPGRADE, True)
                
                # Update detail view.
                for pageId in [PAGE_RECOMMEND, PAGE_REPO, PAGE_UPGRADE, PAGE_UNINSTALL]:
                    if self.detailViewDict.has_key(pageId):
                        detailView = self.detailViewDict[pageId]
                        detailView.switchToStatus(pkgName, APP_STATE_UPGRADE)
                    elif pageId == PAGE_REPO and self.searchViewDict.has_key(pageId):
                        searchView = self.searchViewDict[pageId].searchView
                        searchView.switchToStatus(pkgName, APP_STATE_UPGRADE, True)
            else:
                print "Impossible: %s not in RepoCache" % (pkgName)
        elif actionType == ACTION_UNINSTALL:
            if self.repoCache.cache.has_key(pkgName):
                # Update application information.
                appInfo = self.repoCache.cache[pkgName]
                appInfo.switchStatus(APP_STATE_INSTALLED)
                
                # Update uninstall view.
                uninstallView = self.uninstallPage.uninstallView
                uninstallView.initUninstallStatus(pkgName, True)
                
                # Update detail view.
                for pageId in [PAGE_RECOMMEND, PAGE_REPO, PAGE_UPGRADE, PAGE_UNINSTALL]:
                    if self.detailViewDict.has_key(pageId):
                        detailView = self.detailViewDict[pageId]
                        detailView.initNormalStatus(pkgName, False)
                    elif pageId == PAGE_UNINSTALL and self.searchViewDict.has_key(pageId):
                        searchView = self.searchViewDict[pageId].searchView
                        searchView.initUninstallStatus(pkgName, True)
            else:
                print "Impossible: %s not in RepoCache" % (pkgName)
    def actionFinishCallback(self, actionType, pkgList):
        '''Installing finish callback.'''
        if actionType == ACTION_INSTALL:
            for (pkgName, isMarkDeleted) in pkgList:
                if self.repoCache.cache.has_key(pkgName):
                    # Update application information.
                    appInfo = self.repoCache.cache[pkgName]
                    if isMarkDeleted:
                        appInfo.switchStatus(APP_STATE_NORMAL)
                    else:
                        appInfo.switchStatus(APP_STATE_INSTALLED)
                
                    # Update recommend view.
                    recommendView = self.recommendPage.recommendView
                    recommendView.initNormalStatus(pkgName, isMarkDeleted)
                    
                    # Update repo view.
                    repoView = self.repoPage.repoView
                    repoView.initNormalStatus(pkgName, isMarkDeleted, True)
                    
                    # Update detail view.
                    for pageId in [PAGE_RECOMMEND, PAGE_REPO, PAGE_UPGRADE, PAGE_UNINSTALL]:
                        if self.detailViewDict.has_key(pageId):
                            detailView = self.detailViewDict[pageId]
                            detailView.initNormalStatus(pkgName, isMarkDeleted)
                        elif pageId == PAGE_REPO and self.searchViewDict.has_key(pageId):
                            searchView = self.searchViewDict[pageId].searchView
                            searchView.initNormalStatus(pkgName, isMarkDeleted, True)
                        
                    # Add in uninstall list.
                    self.updateUninstallView(pkgName, not isMarkDeleted)
                else:
                    print "Impossible: %s not in RepoCache" % (pkgName)
        elif actionType == ACTION_UPGRADE:
            for (pkgName, isMarkDeleted) in pkgList:
                if self.repoCache.cache.has_key(pkgName):
                    # Update application information.
                    appInfo = self.repoCache.cache[pkgName]
                    if isMarkDeleted:
                        appInfo.switchStatus(APP_STATE_NORMAL)
                    else:
                        appInfo.switchStatus(APP_STATE_INSTALLED)

                        # Remove upgradabled packages.
                        self.repoCache.removePkgFromUpgradableList(pkgName)
                        
                        # Update topbar.
                        pkgNum = len(self.repoCache.upgradablePkgs)
                        self.updatePage.topbar.updateNum(pkgNum)
                        
                        # Update update view.
                        updateView = self.updatePage.updateView
                        updateView.update(pkgNum)
                        
                        # Update notify number.
                        self.navigatebar.updateIcon.queue_draw()
                        
                    # Update recommend view.
                    recommendView = self.recommendPage.recommendView
                    recommendView.initNormalStatus(pkgName, isMarkDeleted)
                    
                    # Update repo view.
                    repoView = self.repoPage.repoView
                    repoView.initNormalStatus(pkgName, isMarkDeleted, True)
                    
                    # Update detail view.
                    for pageId in [PAGE_RECOMMEND, PAGE_REPO, PAGE_UPGRADE, PAGE_UNINSTALL]:
                        if self.detailViewDict.has_key(pageId):
                            detailView = self.detailViewDict[pageId]
                            detailView.initNormalStatus(pkgName, isMarkDeleted)
                        elif pageId == PAGE_REPO and self.searchViewDict.has_key(pageId):
                            searchView = self.searchViewDict[pageId].searchView
                            searchView.initNormalStatus(pkgName, isMarkDeleted, True)
                        
                    # Add in uninstall list.
                    self.updateUninstallView(pkgName, not isMarkDeleted)
                else:
                    print "Impossible: %s not in RepoCache" % (pkgName)
        elif actionType == ACTION_UNINSTALL:
            for (pkgName, isMarkDeleted) in pkgList:
                if self.repoCache.cache.has_key(pkgName):
                    # Update application information.
                    appInfo = self.repoCache.cache[pkgName]
                    appInfo.switchStatus(APP_STATE_NORMAL)
                    
                    self.updateUninstallView(pkgName, False)
                    
                    # Update recommend view.
                    recommendView = self.recommendPage.recommendView
                    recommendView.initNormalStatus(pkgName, isMarkDeleted)
                    
                    # Update repo view.
                    repoView = self.repoPage.repoView
                    repoView.initNormalStatus(pkgName, isMarkDeleted, True)
                    
                    # Update detail view.
                    for pageId in [PAGE_RECOMMEND, PAGE_REPO, PAGE_UPGRADE, PAGE_UNINSTALL]:
                        if self.detailViewDict.has_key(pageId):
                            detailView = self.detailViewDict[pageId]
                            detailView.initNormalStatus(pkgName, isMarkDeleted)
                        elif pageId == PAGE_UNINSTALL and self.searchViewDict.has_key(pageId):
                            searchPage = self.searchViewDict[pageId]
                            searchPage.update(pkgName)
                else:
                    print "Impossible: %s not in RepoCache" % (pkgName)