def restore(self, filename="", silent=False):
        '''restore skin settings from file'''

        if not filename:
            filename = self.get_restorefilename()

        #skip if filename is not a zip file
        if not filename.endswith("zip"):
            return

        progressdialog = None
        if not silent:
            progressdialog = xbmcgui.DialogProgress(
                self.addon.getLocalizedString(32006))
            progressdialog.create(self.addon.getLocalizedString(32007))

        if filename and xbmcvfs.exists(filename):
            # create temp path
            temp_path = self.create_temp()
            if not filename.endswith("zip"):
                # assume that passed filename is actually a skinsettings file
                skinsettingsfile = filename
            else:
                # copy zip to temp directory and unzip
                skinsettingsfile = temp_path + "guisettings.txt"
                if progressdialog:
                    progressdialog.update(0, "unpacking backup...")
                zip_temp = try_encode(
                    '%sskinbackup-%s.zip' %
                    (ADDON_DATA, datetime.now().strftime('%Y-%m-%d-%H-%M')))
                copy_file(filename, zip_temp, True)
                unzip_fromfile(zip_temp, temp_path)
                delete_file(zip_temp)
                # copy skinshortcuts preferences
                self.restore_skinshortcuts(temp_path)
                # restore any custom skin images or themes
                for directory in ["custom_images/", "themes/"]:
                    custom_images_folder = try_encode(
                        "special://profile/addon_data/%s/%s" %
                        (xbmc.getSkinDir(), directory))
                    custom_images_folder_temp = temp_path + directory
                    if xbmcvfs.exists(custom_images_folder_temp):
                        for file in xbmcvfs.listdir(
                                custom_images_folder_temp)[1]:
                            xbmcvfs.copy(custom_images_folder_temp + file,
                                         custom_images_folder + file)
            # restore guisettings
            if xbmcvfs.exists(skinsettingsfile):
                self.restore_guisettings(skinsettingsfile, progressdialog)

            # cleanup temp
            recursive_delete_dir(temp_path)
            progressdialog.close()
        if not silent:
            xbmcgui.Dialog().ok(self.addon.getLocalizedString(32006),
                                self.addon.getLocalizedString(32009))
 def clean_oldbackups(self):
     backuppath = self.addon.getSetting("backup_path")
     max_backups = self.addon.getSetting("max_old_backups")
     if max_backups:
         max_backups = int(max_backups)
         all_files = []
         for filename in xbmcvfs.listdir(backuppath)[1]:
             if ".zip" in filename and "Skinbackup" in filename:
                 filename = filename
                 filepath = backuppath + filename
                 filestat = xbmcvfs.Stat(filepath)
                 modified = filestat.st_mtime()
                 del filestat
                 log_msg(modified)
                 all_files.append((filepath, modified))
         if len(all_files) > max_backups:
             from operator import itemgetter
             old_files = sorted(all_files, key=itemgetter(1), reverse=True)[max_backups - 1:]
             for backupfile in old_files:
                 delete_file(backupfile[0])