X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fsystemadm.vala;h=c262794cb719066dfb7312ef907d9335aac49fc7;hp=65a58b7162d5639b71e57ada9a0fc8eb4b563910;hb=ec2002f84928c0b5921a961cb2b8637563f29daa;hpb=51cfdda7e2132e0d4a39645840608ba7028073dd diff --git a/src/systemadm.vala b/src/systemadm.vala index 65a58b716..c262794cb 100644 --- a/src/systemadm.vala +++ b/src/systemadm.vala @@ -19,10 +19,9 @@ using Gtk; using GLib; -using DBus; using Pango; -static bool session = false; +static bool user = false; public class LeftLabel : Label { public LeftLabel(string? text = null) { @@ -79,7 +78,6 @@ public class MainWindow : Window { private Button server_snapshot_button; private Button server_reload_button; - private Connection bus; private Manager manager; private RightLabel unit_id_label; @@ -102,9 +100,9 @@ public class MainWindow : Window { private ComboBox unit_type_combo_box; - public MainWindow() throws DBus.Error { - title = session ? "systemd Session Manager" : "systemd System Manager"; - position = WindowPosition.CENTER; + public MainWindow() throws IOError { + title = user ? "systemd User Service Manager" : "systemd System Manager"; + set_position(WindowPosition.CENTER); set_default_size(1000, 700); set_border_width(12); destroy.connect(Gtk.main_quit); @@ -297,12 +295,10 @@ public class MainWindow : Window { bbox.pack_start(cancel_button, false, true, 0); - bus = Bus.get(session ? BusType.SESSION : BusType.SYSTEM); - - manager = bus.get_object( + manager = Bus.get_proxy_sync( + user ? BusType.SESSION : BusType.SYSTEM, "org.freedesktop.systemd1", - "/org/freedesktop/systemd1", - "org.freedesktop.systemd1.Manager") as Manager; + "/org/freedesktop/systemd1"); manager.unit_new.connect(on_unit_new); manager.job_new.connect(on_job_new); @@ -317,7 +313,7 @@ public class MainWindow : Window { populate_job_model(); } - public void populate_unit_model() throws DBus.Error { + public void populate_unit_model() throws IOError { unit_model.clear(); var list = manager.list_units(); @@ -325,12 +321,17 @@ public class MainWindow : Window { foreach (var i in list) { TreeIter iter; - Unit u = bus.get_object( + Properties p = Bus.get_proxy_sync( + user ? BusType.SESSION : BusType.SYSTEM, "org.freedesktop.systemd1", - i.unit_path, - "org.freedesktop.systemd1.Unit") as Unit; + i.unit_path); + + p.properties_changed.connect(on_unit_changed); - u.changed.connect(on_unit_changed); + Unit u = Bus.get_proxy_sync( + user ? BusType.SESSION : BusType.SYSTEM, + "org.freedesktop.systemd1", + i.unit_path); unit_model.append(out iter); unit_model.set(iter, @@ -344,7 +345,7 @@ public class MainWindow : Window { } } - public void populate_job_model() throws DBus.Error { + public void populate_job_model() throws IOError { job_model.clear(); var list = manager.list_jobs(); @@ -352,12 +353,17 @@ public class MainWindow : Window { foreach (var i in list) { TreeIter iter; - Job j = bus.get_object( + Properties p = Bus.get_proxy_sync( + user ? BusType.SESSION : BusType.SYSTEM, "org.freedesktop.systemd1", - i.job_path, - "org.freedesktop.systemd1.Job") as Job; + i.job_path); - j.changed.connect(on_job_changed); + p.properties_changed.connect(on_job_changed); + + Job j = Bus.get_proxy_sync( + user ? BusType.SESSION : BusType.SYSTEM, + "org.freedesktop.systemd1", + i.job_path); job_model.append(out iter); job_model.set(iter, @@ -590,7 +596,7 @@ public class MainWindow : Window { try { u.start("replace"); - } catch (DBus.Error e) { + } catch (IOError e) { show_error(e.message); } } @@ -603,7 +609,7 @@ public class MainWindow : Window { try { u.stop("replace"); - } catch (DBus.Error e) { + } catch (IOError e) { show_error(e.message); } } @@ -616,7 +622,7 @@ public class MainWindow : Window { try { u.reload("replace"); - } catch (DBus.Error e) { + } catch (IOError e) { show_error(e.message); } } @@ -629,7 +635,7 @@ public class MainWindow : Window { try { u.restart("replace"); - } catch (DBus.Error e) { + } catch (IOError e) { show_error(e.message); } } @@ -642,46 +648,61 @@ public class MainWindow : Window { try { j.cancel(); - } catch (DBus.Error e) { + } catch (IOError e) { show_error(e.message); } } public void update_unit_iter(TreeIter iter, string id, Unit u) { - string t = ""; - Unit.JobLink jl = u.job; + try { + string t = ""; + Unit.JobLink jl = u.job; - if (jl.id != 0) { - Job j = bus.get_object( - "org.freedesktop.systemd1", - jl.path, - "org.freedesktop.systemd1.Job") as Job; + if (jl.id != 0) { + Job j = Bus.get_proxy_sync( + user ? BusType.SESSION : BusType.SYSTEM, + "org.freedesktop.systemd1", + jl.path); - t = j.job_type; - } + t = j.job_type; + } - unit_model.set(iter, - 0, id, - 1, u.description, - 2, u.load_state, - 3, u.active_state, - 4, u.sub_state, - 5, t != "" ? "→ %s".printf(t) : "", - 6, u); + unit_model.set(iter, + 0, id, + 1, u.description, + 2, u.load_state, + 3, u.active_state, + 4, u.sub_state, + 5, t != "" ? "→ %s".printf(t) : "", + 6, u); + } catch (IOError e) { + show_error(e.message); + } } public void on_unit_new(string id, ObjectPath path) { - Unit u = bus.get_object( - "org.freedesktop.systemd1", - path, - "org.freedesktop.systemd1.Unit") as Unit; + try { + + Properties p = Bus.get_proxy_sync( + user ? BusType.SESSION : BusType.SYSTEM, + "org.freedesktop.systemd1", + path); - u.changed.connect(on_unit_changed); + p.properties_changed.connect(on_unit_changed); - TreeIter iter; - unit_model.append(out iter); - update_unit_iter(iter, id, u); + TreeIter iter; + unit_model.append(out iter); + + Unit u = Bus.get_proxy_sync( + user ? BusType.SESSION : BusType.SYSTEM, + "org.freedesktop.systemd1", + path); + + update_unit_iter(iter, id, u); + } catch (IOError e) { + show_error(e.message); + } } public void update_job_iter(TreeIter iter, uint32 id, Job j) { @@ -695,16 +716,29 @@ public class MainWindow : Window { } public void on_job_new(uint32 id, ObjectPath path) { - Job j = bus.get_object( - "org.freedesktop.systemd1", - path, - "org.freedesktop.systemd1.Job") as Job; - j.changed.connect(on_job_changed); + try { - TreeIter iter; - job_model.append(out iter); - update_job_iter(iter, id, j); + Properties p = Bus.get_proxy_sync( + user ? BusType.SESSION : BusType.SYSTEM, + "org.freedesktop.systemd1", + path); + + p.properties_changed.connect(on_job_changed); + + TreeIter iter; + job_model.append(out iter); + + Job j = Bus.get_proxy_sync( + user ? BusType.SESSION : BusType.SYSTEM, + "org.freedesktop.systemd1", + path); + + update_job_iter(iter, id, j); + + } catch (IOError e) { + show_error(e.message); + } } public void on_unit_removed(string id, ObjectPath path) { @@ -728,7 +762,7 @@ public class MainWindow : Window { } while (unit_model.iter_next(ref iter)); } - public void on_job_removed(uint32 id, ObjectPath path, bool success) { + public void on_job_removed(uint32 id, ObjectPath path, string res) { TreeIter iter; if (!(job_model.get_iter_first(out iter))) return; @@ -750,56 +784,77 @@ public class MainWindow : Window { } while (job_model.iter_next(ref iter)); } - public void on_unit_changed(Unit u) { - TreeIter iter; - string id; + public void on_unit_changed(Properties p, string iface, HashTable changed_properties, string[] invalidated_properties) { - if (!(unit_model.get_iter_first(out iter))) - return; + try { + TreeIter iter; + string id; - id = u.id; + Unit u = Bus.get_proxy_sync( + user ? BusType.SESSION : BusType.SYSTEM, + p.get_name(), + p.get_object_path()); - do { - string name; + if (!(unit_model.get_iter_first(out iter))) + return; - unit_model.get(iter, 0, out name); + id = u.id; - if (id == name) { - update_unit_iter(iter, id, u); + do { + string name; - if (current_unit_id == id) - show_unit(u); + unit_model.get(iter, 0, out name); - break; - } + if (id == name) { + update_unit_iter(iter, id, u); - } while (unit_model.iter_next(ref iter)); + if (current_unit_id == id) + show_unit(u); + + break; + } + + } while (unit_model.iter_next(ref iter)); + + } catch (IOError e) { + show_error(e.message); + } } - public void on_job_changed(Job j) { - TreeIter iter; - uint32 id; + public void on_job_changed(Properties p, string iface, HashTable changed_properties, string[] invalidated_properties) { + try { + TreeIter iter; + uint32 id; - if (!(job_model.get_iter_first(out iter))) - return; + Job j = Bus.get_proxy_sync( + user ? BusType.SESSION : BusType.SYSTEM, + p.get_name(), + p.get_object_path()); - id = j.id; + if (!(job_model.get_iter_first(out iter))) + return; - do { - uint32 k; + id = j.id; - job_model.get(iter, 5, out k); + do { + uint32 k; - if (id == k) { - update_job_iter(iter, id, j); + job_model.get(iter, 5, out k); - if (current_job_id == id) - show_job(j); + if (id == k) { + update_job_iter(iter, id, j); - break; - } + if (current_job_id == id) + show_job(j); - } while (job_model.iter_next(ref iter)); + break; + } + + } while (job_model.iter_next(ref iter)); + + } catch (IOError e) { + show_error(e.message); + } } public bool unit_filter(TreeModel model, TreeIter iter) { @@ -852,7 +907,7 @@ public class MainWindow : Window { public void on_server_reload() { try { manager.reload(); - } catch (DBus.Error e) { + } catch (IOError e) { show_error(e.message); } } @@ -864,7 +919,7 @@ public class MainWindow : Window { if (unit_type_combo_box.get_active() != 0) unit_type_combo_box.set_active(8); - } catch (DBus.Error e) { + } catch (IOError e) { show_error(e.message); } } @@ -878,10 +933,10 @@ public class MainWindow : Window { try { var path = manager.load_unit(t); - Unit u = bus.get_object( + Unit u = Bus.get_proxy_sync( + user ? BusType.SESSION : BusType.SYSTEM, "org.freedesktop.systemd1", - path, - "org.freedesktop.systemd1.Unit") as Unit; + path); var m = new MessageDialog(this, DialogFlags.DESTROY_WITH_PARENT, @@ -893,7 +948,7 @@ public class MainWindow : Window { m.destroy(); show_unit(u); - } catch (DBus.Error e) { + } catch (IOError e) { show_error(e.message); } } @@ -907,13 +962,13 @@ public class MainWindow : Window { try { string path = manager.get_unit(uri); - Unit u = bus.get_object( + Unit u = Bus.get_proxy_sync( + user ? BusType.SESSION : BusType.SYSTEM, "org.freedesktop.systemd1", - path, - "org.freedesktop.systemd1.Unit") as Unit; + path); show_unit(u); - } catch (DBus.Error e) { + } catch (IOError e) { show_error(e.message); } @@ -933,8 +988,8 @@ public class MainWindow : Window { } static const OptionEntry entries[] = { - { "session", 0, 0, OptionArg.NONE, out session, "Connect to session bus", null }, - { "system", 0, OptionFlags.REVERSE, OptionArg.NONE, out session, "Connect to system bus", null }, + { "user", 0, 0, OptionArg.NONE, out user, "Connect to user service manager", null }, + { "system", 0, OptionFlags.REVERSE, OptionArg.NONE, out user, "Connect to system manager", null }, { null } }; @@ -944,7 +999,7 @@ void show_error(string e) { m.destroy(); } -int main (string[] args) { +int main(string[] args) { try { Gtk.init_with_args(ref args, "[OPTION...]", entries, "systemadm"); @@ -953,7 +1008,7 @@ int main (string[] args) { window.show_all(); Gtk.main(); - } catch (DBus.Error e) { + } catch (IOError e) { show_error(e.message); } catch (GLib.Error e) { show_error(e.message);