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); } }
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); }
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); } }