private string GetImageUrl(string baseUrl, ImageOptions options, QueryStringDictionary queryParams)
        {
            if (options == null)
            {
                throw new ArgumentNullException("options");
            }

            if (queryParams == null)
            {
                throw new ArgumentNullException("queryParams");
            }

            if (options.ImageIndex.HasValue)
            {
                baseUrl += "/" + options.ImageIndex.Value;
            }

            queryParams.AddIfNotNull("Width", options.Width);
            queryParams.AddIfNotNull("Height", options.Height);
            queryParams.AddIfNotNull("MaxWidth", options.MaxWidth);
            queryParams.AddIfNotNull("MaxHeight", options.MaxHeight);
            queryParams.AddIfNotNull("Quality", options.Quality ?? ImageQuality);

            queryParams.AddIfNotNull("Tag", options.Tag);

            queryParams.AddIfNotNull("CropWhitespace", options.CropWhitespace);
            queryParams.Add("EnableImageEnhancers", options.EnableImageEnhancers);

            return(GetApiUrl(baseUrl, queryParams));
        }
        /// <summary>
        /// Reports to the server that the user has stopped playing an item
        /// </summary>
        /// <param name="itemId">The item id.</param>
        /// <param name="userId">The user id.</param>
        /// <param name="positionTicks">The position ticks.</param>
        /// <returns>Task{UserItemDataDto}.</returns>
        /// <exception cref="System.ArgumentNullException">itemId</exception>
        public void ReportPlaybackStopped(string itemId, string userId, long?positionTicks, Action <bool> onResponse)
        {
            if (string.IsNullOrEmpty(itemId))
            {
                throw new ArgumentNullException("itemId");
            }

            if (string.IsNullOrEmpty(userId))
            {
                throw new ArgumentNullException("userId");
            }

            if (WebSocketConnection != null && WebSocketConnection.IsOpen)
            {
                WebSocketConnection.Send("PlaybackStopped", itemId + "|" + (positionTicks == null ? "" : positionTicks.Value.ToString(CultureInfo.InvariantCulture)));
            }

            var dict = new QueryStringDictionary();

            dict.AddIfNotNull("positionTicks", positionTicks);

            var url = GetApiUrl("Users/" + userId + "/PlayingItems/" + itemId, dict);

            _httpClient.Delete(url, x => onResponse(false));
        }
        /// <summary>
        /// Registers the device for push notifications.
        /// </summary>
        /// <param name="deviceId">The device id.</param>
        /// <param name="uri">The URI.</param>
        /// <param name="sendTileUpdate">The send tile update.</param>
        /// <param name="sendToastUpdate">The send toast update.</param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">deviceType
        /// or
        /// deviceId</exception>
        public Task RegisterDeviceAsync(string deviceId, string uri, bool?sendTileUpdate = null, bool?sendToastUpdate = null)
        {
            if (string.IsNullOrEmpty(deviceId))
            {
                throw new ArgumentNullException("deviceId");
            }

            var dict = new QueryStringDictionary
            {
                { "deviceid", deviceId },
                { "url", uri },
                { "devicetype", "WindowsPhone8" }
            };

            if (sendTileUpdate.HasValue)
            {
                dict.Add("sendlivetile", sendTileUpdate.Value);
            }
            if (sendToastUpdate.HasValue)
            {
                dict.Add("sendtoast", sendToastUpdate.Value);
            }

            var url = GetApiUrl("PushNotification/Devices", dict);

            return(PostAsync <EmptyRequestResult>(url, new Dictionary <string, string>()));
        }
Example #4
0
        public void IEnumerator_GetEnumerator_Enumerates_Over_KeyValuePairs()
        {
            var dictionary = new QueryStringDictionary("a=1;a=2;b=3&c=4");

            var seenKeys   = new HashSet <string>();
            var enumerator = ((IEnumerable)dictionary).GetEnumerator();

            while (enumerator.MoveNext())
            {
                var kvp   = (KeyValuePair <string, string>)enumerator.Current;
                var key   = kvp.Key;
                var value = kvp.Value;

                Assert.IsFalse(seenKeys.Contains(key));
                seenKeys.Add(key);

                string expected = null;
                switch (key)
                {
                case "a":   expected = "1,2"; break;

                case "b":   expected = "3"; break;

                case "c":   expected = "4"; break;

                default:    Assert.Fail($"Unexpected key {key}"); break;
                }

                Assert.AreEqual(expected, value);
            }

            Assert.AreEqual(3, seenKeys.Count);
        }
