[banshee] Emusic.Store: Add a Signout link



commit 6b8405bd44f4e41ed36ae107cab0c1942a4a80cf
Author: Will Thompson <will willthompson co uk>
Date:   Sun Mar 20 23:33:56 2011 +0000

    Emusic.Store: Add a Signout link
    
    This works a little differently to the Amazon version: because we don't
    have any other items in the menu, just hiding the item leaves us with an
    empty menu in the UI.
    
    If a similar page is added for eMusic, this could be made to work like
    Amazon.
    
    Signed-off-by: Gabriel Burt <gabriel burt gmail com>

 .../Banshee.Emusic.Store/StoreView.cs              |   29 ++++++++++++++++++++
 .../Banshee.Emusic.Store/StoreWebBrowserShell.cs   |   14 ++++++++-
 2 files changed, 41 insertions(+), 2 deletions(-)
---
diff --git a/src/Extensions/Banshee.Emusic.Store/Banshee.Emusic.Store/StoreView.cs b/src/Extensions/Banshee.Emusic.Store/Banshee.Emusic.Store/StoreView.cs
index 4212e93..fab133e 100644
--- a/src/Extensions/Banshee.Emusic.Store/Banshee.Emusic.Store/StoreView.cs
+++ b/src/Extensions/Banshee.Emusic.Store/Banshee.Emusic.Store/StoreView.cs
@@ -52,6 +52,9 @@ namespace Banshee.Emusic.Store
         public StoreView ()
         {
             CanSearch = true;
+            IsSignedIn = false;
+            OssiferSession.CookieChanged += (o, n) => CheckSignIn ();
+            CheckSignIn ();
             FullReload ();
         }
 
@@ -108,5 +111,31 @@ namespace Banshee.Emusic.Store
         {
             LoadUri ("http://integrated-services.banshee.fm/emusic/search/"; + System.Uri.EscapeDataString(query));
         }
+
+        public event EventHandler SignInChanged;
+        public bool IsSignedIn { get; private set; }
+
+        public void SignOut ()
+        {
+            LoadUri ("https://www.emusic.com/security/j_acegi_logout.html";);
+        }
+
+        private void CheckSignIn ()
+        {
+            bool signed_in = OssiferSession.GetCookie ("EMUSIC_REMEMBER_ME_COOKIE", "www.emusic.com", "/") != null;
+
+            if (IsSignedIn != signed_in) {
+                IsSignedIn = signed_in;
+                OnSignInChanged ();
+            }
+        }
+
+        protected virtual void OnSignInChanged ()
+        {
+            var handler = SignInChanged;
+            if (handler != null) {
+                handler (this, EventArgs.Empty);
+            }
+        }
     }
 }
diff --git a/src/Extensions/Banshee.Emusic.Store/Banshee.Emusic.Store/StoreWebBrowserShell.cs b/src/Extensions/Banshee.Emusic.Store/Banshee.Emusic.Store/StoreWebBrowserShell.cs
index 0d5c8e0..3017eeb 100644
--- a/src/Extensions/Banshee.Emusic.Store/Banshee.Emusic.Store/StoreWebBrowserShell.cs
+++ b/src/Extensions/Banshee.Emusic.Store/Banshee.Emusic.Store/StoreWebBrowserShell.cs
@@ -44,10 +44,20 @@ namespace Banshee.Emusic.Store
 
             SearchEntry.EmptyMessage = String.Format (Catalog.GetString ("Search eMusic"));
 
-            // FIXME: add a â??sign outâ?? button, just as soon as someone figures
-            // out how to detect being signed in.
+            store_view.SignInChanged += (o, a) => CheckSignedIn ();
+            CheckSignedIn ();
 
             ShowAll ();
         }
+
+        private void CheckSignedIn ()
+        {
+            if (StoreView.IsSignedIn) {
+                var signout = NavigationControl.AddLink (Catalog.GetString ("Sign Out of eMusic"), null);
+                signout.Activated += (o, a) => StoreView.SignOut ();
+            } else {
+                NavigationControl.ClearLinks ();
+            }
+        }
     }
 }



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