Example #1
0
        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();
        }
Example #3
0
        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);
        }
Example #5
0
        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;
            }
        }
Example #6
0
        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;
 }
Example #8
0
        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);
                        }
Example #9
0
        private void Map_Details(object sender, RoutedEventArgs e)
        {
            LocalBeatmap beatmap = ((Button)sender).Tag as LocalBeatmap;

            ViewModel.BeatmapDetails(beatmap);
        }
Example #10
0
        private void Map_Delete(object sender, RoutedEventArgs e)
        {
            LocalBeatmap beatmap = ((Button)sender).Tag as LocalBeatmap;

            ViewModel.DeleteSong(beatmap);
        }