[rygel/wip/acl: 36/36] Add simple dialog



commit 53091f02ff27e8613df47f7b71063e62d3242fd9
Author: Jens Georg <mail jensge org>
Date:   Sun Jun 1 18:24:43 2014 +0200

    Add simple dialog
    
    Signed-off-by: Jens Georg <mail jensge org>

 src/rygel/rygel-acl.vala         |   24 ++++++++++++++++++++----
 src/rygel/rygel-user-config.vala |    1 +
 src/ui/rygel-acl-provider.vala   |   28 +++++++++++++++++++++++++---
 3 files changed, 46 insertions(+), 7 deletions(-)
---
diff --git a/src/rygel/rygel-acl.vala b/src/rygel/rygel-acl.vala
index f1c294f..9949962 100644
--- a/src/rygel/rygel-acl.vala
+++ b/src/rygel/rygel-acl.vala
@@ -66,11 +66,27 @@ internal class Rygel.Acl : GLib.Object, GUPnP.Acl
             return false;
         }
 
+        message ("Querying ACL for %s on %s by %s %s",
+                 path,
+                 device != null ? device.udn : "none",
+                 agent ?? "Unknown",
+                 address);
+
         try {
-            var allowed = yield provider.is_allowed (new HashTable<string,
-                    string> (null, null),
-                                                     new HashTable<string,
-                                                     string> (null, null),
+            var device_hash = new HashTable<string, string> (str_hash, str_equal);
+            if (device != null) {
+                device_hash["FriendlyName"] = device.get_friendly_name ();
+                device_hash["UDN"] = device.udn;
+                device_hash["Type"] = device.device_type;
+            }
+
+            var service_hash = new HashTable<string, string> (str_hash, str_equal);
+            if (service != null) {
+                service_hash["Type"] = service.service_type;
+            }
+
+            var allowed = yield provider.is_allowed (device_hash,
+                                                     service_hash,
                                                      path,
                                                      address,
                                                      agent);
diff --git a/src/rygel/rygel-user-config.vala b/src/rygel/rygel-user-config.vala
index 532c19b..5ab5d9e 100644
--- a/src/rygel/rygel-user-config.vala
+++ b/src/rygel/rygel-user-config.vala
@@ -217,6 +217,7 @@ public class Rygel.UserConfig : GLib.Object, Configuration {
         if (UserConfig.config == null) {
             var path = Path.build_filename (Environment.get_user_config_dir (),
                                             CONFIG_FILE);
+
             UserConfig.config = new UserConfig (path);
         }
 
diff --git a/src/ui/rygel-acl-provider.vala b/src/ui/rygel-acl-provider.vala
index 3ce9e42..8f4be04 100644
--- a/src/ui/rygel-acl-provider.vala
+++ b/src/ui/rygel-acl-provider.vala
@@ -1,3 +1,5 @@
+using Gtk;
+
 [DBus (name = "org.gnome.Rygel1.AclProvider1")]
 public interface Rygel.IAclProvider : Object {
     public abstract async bool is_allowed (GLib.HashTable<string, string> device,
@@ -18,14 +20,34 @@ public class Rygel.AclProvider : IAclProvider, Object {
         Idle.add (() => { is_allowed.callback (); return false; });
         yield;
 
-        message ("=======> Request");
-
         if (device.size () == 0 || service.size () == 0) {
+            message ("Nothing to decide on, passing true");
 
             return true;
         }
 
-        return true;
+        var dialog = new MessageDialog (null, 0, MessageType.QUESTION,
+                ButtonsType.YES_NO, "%s from %s is trying to access %s. Allow?",
+                agent, address, device["FriendlyName"]);
+
+        var area = dialog.get_message_area ();
+
+        var remember = new CheckButton.with_label ("Remember decision");
+        (area as Box).pack_end (remember);
+        remember.show ();
+
+        bool result = false;
+        dialog.response.connect ((id) => {
+            if (id == ResponseType.YES) {
+                result = true;
+            }
+
+            dialog.destroy ();
+        });
+
+        dialog.run ();
+
+        return result;
     }
 
     private void on_bus_aquired (DBusConnection connection) {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]