public override async Task <List <AnimeObject> > GetAnimeFavourites(string username, IProgress <APIProgressReport> progress)
        {
            if (string.IsNullOrWhiteSpace(username))
            {
                if (progress != null)
                {
                    progress.Report(new APIProgressReport(100.0, "Please enter a Username", APIResponse.Failed));
                }
                return(new List <AnimeObject>());
            }

            HttpRequestMessage  requestMessage = new HttpRequestMessage(HttpMethod.Get, Service.CreateAPIServiceUri("/users/" + username + "/favorite_anime"));
            HttpResponseMessage response       = await APIWebClient.MakeAPICall(requestMessage);

            if (response.IsSuccessStatusCode)
            {
                string responseAsString = await response.Content.ReadAsStringAsync();

                if (progress != null)
                {
                    progress.Report(new APIProgressReport(50.0, "Recieved LibraryObjects From Server", APIResponse.ContinuingExecution));
                }

                JObject o = JObject.Parse("{\"anime\":" + responseAsString + "}");
                AnimeObjectListHummingbirdV1 favouriteList = JsonConvert.DeserializeObject <AnimeObjectListHummingbirdV1>(o.ToString());


                List <AnimeObject> convertedFavouriteAnimeObjects = new List <AnimeObject>();
                foreach (var anime in favouriteList.anime)
                {
                    convertedFavouriteAnimeObjects.Add((AnimeObject)anime);
                }

                if (progress != null)
                {
                    progress.Report(new APIProgressReport(100.0, "Converted Successfully", APIResponse.Successful, convertedFavouriteAnimeObjects, favouriteList));
                }
                return(convertedFavouriteAnimeObjects);
            }

            if (progress != null)
            {
                progress.Report(new APIProgressReport(100.0, "API Call wasn't successul", APIResponse.Failed));
            }
            return(new List <AnimeObject>());
        }
        public override async Task <List <AnimeObject> > SearchAnime(string searchTerm, IProgress <APIProgressReport> progress)
        {
            if (string.IsNullOrWhiteSpace(searchTerm))
            {
                if (progress != null)
                {
                    progress.Report(new APIProgressReport(100.0, "Please enter Search Terms", APIResponse.Failed));
                }
                return(new List <AnimeObject>());
            }

            HttpRequestMessage  requestMessage = new HttpRequestMessage(HttpMethod.Get, Service.CreateAPIServiceUri("/search/anime?query=" + searchTerm));
            HttpResponseMessage response       = await APIWebClient.MakeAPICall(requestMessage);

            if (response.IsSuccessStatusCode)
            {
                string responseAsString = await response.Content.ReadAsStringAsync();

                if (progress != null)
                {
                    progress.Report(new APIProgressReport(50.0, "Recieved Search Results From Server", APIResponse.ContinuingExecution));
                }

                JObject o = JObject.Parse("{\"anime\":" + responseAsString + "}");
                AnimeObjectListHummingbirdV1 hummingbirdSearchResults = JsonConvert.DeserializeObject <AnimeObjectListHummingbirdV1>(o.ToString());

                List <AnimeObject> convertedSearchResults = new List <AnimeObject>();
                foreach (var anime in hummingbirdSearchResults.anime)
                {
                    convertedSearchResults.Add((AnimeObject)anime);
                }

                if (progress != null)
                {
                    progress.Report(new APIProgressReport(100.0, "Converted Successfully", APIResponse.Successful, convertedSearchResults, hummingbirdSearchResults));
                }
                return(convertedSearchResults);
            }

            if (progress != null)
            {
                progress.Report(new APIProgressReport(100.0, "API Call wasn't successul", APIResponse.Failed));
            }
            return(new List <AnimeObject>());
        }