├── MapMaven ├── MapMaven.exe.squirrel ├── Components │ ├── Maps │ │ ├── MapCover.razor.css │ │ ├── MapBrowserRow.razor.css │ │ ├── MapBrowser.razor.css │ │ ├── ImprovementTweaker.razor.css │ │ ├── RankedMapBrowserRow.razor.css │ │ ├── MapDetail.razor.css │ │ ├── SongPlaybackButton.razor.css │ │ └── MapListColumn.cs │ ├── Updates │ │ └── ReleaseNotes.razor.css │ ├── Playlists │ │ ├── EditLivePlaylistDialog.razor.css │ │ ├── PlaylistTreeViewFolder.razor.css │ │ └── EditPlaylistDialog.razor │ ├── PlayerProfileInfo.razor.css │ ├── Replay.razor │ └── Shared │ │ └── ValueChange.razor ├── Assets │ ├── appicon.ico │ ├── logo.scale-100.png │ ├── logo.scale-125.png │ ├── logo.scale-150.png │ ├── logo.scale-200.png │ ├── logo.scale-400.png │ ├── $placeholder$.scale-100.png │ ├── $placeholder$.scale-125.png │ ├── $placeholder$.scale-150.png │ ├── $placeholder$.scale-200.png │ ├── $placeholder$.scale-400.png │ ├── $placeholder$.targetsize-16.png │ ├── $placeholder$.targetsize-24.png │ ├── $placeholder$.targetsize-256.png │ ├── $placeholder$.targetsize-32.png │ ├── $placeholder$.targetsize-48.png │ ├── $placeholder$.altform-unplated_targetsize-16.png │ ├── $placeholder$.altform-unplated_targetsize-24.png │ ├── $placeholder$.altform-unplated_targetsize-256.png │ ├── $placeholder$.altform-unplated_targetsize-32.png │ ├── $placeholder$.altform-unplated_targetsize-48.png │ ├── $placeholder$.altform-lightunplated_targetsize-16.png │ ├── $placeholder$.altform-lightunplated_targetsize-24.png │ ├── $placeholder$.altform-lightunplated_targetsize-256.png │ ├── $placeholder$.altform-lightunplated_targetsize-32.png │ └── $placeholder$.altform-lightunplated_targetsize-48.png ├── wwwroot │ ├── favicon.ico │ ├── images │ │ ├── logo.png │ │ ├── replay-icon.png │ │ └── score-saber-logo-small.png │ └── flags │ │ ├── 1x1 │ │ ├── id.svg │ │ ├── bd.svg │ │ ├── de.svg │ │ ├── bq.svg │ │ ├── nl.svg │ │ ├── pl.svg │ │ ├── se.svg │ │ ├── cz.svg │ │ ├── lu.svg │ │ ├── dk.svg │ │ ├── gb-eng.svg │ │ ├── gl.svg │ │ ├── am.svg │ │ ├── fi.svg │ │ ├── gb-sct.svg │ │ ├── lv.svg │ │ ├── mc.svg │ │ ├── ua.svg │ │ ├── xx.svg │ │ ├── at.svg │ │ ├── ma.svg │ │ ├── es-ct.svg │ │ ├── bw.svg │ │ ├── ae.svg │ │ ├── ng.svg │ │ ├── bh.svg │ │ ├── ye.svg │ │ ├── ga.svg │ │ ├── hu.svg │ │ ├── ml.svg │ │ ├── ne.svg │ │ ├── td.svg │ │ ├── ci.svg │ │ ├── be.svg │ │ ├── co.svg │ │ ├── ic.svg │ │ ├── ru.svg │ │ ├── th.svg │ │ ├── bg.svg │ │ ├── bl.svg │ │ ├── cp.svg │ │ ├── cr.svg │ │ ├── fr.svg │ │ ├── gf.svg │ │ ├── gh.svg │ │ ├── gn.svg │ │ ├── gp.svg │ │ ├── ie.svg │ │ ├── it.svg │ │ ├── mf.svg │ │ ├── mq.svg │ │ ├── pm.svg │ │ ├── re.svg │ │ ├── wf.svg │ │ ├── yt.svg │ │ ├── dz.svg │ │ ├── mg.svg │ │ ├── mv.svg │ │ ├── ro.svg │ │ ├── ch.svg │ │ ├── sr.svg │ │ ├── tt.svg │ │ ├── mu.svg │ │ ├── no.svg │ │ ├── sc.svg │ │ ├── sj.svg │ │ ├── sy.svg │ │ ├── qa.svg │ │ ├── ee.svg │ │ ├── lc.svg │ │ ├── bf.svg │ │ ├── to.svg │ │ ├── jm.svg │ │ ├── gm.svg │ │ ├── mk.svg │ │ ├── ss.svg │ │ ├── sn.svg │ │ ├── mr.svg │ │ ├── lt.svg │ │ ├── sl.svg │ │ ├── gy.svg │ │ ├── vc.svg │ │ ├── az.svg │ │ ├── cg.svg │ │ ├── jp.svg │ │ ├── so.svg │ │ ├── vn.svg │ │ ├── sd.svg │ │ ├── cd.svg │ │ ├── la.svg │ │ ├── pw.svg │ │ ├── bj.svg │ │ ├── gb.svg │ │ ├── kw.svg │ │ ├── is.svg │ │ ├── fo.svg │ │ ├── ly.svg │ │ ├── tr.svg │ │ ├── ps.svg │ │ ├── ax.svg │ │ ├── bb.svg │ │ ├── bs.svg │ │ ├── es-pv.svg │ │ ├── cl.svg │ │ ├── cu.svg │ │ ├── eh.svg │ │ ├── tl.svg │ │ ├── bv.svg │ │ ├── dj.svg │ │ ├── ca.svg │ │ ├── gg.svg │ │ ├── tz.svg │ │ ├── pr.svg │ │ ├── cf.svg │ │ ├── my.svg │ │ ├── nr.svg │ │ ├── pa.svg │ │ ├── ws.svg │ │ ├── mm.svg │ │ ├── cw.svg │ │ ├── lr.svg │ │ ├── pk.svg │ │ ├── jo.svg │ │ ├── cn.svg │ │ ├── mh.svg │ │ ├── tk.svg │ │ ├── tg.svg │ │ ├── tn.svg │ │ ├── fm.svg │ │ └── rw.svg │ │ └── 4x3 │ │ ├── id.svg │ │ ├── bd.svg │ │ ├── de.svg │ │ ├── se.svg │ │ ├── gl.svg │ │ ├── bq.svg │ │ ├── cz.svg │ │ ├── lu.svg │ │ ├── nl.svg │ │ ├── pl.svg │ │ ├── am.svg │ │ ├── gb-sct.svg │ │ ├── fi.svg │ │ ├── lv.svg │ │ ├── dk.svg │ │ ├── mc.svg │ │ ├── ua.svg │ │ ├── at.svg │ │ ├── gb-eng.svg │ │ ├── ma.svg │ │ ├── bh.svg │ │ ├── ae.svg │ │ ├── es-ct.svg │ │ ├── bw.svg │ │ ├── ng.svg │ │ ├── td.svg │ │ ├── ga.svg │ │ ├── hu.svg │ │ ├── ne.svg │ │ ├── sl.svg │ │ ├── ye.svg │ │ ├── ci.svg │ │ ├── gh.svg │ │ ├── ml.svg │ │ ├── xx.svg │ │ ├── mv.svg │ │ ├── be.svg │ │ ├── bg.svg │ │ ├── co.svg │ │ ├── dz.svg │ │ ├── ic.svg │ │ ├── ru.svg │ │ ├── th.svg │ │ ├── bl.svg │ │ ├── cp.svg │ │ ├── cr.svg │ │ ├── fr.svg │ │ ├── gf.svg │ │ ├── gn.svg │ │ ├── gp.svg │ │ ├── ie.svg │ │ ├── it.svg │ │ ├── mf.svg │ │ ├── mq.svg │ │ ├── pm.svg │ │ ├── re.svg │ │ ├── wf.svg │ │ ├── yt.svg │ │ ├── mg.svg │ │ ├── ro.svg │ │ ├── sy.svg │ │ ├── tt.svg │ │ ├── ch.svg │ │ ├── sr.svg │ │ ├── sc.svg │ │ ├── ee.svg │ │ ├── mu.svg │ │ ├── no.svg │ │ ├── sj.svg │ │ ├── cd.svg │ │ ├── qa.svg │ │ ├── bf.svg │ │ ├── lc.svg │ │ ├── mk.svg │ │ ├── to.svg │ │ ├── ss.svg │ │ ├── jm.svg │ │ ├── sn.svg │ │ ├── lt.svg │ │ ├── mr.svg │ │ ├── vc.svg │ │ ├── la.svg │ │ ├── pw.svg │ │ ├── jp.svg │ │ ├── gy.svg │ │ ├── cg.svg │ │ ├── az.svg │ │ ├── so.svg │ │ ├── vn.svg │ │ ├── sd.svg │ │ ├── bj.svg │ │ ├── gb.svg │ │ ├── kw.svg │ │ ├── is.svg │ │ ├── tr.svg │ │ ├── ly.svg │ │ ├── bs.svg │ │ ├── gm.svg │ │ ├── tz.svg │ │ ├── cl.svg │ │ ├── es-pv.svg │ │ ├── fo.svg │ │ ├── ps.svg │ │ ├── bb.svg │ │ ├── gg.svg │ │ ├── ax.svg │ │ ├── bv.svg │ │ ├── dj.svg │ │ ├── ca.svg │ │ ├── tl.svg │ │ ├── cu.svg │ │ ├── pr.svg │ │ ├── my.svg │ │ ├── nr.svg │ │ ├── ws.svg │ │ ├── cw.svg │ │ ├── cf.svg │ │ ├── mm.svg │ │ ├── mh.svg │ │ ├── lr.svg │ │ ├── tg.svg │ │ ├── jo.svg │ │ ├── tk.svg │ │ ├── pa.svg │ │ ├── rw.svg │ │ ├── pk.svg │ │ ├── tn.svg │ │ └── fm.svg ├── Resources │ ├── AppIcon │ │ └── appicon.png │ ├── Fonts │ │ └── OpenSans-Regular.ttf │ ├── appicon.svg │ └── Raw │ │ └── AboutAssets.txt ├── Platforms │ └── Windows │ │ ├── trayicon.ico │ │ ├── installation.gif │ │ └── app.manifest ├── Pages │ ├── Dashboard.razor.css │ └── Maps.razor ├── Services │ ├── ITrayService.cs │ └── IFolderPicker.cs ├── Properties │ └── launchSettings.json ├── MainPage.xaml.cs ├── GlobalSuppressions.cs ├── Main.razor ├── Utility │ └── LeaderboardUtility.cs └── _Imports.razor ├── .github └── FUNDING.yml ├── MapMaven.Core.Tests ├── Usings.cs └── TestData │ ├── TestData.db │ └── TimeSpanSqlMapper.cs ├── media └── logo.png ├── MapMaven.Core ├── Models │ ├── PlaylistType.cs │ ├── LivePlaylists │ │ ├── MapPool.cs │ │ ├── SortOperator.cs │ │ ├── FilterOperator.cs │ │ ├── LivePlaylistFieldOption.cs │ │ └── EditLivePlaylistModel.cs │ ├── ErrorEvent.cs │ ├── Data │ │ ├── Leaderboards │ │ │ ├── ScoreSaber │ │ │ │ ├── Difficulty.cs │ │ │ │ ├── RankedMapResponse.cs │ │ │ │ ├── RankedMapScorePair.cs │ │ │ │ └── ScoreSaberLeaderboardData.cs │ │ │ ├── PPCurveItem.cs │ │ │ ├── BeatLeader │ │ │ │ ├── BeatLeaderRating.cs │ │ │ │ └── BeatLeaderLeaderboardData.cs │ │ │ ├── LeaderboardData.cs │ │ │ └── ScoreEstimate.cs │ │ ├── RankedMaps │ │ │ ├── RankedMapInfo.cs │ │ │ ├── FullRankedMapInfoItem.cs │ │ │ ├── FullRankedMapInfo.cs │ │ │ ├── ScoreSaberFullRankedMapInfoItem.cs │ │ │ └── BeatLeaderFullRankedMapInfoItem.cs │ │ ├── Player.cs │ │ ├── Playlists │ │ │ ├── PlaylistSongDifficultyInfo.cs │ │ │ ├── PlaylistInfo.cs │ │ │ ├── PlaylistSongInfo.cs │ │ │ ├── PlaylistTreeItem.cs │ │ │ ├── PlaylistTree.cs │ │ │ └── PlaylistTreeNode.cs │ │ ├── SongHash.cs │ │ ├── SongDuration.cs │ │ ├── HiddenMap.cs │ │ ├── ApplicationSetting.cs │ │ └── ItemProgress.cs │ ├── MapSelectionConfig.cs │ ├── MapSort.cs │ ├── EditPlaylistFolderModel.cs │ ├── MapFilter.cs │ ├── MapRowContext.cs │ ├── PlaylistMap.cs │ ├── LeaderboardProviders.cs │ ├── AdvancedSearch │ │ ├── MapFilterOperationPair.cs │ │ ├── AdvancedSearchConfiguration.cs │ │ ├── SortOperation.cs │ │ └── FilterOperation.cs │ ├── PlayerScore.cs │ └── RankHistoryRecord.cs ├── ScoreEstimation │ ├── BeatLeaderScoreEstimateMLModel.mlnet │ └── ScoreSaberScoreEstimateMLModel.mlnet ├── Utilities │ ├── LivePlaylists │ │ ├── HasPredefinedOptions.cs │ │ └── ApplicableForMapPoolAttribute.cs │ ├── BeatSaver │ │ └── MapTag.cs │ ├── DifficultyUtils.cs │ └── NAudio │ │ └── StartEndReader.cs ├── Services │ ├── Interfaces │ │ ├── IApplicationEventService.cs │ │ └── IApplicationSettingService.cs │ ├── IDataStore.cs │ └── Leaderboards │ │ ├── ILeaderboardDataService.cs │ │ └── ScoreEstimation │ │ └── IScoreEstimationService.cs ├── OpenAPI │ ├── BeatSaver │ │ └── BeatSaverApiClient.cs │ ├── BeatLeader │ │ └── BeatLeaderApiClient.cs │ ├── ScoreSaber │ │ └── ScoreSaberApiClient.cs │ └── SafeContractResolver.cs ├── Extensions │ └── ObservableExtensions.cs └── GlobalSuppressions.cs ├── MapMaven.DataGatherers.BeatLeader ├── appsettings.Development.json ├── Properties │ └── launchSettings.json ├── appsettings.json └── Program.cs ├── MapMaven.DataGatherers.ScoreSaber ├── appsettings.Development.json ├── Properties │ └── launchSettings.json ├── appsettings.json └── Program.cs ├── MapMaven.Functions ├── Properties │ ├── launchSettings.json │ ├── serviceDependencies.local.json │ ├── serviceDependencies.json │ ├── serviceDependencies.Map Maven Functions Deploy TEST.json │ ├── serviceDependencies.map-maven-functions - Zip Deploy.json │ └── serviceDependencies.map-maven-functions-deploy-test.json ├── Models │ └── ScoreSaber │ │ └── LeaderboardSort.cs ├── Services │ └── IRankedMapService.cs ├── local.settings.json └── host.json ├── .dockerignore ├── MapMaven.DataGatherers.Shared └── MapMaven.DataGatherers.Shared.csproj └── MapMaven.Infrastructure └── GlobalSuppressions.cs /MapMaven/MapMaven.exe.squirrel: -------------------------------------------------------------------------------- 1 | 1 -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: DennisvHest 2 | -------------------------------------------------------------------------------- /MapMaven/Components/Maps/MapCover.razor.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /MapMaven.Core.Tests/Usings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; -------------------------------------------------------------------------------- /MapMaven/Components/Maps/MapBrowserRow.razor.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /media/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/media/logo.png -------------------------------------------------------------------------------- /MapMaven/Components/Maps/MapBrowser.razor.css: -------------------------------------------------------------------------------- 1 | .mud-table { 2 | height: 100%; 3 | } 4 | -------------------------------------------------------------------------------- /MapMaven/Assets/appicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/appicon.ico -------------------------------------------------------------------------------- /MapMaven/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/wwwroot/favicon.ico -------------------------------------------------------------------------------- /MapMaven/Components/Maps/ImprovementTweaker.razor.css: -------------------------------------------------------------------------------- 1 | .mud-drawer { 2 | background-color: black !important; 3 | } 4 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/wwwroot/images/logo.png -------------------------------------------------------------------------------- /MapMaven/Assets/logo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/logo.scale-100.png -------------------------------------------------------------------------------- /MapMaven/Assets/logo.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/logo.scale-125.png -------------------------------------------------------------------------------- /MapMaven/Assets/logo.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/logo.scale-150.png -------------------------------------------------------------------------------- /MapMaven/Assets/logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/logo.scale-200.png -------------------------------------------------------------------------------- /MapMaven/Assets/logo.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/logo.scale-400.png -------------------------------------------------------------------------------- /MapMaven/Components/Maps/RankedMapBrowserRow.razor.css: -------------------------------------------------------------------------------- 1 | .cover-image { 2 | height: 50px; 3 | margin-left: 16px; 4 | } 5 | -------------------------------------------------------------------------------- /MapMaven/Resources/AppIcon/appicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Resources/AppIcon/appicon.png -------------------------------------------------------------------------------- /MapMaven.Core.Tests/TestData/TestData.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven.Core.Tests/TestData/TestData.db -------------------------------------------------------------------------------- /MapMaven/Components/Maps/MapDetail.razor.css: -------------------------------------------------------------------------------- 1 | .score tr:not(:first-child) { 2 | background-color: var(--mud-palette-surface); 3 | } 4 | -------------------------------------------------------------------------------- /MapMaven/Platforms/Windows/trayicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Platforms/Windows/trayicon.ico -------------------------------------------------------------------------------- /MapMaven/wwwroot/images/replay-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/wwwroot/images/replay-icon.png -------------------------------------------------------------------------------- /MapMaven/Assets/$placeholder$.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/$placeholder$.scale-100.png -------------------------------------------------------------------------------- /MapMaven/Assets/$placeholder$.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/$placeholder$.scale-125.png -------------------------------------------------------------------------------- /MapMaven/Assets/$placeholder$.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/$placeholder$.scale-150.png -------------------------------------------------------------------------------- /MapMaven/Assets/$placeholder$.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/$placeholder$.scale-200.png -------------------------------------------------------------------------------- /MapMaven/Assets/$placeholder$.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/$placeholder$.scale-400.png -------------------------------------------------------------------------------- /MapMaven/Platforms/Windows/installation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Platforms/Windows/installation.gif -------------------------------------------------------------------------------- /MapMaven/Resources/Fonts/OpenSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Resources/Fonts/OpenSans-Regular.ttf -------------------------------------------------------------------------------- /MapMaven/Assets/$placeholder$.targetsize-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/$placeholder$.targetsize-16.png -------------------------------------------------------------------------------- /MapMaven/Assets/$placeholder$.targetsize-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/$placeholder$.targetsize-24.png -------------------------------------------------------------------------------- /MapMaven/Assets/$placeholder$.targetsize-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/$placeholder$.targetsize-256.png -------------------------------------------------------------------------------- /MapMaven/Assets/$placeholder$.targetsize-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/$placeholder$.targetsize-32.png -------------------------------------------------------------------------------- /MapMaven/Assets/$placeholder$.targetsize-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/$placeholder$.targetsize-48.png -------------------------------------------------------------------------------- /MapMaven/wwwroot/images/score-saber-logo-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/wwwroot/images/score-saber-logo-small.png -------------------------------------------------------------------------------- /MapMaven/Pages/Dashboard.razor.css: -------------------------------------------------------------------------------- 1 | @media screen and (max-width: 1440px) { 2 | #rank-history-chart-header { 3 | flex-direction: column; 4 | } 5 | } -------------------------------------------------------------------------------- /MapMaven/Services/ITrayService.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Services 2 | { 3 | public interface ITrayService 4 | { 5 | void Initialize(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /MapMaven/Components/Updates/ReleaseNotes.razor.css: -------------------------------------------------------------------------------- 1 | ul { 2 | list-style-type: initial; 3 | } 4 | 5 | ul, li { 6 | margin: initial; 7 | padding: initial; 8 | } -------------------------------------------------------------------------------- /MapMaven/Services/IFolderPicker.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Services 2 | { 3 | public interface IFolderPicker 4 | { 5 | Task PickFolder(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/PlaylistType.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Models 2 | { 3 | public enum PlaylistType 4 | { 5 | Playlist, 6 | LivePlaylist 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /MapMaven.Core/ScoreEstimation/BeatLeaderScoreEstimateMLModel.mlnet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven.Core/ScoreEstimation/BeatLeaderScoreEstimateMLModel.mlnet -------------------------------------------------------------------------------- /MapMaven.Core/ScoreEstimation/ScoreSaberScoreEstimateMLModel.mlnet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven.Core/ScoreEstimation/ScoreSaberScoreEstimateMLModel.mlnet -------------------------------------------------------------------------------- /MapMaven/Assets/$placeholder$.altform-unplated_targetsize-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/$placeholder$.altform-unplated_targetsize-16.png -------------------------------------------------------------------------------- /MapMaven/Assets/$placeholder$.altform-unplated_targetsize-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/$placeholder$.altform-unplated_targetsize-24.png -------------------------------------------------------------------------------- /MapMaven/Assets/$placeholder$.altform-unplated_targetsize-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/$placeholder$.altform-unplated_targetsize-256.png -------------------------------------------------------------------------------- /MapMaven/Assets/$placeholder$.altform-unplated_targetsize-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/$placeholder$.altform-unplated_targetsize-32.png -------------------------------------------------------------------------------- /MapMaven/Assets/$placeholder$.altform-unplated_targetsize-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/$placeholder$.altform-unplated_targetsize-48.png -------------------------------------------------------------------------------- /MapMaven/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "Windows Machine": { 4 | "commandName": "Project", 5 | "nativeDebugging": false 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /MapMaven/MainPage.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven; 2 | 3 | public partial class MainPage : ContentPage 4 | { 5 | public MainPage() 6 | { 7 | InitializeComponent(); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /MapMaven/Assets/$placeholder$.altform-lightunplated_targetsize-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/$placeholder$.altform-lightunplated_targetsize-16.png -------------------------------------------------------------------------------- /MapMaven/Assets/$placeholder$.altform-lightunplated_targetsize-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/$placeholder$.altform-lightunplated_targetsize-24.png -------------------------------------------------------------------------------- /MapMaven/Assets/$placeholder$.altform-lightunplated_targetsize-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/$placeholder$.altform-lightunplated_targetsize-256.png -------------------------------------------------------------------------------- /MapMaven/Assets/$placeholder$.altform-lightunplated_targetsize-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/$placeholder$.altform-lightunplated_targetsize-32.png -------------------------------------------------------------------------------- /MapMaven/Assets/$placeholder$.altform-lightunplated_targetsize-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DennisvHest/MapMaven/HEAD/MapMaven/Assets/$placeholder$.altform-lightunplated_targetsize-48.png -------------------------------------------------------------------------------- /MapMaven.Core/Models/LivePlaylists/MapPool.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Models.LivePlaylists 2 | { 3 | public enum MapPool 4 | { 5 | Standard, 6 | Improvement 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/LivePlaylists/SortOperator.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Models.LivePlaylists 2 | { 3 | public enum SortDirection 4 | { 5 | Ascending, 6 | Descending 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /MapMaven.DataGatherers.BeatLeader/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.Hosting.Lifetime": "Information" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /MapMaven.DataGatherers.ScoreSaber/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.Hosting.Lifetime": "Information" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /MapMaven/Components/Maps/SongPlaybackButton.razor.css: -------------------------------------------------------------------------------- 1 | .playback-progress { 2 | position: absolute; 3 | top: calc(50% - 2px); 4 | left: 50%; 5 | transform: translate(-50%, -50%); 6 | display: flex; 7 | } 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/id.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/id.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/ErrorEvent.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Models 2 | { 3 | public class ErrorEvent 4 | { 5 | public string Message { get; set; } 6 | public Exception? Exception { get; set; } 7 | } 8 | } -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/bd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/bd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven/Components/Maps/MapListColumn.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Components.Maps 2 | { 3 | public enum MapListColumn 4 | { 5 | Name, 6 | Difficulty, 7 | Pp, 8 | ScoreEstimates 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /MapMaven.Functions/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "MapMaven.RankedMapUpdater": { 4 | "commandName": "Project", 5 | "commandLineArgs": "--port 7088", 6 | "launchBrowser": false 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /MapMaven.Core/Utilities/LivePlaylists/HasPredefinedOptions.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Utilities.LivePlaylists 2 | { 3 | [AttributeUsage(AttributeTargets.Property)] 4 | public class HasPredefinedOptions : Attribute 5 | { 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/Leaderboards/ScoreSaber/Difficulty.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.ApiClients.ScoreSaber 2 | { 3 | public partial class Difficulty 4 | { 5 | public string DifficultyName => DifficultyRaw.Split('_')[1]; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/Leaderboards/PPCurveItem.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Models.Data.Leaderboards 2 | { 3 | public class PPCurveItem 4 | { 5 | public double At { get; set; } 6 | public double Value { get; set; } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/RankedMaps/RankedMapInfo.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Models.Data.RankedMaps 2 | { 3 | public class RankedMapInfo 4 | { 5 | public Dictionary RankedMaps { get; set; } = new(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/de.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/se.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/Leaderboards/ScoreSaber/RankedMapResponse.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Models.Data.Leaderboards.ScoreSaber 2 | { 3 | public class RankedMapResponse 4 | { 5 | public IEnumerable List { get; set; } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/MapSelectionConfig.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Models 2 | { 3 | public class MapSelectionConfig 4 | { 5 | public int MapSelectNumber { get; set; } 6 | public int MapSelectStartFromNumber { get; set; } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /MapMaven/Resources/appicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/de.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/gl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven.Functions/Models/ScoreSaber/LeaderboardSort.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Functions.Models.ScoreSaber 2 | { 3 | public class LeaderboardSort 4 | { 5 | public const double DateDescending = 0; 6 | public const double DateAscending = 1; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /MapMaven.Functions/Services/IRankedMapService.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Functions.Services 2 | { 3 | public interface IRankedMapService 4 | { 5 | Task UpdateRankedMapsAsync(DateTime lastRunDate, CancellationToken cancellationToken = default); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /MapMaven/Components/Playlists/EditLivePlaylistDialog.razor.css: -------------------------------------------------------------------------------- 1 | .dynamic-playlist-add { 2 | width: 90px; 3 | } 4 | 5 | .dynamic-playlist-add:hover { 6 | filter: brightness(1.2); 7 | } 8 | 9 | .dynamic-playlist-add img { 10 | width: 100%; 11 | } -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/bq.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/nl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/pl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/se.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/bq.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/cz.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/lu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/nl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/pl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/cz.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/lu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/am.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/gb-sct.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/dk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/gb-eng.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/gl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/fi.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/lv.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/Player.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Models.Data 2 | { 3 | public class Player 4 | { 5 | public string Id { get; set; } 6 | 7 | public virtual ICollection HiddenMaps { get; set; } = new List(); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/Playlists/PlaylistSongDifficultyInfo.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Models.Data.Playlists 2 | { 3 | public class PlaylistSongDifficultyInfo 4 | { 5 | public string Characteristic { get; set; } 6 | public string Name { get; set; } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/am.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/fi.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/gb-sct.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/lv.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/mc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/ua.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/xx.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/dk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/mc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/ua.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/MapSort.cs: -------------------------------------------------------------------------------- 1 | using MapMaven.Models; 2 | 3 | namespace MapMaven.Core.Models 4 | { 5 | public class MapSort 6 | { 7 | public string Name { get; set; } 8 | public Func, IEnumerable> Sort { get; set; } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/at.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/ma.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/at.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/gb-eng.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/ma.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven.Functions/Properties/serviceDependencies.local.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "appInsights1": { 4 | "type": "appInsights.sdk" 5 | }, 6 | "storage1": { 7 | "type": "storage.emulator", 8 | "connectionId": "AzureWebJobsStorage" 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/bh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/EditPlaylistFolderModel.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace MapMaven.Core.Models 4 | { 5 | public class EditPlaylistFolderModel 6 | { 7 | [Required] 8 | public string Name { get; set; } = string.Empty; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/es-ct.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/ae.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/es-ct.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/Leaderboards/ScoreSaber/RankedMapScorePair.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Models.Data.Leaderboards.ScoreSaber 2 | { 3 | public class RankedMapScorePair 4 | { 5 | public RankedMap Map { get; set; } 6 | public PlayerScore PlayerScore { get; set; } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/bw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/bw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/ae.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/ng.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/ng.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/bh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/td.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/SongHash.cs: -------------------------------------------------------------------------------- 1 | using System.Text.Json.Serialization; 2 | 3 | namespace MapMaven.Models.Data 4 | { 5 | public class SongHash 6 | { 7 | public long DirectoryHash { get; set; } 8 | [JsonPropertyName("songHash")] 9 | public string Hash { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/MapFilter.cs: -------------------------------------------------------------------------------- 1 | using MapMaven.Models; 2 | 3 | namespace MapMaven.Core.Models 4 | { 5 | public class MapFilter 6 | { 7 | public string Name { get; set; } 8 | public Func Filter { get; set; } 9 | public bool Visible { get; set; } = true; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /MapMaven.Functions/local.settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "IsEncrypted": false, 3 | "Values": { 4 | "MapMavenStorageConnection": "UseDevelopmentStorage=true", 5 | "AzureWebJobsStorage": "UseDevelopmentStorage=true", 6 | "MapMavenStorageContainerName": "mapmaven", 7 | "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated" 8 | } 9 | } -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/ye.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/ga.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/hu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/ne.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/sl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/ye.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/MapRowContext.cs: -------------------------------------------------------------------------------- 1 | using MapMaven.Models; 2 | 3 | namespace MapMaven.Core.Models 4 | { 5 | public class MapRowContext 6 | { 7 | public IEnumerable FilteredMaps { get; set; } 8 | public Map Map { get; set; } 9 | public bool Selectable { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/ga.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/hu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/ml.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/ne.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/td.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/ci.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/gh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/ml.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/xx.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven.Core/Services/Interfaces/IApplicationEventService.cs: -------------------------------------------------------------------------------- 1 | using MapMaven.Core.Models; 2 | 3 | namespace MapMaven.Core.Services.Interfaces 4 | { 5 | public interface IApplicationEventService 6 | { 7 | IObservable ErrorRaised { get; } 8 | 9 | void RaiseError(ErrorEvent error); 10 | } 11 | } -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/ci.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/mv.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/be.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/co.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/ic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/ru.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/th.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/be.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/bg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/co.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/dz.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/ic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/ru.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/th.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/SongDuration.cs: -------------------------------------------------------------------------------- 1 | using System.Text.Json.Serialization; 2 | 3 | namespace MapMaven.Core.Models.Data 4 | { 5 | public class SongDuration 6 | { 7 | public string Id { get; set; } 8 | [JsonPropertyName("duration")] 9 | public double DurationInSeconds { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /MapMaven.Functions/Properties/serviceDependencies.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "storage1": { 4 | "type": "storage", 5 | "connectionId": "AzureWebJobsStorage" 6 | }, 7 | "appInsights1": { 8 | "type": "appInsights", 9 | "connectionId": "APPLICATIONINSIGHTS_CONNECTION_STRING" 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/bg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/bl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/cp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/cr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/fr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/gf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/gh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/gn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/gp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/ie.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/it.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/mf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/mq.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/pm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/re.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/wf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/yt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/bl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/cp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/cr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/fr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/gf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/gn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/gp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/ie.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/it.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/mf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/mq.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/pm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/re.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/wf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/yt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/Leaderboards/BeatLeader/BeatLeaderRating.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Models.Data.Leaderboards.BeatLeader 2 | { 3 | public class BeatLeaderRating 4 | { 5 | public float PassRating { get; set; } 6 | public float AccRating { get; set; } 7 | public float TechRating { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/RankedMaps/FullRankedMapInfoItem.cs: -------------------------------------------------------------------------------- 1 | using MapMaven.Core.ApiClients.BeatSaver; 2 | 3 | namespace MapMaven.Core.Models.Data.RankedMaps 4 | { 5 | public abstract class FullRankedMapInfoItem 6 | { 7 | public string SongHash { get; set; } 8 | public MapDetail MapDetail { get; set; } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /MapMaven.Functions/host.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0", 3 | "logging": { 4 | "logLevel": { 5 | "default": "Information" 6 | }, 7 | "applicationInsights": { 8 | "samplingSettings": { 9 | "isEnabled": true, 10 | "excludedTypes": "Request" 11 | } 12 | } 13 | }, 14 | "functionTimeout": "00:10:00" 15 | } -------------------------------------------------------------------------------- /MapMaven/Components/PlayerProfileInfo.razor.css: -------------------------------------------------------------------------------- 1 | .profile { 2 | position: relative; 3 | overflow: hidden; 4 | min-height: 80px; 5 | } 6 | 7 | .profile-background-image { 8 | opacity: 0.1; 9 | position: absolute; 10 | left: 0; 11 | top: 0; 12 | width: 100%; 13 | height: auto; 14 | filter: blur(10px); 15 | } 16 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/dz.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/mg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/mv.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/ro.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/mg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/ro.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/sy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/PlaylistMap.cs: -------------------------------------------------------------------------------- 1 | using BeatSaberPlaylistsLib.Types; 2 | 3 | namespace MapMaven.Models 4 | { 5 | public class PlaylistMap 6 | { 7 | public string Hash { get; set; } 8 | 9 | public PlaylistMap(IPlaylistSong playlistSong) 10 | { 11 | Hash = playlistSong.Hash; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/ch.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/tt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven.Core/Services/IDataStore.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.EntityFrameworkCore; 2 | 3 | namespace MapMaven.Core.Services 4 | { 5 | public interface IDataStore : IDisposable 6 | { 7 | DbSet Set() where TEntity : class; 8 | 9 | Task SaveChangesAsync(CancellationToken cancellationToken = default); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/ch.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/sr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/RankedMaps/FullRankedMapInfo.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Models.Data.RankedMaps 2 | { 3 | public class FullRankedMapInfo where TFullRankedMapInfoItem : FullRankedMapInfoItem 4 | { 5 | public IEnumerable RankedMaps { get; set; } = Array.Empty(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/sr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/tt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/sc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/LivePlaylists/FilterOperator.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Models.LivePlaylists 2 | { 3 | public enum FilterOperator 4 | { 5 | Equals, 6 | NotEquals, 7 | LessThan, 8 | GreaterThan, 9 | LessThanOrEqual, 10 | GreaterThanOrEqual, 11 | Contains, 12 | NotContains, 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/mu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/no.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/sc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/sj.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/ee.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/mu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/no.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/sj.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/Leaderboards/ScoreSaber/ScoreSaberLeaderboardData.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Models.Data.Leaderboards.ScoreSaber 2 | { 3 | public class ScoreSaberLeaderboardData 4 | { 5 | public PPCurveItem[] AccCurve { get; set; } 6 | public double PpDecay { get; set; } 7 | public double PpPerStar { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/sy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/Playlists/PlaylistInfo.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Models.Data.Playlists 2 | { 3 | public class PlaylistInfo 4 | { 5 | public string PlaylistTitle { get; set; } 6 | public string PlaylistAuthor { get; set; } 7 | public string Image { get; set; } 8 | 9 | public ICollection Songs { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/qa.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/cd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/RankedMaps/ScoreSaberFullRankedMapInfoItem.cs: -------------------------------------------------------------------------------- 1 | using MapMaven.Core.ApiClients.ScoreSaber; 2 | 3 | namespace MapMaven.Core.Models.Data.RankedMaps 4 | { 5 | public class ScoreSaberFullRankedMapInfoItem : FullRankedMapInfoItem 6 | { 7 | public IEnumerable Leaderboards { get; set; } = Enumerable.Empty(); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/LeaderboardProviders.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Models 2 | { 3 | public enum LeaderboardProvider 4 | { 5 | ScoreSaber, 6 | BeatLeader 7 | } 8 | 9 | public static class LeaderboardProviders 10 | { 11 | public const string ScoreSaber = "ScoreSaber"; 12 | public const string BeatLeader = "BeatLeader"; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /MapMaven.Core/Utilities/BeatSaver/MapTag.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Utilities.BeatSaver 2 | { 3 | public static class MapTag 4 | { 5 | private static readonly string[] DisciplineTags = [ "accuracy", "balanced", "challenge", "dance", "fitness", "speed", "tech" ]; 6 | 7 | public static bool IsDisciplineTag(string tag) => DisciplineTags.Contains(tag); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /MapMaven.DataGatherers.BeatLeader/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "MapMaven.DataGatherers.BeatLeader": { 4 | "commandName": "Project", 5 | "environmentVariables": { 6 | "DOTNET_ENVIRONMENT": "Development" 7 | }, 8 | "dotnetRunMessages": true 9 | }, 10 | "Docker": { 11 | "commandName": "Docker" 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /MapMaven.DataGatherers.ScoreSaber/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "MapMaven.DataGatherers.ScoreSaber": { 4 | "commandName": "Project", 5 | "environmentVariables": { 6 | "DOTNET_ENVIRONMENT": "Development" 7 | }, 8 | "dotnetRunMessages": true 9 | }, 10 | "Docker": { 11 | "commandName": "Docker" 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/qa.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/ee.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/AdvancedSearch/MapFilterOperationPair.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace MapMaven.Core.Models.AdvancedSearch 4 | { 5 | public class MapFilterOperationPair 6 | { 7 | [ValidateComplexType] 8 | public FilterOperation FilterOperation { get; set; } = new(); 9 | public MapFilter? MapFilter { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/bf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven.Core/OpenAPI/BeatSaver/BeatSaverApiClient.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json; 2 | 3 | namespace MapMaven.Core.ApiClients.BeatSaver 4 | { 5 | public partial class BeatSaverApiClient 6 | { 7 | static partial void UpdateJsonSerializerSettings(JsonSerializerSettings settings) 8 | { 9 | settings.DateTimeZoneHandling = DateTimeZoneHandling.Utc; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/RankedMaps/BeatLeaderFullRankedMapInfoItem.cs: -------------------------------------------------------------------------------- 1 | 2 | using MapMaven.Core.ApiClients.BeatLeader; 3 | 4 | namespace MapMaven.Core.Models.Data.RankedMaps 5 | { 6 | public class BeatLeaderFullRankedMapInfoItem : FullRankedMapInfoItem 7 | { 8 | public IEnumerable Leaderboards { get; set; } = Enumerable.Empty(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /MapMaven.Core/Services/Interfaces/IApplicationSettingService.cs: -------------------------------------------------------------------------------- 1 | using MapMaven.Core.Models.Data; 2 | 3 | namespace MapMaven.Core.Services.Interfaces 4 | { 5 | public interface IApplicationSettingService 6 | { 7 | IObservable> ApplicationSettings { get; } 8 | 9 | Task AddOrUpdateAsync(string key, T value); 10 | Task LoadAsync(); 11 | } 12 | } -------------------------------------------------------------------------------- /MapMaven.Core/Services/Leaderboards/ILeaderboardDataService.cs: -------------------------------------------------------------------------------- 1 | using MapMaven.Core.Models.Data.Leaderboards; 2 | 3 | namespace MapMaven.Core.Services.Leaderboards 4 | { 5 | public interface ILeaderboardDataService 6 | { 7 | IObservable LeaderboardData { get; } 8 | 9 | Task GetLeaderboardDataAsync(); 10 | void ReloadLeaderboardData(); 11 | } 12 | } -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/lc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/lc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/mk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/to.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/LivePlaylists/LivePlaylistFieldOption.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Models.LivePlaylists 2 | { 3 | public class LivePlaylistFieldOption 4 | { 5 | public string Value { get; set; } 6 | public string Name { get; set; } 7 | public Type Type { get; set; } 8 | public bool HasPredefinedOptions { get; set; } 9 | public bool Sortable { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/bf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/to.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/ss.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | **/.classpath 2 | **/.dockerignore 3 | **/.env 4 | **/.git 5 | **/.gitignore 6 | **/.project 7 | **/.settings 8 | **/.toolstarget 9 | **/.vs 10 | **/.vscode 11 | **/*.*proj.user 12 | **/*.dbmdl 13 | **/*.jfm 14 | **/azds.yaml 15 | **/bin 16 | **/charts 17 | **/docker-compose* 18 | **/Dockerfile* 19 | **/node_modules 20 | **/npm-debug.log 21 | **/obj 22 | **/secrets.dev.yaml 23 | **/values.dev.yaml 24 | LICENSE 25 | README.md -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/jm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/jm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/Leaderboards/LeaderboardData.cs: -------------------------------------------------------------------------------- 1 | using MapMaven.Core.Models.Data.Leaderboards.BeatLeader; 2 | using MapMaven.Core.Models.Data.Leaderboards.ScoreSaber; 3 | 4 | namespace MapMaven.Core.Models.Data.Leaderboards 5 | { 6 | public class LeaderboardData 7 | { 8 | public ScoreSaberLeaderboardData ScoreSaber { get; set; } 9 | public BeatLeaderLeaderboardData BeatLeader { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/gm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /MapMaven.DataGatherers.Shared/MapMaven.DataGatherers.Shared.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net8.0 5 | enable 6 | enable 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/Components/Playlists/PlaylistTreeViewFolder.razor.css: -------------------------------------------------------------------------------- 1 | .playlist-list-item { 2 | display: flex; 3 | align-items: center; 4 | width: 100%; 5 | } 6 | 7 | .playlist-list-item img { 8 | width: 30px; 9 | float: left; 10 | } 11 | 12 | .playlist-list-item span { 13 | white-space: nowrap; 14 | overflow: hidden; 15 | text-overflow: ellipsis; 16 | line-height: 30px; 17 | } -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/mk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/ss.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/Playlists/PlaylistSongInfo.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Models.Data.Playlists 2 | { 3 | public class PlaylistSongInfo 4 | { 5 | public string SongName { get; set; } 6 | public string LevelAuthorName { get; set; } 7 | public string Hash { get; set; } 8 | public string LevelId { get; set; } 9 | 10 | public ICollection Difficulties { get; set; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/sn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /MapMaven.Core/Extensions/ObservableExtensions.cs: -------------------------------------------------------------------------------- 1 | using System.Reactive.Linq; 2 | 3 | namespace MapMaven.Core.Extensions 4 | { 5 | public static class ObservableExtensions 6 | { 7 | public static IDisposable SubscribeAsync(this IObservable source, Func action) => 8 | source.Select(x => Observable.FromAsync(() => action(x))) 9 | .Concat() 10 | .Subscribe(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/mr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/sn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/AdvancedSearch/AdvancedSearchConfiguration.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace MapMaven.Core.Models.AdvancedSearch 4 | { 5 | public class AdvancedSearchConfiguration 6 | { 7 | [ValidateComplexType] 8 | public List FilterOperations { get; set; } = new(); 9 | 10 | [ValidateComplexType] 11 | public List SortOperations { get; set; } = new(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /MapMaven/GlobalSuppressions.cs: -------------------------------------------------------------------------------- 1 | // This file is used by Code Analysis to maintain SuppressMessage 2 | // attributes that are applied to this project. 3 | // Project-level suppressions either have no target or are given 4 | // a specific target and scoped to a namespace, type, member, etc. 5 | 6 | using System.Diagnostics.CodeAnalysis; 7 | 8 | [assembly: SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "Only supporting Windows", Scope = "module")] 9 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/lt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/lt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/mr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven.Core/GlobalSuppressions.cs: -------------------------------------------------------------------------------- 1 | // This file is used by Code Analysis to maintain SuppressMessage 2 | // attributes that are applied to this project. 3 | // Project-level suppressions either have no target or are given 4 | // a specific target and scoped to a namespace, type, member, etc. 5 | 6 | using System.Diagnostics.CodeAnalysis; 7 | 8 | [assembly: SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "Only supporting Windows", Scope = "module")] 9 | -------------------------------------------------------------------------------- /MapMaven.Core/OpenAPI/BeatLeader/BeatLeaderApiClient.cs: -------------------------------------------------------------------------------- 1 | using MapMaven.Core.OpenAPI; 2 | using Newtonsoft.Json; 3 | 4 | namespace MapMaven.Core.ApiClients.BeatLeader 5 | { 6 | public partial class BeatLeaderApiClient 7 | { 8 | public BeatLeaderApiClient() { } 9 | 10 | static partial void UpdateJsonSerializerSettings(JsonSerializerSettings settings) 11 | { 12 | settings.ContractResolver = new SafeContractResolver(); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /MapMaven.Core/OpenAPI/ScoreSaber/ScoreSaberApiClient.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json; 2 | using MapMaven.Core.OpenAPI; 3 | 4 | namespace MapMaven.Core.ApiClients.ScoreSaber 5 | { 6 | public partial class ScoreSaberApiClient 7 | { 8 | public ScoreSaberApiClient() { } 9 | 10 | static partial void UpdateJsonSerializerSettings(JsonSerializerSettings settings) 11 | { 12 | settings.ContractResolver = new SafeContractResolver(); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /MapMaven/Main.razor: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |

Sorry, there's nothing at this address.

10 |
11 |
12 |
13 |
14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/vc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /MapMaven.Infrastructure/GlobalSuppressions.cs: -------------------------------------------------------------------------------- 1 | // This file is used by Code Analysis to maintain SuppressMessage 2 | // attributes that are applied to this project. 3 | // Project-level suppressions either have no target or are given 4 | // a specific target and scoped to a namespace, type, member, etc. 5 | 6 | using System.Diagnostics.CodeAnalysis; 7 | 8 | [assembly: SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "Only supporting Windows", Scope = "module")] 9 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/Leaderboards/ScoreEstimate.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Models.Data.Leaderboards 2 | { 3 | public class ScoreEstimate 4 | { 5 | public string MapHash { get; set; } 6 | public double Accuracy { get; set; } 7 | public double Pp { get; set; } 8 | public double TotalPP { get; set; } 9 | public double PPIncrease { get; set; } 10 | public string? Difficulty { get; set; } 11 | public double Stars { get; set; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /MapMaven.Core/Services/Leaderboards/ScoreEstimation/IScoreEstimationService.cs: -------------------------------------------------------------------------------- 1 | using MapMaven.Core.Models; 2 | using MapMaven.Core.Models.Data.Leaderboards; 3 | 4 | namespace MapMaven.Core.Services.Leaderboards.ScoreEstimation 5 | { 6 | public interface IScoreEstimationService 7 | { 8 | IObservable> RankedMapScoreEstimates { get; } 9 | IObservable EstimatingScores { get; } 10 | LeaderboardProvider LeaderboardProviderName { get; } 11 | } 12 | } -------------------------------------------------------------------------------- /MapMaven.Core/Utilities/LivePlaylists/ApplicableForMapPoolAttribute.cs: -------------------------------------------------------------------------------- 1 | using MapMaven.Core.Models.LivePlaylists; 2 | 3 | namespace MapMaven.Utilities.LivePlaylists 4 | { 5 | [AttributeUsage(AttributeTargets.Property)] 6 | public class ApplicableForMapPoolAttribute : Attribute 7 | { 8 | public MapPool[] MapPools { get; } 9 | 10 | public ApplicableForMapPoolAttribute(params MapPool[] mapPools) 11 | { 12 | MapPools = mapPools; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/sl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /MapMaven.DataGatherers.BeatLeader/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "ConnectionStrings": { 3 | "BeatLeaderScoresConnection": "Server=(localdb)\\mssqllocaldb;Database=BeatLeaderScores;Trusted_Connection=True;MultipleActiveResultSets=true" 4 | }, 5 | "Logging": { 6 | "LogLevel": { 7 | "Default": "Information", 8 | "Microsoft.Hosting.Lifetime": "Information", 9 | "System.Net.Http.HttpClient": "Warning", 10 | "Microsoft.EntityFrameworkCore.Database.Command": "Warning" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /MapMaven.DataGatherers.ScoreSaber/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "ConnectionStrings": { 3 | "ScoreSaberScoresConnection": "Server=(localdb)\\mssqllocaldb;Database=ScoreSaberScores;Trusted_Connection=True;MultipleActiveResultSets=true" 4 | }, 5 | "Logging": { 6 | "LogLevel": { 7 | "Default": "Information", 8 | "Microsoft.Hosting.Lifetime": "Information", 9 | "System.Net.Http.HttpClient": "Warning", 10 | "Microsoft.EntityFrameworkCore.Database.Command": "Warning" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /MapMaven/Pages/Maps.razor: -------------------------------------------------------------------------------- 1 | @inherits ReactiveComponent 2 | 3 | @page "/maps" 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | @code { 12 | [Inject] 13 | protected IMapService MapService { get; set; } 14 | 15 | IEnumerable MapList { get; set; } = new List(); 16 | 17 | protected override void OnInitialized() 18 | { 19 | SubscribeAndBind(MapService.Maps, maps => MapList = maps); 20 | } 21 | } -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/la.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/pw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/gy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/vc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/jp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/az.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/cg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/gy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/AdvancedSearch/SortOperation.cs: -------------------------------------------------------------------------------- 1 | using MapMaven.Core.Models.LivePlaylists; 2 | using Newtonsoft.Json; 3 | using Newtonsoft.Json.Converters; 4 | using System.ComponentModel.DataAnnotations; 5 | 6 | namespace MapMaven.Core.Models.AdvancedSearch 7 | { 8 | public class SortOperation 9 | { 10 | [Required(ErrorMessage = "Field is required.")] 11 | public string Field { get; set; } 12 | [JsonConverter(typeof(StringEnumConverter))] 13 | public SortDirection Direction { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/jp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/cg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/az.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/so.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/vn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/so.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/vn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/Playlists/PlaylistTreeItem.cs: -------------------------------------------------------------------------------- 1 | using BeatSaberPlaylistsLib; 2 | 3 | namespace MapMaven.Core.Models.Data.Playlists 4 | { 5 | public abstract class PlaylistTreeItem 6 | { 7 | public PlaylistManager PlaylistManager { get; set; } 8 | 9 | protected PlaylistTreeItem(PlaylistManager playlistManager) 10 | { 11 | PlaylistManager = playlistManager; 12 | } 13 | 14 | public abstract IEnumerable GetPlaylists(); 15 | public abstract PlaylistTreeItem Copy(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/sd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/sd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/cd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/la.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/pw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/bj.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/gb.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/bj.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/gb.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/kw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/kw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/is.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/is.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/tr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /MapMaven.Core.Tests/TestData/TimeSpanSqlMapper.cs: -------------------------------------------------------------------------------- 1 | using Dapper; 2 | using System.Data; 3 | 4 | namespace MapMaven.Core.Tests.TestData 5 | { 6 | public class TimeSpanSqlMapper : SqlMapper.TypeHandler 7 | { 8 | public override TimeSpan Parse(object value) 9 | { 10 | var stringValue = (string)value; 11 | 12 | return TimeSpan.Parse(stringValue); 13 | } 14 | 15 | public override void SetValue(IDbDataParameter parameter, TimeSpan value) 16 | { 17 | parameter.Value = value.ToString(); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/fo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/ly.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/ly.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/tr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /MapMaven/Components/Replay.razor: -------------------------------------------------------------------------------- 1 | @using MapMaven.Core.Models; 2 | @using MapMaven.Core.Services; 3 | @using MapMaven.Core.Services.Leaderboards 4 | 5 | 6 | 7 | @code { 8 | [Inject] 9 | protected ILeaderboardService ScoreSaberService { get; set; } 10 | 11 | [Parameter] 12 | public string MapId { get; set; } 13 | 14 | [Parameter] 15 | public PlayerScore PlayerScore { get; set; } 16 | 17 | string GetScoreSaberReplayUrl() 18 | { 19 | return ScoreSaberService.GetReplayUrl(MapId, PlayerScore); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/bs.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/gm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/tz.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/Utility/LeaderboardUtility.cs: -------------------------------------------------------------------------------- 1 | using MapMaven.Core.Models; 2 | 3 | namespace MapMaven.Utility 4 | { 5 | public static class LeaderboardUtility 6 | { 7 | public static string GetLogoPath(LeaderboardProvider leaderboardProvider) 8 | { 9 | return leaderboardProvider switch 10 | { 11 | LeaderboardProvider.ScoreSaber => "/images/score-saber-logo-small.png", 12 | LeaderboardProvider.BeatLeader => "/images/beat-leader-logo.svg", 13 | _ => throw new NotImplementedException(), 14 | }; 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/ps.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/cl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/es-pv.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/fo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /MapMaven/Components/Playlists/EditPlaylistDialog.razor: -------------------------------------------------------------------------------- 1 | @using MapMaven.Extensions; 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Cancel 11 | @(NewPlaylist ? "Add" : "Save changes") 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/ax.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/ps.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/HiddenMap.cs: -------------------------------------------------------------------------------- 1 | using MapMaven.Models; 2 | 3 | namespace MapMaven.Core.Models.Data 4 | { 5 | public class HiddenMap 6 | { 7 | public Guid Id { get; set; } 8 | public string Hash { get; set; } 9 | public string? Difficulty { get; set; } 10 | public string PlayerId { get; set; } 11 | 12 | public virtual Player Player { get; set; } 13 | 14 | public HiddenMap() { } 15 | 16 | public HiddenMap(Map map) 17 | { 18 | Hash = map.Hash; 19 | Difficulty = map.ScoreEstimates.SingleOrDefault()?.Difficulty; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/Playlists/PlaylistTree.cs: -------------------------------------------------------------------------------- 1 | using BeatSaberPlaylistsLib; 2 | 3 | namespace MapMaven.Core.Models.Data.Playlists 4 | { 5 | public class PlaylistTree 6 | { 7 | public PlaylistFolder RootPlaylistFolder { get; set; } = new(); 8 | 9 | public PlaylistTree() { } 10 | 11 | public PlaylistTree(PlaylistManager playlistManager) 12 | { 13 | RootPlaylistFolder = new PlaylistFolder(playlistManager); 14 | } 15 | 16 | public IEnumerable AllPlaylists() 17 | { 18 | return RootPlaylistFolder.GetPlaylists(); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/bb.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/bs.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/es-pv.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/bb.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/cl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/cu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/eh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/tl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/gg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/bv.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/ax.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/bv.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/AdvancedSearch/FilterOperation.cs: -------------------------------------------------------------------------------- 1 | using MapMaven.Core.Models.LivePlaylists; 2 | using Newtonsoft.Json; 3 | using Newtonsoft.Json.Converters; 4 | using System.ComponentModel.DataAnnotations; 5 | 6 | namespace MapMaven.Core.Models.AdvancedSearch 7 | { 8 | public class FilterOperation 9 | { 10 | [Required(ErrorMessage = "Field is required.")] 11 | public string Field { get; set; } 12 | [JsonConverter(typeof(StringEnumConverter))] 13 | public FilterOperator Operator { get; set; } 14 | [Required(ErrorMessage = "Value is required.")] 15 | public string Value { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/dj.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/dj.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/ca.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/ca.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/tl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/gg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/tz.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/cu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/pr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/pr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/cf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/my.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/nr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/ws.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/Resources/Raw/AboutAssets.txt: -------------------------------------------------------------------------------- 1 | Any raw assets you want to be deployed with your application can be placed in 2 | this directory (and child directories). Deployment of the asset to your application 3 | is automatically handled by the following `MauiAsset` Build Action within your `.csproj`. 4 | 5 | 6 | 7 | These files will be deployed with you package and will be accessible using Essentials: 8 | 9 | async Task LoadMauiAsset() 10 | { 11 | using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt"); 12 | using var reader = new StreamReader(stream); 13 | 14 | var contents = reader.ReadToEnd(); 15 | } 16 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/my.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/ApplicationSetting.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Models.Data 2 | { 3 | public class ApplicationSetting 4 | { 5 | public Guid Id { get; set; } 6 | public string Key { get; set; } 7 | public string? StringValue { get; set; } 8 | 9 | public T GetValue() 10 | { 11 | var type = typeof(T); 12 | 13 | if (StringValue == null) 14 | return default; 15 | 16 | if (type == typeof(int)) 17 | return (T)(object)int.Parse(StringValue); 18 | 19 | if (type == typeof(string)) 20 | return (T)(object)StringValue; 21 | 22 | return default; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /MapMaven.Core/OpenAPI/SafeContractResolver.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json.Serialization; 2 | using Newtonsoft.Json; 3 | using System.Reflection; 4 | 5 | namespace MapMaven.Core.OpenAPI 6 | { 7 | /// 8 | /// Ignore required properties validation, to fix invalid nullability in OpenAPI json. 9 | /// 10 | public class SafeContractResolver : DefaultContractResolver 11 | { 12 | protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) 13 | { 14 | var jsonProp = base.CreateProperty(member, memberSerialization); 15 | jsonProp.Required = Required.Default; 16 | return jsonProp; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/nr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/pa.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/PlayerScore.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Models 2 | { 3 | public class PlayerScore 4 | { 5 | public Score Score { get; set; } 6 | public Leaderboard Leaderboard { get; set; } 7 | 8 | public PlayerScore() { } 9 | 10 | public PlayerScore(ApiClients.ScoreSaber.PlayerScore playerScore) 11 | { 12 | Score = new Score(playerScore); 13 | Leaderboard = new Leaderboard(playerScore.Leaderboard); 14 | } 15 | 16 | public PlayerScore(ApiClients.BeatLeader.ScoreResponseWithMyScore score) 17 | { 18 | Score = new Score(score); 19 | Leaderboard = new Leaderboard(score.Leaderboard); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /MapMaven.Core/Utilities/DifficultyUtils.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Utilities 2 | { 3 | public static class DifficultyUtils 4 | { 5 | public static int GetOrder(string? difficulty) 6 | { 7 | return difficulty switch 8 | { 9 | "ExpertPlus" => 5, 10 | "Expert" => 4, 11 | "Hard" => 3, 12 | "Normal" => 2, 13 | "Easy" => 1, 14 | _ => 0 15 | }; 16 | } 17 | 18 | public static IEnumerable Difficulties => [ 19 | "Easy", 20 | "Normal", 21 | "Hard", 22 | "Expert", 23 | "ExpertPlus" 24 | ]; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /MapMaven.Functions/Properties/serviceDependencies.Map Maven Functions Deploy TEST.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "storage1": { 4 | "resourceId": "/subscriptions/[parameters('subscriptionId')]/resourceGroups/[parameters('resourceGroupName')]/providers/Microsoft.Storage/storageAccounts/mapmavenstoragetest", 5 | "type": "storage.azure", 6 | "connectionId": "AzureWebJobsStorage" 7 | }, 8 | "appInsights1": { 9 | "resourceId": "/subscriptions/[parameters('subscriptionId')]/resourceGroups/[parameters('resourceGroupName')]/providers/microsoft.insights/components/map-maven-test", 10 | "type": "appInsights.azure", 11 | "connectionId": "APPLICATIONINSIGHTS_CONNECTION_STRING" 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /MapMaven.Functions/Properties/serviceDependencies.map-maven-functions - Zip Deploy.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "appInsights1": { 4 | "resourceId": "/subscriptions/[parameters('subscriptionId')]/resourceGroups/[parameters('resourceGroupName')]/providers/microsoft.insights/components/map-maven-insights", 5 | "type": "appInsights.azure", 6 | "connectionId": "APPLICATIONINSIGHTS_CONNECTION_STRING" 7 | }, 8 | "storage1": { 9 | "resourceId": "/subscriptions/[parameters('subscriptionId')]/resourceGroups/[parameters('resourceGroupName')]/providers/Microsoft.Storage/storageAccounts/mapmavenstorage", 10 | "type": "storage.azure", 11 | "connectionId": "AzureWebJobsStorage" 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /MapMaven.Functions/Properties/serviceDependencies.map-maven-functions-deploy-test.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "storage1": { 4 | "resourceId": "/subscriptions/[parameters('subscriptionId')]/resourceGroups/[parameters('resourceGroupName')]/providers/Microsoft.Storage/storageAccounts/mapmavenstoragetest", 5 | "type": "storage.azure", 6 | "connectionId": "AzureWebJobsStorage" 7 | }, 8 | "appInsights1": { 9 | "resourceId": "/subscriptions/[parameters('subscriptionId')]/resourceGroups/[parameters('resourceGroupName')]/providers/microsoft.insights/components/map-maven-test", 10 | "type": "appInsights.azure", 11 | "connectionId": "APPLICATIONINSIGHTS_CONNECTION_STRING" 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/ws.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/mm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/cw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/Playlists/PlaylistTreeNode.cs: -------------------------------------------------------------------------------- 1 | 2 | using BeatSaberPlaylistsLib; 3 | 4 | namespace MapMaven.Core.Models.Data.Playlists 5 | { 6 | public class PlaylistTreeNode : PlaylistTreeItem 7 | { 8 | public T Playlist { get; set; } 9 | 10 | public PlaylistTreeNode(T playlist, PlaylistManager playlistManager) : base(playlistManager) 11 | { 12 | Playlist = playlist; 13 | } 14 | 15 | public override IEnumerable GetPlaylists() 16 | { 17 | yield return Playlist; 18 | } 19 | 20 | public override PlaylistTreeItem Copy() 21 | { 22 | return new PlaylistTreeNode(Playlist, PlaylistManager); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/LivePlaylists/EditLivePlaylistModel.cs: -------------------------------------------------------------------------------- 1 | using FastDeepCloner; 2 | using MapMaven.Models; 3 | using System.ComponentModel.DataAnnotations; 4 | 5 | namespace MapMaven.Core.Models.LivePlaylists 6 | { 7 | public class EditLivePlaylistModel : EditPlaylistModel 8 | { 9 | [ValidateComplexType] 10 | public LivePlaylistConfiguration LivePlaylistConfiguration { get; set; } = new() 11 | { 12 | MapCount = 20 13 | }; 14 | 15 | public EditLivePlaylistModel() { } 16 | 17 | public EditLivePlaylistModel(Playlist playlist) : base(playlist) 18 | { 19 | LivePlaylistConfiguration = DeepCloner.Clone(playlist.LivePlaylistConfiguration); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/cw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/RankHistoryRecord.cs: -------------------------------------------------------------------------------- 1 | using MapMaven.Core.ApiClients.BeatLeader; 2 | 3 | namespace MapMaven.Core.Models 4 | { 5 | public class RankHistoryRecord 6 | { 7 | public int? Rank { get; set; } 8 | public int? CountryRank { get; set; } 9 | public double? Pp { get; set; } 10 | public DateOnly Date { get; set; } 11 | 12 | public RankHistoryRecord() { } 13 | 14 | public RankHistoryRecord(PlayerScoreStatsHistory history) 15 | { 16 | Rank = history.Rank; 17 | CountryRank = history.CountryRank; 18 | Pp = history.Pp; 19 | Date = DateOnly.FromDateTime(DateTimeOffset.FromUnixTimeSeconds(history.Timestamp).DateTime); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/ItemProgress.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Models.Data 2 | { 3 | public class ItemProgress 4 | { 5 | public int TotalItems { get; set; } 6 | public int CompletedItems { get; set; } 7 | public T CurrentItem { get; set; } 8 | public double CurrentMapProgress { get; set; } 9 | public double TotalProgress 10 | { 11 | get 12 | { 13 | if (CompletedItems == TotalItems) 14 | { 15 | return 1; 16 | } 17 | else 18 | { 19 | return (CompletedItems + CurrentMapProgress) / TotalItems; 20 | } 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/cf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/mm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/lr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/pk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /MapMaven.Core/Models/Data/Leaderboards/BeatLeader/BeatLeaderLeaderboardData.cs: -------------------------------------------------------------------------------- 1 | namespace MapMaven.Core.Models.Data.Leaderboards.BeatLeader 2 | { 3 | public class BeatLeaderLeaderboardData 4 | { 5 | public PPCurveItem[] AccCurve { get; set; } 6 | 7 | public double PpDecay { get; set; } 8 | public double PassMultiplier { get; set; } 9 | public double PassExponential { get; set; } 10 | public double PassShift { get; set; } 11 | public double AccMultiplier { get; set; } 12 | public double TechMultiplier { get; set; } 13 | public double TechExponentialMultiplier { get; set; } 14 | public double InflateMultiplier { get; set; } 15 | public double InflateExponential { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/jo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/mh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MapMaven.DataGatherers.BeatLeader/Program.cs: -------------------------------------------------------------------------------- 1 | using MapMaven.DataGatherers.BeatLeader; 2 | using MapMaven.DataGatherers.BeatLeader.Data; 3 | using Microsoft.EntityFrameworkCore; 4 | 5 | IHost host = Host.CreateDefaultBuilder(args) 6 | .ConfigureServices((hostContext, services) => 7 | { 8 | services.AddHostedService(); 9 | 10 | services.AddDbContext(options => 11 | options.UseSqlServer(hostContext.Configuration.GetConnectionString("BeatLeaderScoresConnection")), 12 | contextLifetime: ServiceLifetime.Singleton 13 | ); 14 | 15 | services.AddHttpClient(client => client.BaseAddress = new Uri("https://api.beatleader.com")); 16 | }) 17 | .Build(); 18 | 19 | host.Run(); 20 | -------------------------------------------------------------------------------- /MapMaven.DataGatherers.ScoreSaber/Program.cs: -------------------------------------------------------------------------------- 1 | using MapMaven.DataGatherers.ScoreSaber; 2 | using MapMaven.DataGatherers.ScoreSaber.Data; 3 | using Microsoft.EntityFrameworkCore; 4 | 5 | IHost host = Host.CreateDefaultBuilder(args) 6 | .ConfigureServices((hostContext, services) => 7 | { 8 | services.AddHostedService(); 9 | 10 | services.AddDbContext(options => 11 | options.UseSqlServer(hostContext.Configuration.GetConnectionString("ScoreSaberScoresConnection")), 12 | contextLifetime: ServiceLifetime.Singleton 13 | ); 14 | 15 | services.AddHttpClient(client => client.BaseAddress = new Uri("https://scoresaber.com")); 16 | }) 17 | .Build(); 18 | 19 | host.Run(); 20 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/lr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/tg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /MapMaven/_Imports.razor: -------------------------------------------------------------------------------- 1 | @using System.Net.Http 2 | @using Microsoft.AspNetCore.Components.Forms 3 | @using Microsoft.AspNetCore.Components.Routing 4 | @using Microsoft.AspNetCore.Components.Web 5 | @using Microsoft.AspNetCore.Components.Web.Virtualization 6 | @using Microsoft.JSInterop 7 | @using MudBlazor 8 | @using MudExtensions 9 | @using MapMaven 10 | @using MapMaven.Components 11 | @using MapMaven.Components.Shared 12 | @using MapMaven.Components.Maps 13 | @using MapMaven.Components.Playlists 14 | @using MapMaven.Components.Leaderboards 15 | @using MapMaven.Models 16 | @using MapMaven.Models.Data 17 | @using MapMaven.Services 18 | @using MapMaven.Services.Playlists 19 | @using MapMaven.Pages 20 | @using MapMaven.Extensions 21 | @using MapMaven.Utility 22 | @using MapMaven.Core.Services.Interfaces 23 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/cn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/mh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/tk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/jo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /MapMaven/Components/Shared/ValueChange.razor: -------------------------------------------------------------------------------- 1 | @inherits MudComponentBase 2 | 3 | 4 | @Suffix@Value.ToString(Format) 5 | 6 | 7 | @code { 8 | [Parameter] 9 | public double Value { get; set; } 10 | 11 | [Parameter] 12 | public string Format { get; set; } = "0.##"; 13 | 14 | string Suffix = string.Empty; 15 | string Color = "inherit"; 16 | 17 | protected override void OnParametersSet() 18 | { 19 | Suffix = Value switch 20 | { 21 | >= 0 => "+", 22 | _ => "" 23 | }; 24 | 25 | Color = Value switch 26 | { 27 | 0 => "inherit", 28 | > 0 => "green", 29 | _ => "red" 30 | }; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /MapMaven.Core/Utilities/NAudio/StartEndReader.cs: -------------------------------------------------------------------------------- 1 | using NAudio.Wave; 2 | 3 | namespace MapMaven.Utilities.NAudio 4 | { 5 | public class StartEndReader : IWaveProvider 6 | { 7 | private TimeSpan _end; 8 | private WaveStream _stream; 9 | 10 | public StartEndReader(WaveStream stream, TimeSpan start, TimeSpan end) 11 | { 12 | _stream = stream; 13 | _stream.CurrentTime = start; 14 | _end = end; 15 | } 16 | 17 | public int Read(byte[] array, int offset, int count) 18 | { 19 | if (_stream.CurrentTime > _end) 20 | return 0; 21 | 22 | return _stream.Read(array, offset, count); 23 | } 24 | 25 | public WaveFormat WaveFormat => _stream.WaveFormat; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/tg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/tn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/tk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MapMaven/Platforms/Windows/app.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 11 | true/PM 12 | PerMonitorV2, PerMonitor 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/pa.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/rw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/fm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/1x1/rw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/pk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/tn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /MapMaven/wwwroot/flags/4x3/fm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | --------------------------------------------------------------------------------