From 49bb3588128420d2b076474c2aabd82fa49b1b05 Mon Sep 17 00:00:00 2001 From: Nova Date: Sun, 3 Jan 2021 12:21:02 -0500 Subject: [PATCH] Add maimai JP and Chunithm International searching support --- MainWindow.xaml | 14 ++- MainWindow.xaml.cs | 303 ++++++++++++++++++++++++++++++--------------- README.md | 2 + 3 files changed, 218 insertions(+), 101 deletions(-) diff --git a/MainWindow.xaml b/MainWindow.xaml index cc2fe10..9dad8f2 100644 --- a/MainWindow.xaml +++ b/MainWindow.xaml @@ -64,7 +64,12 @@ - + + + + + + @@ -94,7 +99,12 @@ - + + + + + + diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs index 6198415..537e460 100644 --- a/MainWindow.xaml.cs +++ b/MainWindow.xaml.cs @@ -81,6 +81,7 @@ public class ArtistList public string Display { get; set; } } } + public class BeatSong { public string Key { get; set; } @@ -151,45 +152,45 @@ private void SearchChanged(object sender, SelectionChangedEventArgs e) { provider.Text = "Chorus"; } - else if (search.SelectedIndex == 2 || search.SelectedIndex == 8 || search.SelectedIndex == 9 || search.SelectedIndex == 10) + else if (search.SelectedIndex == 2 || search.SelectedIndex == 3 || search.SelectedIndex == 9 || search.SelectedIndex == 10 || search.SelectedIndex == 11 || search.SelectedIndex == 12) { provider.Text = "SEGA"; } - else if (search.SelectedIndex == 3) + else if (search.SelectedIndex == 4) { provider.Text = "Cypher Gate"; } - else if (search.SelectedIndex == 4) + else if (search.SelectedIndex == 5) { provider.Text = "groovecoaster.jp"; } - else if (search.SelectedIndex == 5) + else if (search.SelectedIndex == 6) { provider.Text = "osusearch"; moreOptions.IsEnabled = true; } - else if (search.SelectedIndex == 6) + else if (search.SelectedIndex == 7) { provider.Text = "Beat Saver"; } - else if (search.SelectedIndex == 7) + else if (search.SelectedIndex == 8) { provider.Text = "Spotify"; } - else if (search.SelectedIndex == 11) + else if (search.SelectedIndex == 13) { provider.Text = "Arcaea Wikia"; } - else if (search.SelectedIndex == 12) + else if (search.SelectedIndex == 14) { provider.Text = "marv.jp"; } - else if (search.SelectedIndex == 13) + else if (search.SelectedIndex == 15) { provider.Text = "Quaver"; moreOptions.IsEnabled = true; } - else if (search.SelectedIndex == 14) + else if (search.SelectedIndex == 16) { provider.Text = "Gamepedia"; } @@ -213,7 +214,7 @@ private void SourceChanged(object sender, SelectionChangedEventArgs e) private void moreOptions_Click(object sender, RoutedEventArgs e) { - if (search.SelectedIndex == 5) + if (search.SelectedIndex == 6) { Options options = new Options(); options.Owner = this; @@ -225,7 +226,7 @@ private void moreOptions_Click(object sender, RoutedEventArgs e) optionsBemani.Owner = this; optionsBemani.ShowDialog(); } - else if (search.SelectedIndex == 13) + else if (search.SelectedIndex == 15) { OptionsQuaver optionsQuaver = new OptionsQuaver(); optionsQuaver.Owner = this; @@ -283,6 +284,7 @@ private static async Task OnImplicitGrantReceived(object sender, ImplictGrantRes await _server.Stop(); Globals.SpotifyToken = response.AccessToken; } + private static async Task SpotifyConfig() { _server = new EmbedIOAuthServer(new Uri("http://localhost:5000/callback"), 5000); @@ -391,10 +393,9 @@ private async void AddPlaylist_Click(object sender, RoutedEventArgs e) MessageBox.Show("Added selected song to a Spotify playlist labelled \"Rhythm Games Converter\"", "Success"); } - private async void Search_Click(object sender, RoutedEventArgs e) { - if ((source.SelectedIndex == 1 && search.SelectedIndex == 1) || (source.SelectedIndex == 0 && search.SelectedIndex == 5) || (source.SelectedIndex == 3 && search.SelectedIndex == 6) || (source.SelectedIndex == 4 && search.SelectedIndex == 7) || (source.SelectedIndex == 5 && search.SelectedIndex == 13)) + if ((source.SelectedIndex == 1 && search.SelectedIndex == 1) || (source.SelectedIndex == 0 && search.SelectedIndex == 6) || (source.SelectedIndex == 3 && search.SelectedIndex == 7) || (source.SelectedIndex == 4 && search.SelectedIndex == 8) || (source.SelectedIndex == 5 && search.SelectedIndex == 15)) { MessageBox.Show("You cannot use the same game as the source and the search.", "Error"); return; @@ -522,19 +523,24 @@ private async Task SourceSpotify() else if (search.SelectedIndex == 2) { DisableButtons(); - results.Text = MaiMaiMatching(songs, null); + results.Text = MaiMaiMatching(songs, null, false); } else if (search.SelectedIndex == 3) { DisableButtons(); - results.Text = DJMAXMatching(songs, null, artists); + results.Text = MaiMaiMatching(songs, null, true); } else if (search.SelectedIndex == 4) { DisableButtons(); - results.Text = GrooveCoasterMatching(songs, null); + results.Text = DJMAXMatching(songs, null, artists); } else if (search.SelectedIndex == 5) + { + DisableButtons(); + results.Text = GrooveCoasterMatching(songs, null); + } + else if (search.SelectedIndex == 6) { DisableButtons(); Globals.Links = OsuMatching(songs, artists); @@ -555,7 +561,7 @@ private async Task SourceSpotify() download.IsEnabled = true; } } - else if (search.SelectedIndex == 6) + else if (search.SelectedIndex == 7) { DisableButtons(); Globals.Links = BeatSaberMatching(songs, artists); @@ -576,32 +582,37 @@ private async Task SourceSpotify() download.IsEnabled = true; } } - else if (search.SelectedIndex == 8) + else if (search.SelectedIndex == 9) { DisableButtons(); - results.Text = ChunithmMatching(songs, null, artists); + results.Text = ChunithmMatching(songs, null, artists, false); } - else if (search.SelectedIndex == 9) + else if (search.SelectedIndex == 10) + { + DisableButtons(); + results.Text = ChunithmMatching(songs, null, artists, true); + } + else if (search.SelectedIndex == 11) { DisableButtons(); results.Text = OngekiMatching(songs, null, artists); } - else if (search.SelectedIndex == 10) + else if (search.SelectedIndex == 12) { DisableButtons(); results.Text = DivaMatching(songs, null, artists); } - else if (search.SelectedIndex == 11) + else if (search.SelectedIndex == 13) { DisableButtons(); results.Text = ArcaeaMatching(songs, null, artists); } - else if (search.SelectedIndex == 12) + else if (search.SelectedIndex == 14) { DisableButtons(); results.Text = WaccaMatching(songs, null, artists); } - else if (search.SelectedIndex == 13) + else if (search.SelectedIndex == 15) { DisableButtons(); Globals.Links = QuaverMatching(songs, artists); @@ -622,12 +633,13 @@ private async Task SourceSpotify() download.IsEnabled = true; } } - else if (search.SelectedIndex == 14) + else if (search.SelectedIndex == 16) { DisableButtons(); results.Text = MuseMatching(songs, null, artists); } } + private void SourceQuaver() { (List titles, List artists) = QuaverFiles(dir.Text); @@ -645,22 +657,48 @@ private void SourceQuaver() DisableButtons(); results.Text = BEMANIMatching(titles, null); } + else if (search.SelectedIndex == 1) + { + DisableButtons(); + Globals.Links = CloneMatching(titles, artists); + int i = 0; + using (StringReader reader = new StringReader(Globals.Links)) + { + string line = string.Empty; + do + { + line = reader.ReadLine(); + if (line != null) + { + Globals.LinksFinal[i] = line; + i++; + } + } + while (line != null); + download.IsEnabled = true; + } + } else if (search.SelectedIndex == 2) { DisableButtons(); - results.Text = MaiMaiMatching(titles, null); + results.Text = MaiMaiMatching(titles, null, false); } else if (search.SelectedIndex == 3) { DisableButtons(); - results.Text = DJMAXMatching(titles, null, artists); + results.Text = MaiMaiMatching(titles, null, true); } else if (search.SelectedIndex == 4) { DisableButtons(); - results.Text = GrooveCoasterMatching(titles, null); + results.Text = DJMAXMatching(titles, null, artists); } else if (search.SelectedIndex == 5) + { + DisableButtons(); + results.Text = GrooveCoasterMatching(titles, null); + } + else if (search.SelectedIndex == 6) { DisableButtons(); Globals.Links = OsuMatching(titles, artists); @@ -681,7 +719,7 @@ private void SourceQuaver() download.IsEnabled = true; } } - else if (search.SelectedIndex == 6) + else if (search.SelectedIndex == 7) { DisableButtons(); Globals.Links = BeatSaberMatching(titles, artists); @@ -702,37 +740,42 @@ private void SourceQuaver() download.IsEnabled = true; } } - else if (search.SelectedIndex == 7) + else if (search.SelectedIndex == 8) { DisableButtons(); SpotifyMatching(titles, artists); } - else if (search.SelectedIndex == 8) + else if (search.SelectedIndex == 9) { DisableButtons(); - results.Text = ChunithmMatching(titles, null, artists); + results.Text = ChunithmMatching(titles, null, artists, false); } - else if (search.SelectedIndex == 9) + else if (search.SelectedIndex == 10) + { + DisableButtons(); + results.Text = ChunithmMatching(titles, null, artists, true); + } + else if (search.SelectedIndex == 11) { DisableButtons(); results.Text = OngekiMatching(titles, null, artists); } - else if (search.SelectedIndex == 10) + else if (search.SelectedIndex == 12) { DisableButtons(); results.Text = DivaMatching(titles, null, artists); } - else if (search.SelectedIndex == 11) + else if (search.SelectedIndex == 13) { DisableButtons(); results.Text = ArcaeaMatching(titles, null, artists); } - else if (search.SelectedIndex == 12) + else if (search.SelectedIndex == 14) { DisableButtons(); results.Text = WaccaMatching(titles, null, artists); } - else if (search.SelectedIndex == 14) + else if (search.SelectedIndex == 16) { DisableButtons(); results.Text = MuseMatching(titles, null, artists); @@ -759,19 +802,24 @@ private void SourceClone() else if (search.SelectedIndex == 2) { DisableButtons(); - results.Text = MaiMaiMatching(titles, null); + results.Text = MaiMaiMatching(titles, null, false); } else if (search.SelectedIndex == 3) { DisableButtons(); - results.Text = DJMAXMatching(titles, null, artists); + results.Text = MaiMaiMatching(titles, null, true); } else if (search.SelectedIndex == 4) { DisableButtons(); - results.Text = GrooveCoasterMatching(titles, null); + results.Text = DJMAXMatching(titles, null, artists); } else if (search.SelectedIndex == 5) + { + DisableButtons(); + results.Text = GrooveCoasterMatching(titles, null); + } + else if (search.SelectedIndex == 6) { DisableButtons(); Globals.Links = OsuMatching(titles, artists); @@ -792,7 +840,7 @@ private void SourceClone() download.IsEnabled = true; } } - else if (search.SelectedIndex == 6) + else if (search.SelectedIndex == 7) { DisableButtons(); Globals.Links = BeatSaberMatching(titles, artists); @@ -813,37 +861,42 @@ private void SourceClone() download.IsEnabled = true; } } - else if (search.SelectedIndex == 7) + else if (search.SelectedIndex == 8) { DisableButtons(); SpotifyMatching(titles, artists); } - else if (search.SelectedIndex == 8) + else if (search.SelectedIndex == 9) { DisableButtons(); - results.Text = ChunithmMatching(titles, null, artists); + results.Text = ChunithmMatching(titles, null, artists, false); } - else if (search.SelectedIndex == 9) + else if (search.SelectedIndex == 10) + { + DisableButtons(); + results.Text = ChunithmMatching(titles, null, artists, true); + } + else if (search.SelectedIndex == 11) { DisableButtons(); results.Text = OngekiMatching(titles, null, artists); } - else if (search.SelectedIndex == 10) + else if (search.SelectedIndex == 12) { DisableButtons(); results.Text = DivaMatching(titles, null, artists); } - else if (search.SelectedIndex == 11) + else if (search.SelectedIndex == 13) { DisableButtons(); results.Text = ArcaeaMatching(titles, null, artists); } - else if (search.SelectedIndex == 12) + else if (search.SelectedIndex == 14) { DisableButtons(); results.Text = WaccaMatching(titles, null, artists); } - else if (search.SelectedIndex == 13) + else if (search.SelectedIndex == 15) { DisableButtons(); Globals.Links = QuaverMatching(titles, artists); @@ -864,7 +917,7 @@ private void SourceClone() download.IsEnabled = true; } } - else if (search.SelectedIndex == 14) + else if (search.SelectedIndex == 16) { DisableButtons(); results.Text = MuseMatching(titles, null, artists); @@ -886,7 +939,7 @@ private void SourceOsu() if (search.SelectedIndex == 0) { DisableButtons(); - results.Text = BEMANIMatching(titles, titlesUni); + results.Text = BEMANIMatching(titles, null); } else if (search.SelectedIndex == 1) { @@ -912,19 +965,24 @@ private void SourceOsu() else if (search.SelectedIndex == 2) { DisableButtons(); - results.Text = MaiMaiMatching(titles, titlesUni); + results.Text = MaiMaiMatching(titles, null, false); } else if (search.SelectedIndex == 3) { DisableButtons(); - results.Text = DJMAXMatching(titles, titlesUni, artists); + results.Text = MaiMaiMatching(titles, null, true); } else if (search.SelectedIndex == 4) { DisableButtons(); - results.Text = GrooveCoasterMatching(titles, titlesUni); + results.Text = DJMAXMatching(titles, null, artists); } - else if (search.SelectedIndex == 6) + else if (search.SelectedIndex == 5) + { + DisableButtons(); + results.Text = GrooveCoasterMatching(titles, null); + } + else if (search.SelectedIndex == 7) { DisableButtons(); Globals.Links = BeatSaberMatching(titles, artists); @@ -945,37 +1003,42 @@ private void SourceOsu() download.IsEnabled = true; } } - else if (search.SelectedIndex == 7) - { - DisableButtons(); - SpotifyMatching(titles, artists); - } else if (search.SelectedIndex == 8) { DisableButtons(); - results.Text = ChunithmMatching(titles, titlesUni, artists); + SpotifyMatching(titles, artists); } else if (search.SelectedIndex == 9) { DisableButtons(); - results.Text = OngekiMatching(titles, titlesUni, artists); + results.Text = ChunithmMatching(titles, null, artists, false); } else if (search.SelectedIndex == 10) { DisableButtons(); - results.Text = DivaMatching(titles, titlesUni, artists); + results.Text = ChunithmMatching(titles, null, artists, true); } else if (search.SelectedIndex == 11) { DisableButtons(); - results.Text = ArcaeaMatching(titles, titlesUni, artists); + results.Text = OngekiMatching(titles, null, artists); } else if (search.SelectedIndex == 12) { DisableButtons(); - results.Text = WaccaMatching(titles, titlesUni, artists); + results.Text = DivaMatching(titles, null, artists); } else if (search.SelectedIndex == 13) + { + DisableButtons(); + results.Text = ArcaeaMatching(titles, null, artists); + } + else if (search.SelectedIndex == 14) + { + DisableButtons(); + results.Text = WaccaMatching(titles, null, artists); + } + else if (search.SelectedIndex == 15) { DisableButtons(); Globals.Links = QuaverMatching(titles, artists); @@ -996,10 +1059,10 @@ private void SourceOsu() download.IsEnabled = true; } } - else if (search.SelectedIndex == 14) + else if (search.SelectedIndex == 16) { DisableButtons(); - results.Text = MuseMatching(titles, titlesUni, artists); + results.Text = MuseMatching(titles, null, artists); } } @@ -1044,19 +1107,24 @@ private void SourceStep() else if (search.SelectedIndex == 2) { DisableButtons(); - results.Text = MaiMaiMatching(titles, null); + results.Text = MaiMaiMatching(titles, null, false); } else if (search.SelectedIndex == 3) { DisableButtons(); - results.Text = DJMAXMatching(titles, null, artists); + results.Text = MaiMaiMatching(titles, null, true); } else if (search.SelectedIndex == 4) { DisableButtons(); - results.Text = GrooveCoasterMatching(titles, null); + results.Text = DJMAXMatching(titles, null, artists); } else if (search.SelectedIndex == 5) + { + DisableButtons(); + results.Text = GrooveCoasterMatching(titles, null); + } + else if (search.SelectedIndex == 6) { DisableButtons(); Globals.Links = OsuMatching(titles, artists); @@ -1077,7 +1145,7 @@ private void SourceStep() download.IsEnabled = true; } } - else if (search.SelectedIndex == 6) + else if (search.SelectedIndex == 7) { DisableButtons(); Globals.Links = BeatSaberMatching(titles, artists); @@ -1098,37 +1166,42 @@ private void SourceStep() download.IsEnabled = true; } } - else if (search.SelectedIndex == 7) + else if (search.SelectedIndex == 8) { DisableButtons(); SpotifyMatching(titles, artists); } - else if (search.SelectedIndex == 8) + else if (search.SelectedIndex == 9) { DisableButtons(); - results.Text = ChunithmMatching(titles, null, artists); + results.Text = ChunithmMatching(titles, null, artists, false); } - else if (search.SelectedIndex == 9) + else if (search.SelectedIndex == 10) + { + DisableButtons(); + results.Text = ChunithmMatching(titles, null, artists, true); + } + else if (search.SelectedIndex == 11) { DisableButtons(); results.Text = OngekiMatching(titles, null, artists); } - else if (search.SelectedIndex == 10) + else if (search.SelectedIndex == 12) { DisableButtons(); results.Text = DivaMatching(titles, null, artists); } - else if (search.SelectedIndex == 11) + else if (search.SelectedIndex == 13) { DisableButtons(); results.Text = ArcaeaMatching(titles, null, artists); } - else if (search.SelectedIndex == 12) + else if (search.SelectedIndex == 14) { DisableButtons(); results.Text = WaccaMatching(titles, null, artists); } - else if (search.SelectedIndex == 13) + else if (search.SelectedIndex == 15) { DisableButtons(); Globals.Links = QuaverMatching(titles, artists); @@ -1149,7 +1222,7 @@ private void SourceStep() download.IsEnabled = true; } } - else if (search.SelectedIndex == 14) + else if (search.SelectedIndex == 16) { DisableButtons(); results.Text = MuseMatching(titles, null, artists); @@ -1197,19 +1270,24 @@ private void SourceBeatSaber() else if (search.SelectedIndex == 2) { DisableButtons(); - results.Text = MaiMaiMatching(titles, null); + results.Text = MaiMaiMatching(titles, null, false); } else if (search.SelectedIndex == 3) { DisableButtons(); - results.Text = DJMAXMatching(titles, null, artists); + results.Text = MaiMaiMatching(titles, null, true); } else if (search.SelectedIndex == 4) { DisableButtons(); - results.Text = GrooveCoasterMatching(titles, null); + results.Text = DJMAXMatching(titles, null, artists); } else if (search.SelectedIndex == 5) + { + DisableButtons(); + results.Text = GrooveCoasterMatching(titles, null); + } + else if (search.SelectedIndex == 6) { DisableButtons(); Globals.Links = OsuMatching(titles, artists); @@ -1230,37 +1308,42 @@ private void SourceBeatSaber() download.IsEnabled = true; } } - else if (search.SelectedIndex == 7) + else if (search.SelectedIndex == 8) { DisableButtons(); SpotifyMatching(titles, artists); } - else if (search.SelectedIndex == 8) + else if (search.SelectedIndex == 9) { DisableButtons(); - results.Text = ChunithmMatching(titles, null, artists); + results.Text = ChunithmMatching(titles, null, artists, false); } - else if (search.SelectedIndex == 9) + else if (search.SelectedIndex == 10) + { + DisableButtons(); + results.Text = ChunithmMatching(titles, null, artists, true); + } + else if (search.SelectedIndex == 11) { DisableButtons(); results.Text = OngekiMatching(titles, null, artists); } - else if (search.SelectedIndex == 10) + else if (search.SelectedIndex == 12) { DisableButtons(); results.Text = DivaMatching(titles, null, artists); } - else if (search.SelectedIndex == 11) + else if (search.SelectedIndex == 13) { DisableButtons(); results.Text = ArcaeaMatching(titles, null, artists); } - else if (search.SelectedIndex == 12) + else if (search.SelectedIndex == 14) { DisableButtons(); results.Text = WaccaMatching(titles, null, artists); } - else if (search.SelectedIndex == 13) + else if (search.SelectedIndex == 15) { DisableButtons(); Globals.Links = QuaverMatching(titles, artists); @@ -1281,7 +1364,7 @@ private void SourceBeatSaber() download.IsEnabled = true; } } - else if (search.SelectedIndex == 14) + else if (search.SelectedIndex == 16) { DisableButtons(); results.Text = MuseMatching(titles, null, artists); @@ -2200,7 +2283,7 @@ public string CloneMatching(List titles, List artists) return sb.ToString(); } - public string MaiMaiMatching(List titles, List titlesUni) + public string MaiMaiMatching(List titles, List titlesUni, bool international) { var json = string.Empty; var maimaiMatches = new List(); @@ -2212,7 +2295,14 @@ public string MaiMaiMatching(List titles, List titlesUni) Console.WriteLine("Matching maimai songs..."); using (WebClient wc = new WebClient()) { - json = wc.DownloadString("https://maimai.sega.com/data/DXsongs.json"); + if (international) + { + json = wc.DownloadString("https://maimai.sega.com/data/DXsongs.json"); + } + else + { + json = wc.DownloadString("https://maimai.sega.jp/data/DXsongs.json"); + } } JArray maimaiSongs = JArray.Parse(json); IList maimaiSongsList = maimaiSongs.Children().ToList(); @@ -2426,6 +2516,7 @@ public string OsuMatching(List titles, List artists) osuLinks.ForEach(s => sb.AppendLine(s)); return sb.ToString(); } + private async Task SpotifyMatching(List titles, List artists) { Console.Clear(); @@ -2497,6 +2588,7 @@ private async Task SpotifyMatching(List titles, List artists) App.Current.MainWindow.Show(); FreeConsole(); } + public string BeatSaberMatching(List titles, List artists) { var json = string.Empty; @@ -2575,7 +2667,8 @@ public string BeatSaberMatching(List titles, List artists) beatLinks.ForEach(s => sb.AppendLine(s)); return sb.ToString(); } - public string ChunithmMatching(List titles, List titlesUni, List artists) + + public string ChunithmMatching(List titles, List titlesUni, List artists, bool international) { var json = string.Empty; var json2 = string.Empty; @@ -2588,9 +2681,16 @@ public string ChunithmMatching(List titles, List titlesUni, List Console.WriteLine("Searching Chunithm songs... "); using (WebClient wc = new WebClient()) { - json = wc.DownloadString("https://chunithm.sega.jp/data/common.json"); - // only has 36 songs cant be bothered to write code for it /shrug - // json2 = wc.DownloadString("https://chunithm.sega.jp/data/course.json"); + if (international) + { + json = wc.DownloadString("https://chunithm.sega.com/js/music/json/common.json"); + } + else + { + json = wc.DownloadString("https://chunithm.sega.jp/data/common.json"); + // only has 36 songs cant be bothered to write code for it /shrug + // json2 = wc.DownloadString("https://chunithm.sega.jp/data/course.json"); + } } JArray chunithmSongs = JArray.Parse(json); IList chunithmSongsList = chunithmSongs.Children().ToList(); @@ -2654,6 +2754,7 @@ public string ChunithmMatching(List titles, List titlesUni, List } return sb.ToString(); } + public string OngekiMatching(List titles, List titlesUni, List artists) { var json = string.Empty; @@ -2730,6 +2831,7 @@ public string OngekiMatching(List titles, List titlesUni, List titles, List titlesUni, List artists) { var matches = new List(); @@ -2782,6 +2884,7 @@ public string DivaMatching(List titles, List titlesUni, List titles, List titlesUni, List artists) { var matches = new List(); @@ -2834,6 +2937,7 @@ public string ArcaeaMatching(List titles, List titlesUni, List titles, List titlesUni, List artists) { var matches = new List(); @@ -2897,6 +3001,7 @@ public string WaccaMatching(List titles, List titlesUni, List titles, List artists) { var json = string.Empty; diff --git a/README.md b/README.md index 4510f22..1f34663 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ For example, you can search for BEMANI songs that are also in your osu! songs fo # Supported Searches: * BEMANI (via [BEMANIWiki](https://bemaniwiki.com/)) * Clone Hero (via [Chorus](https://chorus.fightthe.pw/)) +* maimai (via [SEGA](https://maimai.sega.jp/) * maimai International Version (via [SEGA](https://maimai.sega.com/)) * DJMAX RESPECT (via [Cypher Gate](https://cyphergate.net/)) * GROOVE COASTER (via [groovecoaster.jp](https://groovecoaster.jp/)) @@ -24,6 +25,7 @@ For example, you can search for BEMANI songs that are also in your osu! songs fo * Beat Saber (via [Beat Saver](https://beatsaver.com/)) * Spotify (via [SpotifyAPI-NET](https://github.com/JohnnyCrazy/SpotifyAPI-NET)) * Chunithm (via [SEGA](https://chunithm.sega.jp/)) +* Chunithm International (via [SEGA](https://chunithm.sega.com) * Ongeki (via [SEGA](https://ongeki.sega.jp/)) * Project DIVA Future Tone (via [SEGA](https://miku.sega.com)) * WACCA (via [marv.jp](https://wacca.marv.jp))