Example #5
0
        public void Ctor_Initialises_Properties(string queryString, bool caseSensitiveKeys, string expected)
        {
            var dictionary = new QueryStringDictionary(queryString, caseSensitiveKeys);

            Assert.AreEqual(expected, dictionary.QueryString);
            Assert.AreEqual(caseSensitiveKeys, dictionary.CaseSensitiveKeys);
        }
        /// <summary>
        /// Reports playback progress to the server
        /// </summary>
        /// <param name="itemId">The item id.</param>
        /// <param name="userId">The user id.</param>
        /// <param name="positionTicks">The position ticks.</param>
        /// <param name="isPaused">if set to <c>true</c> [is paused].</param>
        /// <returns>Task{UserItemDataDto}.</returns>
        /// <exception cref="System.ArgumentNullException">itemId</exception>
        public void ReportPlaybackProgress(string itemId, string userId, long?positionTicks, bool isPaused, Action <bool> onResponse)
        {
            if (string.IsNullOrEmpty(itemId))
            {
                throw new ArgumentNullException("itemId");
            }

            if (string.IsNullOrEmpty(userId))
            {
                throw new ArgumentNullException("userId");
            }

            if (WebSocketConnection != null && WebSocketConnection.IsOpen)
            {
                WebSocketConnection.Send("PlaybackProgress", itemId + "|" + (positionTicks == null ? "" : positionTicks.Value.ToString(CultureInfo.InvariantCulture)) + "|" + isPaused.ToString().ToLower());
            }

            var dict = new QueryStringDictionary();

            dict.AddIfNotNull("positionTicks", positionTicks);
            dict.Add("isPaused", isPaused);

            var url = GetApiUrl("Users/" + userId + "/PlayingItems/" + itemId + "/Progress", dict);

            Post <EmptyRequestResult>(url, new Dictionary <string, string>(), x => onResponse(true), x => onResponse(false));
        }
Example #7
0
        public void BuildModel_QueryStringDictionary_Can_Build_StringA_Model_With_Correct_Case()
        {
            var dictionary = new QueryStringDictionary("A=Abc");

            var actual = _ModelBuilder.BuildModel(typeof(StringA), null, dictionary) as StringA;

            Assert.AreEqual("Abc", actual.A);
        }
Example #8
0
        public void GetValue_Returns_Expected_Value(string queryString, bool caseSensitiveKeys, string key, string join, string expected)
        {
            var dictionary = new QueryStringDictionary(queryString, caseSensitiveKeys);

            var actual = dictionary.GetValue(key, join);

            Assert.AreEqual(expected, actual);
        }
Example #9
0
        public void Values_Returns_All_Values(string queryString, bool caseSensitiveKey, string[] expected)
        {
            var dictionary = new QueryStringDictionary(queryString, caseSensitiveKey);

            var actual = dictionary.Values.ToArray();

            Assertions.AreEqual(expected, actual);
        }
Example #10
0
        public void QueryString_Index_Returns_Expected_Value(string queryString, bool caseSensitiveKey, string indexValue, string expected)
        {
            var dictionary = new QueryStringDictionary(queryString, caseSensitiveKey);

            var actual = dictionary[indexValue];

            Assert.AreEqual(expected, actual);
        }
Example #11
0
        public void TryGetValue_Returns_Expected_Value(string queryString, bool caseSensitiveKeys, string searchKey, bool expectedReturn, string expectedValue)
        {
            var dictionary = new QueryStringDictionary(queryString, caseSensitiveKeys);

            var actualReturn = dictionary.TryGetValue(searchKey, out var actualValue);

            Assert.AreEqual(expectedReturn, actualReturn);
            Assert.AreEqual(expectedValue, actualValue);
        }
Example #12
0
        public void BuildModel_QueryStringDictionary_Uses_TypeParserResolver()
        {
            var dictionary = new QueryStringDictionary("A=Abc");
            var resolver   = new TypeParserResolver(new String_Reverse_Parser());

            var actual = _ModelBuilder.BuildModel(typeof(StringA), resolver, dictionary) as StringA;

            Assert.AreEqual("cbA", actual.A);
        }
        protected override List<BaseItem> GetCachedChildren()
        {
            var parms = new QueryStringDictionary { { "userId", Kernel.CurrentUser.ApiId }, {"Limit", 200} };
            parms.Add("Fields", MB3ApiRepository.StandardFields.Select(f => f.ToString()));
            var url = Kernel.ApiClient.GetApiUrl("Shows/Upcoming", parms);

            using (var stream = Kernel.ApiClient.GetSerializedStream(url))
            {
                var result = Kernel.ApiClient.DeserializeFromStream<ItemsResult>(stream);
                OurChildren = result.Items.Select(i => Kernel.Instance.MB3ApiRepository.GetItem(i, i.Type)).Where(i => i != null).ToList();
                return OurChildren;
            }
        }
