diff --git a/PocketWP/Extensions/UriExtensions.cs b/PocketWP/Extensions/UriExtensions.cs new file mode 100644 index 0000000..07293f4 --- /dev/null +++ b/PocketWP/Extensions/UriExtensions.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; + +namespace PocketWP.Extensions +{ + public static class UriExtensions + { + /// + /// Gets a collection of query string values. + /// + /// The current uri. + /// A collection that contains the query string values. + public static IDictionary QueryString(this Uri uri) + { + var uriString = uri.IsAbsoluteUri ? uri.AbsoluteUri : uri.OriginalString; + + var queryIndex = uriString.IndexOf("?", StringComparison.InvariantCulture); + + if (queryIndex == -1) + { + return new Dictionary(); + } + + var query = uriString.Substring(queryIndex + 1); + + return query.Split('&') + .Where(x => !string.IsNullOrEmpty(x)) + .Select(x => x.Split('=')) + .ToDictionary(x => HttpUtility.UrlDecode(x[0]), x => x.Length == 2 && !string.IsNullOrEmpty(x[1]) ? HttpUtility.UrlDecode(x[1]) : null); + } + } +} diff --git a/PocketWP/PocketHelper.cs b/PocketWP/PocketHelper.cs index 2a96836..0571620 100644 --- a/PocketWP/PocketHelper.cs +++ b/PocketWP/PocketHelper.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Runtime.Serialization.Json; using System.Text; +using PocketWP.Extensions; namespace PocketWP { @@ -99,9 +100,30 @@ namespace PocketWP public static PocketData RetrievePocketData(Uri uri) { var pocketUri = uri.ToString().Replace("/Protocol?encodedLaunchUri=", string.Empty); - pocketUri = Uri.UnescapeDataString(pocketUri).Replace(PocketUrl, string.Empty); + pocketUri = Uri.UnescapeDataString(pocketUri); + var queryString = new Uri(pocketUri, UriKind.Absolute).QueryString(); - var itemJson = Uri.UnescapeDataString(pocketUri); + if (queryString.ContainsKey("source")) + { + var urlToAdd = queryString["Url"]; + var title = queryString["title"]; + + var item = new PocketData + { + Items = new List + { + new PocketDataItem + { + Uri = urlToAdd, + Title = title + } + } + }; + + return item; + } + + var itemJson = Uri.UnescapeDataString(queryString["Add"]); try { diff --git a/PocketWP/PocketWP.csproj b/PocketWP/PocketWP.csproj index 3dee793..65647c6 100644 --- a/PocketWP/PocketWP.csproj +++ b/PocketWP/PocketWP.csproj @@ -87,6 +87,7 @@ 4 +