From 4589b11bfaa4736d730736a688a1675217d1d977 Mon Sep 17 00:00:00 2001 From: plant_1312 Date: Fri, 24 Jan 2020 22:31:16 +0000 Subject: [PATCH] Simple parser With help nickey --- main.vala | 275 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 275 insertions(+) create mode 100644 main.vala diff --git a/main.vala b/main.vala new file mode 100644 index 0000000..19fd499 --- /dev/null +++ b/main.vala @@ -0,0 +1,275 @@ +/* + * 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 copy of the GNU General Public License + * along with this program. If not, see . + */ + +using Gtk; + +int main (string[] args) { + + Gtk.init (ref args); + + try { + + var builder = new Builder (); + builder.add_from_resource ("/org/yggtk/yggtk/ui/main.ui"); + builder.connect_signals (null); + var window = builder.get_object ("window") as Window; + var browse = builder.get_object ("browse") as Button; + + var yggdrasil = builder.get_object ("yggdrasil") as Button; + + yggdrasil.clicked.connect (() => { + + download (); + + }); + + var status = builder.get_object ("status") as Switch; + + check_status (status); + + status.notify["active"].connect (() => { + + if (status.get_active ()) { + + start (); + + } else { + + stop (); + + } + + check_status (status); + + }); + + var yggtk = builder.get_object ("yggtk") as Button; + + yggtk.clicked.connect (() => { + + update (); + + }); + + var ip = builder.get_object ("label_ip") as Entry; + + ip.notify["text"].connect (() => { + + browse.label = "OK"; + + }); + + string yggconf; + Process.spawn_command_line_sync ("yggdrasil -genconf -json", out yggconf); + + browse.clicked.connect (() => { + + if (browse.label == "OK") { + + parse (yggconf, ip); + + } else { + + browse.label = "Soon"; + + } + + }); + + window.show_all (); + Gtk.main (); + + } catch (Error e) { + + print ("Error load UI: %s\n", e.message); + + return 1; + + } + + return 0; + +} + +int download () { + + try { + + string pm; + Process.spawn_command_line_sync ("pkexec pacman -S yggdrasil --noconfirm", out pm); + + if (pm == "Cannot run program pacman: No such file or directory\n") { + + Process.spawn_command_line_sync ( + "wget https://2375-115685026-gh.circle-artifacts.com/0/yggdrasil-0.3.12-amd64.deb" + ); + Process.spawn_command_line_sync ("pkexec dpkg -i yggdrasil-0.3.12-amd64.deb"); + + } + + } catch (Error e) { + + print ("Error download: %s\n", e.message); + + return 1; + + } + + return 0; + +} + +int update () { + + try { + + unowned string repo_url = Environment.get_variable ("YGG_UPDATE_REPO"); + string temp_dir = Utils.mktempdir (); + + if (repo_url == null) { + + repo_url = "https://git.macaw.me/plant_1312/Yggtk.git"; + + } + + Process.spawn_command_line_sync (@"git clone $repo_url $temp_dir"); + Process.spawn_command_line_sync (@"meson $temp_dir/build $temp_dir"); + Process.spawn_command_line_sync (@"ninja -C $temp_dir/build"); + Process.spawn_command_line_sync (@"cp $temp_dir/build/src/yggtk ."); + Process.spawn_command_line_sync (@"rm -rf $temp_dir"); + Process.spawn_command_line_sync ("./yggtk"); + + Gtk.main_quit (); + + } catch (Error e) { + + print ("Error update: %s\n", e.message); + + return 1; + + } + + return 0; + +} + +int stop () { + + try { + + Process.spawn_command_line_sync ("pkexec rc-service yggdrasil stop"); + Process.spawn_command_line_sync ("pkexec systemctl stop yggdrasil"); + + } catch (Error e) { + + print ("Error stop Yggdrasil: %s\n", e.message); + + return 1; + + } + + return 0; + +} + +int start () { + + try { + + Process.spawn_command_line_sync ("pkexec rc-service yggdrasil start"); + Process.spawn_command_line_sync ("pkexec systemctl start yggdrasil"); + + } catch (Error e) { + + print ("Error start Yggdrasil: %s\n", e.message); + + return 1; + + } + + return 0; + +} + +int parse (string yggconf, Entry ip) { + + try { + + 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); + + string file = "yggdrasil.conf"; + FileUtils.set_contents (file, ptext); + + Process.spawn_command_line_sync ("pkexec cp yggdrasil.conf /etc"); + + } catch (Error e) { + + print ("Error parse JSON: %s\n", e.message); + + } + + return 0; + +} + +int check_status (Switch status) { + + try { + + string yggstatus; + Process.spawn_command_line_sync ("rc-service yggdrasil status", out yggstatus); + + if (yggstatus == "bash: rc-service: command not found\n") { + + Process.spawn_command_line_sync ("systemctl status yggdrasil | grep running -c", out yggstatus); + + if (yggstatus == "0") { + + status.state_set (false); + + } else { + + status.state_set (true); + + } + + } else { + + if (yggstatus == " * status: stopped\n") { + + status.state_set (false); + + } else { + + status.state_set (true); + + } + + } + + } catch (Error e) { + + print ("Error check status: %s\n", e.message); + + return 1; + + } + + return 0; + +}