private void DataGridMaps_LoadingRow(object sender, DataGridRowEventArgs e) { LocalBeatmap localBeatmap = (LocalBeatmap)e.Row.Item; if (localBeatmap.Page != ViewModel.LocalBeatmaps.CurrentPage) { e.Row.Visibility = Visibility.Collapsed; } }
public void BeatmapDetails(LocalBeatmap beatmap, bool changePage = true) { MainWindow.ViewModel.BeatmapLocalDetailsUserControl.ViewModel.Beatmap = beatmap; if (changePage) { MainWindow.userControlMain.Content = MainWindow.ViewModel.BeatmapLocalDetailsUserControl; } MainWindow.ViewModel.BeatmapLocalUserControl.dataGridMaps.UnselectAll(); }
public void DeleteSong(OnlineBeatmap beatmap) { LocalBeatmap localBeatmap = MainWindow.ViewModel.BeatmapLocalUserControl.ViewModel.LocalBeatmaps?.Maps.FirstOrDefault(x => x.Identifier.Value == beatmap.Key || x.Identifier.Value == beatmap.Hash); if (localBeatmap != null) { MainWindow.ViewModel.BeatmapLocalUserControl.ViewModel.LocalBeatmaps.Maps.Remove(localBeatmap); } App.BeatSaverApi.DeleteSong(beatmap); BeatmapChanged = true; }
public void DeleteSong(LocalBeatmap beatmap) { OnlineBeatmap onlineBeatmap = MainWindow.ViewModel.BeatmapOnlineUserControl.ViewModel.OnlineBeatmaps?.Maps.FirstOrDefault(x => x.Key == beatmap.Identifier.Value || x.Hash == beatmap.Identifier.Value); App.BeatSaverApi.DeleteSong(beatmap); LocalBeatmaps.Maps.Remove(beatmap); if (onlineBeatmap is null) { BeatmapChanged = true; } else { onlineBeatmap.IsDownloaded = false; } LocalBeatmaps = App.BeatSaverApi.RefreshLocalPages(LocalBeatmaps); }
public void DeleteSongs(ICollection <OnlineBeatmap> songs) { foreach (OnlineBeatmap onlineBeatmap in songs) { LocalBeatmap localBeatmap = MainWindow.ViewModel.BeatmapLocalUserControl.ViewModel.LocalBeatmaps?.Maps.FirstOrDefault(x => x.Identifier.Value == onlineBeatmap.Key || x.Identifier.Value == onlineBeatmap.Hash); if (localBeatmap != null) { MainWindow.ViewModel.BeatmapLocalUserControl.ViewModel.LocalBeatmaps.Maps.Remove(localBeatmap); } App.BeatSaverApi.DeleteSong(onlineBeatmap); } if (songs.Count > 0) { BeatmapChanged = true; } }
internal string HashBeatmap(string path, LocalBeatmap beatmap) { try { var infoDatStr = new List <byte>(File.ReadAllBytes($"{path}\\info.dat")); var binary = infoDatStr; foreach (var diffSet in beatmap.DifficultyBeatmapSets) { foreach (var d in diffSet.DifficultyBeatmaps) { binary.AddRange(File.ReadAllBytes(($"{path}\\{d.Filename}"))); } } var hash = new SHA1Managed().ComputeHash(binary.ToArray()); return(string.Concat(hash.Select(b => b.ToString("X2")))); } catch (Exception e) { return(null); } }
public LocalBeatmapDeletedEventArgs(LocalBeatmap beatmap) { Beatmap = beatmap; }
public async Task <LocalBeatmaps> GetLocalBeatmaps(LocalBeatmaps cachedLocalBeatmaps = null) { LocalBeatmaps localBeatmaps = cachedLocalBeatmaps is null ? new LocalBeatmaps() : new LocalBeatmaps(cachedLocalBeatmaps); List <string> songs = Directory.GetDirectories(SongsPath).ToList(); foreach (LocalBeatmap beatmap in localBeatmaps.Maps.ToList()) { string song = songs.FirstOrDefault(x => new DirectoryInfo(x).Name.Split(" ")[0] == beatmap.Identifier.Value); if (song != null) { songs.Remove(song); } } for (int i = 0; i < songs.Count; i++) { if (i > 0 && i % 10 == 0) { localBeatmaps.LastPage++; } } foreach (string songFolder in songs) { string infoFile = Path.Combine(songFolder, "info.dat"); if (!File.Exists(infoFile)) { continue; } string[] folderName = new DirectoryInfo(songFolder).Name.Split(" "); LocalIdentifier identifier = folderName.Length == 1 ? new LocalIdentifier(false, folderName[0]) : new LocalIdentifier(true, folderName[0]); string json = await File.ReadAllTextAsync(infoFile); LocalBeatmap beatmap = JsonConvert.DeserializeObject <LocalBeatmap>(json); beatmap.Identifier = identifier; beatmap.FolderPath = songFolder; string coverImagePath = Path.Combine(songFolder, beatmap.CoverImageFilename); if (File.Exists(coverImagePath)) { beatmap.CoverImagePath = coverImagePath; } else { if (beatmap.Errors is null) { beatmap.Errors = new List <string>(); } beatmap.Errors.Add($"The cover image file '{beatmap.CoverImageFilename}' couldn't be found"); } string songFilePath = Path.Combine(songFolder, beatmap.SongFilename); if (File.Exists(songFilePath)) { MediaInfo mediaInfo = ffProbe.GetMediaInfo(songFilePath); beatmap.Duration = mediaInfo.Duration; } else { if (beatmap.Errors is null) { beatmap.Errors = new List <string>(); } beatmap.Errors.Add($"The song file '{beatmap.SongFilename}' couldn't be found"); } foreach (DifficultyBeatmapSet difficultyBeatmapSet in beatmap.DifficultyBeatmapSets) { if (!beatmap.Easy && difficultyBeatmapSet.DifficultyBeatmaps.Any(x => x.Difficulty == "Easy")) { beatmap.Easy = true; } if (!beatmap.Normal && difficultyBeatmapSet.DifficultyBeatmaps.Any(x => x.Difficulty == "Normal")) { beatmap.Normal = true; } if (!beatmap.Hard && difficultyBeatmapSet.DifficultyBeatmaps.Any(x => x.Difficulty == "Hard")) { beatmap.Hard = true; } if (!beatmap.Expert && difficultyBeatmapSet.DifficultyBeatmaps.Any(x => x.Difficulty == "Expert")) { beatmap.Expert = true; } if (!beatmap.ExpertPlus && difficultyBeatmapSet.DifficultyBeatmaps.Any(x => x.Difficulty == "ExpertPlus")) { beatmap.ExpertPlus = true; } } _ = Task.Run(async() => { try { beatmap.OnlineBeatmap = await GetBeatmap(identifier); } catch (Exception e) { if (beatmap.Errors is null) { beatmap.Errors = new List <string>(); } if (e.InnerException is null || string.Equals(e.Message, e.InnerException.Message)) { beatmap.Errors.Add(e.Message); }
private void Map_Details(object sender, RoutedEventArgs e) { LocalBeatmap beatmap = ((Button)sender).Tag as LocalBeatmap; ViewModel.BeatmapDetails(beatmap); }
private void Map_Delete(object sender, RoutedEventArgs e) { LocalBeatmap beatmap = ((Button)sender).Tag as LocalBeatmap; ViewModel.DeleteSong(beatmap); }