/* * pamac-vala * * Copyright (C) 2014 Guillaume Benoit * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a get of the GNU General Public License * along with this program. If not, see . */ using Gtk; namespace Pamac { [GtkTemplate (ui = "/org/manjaro/pamac/updater/updater_window.ui")] public class UpdaterWindow : Gtk.ApplicationWindow { [GtkChild] public Label top_label; [GtkChild] public TreeView updates_treeview; [GtkChild] public Label bottom_label; [GtkChild] public Button apply_button; public ListStore updates_list; public Pamac.Config pamac_config; public Pamac.Transaction transaction; public UpdaterWindow (Gtk.Application application) { Object (application: application); pamac_config = new Pamac.Config ("/etc/pamac.conf"); updates_list = new Gtk.ListStore (2, typeof (string), typeof (string)); updates_treeview.set_model (updates_list); transaction = new Transaction (this as ApplicationWindow); transaction.mode = Mode.UPDATER; transaction.check_aur = pamac_config.enable_aur; transaction.finished.connect (on_emit_trans_finished); bottom_label.set_visible (false); apply_button.set_sensitive (false); on_refresh_button_clicked (); } [GtkCallback] public void on_preferences_button_clicked () { bool changes = transaction.run_preferences_dialog (pamac_config); if (changes) { set_updates_list.begin (); } } [GtkCallback] public void on_apply_button_clicked () { this.get_window ().set_cursor (new Gdk.Cursor (Gdk.CursorType.WATCH)); while (Gtk.events_pending ()) { Gtk.main_iteration (); } transaction.sysupgrade (0); } [GtkCallback] public void on_refresh_button_clicked () { this.get_window ().set_cursor (new Gdk.Cursor (Gdk.CursorType.WATCH)); while (Gtk.events_pending ()) { Gtk.main_iteration (); } transaction.refresh (0); } [GtkCallback] public void on_close_button_clicked () { this.application.quit (); } public void on_emit_trans_finished (bool error) { set_updates_list.begin (); } public async void set_updates_list () { this.get_window ().set_cursor (new Gdk.Cursor (Gdk.CursorType.WATCH)); while (Gtk.events_pending ()) { Gtk.main_iteration (); } top_label.set_markup (""); updates_list.clear (); UpdatesInfos[] updates = {}; try { updates = transaction.daemon.get_updates (); } catch (IOError e) { stderr.printf ("IOError: %s\n", e.message); } TreeIter iter; string name; string size; uint64 dsize = 0; uint updates_nb = 0; foreach (UpdatesInfos infos in updates) { name = infos.name + " " + infos.version; if (infos.download_size != 0) { size = format_size (infos.download_size); } else { size = ""; } dsize += infos.download_size; updates_list.insert_with_values (out iter, -1, 0, name, 1, size); } updates_nb = updates.length; if (updates_nb == 0) { top_label.set_markup("%s".printf (dgettext (null, "Your system is up-to-date"))); apply_button.set_sensitive (false); } else { top_label.set_markup("%s".printf (dngettext (null, "%u available update", "%u available updates", updates_nb).printf (updates_nb))); apply_button.set_sensitive (true); } if (dsize != 0) { bottom_label.set_markup("%s: %s".printf (dgettext (null, "Total download size"), format_size(dsize))); bottom_label.set_visible (true); } else { bottom_label.set_visible (false); } this.get_window ().set_cursor (null); while (Gtk.events_pending ()) { Gtk.main_iteration (); } } } }