Example #1
0
class RunDetailsWindow(gui.RunDetailsWindow):
    '''
    classdocs
    '''


    def __init__(self, parent, run):
        '''
        Constructor
        '''
        gui.RunDetailsWindow.__init__(self, parent)
        log.info("Starting up a run details window")

        self.run = run
        self.db = DB()
        self.config = Config.get_config()
        self.paths = {}

        self.load_run_details()
        self.load_files(200)
        self.load_messages()

        icon = wx.Icon(os.path.join(const.PixmapDir, "storage.png"), wx.BITMAP_TYPE_ANY)
        self.SetIcon(icon)

        #    Ensure the right page is showing
        self.nbDetails.SetSelection(0)
        self.Show()


##################################################################
#
#    Event Handlers
#
##################################################################

    def onAllFiles(self, event):
        self.load_files(None)
        self.pnlAllFiles.Hide()
        self.pnlFiles.Fit()



##################################################################
#
#    Utilities
#
##################################################################

    def load_run_details(self):
        #(run_id=3, name=u'test', type=1, start_time=u'2010-12-28T15:09:39.455313', hash=u'6da92e0e7f25d003bfcc2cc7d845868fe6a433e1c0fe349300659fc86c8f66ba', size=59764, nfiles=0, status=u'Succeeded')
        self.lstDetails.InsertColumn(0, _("Name"))
        self.lstDetails.InsertColumn(1, _("Value"))

        self.lstDetails.Append([_("Backup Name"), self.run.name])

        self.lstDetails.Append([_("Run Date"), self.run.start_time_str])
        self.lstDetails.Append([_("Run Type"), self.run.type])
        self.lstDetails.Append([_("Status"), self.run.status])
        self.lstDetails.Append([_("Files Backed Up"), str(self.run.nfiles)])
        self.lstDetails.Append([_("Folders Backed Up"), str(self.run.nfolders)])
        self.lstDetails.Append([_("Installed Software List"), _("Included") if self.run.packages else _("Not included")])
        self.lstDetails.Append([_("Total Size"), utils.readable_form(self.run.size)])
        self.lstDetails.Append([_("Hash"), self.run.hash])

        self.lstDetails.SetColumnWidth(0, wx.LIST_AUTOSIZE)
        self.lstDetails.SetColumnWidth(1, wx.LIST_AUTOSIZE)


    def load_files(self, limit):
        with ProgressDialog(self, _("Loading"), _("Loading run files.\nPlease wait...")):
            self.lstFiles.DeleteAllColumns()
            self.lstFiles.DeleteAllItems()

            self.lstFiles.InsertColumn(0, _("Path"))
            self.lstFiles.InsertColumn(1, _("Size"))
            self.lstFiles.InsertColumn(2, _("Mod Time"))

            self.lstFiles.Freeze()
            try:
                files = self.db.run_contents(self.run.run_id, limit)
                for file in files:
                    wx.Yield()
                    if file.type == "F":
                        size = utils.readable_form(file.size)
                        mod_time = file.mod_time
                    elif file.type == 'D':
                        size = _("Folder")
                        mod_time = file.mod_time
                    elif file.type == 'X':
                        size = _("(deleted)")
                        mod_time = ""
                    else:
                        size = "ERROR: Bad type"
                    path = os.path.join(self.get_path(file.parent_id), file.name)
                    item = (utils.display_escape(path), size, mod_time)
                    self.lstFiles.Append(item)
                self.lstFiles.SetColumnWidth(0, wx.LIST_AUTOSIZE)
                self.lstFiles.SetColumnWidth(1, wx.LIST_AUTOSIZE)
                self.lstFiles.SetColumnWidth(2, wx.LIST_AUTOSIZE)
            finally:
                self.lstFiles.Thaw()

            if self.lstFiles.GetItemCount() < limit:
                #    There probably aren't that many files.
                self.pnlAllFiles.Hide()
                self.pnlFiles.Fit()


    def load_messages(self):
        self.lstMessages.InsertColumn(0, _("Time"))
        self.lstMessages.InsertColumn(1, _("Message"))


        messages = self.db.run_messages(self.run.run_id)
        for msg in messages:
            item = (msg.time, msg.message)
            self.lstMessages.Append(item)

        self.lstMessages.SetColumnWidth(0, wx.LIST_AUTOSIZE)
        self.lstMessages.SetColumnWidth(1, wx.LIST_AUTOSIZE)

    def get_path(self, fs_id):
        if fs_id in self.paths:
            return self.paths[fs_id]

        if fs_id == 0:
            return "/"

        #    Get THIS node
        fs = self.db.get_fs(fs_id)
        path = os.path.join(self.get_path(fs.parent_id), fs.name)
        self.paths[fs.fs_id] = path
        return path

    def get_paths(self, files):
        #    For each file, we need to calculate the full path.
        #    That requires getting paths for any path that we dont have yet.
        paths = {}
        for file in files:
            parent_id = file.parent_id
            #    Do we know this parent_id yet?
            file.path = os.path.join(self.get_path(paths, parent_id), file.name)