diff --git a/bin/simple-apt-update b/bin/simple-apt-update
index 6c1f853..e158148 100755
--- a/bin/simple-apt-update
+++ b/bin/simple-apt-update
@@ -60,9 +60,8 @@ class UpdateWindow(Gtk.ApplicationWindow):
self.buffer.set_text("")
def scroll_to_bottom(self):
- adj = self.scrolledwindow.get_vadjustment()
- adj.set_value(adj.get_upper())
- self.scrolledwindow.set_vadjustment(adj)
+ self.buffer.get_end_iter()
+ self.text_view.scroll_to_mark(self.text_mark_end, 0, False, 0, 0)
def level_to_color(self, level):
if level == "INFO":
@@ -113,6 +112,25 @@ class UpdateWindow(Gtk.ApplicationWindow):
def insert(self, text, iter):
self.buffer.insert(iter, text + "\n")
+ def run_thread(self, args, env):
+ if self.thread is None:
+ do_run = True
+ elif not self.thread.is_alive():
+ do_run = True
+ else:
+ do_run = False
+
+ if do_run:
+ self.thread = threading.Thread(
+ target=self.run,
+ args=(args, env,))
+
+ self.thread.start()
+
+ return False
+ else:
+ return True
+
def execute(
self,
args,
@@ -136,11 +154,7 @@ class UpdateWindow(Gtk.ApplicationWindow):
"INFO",
"Running command \"%s\" ..." % " ".join(args))
- thread = threading.Thread(
- target=self.run,
- args=(args, env,))
-
- thread.start()
+ GLib.timeout_add(250, self.run_thread, args, env)
def run(self, args, env={}):
p = subprocess.Popen(
@@ -192,16 +206,15 @@ class UpdateWindow(Gtk.ApplicationWindow):
env=env,
empty_msg="No package upgrades were performed.")
- def on_upgrade(self, *args):
- self.upgrade()
-
def update(self, clear=True):
args = ['/usr/bin/apt-get', '-y', 'update']
env = {'DEBIAN_FRONTEND': 'noninteractive'}
- self.execute(args, env=env, clear=clear)
-
- def on_update(self, *args):
- self.update()
+ self.execute(
+ args,
+ env=env,
+ clear=clear,
+ output_msg="The package cache was refreshed."
+ )
def list(self, clear=True):
args = ['/usr/bin/apt', '-qq', 'list', '--upgradable']
@@ -210,7 +223,14 @@ class UpdateWindow(Gtk.ApplicationWindow):
ignore_stderr=True,
clear=clear,
output_msg="Found the following package upgrades:",
- empty_msg="No package upgrades found.")
+ empty_msg="No package upgrades found."
+ )
+
+ def on_update(self, *args):
+ self.update()
+
+ def on_upgrade(self, *args):
+ self.upgrade()
def on_list(self, *args):
self.list()
@@ -228,15 +248,17 @@ class UpdateWindow(Gtk.ApplicationWindow):
self.append_mesg("STDOUT", text)
else:
exit_code = int(match.group(1))
+ self.thread.join()
if exit_code != 0:
self.append_mesg(
"ERROR",
- "Command exited with code %d" % exit_code)
+ "Command exited with code %d" % exit_code
+ )
elif self.stdout == '' and self.empty_msg is not None:
self.append_mesg("INFO", self.empty_msg)
elif self.stdout != '' and self.output_msg is not None:
- self.append_mesg("INFO", self.empty_msg)
+ self.append_mesg("INFO", self.output_msg)
self.unlock()
@@ -265,6 +287,7 @@ class UpdateWindow(Gtk.ApplicationWindow):
)
self.application = application
+ self.thread = None
self.stdout_queue = queue.Queue()
self.stderr_queue = queue.Queue()
@@ -327,12 +350,16 @@ class UpdateWindow(Gtk.ApplicationWindow):
self.scrolledwindow.set_max_content_height(300)
self.buffer = Gtk.TextBuffer()
- text_view = Gtk.TextView(buffer=self.buffer)
- text_view.set_editable(False)
- text_view.set_monospace(True)
- text_view.set_cursor_visible(False)
+ self.text_view = Gtk.TextView(buffer=self.buffer)
+ self.text_view.set_editable(False)
+ self.text_view.set_monospace(True)
+ self.text_view.set_cursor_visible(False)
- self.scrolledwindow.add(text_view)
+ text_buffer = self.text_view.get_buffer()
+ iter = text_buffer.get_end_iter()
+ self.text_mark_end = text_buffer.create_mark("", iter, False)
+
+ self.scrolledwindow.add(self.text_view)
hbox.pack_start(self.scrolledwindow, True, True, 0)
@@ -350,9 +377,6 @@ class SimpleAptUpdate(Gtk.Application):
signal.signal(signal.SIGINT, signal.SIG_DFL)
- def do_command_line(self, cmdline):
- pass
-
def on_activate(self, application):
self.window = UpdateWindow(application)
@@ -381,7 +405,6 @@ class SimpleAptUpdate(Gtk.Application):
self.window.present()
self.window.show_all()
- self.window.update()
self.window.list(clear=False)
diff --git a/res/icons/simple-apt-update.svg b/res/icons/simple-apt-update.svg
index 5d60243..ebcd35d 100644
--- a/res/icons/simple-apt-update.svg
+++ b/res/icons/simple-apt-update.svg
@@ -7,19 +7,14 @@
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="31.72216mm"
height="36.307823mm"
viewBox="0 0 31.72216 36.307823"
version="1.1"
- id="svg8"
- inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
- sodipodi:docname="simple-apt-update.svg">
+ id="svg8">
+ orient="auto">
-
-
@@ -170,8 +127,6 @@
+ ry="2.9184699" />
+ id="path1321" />
+ id="path1869" />