def __init__(self): # Check if script is running self.scriptDir = abspath(dirname(__file__)) self.filesDir = join(self.scriptDir, "files") self.scriptName = basename(__file__) self.umglobal = UmGlobal() self.ec = ExecCmd() # Handle arguments parser = argparse.ArgumentParser( description='Trail Update Manager Tray') parser.add_argument('-r', '--reload', action="store_true", help='') args, extra = parser.parse_known_args() print((">> args = {}".format(args))) if args.reload: pids = self.umglobal.getScriptPids("updatemanagertray.py") if len(pids) > 1: print(("updatemanagertray.py already running - kill pid {}". format(pids[0]))) os.system("kill {}".format(pids[0])) # Build status icon menu self.refreshText = _("Refresh") self.quitText = _("Quit") menu = Gtk.Menu() menuUm = Gtk.MenuItem(_("Update Manager")) menuUm.connect('activate', self.open_um) menu.append(menuUm) # Separator not functioning in wheezy #menuSep1 = Gtk.SeparatorMenuItem() #menu.append(menuSep1) menuPref = Gtk.MenuItem(_("Preferences")) menuPref.connect('activate', self.open_preferences) menu.append(menuPref) menuRefresh = Gtk.MenuItem(self.refreshText) menuRefresh.connect('activate', self.manualRefresh) menu.append(menuRefresh) menuQuit = Gtk.MenuItem(self.quitText) menuQuit.connect('activate', self.quit_tray) menu.append(menuQuit) self.statusIcon = Gtk.StatusIcon() self.umrefresh = UmRefresh(self.statusIcon, self.umglobal) self.notifier = UmNotifier(self.statusIcon, self.umglobal, self.umrefresh) self.statusIcon.connect('activate', self.icon_activate) self.statusIcon.connect('popup-menu', self.popup_menu, menu) # Initiate first check self.refresh() # Loop the refresh function # For some reason you cannot start a threaded class from init self.timeout = int(self.umglobal.settings["hrs-check-status"] * 60 * 60) GObject.timeout_add_seconds(self.timeout, self.refresh)
def __init__(self): # Check if script is running self.scriptName = basename(__file__) self.umglobal = UmGlobal() # Handle arguments parser = argparse.ArgumentParser( description='SolydXK Update Manager Preferences') parser.add_argument('-r', '--reload', action="store_true", help='') args, extra = parser.parse_known_args() print(("args = {}".format(args))) if args.reload: pids = self.umglobal.getProcessPids("updatemanagerpref.py") if len(pids) > 1: print(("updatemanagerpref.py already running - kill pid {}". format(pids[0]))) os.system("kill {}".format(pids[0])) # Initiate logging self.logFile = join('/var/log', self.umglobal.settings['log']) self.log = Logger(self.logFile) # Load window and widgets self.builder = Gtk.Builder() self.builder.add_from_file( join(self.umglobal.shareDir, 'updatemanagerpref.glade')) # Preferences window objects go = self.builder.get_object self.window = go("windowPref") self.nbPref = go('nbPref') self.btnSaveMirrors = go('btnSaveMirrors') self.btnCheckMirrorsSpeed = go("btnCheckMirrorsSpeed") self.lblMirrors = go('lblMirrors') self.tvMirrors = go("tvMirrors") self.btnRemoveBlackList = go("btnRemoveBlacklist") self.btnAddBlackList = go("btnAddBlacklist") self.tvBlacklist = go("tvBlacklist") self.tvAvailable = go("tvAvailable") self.lblGeneral = go("lblGeneral") self.btnSaveGeneral = go("btnSaveGeneral") self.chkHideMaintenance = go("chkHideMaintenance") self.chkAutostart = go("chkAutostart") # GUI translations self.window.set_title(_("Update Manager Preferences")) self.btnSaveMirrors.set_label(_("Save mirrors")) self.btnCheckMirrorsSpeed.set_label(_("Check mirrors speed")) self.btnRemoveBlackList.set_label(_("Remove")) self.btnAddBlackList.set_label(_("Blacklist")) self.lblMirrors.set_label(_("Repository mirrors")) self.lblGeneral.set_label(_("General")) go("lblHideMaintenance").set_label(_("Hide maintenance")) go("lblBlacklist").set_label(_("Blacklisted packages")) go("lblMirrorsText").set_label(_("Select the fastest repository")) go("lblBlacklistText").set_label(_("Blacklisted packages")) go("lblAvailableText").set_label(_("Available packages")) go("lblGlobalSettings").set_label(_("Global settings")) # Initiate the treeview handler and connect the custom toggle event with on_tvMirrors_toggle self.tvMirrorsHandler = TreeViewHandler(self.tvMirrors) self.tvMirrorsHandler.connect('checkbox-toggled', self.on_tvMirrors_toggle) self.tvBlacklistHandler = TreeViewHandler(self.tvBlacklist) self.tvAvailableHandler = TreeViewHandler(self.tvAvailable) # Initialize self.ec = ExecCmd(loggerObject=self.log) self.queue = Queue() self.excludeMirrors = ['security', 'community'] self.activeMirrors = self.umglobal.getMirrorData( excludeMirrors=self.excludeMirrors) self.deadMirrors = self.umglobal.getMirrorData(getDeadMirrors=True) self.mirrors = self.getMirrors() self.threads = {} self.blacklist = [] self.available = [] self.fillGeneralSettings() self.fillTreeViewMirrors() self.fillTreeViewBlackList() self.fillTreeViewAvailable() # Connect the signals and show the window self.builder.connect_signals(self) self.window.show()
def __init__(self): # Check if script is running self.scriptName = basename(__file__) self.umglobal = UmGlobal() self.ec = ExecCmd() self.status = AppIndicator3.IndicatorStatus # Load window and widgets self.builder = Gtk.Builder() self.builder.add_from_file( join(self.umglobal.shareDir, 'updatemanagerlegend.glade')) go = self.builder.get_object # Main window objects self.legend = go("windowLegenda") go("imgConnected").set_from_file( join(self.umglobal.iconsDir, self.umglobal.settings["icon-connected"])) go("imgDisconnected").set_from_file( join(self.umglobal.iconsDir, self.umglobal.settings["icon-disconnected"])) go("imgError").set_from_file( join(self.umglobal.iconsDir, self.umglobal.settings["icon-error"])) go("imgExecute").set_from_file( join(self.umglobal.iconsDir, self.umglobal.settings["icon-execute"])) go("imgUpdates").set_from_file( join(self.umglobal.iconsDir, self.umglobal.settings["icon-updates"])) go("imgWarning").set_from_file( join(self.umglobal.iconsDir, self.umglobal.settings["icon-warning"])) go("lblConnected").set_label(self.umglobal.connectedText) go("lblDisconnected").set_label(self.umglobal.disconnectedText) go("lblExecute").set_label(self.umglobal.executeText) self.lblError = go("lblError") self.lblWarning = go("lblWarning") self.lblUpdates = go("lblUpdates") self.builder.connect_signals(self) # Handle arguments parser = argparse.ArgumentParser( description='SolydXK Update Manager Tray') parser.add_argument('-r', '--reload', action="store_true", help='') args, extra = parser.parse_known_args() #print((">> args = {}".format(args))) if args.reload: pids = self.umglobal.getProcessPids("updatemanagertray.py") if len(pids) > 1: print(("updatemanagertray.py already running - kill pid {}". format(pids[0]))) os.system("kill {}".format(pids[0])) # Build status icon menu self.quitText = _("Quit") menu = Gtk.Menu() menuUm = Gtk.MenuItem(self.umglobal.title) menuUm.connect('activate', self.open_um) menu.append(menuUm) # Separator not functioning in wheezy menuSep1 = Gtk.SeparatorMenuItem() menu.append(menuSep1) menuQupd = Gtk.MenuItem(_("Quick Update")) menuQupd.connect('activate', self.quick_update) menu.append(menuQupd) menuSep2 = Gtk.SeparatorMenuItem() menu.append(menuSep2) menuPref = Gtk.MenuItem(_("Preferences")) menuPref.connect('activate', self.open_preferences) menu.append(menuPref) menuLegend = Gtk.MenuItem(_("Legend")) menuLegend.connect('activate', self.open_legend) menu.append(menuLegend) menuQuit = Gtk.MenuItem(self.quitText) menuQuit.connect('activate', self.quit_tray) menu.append(menuQuit) menu.show_all() if self.umglobal.isKf5: print(("> Running KDE5")) # Use this for KDE5 self.indicator = AppIndicator3.Indicator.new_with_path( "updatemanager", self.umglobal.settings["icon-connected"], AppIndicator3.IndicatorCategory.SYSTEM_SERVICES, self.umglobal.iconsDir) # Title not showing in KDE4 self.indicator.set_title("<strong>{}</strong>".format( self.umglobal.title)) self.indicator.set_secondary_activate_target(menuUm) self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE) self.indicator.set_menu(menu) else: print(("> Running KDE4")) # Use this for KDE4 self.indicator = Gtk.StatusIcon() #self.indicator.connect('activate', self.open_um) self.indicator.connect('popup-menu', self.popup_menu, menu) self.umrefresh = UmRefresh(self.umglobal, self.indicator) self.notifier = UmNotifier(self.umrefresh) # Initiate first check self.refresh()
def __init__(self): # Check if script is running self.scriptName = basename(__file__) self.umglobal = UmGlobal() self.user = self.umglobal.getLoginName() # Initiate logging self.logFile = join('/var/log', self.umglobal.settings['log']) print(("UM log = %s" % self.logFile)) self.log = Logger(self.logFile, maxSizeKB=5120) # Remove scripts self.deleteScripts(self.umglobal.localUpdVersion) # Initialize self.ec = ExecCmd(loggerObject=self.log) self.apt = UmApt(self.umglobal) self.kernelVersion = self.umglobal.getKernelVersion() self.upgradables = [] self.upgradableUM = [] self.window = None # Handle arguments parser = argparse.ArgumentParser(description='SolydXK Update Manager') parser.add_argument('-q', '--quick', action="store_true", help='Quick upgrade') parser.add_argument('-r', '--reload', action="store_true", help='') args, extra = parser.parse_known_args() self.quickUpdate = False if args.quick and not self.umglobal.newUpd: self.quickUpdate = True if args.reload: pids = self.umglobal.getProcessPids("updatemanager.py") if len(pids) > 1: print(("updatemanager.py already running - kill pid {}".format( pids[0]))) os.system("kill {}".format(pids[0])) # Set some global translations self.aptErrorText = _("Apt error") self.upgradablePackagesText = _( "The following packages will be upgraded:") self.newPackagesText = _( "The following NEW packages will be installed:") self.removedPackagesText = _("The following packages will be REMOVED:") self.heldbackPackagesText = _( "The following packages have been kept back:") self.downgradePackagesText = _( "The following packages are going to be downgraded:") # Cleanup first for fle in glob(join(self.umglobal.filesDir, '.um*')): remove(fle) # Load window and widgets self.builder = Gtk.Builder() self.builder.add_from_file( join(self.umglobal.shareDir, 'updatemanager.glade')) go = self.builder.get_object # Quick update if self.quickUpdate: # Refresh data self.refresh() self.umglobal.collectData() self.apt.createPackagesInfoList() self.apt.createPackageLists() self.fillTreeView() # Run upgrade nid = self.run_upgrade() if nid != "": self.on_command_done(None, 0, nid) sys.exit(2) # Make sure the files directory is set correctly self.checkFilesDir() # Main window objects self.window = go("windowMain") #self.window.set_icon_from_file(join(self.umglobal.iconsDir, self.umglobal.settings["icon-connected"])) self.tvPck = go("tvPck") self.swTerminal = go("swTerminal") self.statusbar = go("statusbar") self.btnInstall = go("btnInstall") self.btnRefresh = go("btnRefresh") self.btnPackages = go("btnPackages") self.btnOutput = go("btnOutput") self.btnInfo = go("btnInfo") self.btnPreferences = go("btnPreferences") self.nbMain = go("nbMain") self.swInfo = go("swInfo") self.btnMaintenance = go("btnMaintenance") self.lblMaintenance = go("lblMaintenance") self.tvMaintenance = go("tvMaintenance") self.btnMaintenanceExecute = go("btnMaintenanceExecute") self.chkMaintenanceSelectAll = go("chkMaintenanceSelectAll") self.radUnneeded = go("radUnneeded") self.radCleanCache = go("radCleanCache") self.radDowngradable = go("radDowngradable") self.radNotavailable = go("radNotavailable") self.radOldKernel = go("radOldKernel") self.lblMaintenanceHelp = go("lblMaintenanceHelp") # Translations self.window.set_title(_("SolydXK Update Manager")) self.btnInstall.set_label(_("Install")) self.btnRefresh.set_label(_("Refresh")) self.btnOutput.set_label(_("Output")) self.btnInfo.set_label(_("Information")) self.btnPreferences.set_label(_("Preferences")) self.btnMaintenance.set_label(_("Maintenance")) self.btnPackages.set_label(_("Packages")) self.uptodateText = self.umglobal.connectedText self.lblMaintenance.set_label(self.btnMaintenance.get_label()) self.btnMaintenanceExecute.set_label(_("Execute")) self.chkMaintenanceSelectAll.set_label(_("Select all")) self.radCleanCache.set_label(_("Clean up the apt cache")) self.radUnneeded.set_label(_("Remove unneeded packages")) self.radNotavailable.set_label( _("Remove packages not available\nin the repositories")) self.radOldKernel.set_label(_("Remove old kernels")) self.radDowngradable.set_label( _("Downgrade packages with\nonly lower versions available")) self.lblMaintenanceHelp.set_label( _("Make sure you create\n" "a system image before you\n" "continue (e.g. Clonezilla).")) # VTE Terminal self.terminal = VirtualTerminal(userInputAllowed=self.umglobal. settings["allow-terminal-user-input"]) self.swTerminal.add(self.terminal) self.terminal.set_vexpand(True) self.terminal.set_hexpand(True) self.terminal.connect('command-done', self.on_command_done) self.terminal.connect('line-added', self.on_line_added) palletList = [ '#4A4A4A', '#BD1919', '#118011', '#CE6800', '#1919BC', '#8D138D', '#139494', '#A7A7A7' ] self.terminal.setTerminalColors("#000000", "#FFFFFF", palletList) self.swTerminal.modify_bg(Gtk.StateType.NORMAL, Gdk.color_parse("#FFFFFF")) # Disable all buttons self.btnInfo.set_sensitive(False) self.btnPreferences.set_sensitive(False) self.btnOutput.set_sensitive(False) self.btnRefresh.set_sensitive(False) self.btnInstall.set_sensitive(False) self.btnPackages.set_sensitive(False) self.btnMaintenance.set_sensitive(False) # Hide tabs if needed for tab in self.umglobal.settings["hide-tabs"]: if tab == "packages": self.nbMain.get_nth_page(0).set_visible(False) self.btnPackages.set_visible(False) elif tab == "output": self.nbMain.get_nth_page(1).set_visible(False) self.btnOutput.set_visible(False) elif tab == "info": self.nbMain.get_nth_page(2).set_visible(False) self.btnInfo.set_visible(False) elif tab == "maintenance": self.nbMain.get_nth_page(3).set_visible(False) self.btnMaintenance.set_visible(False) # Connect the signals and show the window self.builder.connect_signals(self) self.window.show() # Force the window to show while Gtk.events_pending(): Gtk.main_iteration() # Just show something that we're busy msg = _("Gathering information...") self.terminal.executeCommand('echo "%s"' % msg, 'init') self.showOutput() # Treeview handlers self.tvHandler = TreeViewHandler(self.tvPck) self.tvMaintenanceHandler = TreeViewHandler(self.tvMaintenance) # Version information ver = _("Version") pckVer = self.apt.getPackageVersion('updatemanager') versionInfo = "%(ver)s: %(pckVer)s" % {"ver": ver, "pckVer": pckVer} if self.umglobal.localUpdVersion != "2000.01.01": versionInfo = "%(ver)s: %(pckVer)s" % { "ver": ver, "pckVer": pckVer } self.pushMessage(versionInfo) # Log basic information self.log.write("==============================================", "UM.init", "debug") self.log.write("UM version = %s" % versionInfo, "UM.init", "debug") self.log.write("==============================================", "UM.init", "debug") mirrorsList = join(self.umglobal.filesDir, basename(self.umglobal.settings["mirrors-list"])) if exists(mirrorsList): self.log.write("Mirrors list", "UM.init", "debug") with open(mirrorsList, 'r') as f: for line in f.readlines(): self.log.write(line, "UM.init", "debug") self.log.write("==============================================", "UM.init", "debug") # Refresh apt cache self.refresh() # Initialize maintenance screen self.fillTreeViewMaintenance()
import sys sys.path.insert(1, '/usr/lib/solydxk/updatemanager') import os import gettext import argparse from gi.repository import Gtk from os.path import join, abspath, dirname, exists from umglobal import UmGlobal from dialogs import WarningDialog, ErrorDialog # i18n: http://docs.python.org/2/library/gettext.html gettext.install("updatemanager", "/usr/share/locale") _ = gettext.gettext umglobal = UmGlobal(False) scriptDir = abspath(dirname(__file__)) filesDir = join(scriptDir, "files") # Clear update history def clearUpHistory(): histFile = join(filesDir, "updatemanager.hist") resetLine = None if exists(histFile): with open(histFile, 'r') as f: for line in reversed(f.readlines()): if "upd=" in line: resetLine = "upd=2000.01.01\n" break if resetLine is not None: