Skip to content

Commit

Permalink
Merge pull request #219 from DennisvHest/development
Browse files Browse the repository at this point in the history
1.6.2
  • Loading branch information
DennisvHest authored Sep 8, 2024
2 parents 47924cf + 83e66fb commit 338f68c
Show file tree
Hide file tree
Showing 10 changed files with 248 additions and 87 deletions.
1 change: 1 addition & 0 deletions MapMaven.Core/Services/Interfaces/IPlaylistService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public interface IPlaylistService
IObservable<IEnumerable<Playlist>> Playlists { get; }
BehaviorSubject<Playlist> SelectedPlaylist { get; }
IObservable<PlaylistTree<Playlist>> PlaylistTree { get; }
IObservable<Dictionary<string, Playlist[]>> MapsInPlaylistsByHash { get; }

Task<Playlist> AddLivePlaylist(EditLivePlaylistModel editPlaylistModel);
Task AddMapsToPlaylist(IEnumerable<Map> maps, Playlist playlist, bool loadPlaylists = true);
Expand Down
15 changes: 14 additions & 1 deletion MapMaven.Core/Services/PlaylistService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
using MapMaven.Core.Models.LivePlaylists;
using MapMaven.Core.Models.Data;
using MapMaven.Core.Services.Interfaces;
using MapMaven.Core.Extensions;
using MapMaven.Core.Models.Data.Playlists;
using BeatSaberPlaylistsLib;
using MapMaven.Core.Models;
Expand All @@ -26,6 +25,10 @@ public class PlaylistService : IPlaylistService

public IObservable<PlaylistTree<Playlist>> PlaylistTree { get; private set; }
public IObservable<IEnumerable<Playlist>> Playlists { get; private set; }

public readonly BehaviorSubject<Dictionary<string, Playlist[]>> _mapsInPlaylistsByHash = new(new());
public IObservable<Dictionary<string, Playlist[]>> MapsInPlaylistsByHash => _mapsInPlaylistsByHash;

public BehaviorSubject<Playlist?> SelectedPlaylist { get; private set; } = new(null);

Check warning on line 32 in MapMaven.Core/Services/PlaylistService.cs

View workflow job for this annotation

GitHub Actions / build / build

Nullability of reference types in return type of 'BehaviorSubject<Playlist?> PlaylistService.SelectedPlaylist.get' doesn't match implicitly implemented member 'BehaviorSubject<Playlist> IPlaylistService.SelectedPlaylist.get'.

Check warning on line 32 in MapMaven.Core/Services/PlaylistService.cs

View workflow job for this annotation

GitHub Actions / build

Nullability of reference types in return type of 'BehaviorSubject<Playlist?> PlaylistService.SelectedPlaylist.get' doesn't match implicitly implemented member 'BehaviorSubject<Playlist> IPlaylistService.SelectedPlaylist.get'.

Check warning on line 32 in MapMaven.Core/Services/PlaylistService.cs

View workflow job for this annotation

GitHub Actions / build

Nullability of reference types in return type of 'BehaviorSubject<Playlist?> PlaylistService.SelectedPlaylist.get' doesn't match implicitly implemented member 'BehaviorSubject<Playlist> IPlaylistService.SelectedPlaylist.get'.

private readonly BehaviorSubject<bool> _creatingPlaylist = new(false);
Expand Down Expand Up @@ -60,6 +63,16 @@ public PlaylistService(IBeatSaberDataService beatSaberDataService, BeatSaberFile
return x.playlists.FirstOrDefault(p => p.PlaylistFilePath == x.selectedPlaylistFilePath);
})
.Subscribe(SelectedPlaylist.OnNext); // Subscribing here because of weird behavior with multiple subscriptions triggering multiple reruns of this observable.

Playlists.Subscribe(playlists =>
{
var mapsInPlaylistsByHash = playlists.SelectMany(p => p.Maps.Select(m => new { Map = m, Playlist = p }))
.Where(x => x.Map.Hash is not null)
.GroupBy(x => x.Map.Hash)
.ToDictionary(g => g.Key, g => g.Select(x => x.Playlist).Distinct().ToArray());

_mapsInPlaylistsByHash.OnNext(mapsInPlaylistsByHash);
});
}

private PlaylistFolder<Playlist> MapIPlaylistsToPlaylistsInFolder(PlaylistFolder<IPlaylist> folder)
Expand Down
7 changes: 5 additions & 2 deletions MapMaven/Components/Maps/MapBrowserRow.razor
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@
}
</CellTemplate>
</TemplateColumn>
<TemplateColumn T="Map" Sortable="false" CellClass="pl-0" CellStyle="width: 50px; position: relative;">
<TemplateColumn T="Map" Sortable="false" CellClass="px-0" CellStyle="width: 50px; position: relative;">
<CellTemplate>
<div>
<div class="d-flex">
<div class="d-flex flex-column">
<MudTooltip Text="Play song preview" ShowOnFocus="false">
<SongPlaybackButton Map="context.Item"></SongPlaybackButton>
Expand All @@ -30,6 +30,9 @@
<MudIconButton Icon="@Icons.Material.Filled.Info" Class="pb-0 pt-1 no-hover-background" Variant="Variant.Text" Size="Size.Medium" OnClick="() => OpenDetails(context.Item)" />
</MudTooltip>
</div>
<div class="d-flex flex-column justify-center">
<MapInPlaylistIndicator MapHash="@context.Item.Hash"></MapInPlaylistIndicator>
</div>
</div>
</CellTemplate>
</TemplateColumn>
Expand Down
6 changes: 5 additions & 1 deletion MapMaven/Components/Maps/MapBrowserRow.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,11 @@ protected override void OnInitialized()

async Task OpenAddMapToPlaylistDialog(Map map)
{
var dialog = await DialogService.ShowAsync<PlaylistSelector>("Add map to playlist", new DialogOptions
var dialog = await DialogService.ShowAsync<PlaylistSelector>("Add map to playlist", new DialogParameters
{
{ nameof(PlaylistSelector.MapToAddHash), map.Hash }
},
new DialogOptions
{
MaxWidth = MaxWidth.ExtraSmall,
FullWidth = true,
Expand Down
242 changes: 162 additions & 80 deletions MapMaven/Components/Maps/MapDetail.razor

Large diffs are not rendered by default.

51 changes: 51 additions & 0 deletions MapMaven/Components/Maps/MapInPlaylistIndicator.razor
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
@inherits ReactiveComponent

@{
var specificPlaylistContainsMap = PlaylistsContainingMapHash.Contains(SpecificPlaylist);
var showIcon = SpecificPlaylist is null && PlaylistsContainingMapHash.Any() || specificPlaylistContainsMap;

if (showIcon)
{
string tooltip;

if (specificPlaylistContainsMap)
{
tooltip = "Playlist already contains this map";
}
else
{
tooltip = $"In playlists: {string.Join(", ", PlaylistsContainingMapHash.Select(p => p.Title))}";
}

<MudTooltip Text="@tooltip" RootClass="d-flex">
<MudIcon Icon="@Icons.Material.Filled.PlaylistAddCheckCircle" Style="opacity: 0.4" />
</MudTooltip>
}
}

@code {
[Inject]
IPlaylistService PlaylistService { get; set; }

[Parameter]
public string MapHash { get; set; }

[Parameter]
public Playlist? SpecificPlaylist { get; set; }

Playlist[] PlaylistsContainingMapHash = [];

protected override void OnInitialized()
{
SubscribeAndBind(PlaylistService.MapsInPlaylistsByHash, mapsInPlaylistsByHash =>
{
if (MapHash is null || !mapsInPlaylistsByHash.ContainsKey(MapHash))
{
PlaylistsContainingMapHash = Array.Empty<Playlist>();
return;
}

PlaylistsContainingMapHash = mapsInPlaylistsByHash[MapHash];
});
}
}
2 changes: 1 addition & 1 deletion MapMaven/Components/Playlists/PlaylistSelector.razor
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
</MudMenu>
</div>
<MudTreeView T="Playlist" @ref="PlaylistTreeView" SelectedValueChanged="OnPlaylistSelect" Color="Color.Primary" ExpandOnClick="true" AutoExpand="true">
<PlaylistTreeViewFolder Folder="PlaylistTree.RootPlaylistFolder" Expanded="!string.IsNullOrEmpty(PlaylistSearchText)" />
<PlaylistTreeViewFolder Folder="PlaylistTree.RootPlaylistFolder" Expanded="!string.IsNullOrEmpty(PlaylistSearchText)" MapToAddHash="@MapToAddHash" />
</MudTreeView>
</DialogContent>
</MudDialog>
3 changes: 3 additions & 0 deletions MapMaven/Components/Playlists/PlaylistSelector.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ public partial class PlaylistSelector
[Parameter]
public bool SaveNewPlaylistOnSubmit { get; set; } = true;

[Parameter]
public string MapToAddHash { get; set; }

[Inject]
IPlaylistService PlaylistService { get; set; }

Expand Down
5 changes: 3 additions & 2 deletions MapMaven/Components/Playlists/PlaylistTreeViewFolder.razor
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
</div>
</BodyContent>
<ChildContent>
<PlaylistTreeViewFolder Folder="playlistFolder" Expanded="Expanded"></PlaylistTreeViewFolder>
<PlaylistTreeViewFolder Folder="playlistFolder" Expanded="Expanded" MapToAddHash="@MapToAddHash"></PlaylistTreeViewFolder>
</ChildContent>
</MudTreeViewItem>
}
Expand All @@ -41,8 +41,9 @@
</span>
</MudTooltip>


<div class="d-flex align-center ml-auto">
<MapInPlaylistIndicator MapHash="@MapToAddHash" SpecificPlaylist="playlistNode.Playlist" />

@if (playlistNode.Playlist.IsLivePlaylist)
{
<MudTooltip Text="Live playlist" Color="Color.Info" RootClass="d-flex">
Expand Down
3 changes: 3 additions & 0 deletions MapMaven/Components/Playlists/PlaylistTreeViewFolder.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ public partial class PlaylistTreeViewFolder
[Parameter]
public PlaylistFolder<Playlist> Folder { get; set; }

[Parameter]
public string MapToAddHash { get; set; }

[Parameter]
public bool Expanded { get; set; }

Expand Down

0 comments on commit 338f68c

Please sign in to comment.