コード例 #1
0
        private async Task <CustomsForgeArtistResults> GetQueryID(string name, CustomsForgeQueryType queryType)
        {
            string searchType;

            if (queryType == CustomsForgeQueryType.ARTIST)
            {
                searchType = "artists";
            }
            else if (queryType == CustomsForgeQueryType.CREATOR)
            {
                searchType = "members";
            }
            else
            {
                throw new ArgumentException("Invalid Query Type.");
            }

            var url = $"https://ignition4.customsforge.com/cdlc/search/{searchType}?term={name}&_type=query&q={name}";

            using (var request = new HttpRequestMessage
            {
                RequestUri = new Uri(url),
                Method = HttpMethod.Get
            })
            {
                var response = await Client.SendAsync(request);

                var str = await response.Content.ReadAsStringAsync();

                var json = JsonConvert.DeserializeObject <CustomsForgeArtistResults>(str);

                return(json);
            }
        }
コード例 #2
0
        private async void Handle(string name, CustomsForgeQueryType queryType)
        {
            var queryID = await GetQueryID(name, queryType);

            if (queryID.Results.Length == 0)
            {
                Decrement();
                return;
            }

            var entries = await GetCustomsForgeEntries(queryID.Results.First().ID, queryType);

            foreach (var entry in entries)
            {
                if (CreatorsToIgnore.Contains(entry.Artist))
                {
                    continue;
                }
                if (string.IsNullOrEmpty(entry.URL))
                {
                    continue;
                }

                var stringFormat = Program.config.customsForgeSettings.NewSongFormat;
                if (string.IsNullOrEmpty(stringFormat))
                {
                    var formatted = Format("[CustomsForge] '%Artist' - '%Title' uploaded %ModifiedDate with %Downloads downloads - %URL", entry);

                    Logger.Log(formatted);
                }
                else
                {
                    var formatted = Format(stringFormat, entry);

                    Logger.Log(formatted);
                }

                SavedDatabase.AddSongEntry(entry);
                if (ToUpdate.Contains(entry.ID))
                {
                    SavedDatabase.UpdateDate(entry.ID, entry.ModifiedDate);
                    ToUpdate.Remove(entry.ID);
                }
            }

            Decrement();

            Thread.Sleep(200);
        }
コード例 #3
0
        private async Task <List <CustomsForgeQueryData> > GetCustomsForgeEntries(int queryID, CustomsForgeQueryType queryType)
        {
            var url = $"https://ignition4.customsforge.com/?draw=1&columns[0][data]=addBtn&columns[0][searchable]=false&columns[0][orderable]=false&columns[1][data]=artistName&columns[2][data]=titleName&columns[3][data]=albumName&columns[4][data]=year&columns[5][data]=duration&columns[5][orderable]=false&columns[6][data]=tunings&columns[6][searchable]=false&columns[6][orderable]=false&columns[7][data]=version&columns[7][searchable]=false&columns[7][orderable]=false&columns[8][data]=author.name&columns[9][data]=created_at&columns[9][searchable]=false&columns[10][data]=updated_at&columns[10][searchable]=false&columns[11][data]=downloads&columns[11][searchable]=false&columns[12][data]=parts&columns[12][orderable]=false&columns[13][data]=platforms&columns[13][orderable]=false&columns[14][data]=file_pc_link&columns[14][searchable]=false&columns[15][data]=file_mac_link&columns[15][searchable]=false&columns[16][data]=artist.name&columns[17][data]=title&columns[18][data]=album&order[0][column]=10&order[0][dir]=desc&start=0&length=25&search[value]=&filter_title=&filter_album=&filter_start_year=&filter_end_year=&filter_preferred=&filter_official=&filter_disable=&filter_hidden=&_=1607221637930";

            if (queryType == CustomsForgeQueryType.ARTIST)
            {
                url += $"&filter_artist[]={queryID}";
            }
            else if (queryType == CustomsForgeQueryType.CREATOR)
            {
                url += $"&filter_member[]={queryID}";
            }
            else
            {
                throw new ArgumentException("Invalid Query Type.");
            }

            using (var request = new HttpRequestMessage
            {
                RequestUri = new Uri(url),
                Method = HttpMethod.Get,
                Headers =
                {
                    { HttpRequestHeader.Accept.ToString(), "application/json" },
                    { "X-Requested-With",                  "XMLHttpRequest"   }
                }
            })
            {
                string content;
                try
                {
                    var response = await Client.SendAsync(request);

                    content = await response.Content.ReadAsStringAsync();
                }
                catch (Exception e)
                {
                    Logger.LogError("[CustomsForge] Something went wrong communicating with the CustomsForge servers. Error: \n" + e);

                    return(new List <CustomsForgeQueryData>());
                }

                if (content.StartsWith("<!DOCTYPE html>"))
                {
                    Logger.LogError("[CustomsForge] Something went wrong. Output:\n\n" + content);

                    return(new List <CustomsForgeQueryData>());
                }

                var json = JsonConvert.DeserializeObject <CustomsForgeQueryResult>(content);
                var customsForgeQueryResults = json.Data;

                var dateToStartByStr = Program.config.customsForgeSettings.DateToStartBy;
                if (!string.IsNullOrEmpty(dateToStartByStr))
                {
                    if (!DateTimeOffset.TryParse(dateToStartByStr, out var dateToStartBy))
                    {
                        Logger.LogError("[CustomsForge] The date that was inputted is incorrect. Use the format 'yyyy-mm-dd'.");
                    }

                    customsForgeQueryResults = customsForgeQueryResults.FindAll(x => x.ModifiedDate > dateToStartBy);
                }

                customsForgeQueryResults = customsForgeQueryResults.FindAll(x =>
                {
                    var handled = SavedDatabase.IsAlreadyHandled(x.ID, x.ModifiedDate);

                    switch (handled)
                    {
                    case CustomsForgeDatabase.Handled.NOT_HANDLED:
                        return(true);

                    case CustomsForgeDatabase.Handled.OUTDATED:
                        ToUpdate.Add(x.ID);
                        return(true);

                    case CustomsForgeDatabase.Handled.HANDLED:
                        return(false);

                    default:
                        return(false);
                    }
                });

                return(customsForgeQueryResults);
            }
        }