Example #14
0
        public void Keys_Returns_All_Keys(string queryString, bool caseSensitiveKey, string[] expectedKeys)
        {
            var dictionary = new QueryStringDictionary(queryString, caseSensitiveKey);
            var actual     = dictionary.Keys.ToList();

            Assert.AreEqual(expectedKeys.Length, actual.Count);
            foreach (var expectedKey in expectedKeys)
            {
                var actualIdx = actual.IndexOf(expectedKey);
                Assert.AreNotEqual(-1, actualIdx, $"Cannot find {expectedKey} in Keys");
                actual.RemoveAt(actualIdx);
            }
        }
Example #15
0
        /// <summary>
        ///     List of parameters for this request object.
        /// </summary>
        /// <returns></returns>
        protected virtual QueryStringDictionary GetParameterList()
        {
            var parameters = new QueryStringDictionary();

            if (string.IsNullOrEmpty(this.Language))
            {
                this.Language = "en-US";
            }

            parameters.Add("language", this.Language);
            parameters.Add("format", this.Format.ToNullableString());
            return(parameters);
        }
        protected string GetApiUrl(string handler, QueryStringDictionary queryString)
        {
            if (string.IsNullOrEmpty(handler))
            {
                throw new ArgumentNullException("handler");
            }

            if (queryString == null)
            {
                throw new ArgumentNullException("queryString");
            }

            return(queryString.GetUrl(ApiUrl + "/" + handler));
        }
Example #17
0
        public void BuildModel_QueryStringDictionary_Can_Parse_All_Native_Types(string propertyName, string value, object expected, string culture)
        {
            using (new CultureSwap(culture)) {
                var propertyInfo = typeof(AllNativeTypes).GetProperty(propertyName);
                var dictionary   = new QueryStringDictionary($"{propertyName}={value ?? ""}");

                var model  = _ModelBuilder.BuildModel(typeof(AllNativeTypes), null, dictionary) as AllNativeTypes;
                var actual = propertyInfo.GetValue(model, null);

                expected = DataRowParser.ConvertExpected(propertyInfo.PropertyType, expected);

                Assert.AreEqual(expected, actual);
            }
        }
Example #18
0
        public void QueryString_GetValues_Returns_Expected_Values(string queryString, bool caseSensitiveKey, string key, string[] expected)
        {
            var dictionary = new QueryStringDictionary(queryString, caseSensitiveKey);

            var actual = dictionary.GetValues(key);

            if (expected == null)
            {
                Assert.IsNull(actual);
            }
            else
            {
                Assert.IsTrue(expected.SequenceEqual(actual));
            }
        }
        protected override List <BaseItem> GetCachedChildren()
        {
            var parms = new QueryStringDictionary {
                { "userId", Kernel.CurrentUser.ApiId }, { "Limit", 200 }
            };

            parms.Add("Fields", MB3ApiRepository.StandardFields.Select(f => f.ToString()));
            var url = Kernel.ApiClient.GetApiUrl("Shows/Upcoming", parms);

            using (var stream = Kernel.ApiClient.GetSerializedStream(url))
            {
                var result = Kernel.ApiClient.DeserializeFromStream <ItemsResult>(stream);
                OurChildren = result.Items.Select(i => Kernel.Instance.MB3ApiRepository.GetItem(i, i.Type)).Where(i => i != null).ToList();
                return(OurChildren);
            }
        }
