/** * 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 * 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 copy of the GNU General Public License * along with this program. If not, see . */ using Gtk; namespace Yggtk { [GtkTemplate (ui = "/org/yggtk/yggtk/ui/app-window.ui")] public class AppWindow : ApplicationWindow { [GtkChild] private Gtk.Switch service_state_switch; [GtkChild] private Gtk.Entry peer_ip_entry; [GtkChild] private Gtk.Button save_config_button; [GtkCallback] private bool on_service_state_switch_state_set (bool state) { application.activate_action ("set-service-state", new Variant.boolean (state)); return true; } [GtkCallback] private void on_peer_ip_entry_changed () { save_config_button.visible = peer_ip_entry.text.length > 0; } public void set_service_state (bool state) { service_state_switch.set_state (state); } public AppWindow (Gtk.Application application) { Object(application: application); var Parser = new Parser (); Parser.from_json (peer_ip_entry); string yggconfout = peer_ip_entry.text; save_config_button.clicked.connect (() => { if (peer_ip_entry.text != yggconfout) { if (yggconfout == "") { string yggconf; Process.spawn_command_line_sync ("yggdrasil -genconf -json", out yggconf); Parser.to_json (peer_ip_entry, yggconf); } else { FileUtils.get_contents ("/etc/yggdrasil.conf", out yggconfout); Parser.to_json (peer_ip_entry, yggconfout); } } }); } public class Parser : Object { public void to_json (Entry ip, string yggconf) { var node = Json.from_string (yggconf); var obj = node.get_object (); obj.set_string_member ("Peers", ip.text); string ptext = Json.to_string (node, true); FileUtils.set_contents ("/tmp/yggdrasil.conf", ptext); Process.spawn_command_line_sync ("pkexec cp /tmp/yggdrasil.conf /etc"); } public void from_json (Entry ip) { string yggconfout; FileUtils.get_contents ("/etc/yggdrasil.conf", out yggconfout); var node = Json.from_string (yggconfout); var obj = node.get_object (); string ptext = obj.get_string_member ("Peers"); if (yggconfout != null) { ip.text = ptext; } } } } }