summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWill Thompson <will@willthompson.co.uk>2011-03-20 23:33:56 +0000
committerWill Thompson <will@willthompson.co.uk>2011-03-20 23:52:04 +0000
commit1abbd0f4d9485dc1ab961bfc797cbc3bfe57763a (patch)
treeda5392907ff677e4ecf22e506898d2d16a43408e
parenta4887dfde52ecec290d4cb5fbd7971268c5bc47a (diff)
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.
-rw-r--r--src/Extensions/Banshee.Emusic.Store/Banshee.Emusic.Store/StoreView.cs29
-rw-r--r--src/Extensions/Banshee.Emusic.Store/Banshee.Emusic.Store/StoreWebBrowserShell.cs14
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 4212e93f3..fab133e94 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 0d5c8e0c4..3017eebe9 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 ();
+ }
+ }
}
}