Example #20
0
        /// <summary>
        ///     Converts this object's parameters to a query string dictionary.
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static QueryStringDictionary ToDictionary(this object source)
        {
            var dictionary = new QueryStringDictionary();
            var properties = source.GetType().GetRuntimeProperties();

            foreach (var property in properties)
            {
                var key   = property.Name.ToLower();
                var value = property.GetValue(source, null);

                if (!string.IsNullOrEmpty(key) && value != null)
                {
                    dictionary.Add(key, value);
                }
            }

            return(dictionary);
        }
        /// <summary>
        /// Updates the device async.
        /// </summary>
        /// <param name="deviceId">The device id.</param>
        /// <param name="sendTileUpdate">The send tile update.</param>
        /// <param name="sendToastUpdate">The send toast update.</param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">deviceId</exception>
        public Task UpdateDeviceAsync(string deviceId, bool?sendTileUpdate = null, bool?sendToastUpdate = null)
        {
            if (string.IsNullOrEmpty(deviceId))
            {
                throw new ArgumentNullException("deviceId");
            }

            var dict = new QueryStringDictionary();

            if (sendTileUpdate.HasValue)
            {
                dict.Add("sendlivetile", sendTileUpdate.Value);
            }
            if (sendToastUpdate.HasValue)
            {
                dict.Add("sendtoast", sendToastUpdate.Value);
            }

            var url = GetApiUrl("PushNotification/Devices/" + deviceId, dict);

            return(PostAsync <EmptyRequestResult>(url, new Dictionary <string, string>()));
        }
        /// <summary>
        /// Registers the device for push notifications.
        /// </summary>
        /// <param name="deviceId">The device id.</param>
        /// <param name="uri">The URI.</param>
        /// <param name="sendTileUpdate">The send tile update.</param>
        /// <param name="sendToastUpdate">The send toast update.</param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">deviceType
        /// or
        /// deviceId</exception>
        public Task RegisterDeviceAsync(string deviceId, string uri, bool? sendTileUpdate = null, bool? sendToastUpdate = null)
        {
            if (string.IsNullOrEmpty(deviceId))
            {
                throw new ArgumentNullException("deviceId");
            }

            var dict = new QueryStringDictionary
                           {
                               {"deviceid", deviceId},
                               {"url", uri},
                               {"devicetype", "WindowsPhone8"}
                           };

            if (sendTileUpdate.HasValue)
                dict.Add("sendlivetile", sendTileUpdate.Value);
            if (sendToastUpdate.HasValue)
                dict.Add("sendtoast", sendToastUpdate.Value);

            var url = GetApiUrl("PushNotification/Devices", dict);

            return PostAsync<EmptyRequestResult>(url, new Dictionary<string, string>());
        }
        /// <summary>
        /// Updates the device async.
        /// </summary>
        /// <param name="deviceId">The device id.</param>
        /// <param name="sendTileUpdate">The send tile update.</param>
        /// <param name="sendToastUpdate">The send toast update.</param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">deviceId</exception>
        public Task UpdateDeviceAsync(string deviceId, bool? sendTileUpdate = null, bool? sendToastUpdate = null)
        {
            if (string.IsNullOrEmpty(deviceId))
            {
                throw new ArgumentNullException("deviceId");
            }

            var dict = new QueryStringDictionary();

            if (sendTileUpdate.HasValue)
                dict.Add("sendlivetile", sendTileUpdate.Value);
            if (sendToastUpdate.HasValue)
                dict.Add("sendtoast", sendToastUpdate.Value);

            var url = GetApiUrl("PushNotification/Devices/" + deviceId, dict);

            return PostAsync<EmptyRequestResult>(url, new Dictionary<string, string>());
        }
Example #24
0
        public void JoinValue_Defaults_To_Comma()
        {
            var actual = QueryStringDictionary.JoinValue(new string[] { "a", "b" });

            Assert.AreEqual("a,b", actual);
        }
Example #25
0
        public void JoinValue_Returns_Expected_Value(string[] value, string join, string expected)
        {
            var actual = QueryStringDictionary.JoinValue(value, join);

            Assert.AreEqual(expected, actual);
        }
Example #26
0
 public void JoinValue_Throws_If_Passed_Null_Join()
 {
     QueryStringDictionary.JoinValue(new string[] { "1" }, null);
 }
Example #27
0
        public void GetValue_Defaults_To_Comma()
        {
            var dictionary = new QueryStringDictionary("a=1&a=2");

            Assert.AreEqual("1,2", dictionary.GetValue("a"));
        }
Example #28
0
        /// <summary>
        /// See interface docs.
        /// </summary>
        /// <param name="modelType"></param>
        /// <param name="typeParserResolver"></param>
        /// <param name="values"></param>
        /// <returns></returns>
        public object BuildModel(Type modelType, TypeParserResolver typeParserResolver, QueryStringDictionary values)
        {
            if (modelType == null)
            {
                throw new ArgumentNullException(nameof(modelType));
            }
            if (values == null)
            {
                throw new ArgumentNullException(nameof(values));
            }

            var result = Activator.CreateInstance(modelType);

            foreach (var propertyInfo in modelType.GetProperties())
            {
                if (values.ContainsKey(propertyInfo.Name))
                {
                    var valueText   = values.GetValue(propertyInfo.Name);
                    var parsedValue = Parser.ParseType(
                        propertyInfo.PropertyType,
                        valueText,
                        typeParserResolver
                        );
                    propertyInfo.SetValue(result, parsedValue);
                }
            }

            return(result);
        }
Example #29
0
        public void GetValue_Throws_If_Passed_Null_Join()
        {
            var dictionary = new QueryStringDictionary("a=1");

            dictionary.GetValue("a", null);
        }
Example #30
0
        public void Ctor_Defaults_To_Case_Sensitive_Keys()
        {
            var dictionary = new QueryStringDictionary("a=1");

            Assert.IsNull(dictionary["A"]);
        }
Example #31
0
        public void ContainsKey_Returns_Expected_Value(string queryString, bool caseSensitiveKeys, string searchKey, bool expected)
        {
            var dictionary = new QueryStringDictionary(queryString, caseSensitiveKeys);

            Assert.AreEqual(expected, dictionary.ContainsKey(searchKey));
        }
Example #32
0
        public void Count_Returns_The_Number_Of_Keys_Correctly(string queryString, int expected)
        {
            var dictionary = new QueryStringDictionary(queryString);

            Assert.AreEqual(expected, dictionary.Count);
        }