diff --git a/data/org.yggtk.yggtk.gresource.xml b/data/org.yggtk.yggtk.gresource.xml index 34f0cf2..c9e8afa 100644 --- a/data/org.yggtk.yggtk.gresource.xml +++ b/data/org.yggtk.yggtk.gresource.xml @@ -1,6 +1,6 @@ - + ui/main.ui diff --git a/data/ui/main.ui b/data/ui/main.ui index 8c56942..f3088a3 100644 --- a/data/ui/main.ui +++ b/data/ui/main.ui @@ -2,7 +2,7 @@ - + diff --git a/src/app-window.vala b/src/app-window.vala new file mode 100644 index 0000000..3d2d7bb --- /dev/null +++ b/src/app-window.vala @@ -0,0 +1,274 @@ +/** + * 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/main.ui")] + public class AppWindow : ApplicationWindow { + + [GtkChild] + private Gtk.Switch status_switch; + + [GtkChild] + private Gtk.Button update_yggtk_button; + + [GtkChild] + private Gtk.Button update_yggdrasil_button; + + [GtkChild] + private Gtk.CheckButton portable_checkbutton; + + [GtkChild] + private Gtk.Button browse_button; + + [GtkChild] + private Gtk.Entry ip_entry; + + public AppWindow () { + + check_status (status_switch); + + status_switch.notify["active"].connect (() => { + + if (status_switch.get_active ()) { + + start (); + + } else { + + stop (); + + } + + check_status (status_switch); + + }); + + ip_entry.notify["text"].connect (() => { + + if (ip_entry.text != "") { + + browse_button.label = "OK"; + + } else { + + browse_button.label = "Browse"; + + } + + }); + + browse_button.clicked.connect (() => { + + if (browse_button.label == "OK") { + + string yggconf; + Process.spawn_command_line_sync ("yggdrasil -genconf -json", out yggconf); + parse (yggconf, ip_entry); + + } else { + + Process.spawn_command_line_sync ( + "xdg-open https://github.com/yggdrasil-network/public-peers" + ); + + } + + }); + + update_yggdrasil_button.clicked.connect (() => { + download (); + }); + + update_yggtk_button.clicked.connect (() => { + update (); + }); + + } + + 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; + + } + + 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 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 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 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; + + } + + } + +} \ No newline at end of file diff --git a/src/main.vala b/src/main.vala index db6ad08..38138e5 100644 --- a/src/main.vala +++ b/src/main.vala @@ -19,266 +19,11 @@ int main (string[] args) { Gtk.init (ref args); - try { + Yggtk.AppWindow window = new Yggtk.AppWindow (); + window.show_all (); - 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 (() => { - - if (ip.text != "") { - - browse.label = "OK"; - - } else { - - browse.label = "Browse"; - - } - - }); - - browse.clicked.connect (() => { - - if (browse.label == "OK") { - - string yggconf; - Process.spawn_command_line_sync ("yggdrasil -genconf -json", out yggconf); - parse (yggconf, ip); - - } else { - - Process.spawn_command_line_sync ( - "xdg-open https://github.com/yggdrasil-network/public-peers" - ); - - } - - }); - - window.show (); - Gtk.main (); - - } catch (Error e) { - - print ("Error load UI: %s\n", e.message); - - return 1; - - } + Gtk.main (); 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; - -} +} \ No newline at end of file diff --git a/src/meson.build b/src/meson.build index 48702c5..b6fd29d 100644 --- a/src/meson.build +++ b/src/meson.build @@ -1,5 +1,6 @@ yggtk_sources = [ 'main.vala', + 'app-window.vala', 'utils.vala', ]