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',
]