From 72d8206ecb8bf43e156fb38a3b6f7d41ac95b2e4 Mon Sep 17 00:00:00 2001
From: Lucas <ls17@c3sl.ufpr.br>
Date: Fri, 29 Jun 2018 09:18:16 -0300
Subject: [PATCH] SCRUM#534: Add feature to enable/disable epoptes

---
 package/debian/changelog       |  7 +++++
 package/debian/control         |  2 +-
 package/le-control-panel       | 48 ++++++++++++++++++++++++++++------
 package/le-control-panel.glade | 13 ++++-----
 4 files changed, 55 insertions(+), 15 deletions(-)

diff --git a/package/debian/changelog b/package/debian/changelog
index a0ab511..8b09921 100644
--- a/package/debian/changelog
+++ b/package/debian/changelog
@@ -1,3 +1,10 @@
+le-laptop-controlpanel (0.1.0) unstable; urgency=medium
+
+  * Add switch to enable/disable epoptes (Closes: #534)
+  * debian/control: New uploader
+
+ -- Lucas Sulzbach <ls17@c3sl.ufpr.br>  Fri, 29 Jun 2018 08:52:30 -0300
+
 le-laptop-controlpanel (0.0.2) unstable; urgency=medium
 
   * add button to prevent suspension on closing the laptop lid
diff --git a/package/debian/control b/package/debian/control
index 0c27e7d..27efe94 100644
--- a/package/debian/control
+++ b/package/debian/control
@@ -1,7 +1,7 @@
 Source: le-laptop-controlpanel
 Section: admin
 Priority: optional
-Uploaders: Andre Luis da Silva Machado <alsm14@c3sl.ufpr.br>, Diego Pasqualin <dpasqualin@c3sl.ufpr.br>, Rafael Sanfelice Castilho <rsc15@inf.ufpr.br>
+Uploaders: Andre Luis da Silva Machado <alsm14@c3sl.ufpr.br>, Diego Pasqualin <dpasqualin@c3sl.ufpr.br>, Rafael Sanfelice Castilho <rsc15@inf.ufpr.br>, Lucas Sulzbach <ls17@c3sl.ufpr.br>
 Maintainer: C3SL <contato@c3sl.ufpr.br>
 Build-Depends: debhelper (>= 9)
 Standards-Version: 3.9.7
diff --git a/package/le-control-panel b/package/le-control-panel
index b353f5d..a78c3ee 100755
--- a/package/le-control-panel
+++ b/package/le-control-panel
@@ -229,6 +229,22 @@ class Handler:
             runShellCommand("systemctl restart systemd-logind")
         return True
 
+    def onToggleEpoptes(self, switch, args):
+        if (switch.get_state()):
+            out = os.system("le-lab -s set_attribute epoptes _status enabled")
+            if out != 0:
+                self.error_mode = True
+                self.createErrorMessage(switch, getWindow(switch),
+                                        "Não foi possível habilitar o epoptes")
+        else:
+            out = os.system("le-lab -s set_attribute epoptes _status disabled")
+            if out != 0:
+                self.error_mode = True
+                self.createErrorMessage(switch, getWindow(switch),
+                                        "Não foi possível desabilitar"
+                                        " o epoptes")
+        return True
+
     def passErrorResponse(self, dialog, response):
         dialog.hide()
         return 0
@@ -260,7 +276,7 @@ def timeout():
     iconEpoptesStatus = builder.get_object("epoptesstatusicon")
     boxEpoptesStatus = builder.get_object("boxepoptesstatus")
     labelEpoptesStatus = builder.get_object("labelepoptesstatus")
-    if (statusEpoptes(labelEpoptesStatus)):
+    if (statusEpoptes(labelEpoptesStatus) == 2):
         iconEpoptesStatus.set_from_stock("gtk-yes", Gtk.IconSize.MENU)
         boxEpoptesStatus.set_tooltip_text("O Epoptes está ativo")
     else:
@@ -510,19 +526,29 @@ def getEdubarStorage():
 
 def statusEpoptes(label):
     try:
-        output = runShellCommand("le-lab -s get_attribute epoptes _status")
-        if output.find("client") != -1:
+        output = runShellCommand("le-lab -s get_attribute epoptes _status")[0]
+        s = builder.get_object("switchEpoptes")
+        if output.find("disabled") != -1:
+            label.set_text("Desabilitado")
+            return 0
+        elif output.find("enabled") != -1:
+            label.set_text("Habilitado")
+            s.set_sensitive(True)
+            return 1
+        elif output.find("client") != -1:
             label.set_text("Modo cliente")
-            return True
+            s.set_sensitive(False)
+            return 2
         elif output.find("server") != -1:
             label.set_text("Modo servidor")
-            return True
+            s.set_sensitive(False)
+            return 2
         else:
             label.set_text("")
-            return False
+            return 3
     except Exception as e:
         print(e)
-        return False
+        return 4
 
 
 def statusAutoUpdate(label):
@@ -611,6 +637,7 @@ def setPermissions(uid):
     familyShield = builder.get_object("family_shield_frame")
     autoUpdate = builder.get_object("autoupdate_frame")
     epoptes = builder.get_object("epoptes_frame")
+    epoptesSwitch = builder.get_object("switchEpoptes")
     users = builder.get_object("new_user_frame")
     multiterminal = builder.get_object("multiterminal_frame")
     laptop = builder.get_object("laptop_frame")
@@ -628,12 +655,14 @@ def setPermissions(uid):
         users.set_sensitive(True)
         unlock.set_sensitive(False)
         epoptes.set_sensitive(True)
+        epoptesSwitch.set_sensitive(True)
         multiterminal.set_sensitive(True)
     else:
         familyShield.set_sensitive(False)
         autoUpdate.set_sensitive(False)
         laptop.set_sensitive(False)
         users.set_sensitive(False)
+        epoptesSwitch.set_sensitive(False)
         multiterminal.set_sensitive(False)
         unlock.set_sensitive(True)
 
@@ -685,7 +714,7 @@ if __name__ == "__main__":
     iconEpoptesStatus = builder.get_object("epoptesstatusicon")
     boxEpoptesStatus = builder.get_object("boxepoptesstatus")
     labelEpoptesStatus = builder.get_object("labelepoptesstatus")
-    if (statusEpoptes(labelEpoptesStatus)):
+    if (statusEpoptes(labelEpoptesStatus) == 2):
         iconEpoptesStatus.set_from_stock("gtk-yes", Gtk.IconSize.MENU)
         boxEpoptesStatus.set_tooltip_text("O Epoptes está ativo")
     else:
@@ -701,6 +730,7 @@ if __name__ == "__main__":
 
     switchUpdate = builder.get_object("switchAutoUpdate")
     swichStandby = builder.get_object("swichStandby")
+    switchEpoptes = builder.get_object("switchEpoptes")
 
     uid = os.getuid()
     setPermissions(uid)
@@ -719,6 +749,7 @@ if __name__ == "__main__":
         switchShieldNetwork.set_active(getShieldNetworkState())
         switchUpdate.set_active(getUpdateState())
         switchUpdate.set_active(getLidSwitchState())
+        switchEpoptes.set_active(statusEpoptes(labelEpoptesStatus) == 1)
         apt_pkg.init()
         pid = Popen(["lcpmonitor", "/var/log/unattended-upgrades/", "35",
                     str(os.getpid())]).pid
@@ -730,5 +761,6 @@ if __name__ == "__main__":
         switchShieldNetwork.set_active(False)
         switchUpdate.set_active(False)
         swichStandby.set_active(False)
+        switchEpoptes.set_active(False)
 
     Gtk.main()
diff --git a/package/le-control-panel.glade b/package/le-control-panel.glade
index 560c19f..55ae5d2 100644
--- a/package/le-control-panel.glade
+++ b/package/le-control-panel.glade
@@ -171,7 +171,7 @@
                               <object class="GtkBox" id="box11">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="tooltip_text" translatable="yes">habilitar o controle parental para este computador</property>
+                                <property name="tooltip_text" translatable="yes">Habilitar o controle parental para este computador</property>
                                 <property name="margin_top">3</property>
                                 <property name="margin_bottom">3</property>
                                 <child>
@@ -210,7 +210,7 @@
                               <object class="GtkBox" id="box12">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="tooltip_text" translatable="yes">habilitar o controle parental para todos os computadores da rede</property>
+                                <property name="tooltip_text" translatable="yes">Habilitar o controle parental para todos os computadores da rede</property>
                                 <property name="margin_top">3</property>
                                 <property name="margin_bottom">3</property>
                                 <child>
@@ -304,7 +304,7 @@
                                   <object class="GtkBox" id="box13">
                                     <property name="visible">True</property>
                                     <property name="can_focus">False</property>
-                                    <property name="tooltip_text" translatable="yes">habilitar sistema de atualização automática</property>
+                                    <property name="tooltip_text" translatable="yes">Habilitar sistema de atualização automática</property>
                                     <property name="margin_top">3</property>
                                     <property name="margin_bottom">3</property>
                                     <child>
@@ -645,14 +645,14 @@
                                   <object class="GtkBox" id="box1">
                                     <property name="visible">True</property>
                                     <property name="can_focus">False</property>
-                                    <property name="tooltip_text" translatable="yes">habilitar o controle parental para todos os computadores da rede</property>
+                                    <property name="tooltip_text" translatable="yes">Habilitar o Epoptes localmente</property>
                                     <property name="margin_top">3</property>
                                     <property name="margin_bottom">3</property>
                                     <child>
                                       <object class="GtkLabel" id="label1">
                                         <property name="visible">True</property>
                                         <property name="can_focus">False</property>
-                                        <property name="label" translatable="yes">Desabilitar Epoptes</property>
+                                        <property name="label" translatable="yes">Habilitar Epoptes</property>
                                       </object>
                                       <packing>
                                         <property name="expand">False</property>
@@ -661,9 +661,10 @@
                                       </packing>
                                     </child>
                                     <child>
-                                      <object class="GtkSwitch" id="desabilitar_epoptes">
+                                      <object class="GtkSwitch" id="switchEpoptes">
                                         <property name="visible">True</property>
                                         <property name="can_focus">True</property>
+                                        <signal name="notify::active" handler="onToggleEpoptes" swapped="no"/>
                                       </object>
                                       <packing>
                                         <property name="expand">False</property>
-- 
GitLab