|
1 | 1 | @using HomeSpeaker.WebAssembly.Services |
| 2 | +@using HomeSpeaker.WebAssembly.Models |
2 | 3 | @using Microsoft.JSInterop |
| 4 | +@using System.Linq |
3 | 5 | @inject IPlaybackModeService playbackModeService |
4 | 6 | @inject HomeSpeakerService homeSpeakerService |
5 | 7 | @inject ILocalQueueService localQueueService |
|
138 | 140 | { |
139 | 141 | if (string.IsNullOrEmpty(FolderName)) return; |
140 | 142 |
|
141 | | - // For now, show a message that this feature is not yet implemented |
142 | | - // TODO: Get folder songs from server and add to local queue |
143 | | - await JsRuntime.InvokeVoidAsync("alert", "Local folder playback not yet fully implemented. Please play individual songs instead."); |
144 | | - } |
145 | | - |
146 | | - private async Task PlayPlaylistLocallyAsync() |
| 143 | + try |
| 144 | + { |
| 145 | + // Get folder songs from server |
| 146 | + var folderSongs = await homeSpeakerService.GetSongsInFolder(FolderName); |
| 147 | + var songViewModels = folderSongs.ToList(); |
| 148 | + |
| 149 | + if (songViewModels.Any()) |
| 150 | + { |
| 151 | + await localQueueService.PlaySongsAsync(songViewModels); |
| 152 | + } |
| 153 | + else |
| 154 | + { |
| 155 | + await JsRuntime.InvokeVoidAsync("alert", $"Folder '{FolderName}' contains no songs."); |
| 156 | + } |
| 157 | + } |
| 158 | + catch (Exception ex) |
| 159 | + { |
| 160 | + await JsRuntime.InvokeVoidAsync("alert", $"Error playing folder locally: {ex.Message}"); |
| 161 | + } |
| 162 | + }private async Task PlayPlaylistLocallyAsync() |
147 | 163 | { |
148 | 164 | if (string.IsNullOrEmpty(PlaylistName)) return; |
149 | 165 |
|
150 | | - // For now, show a message that this feature is not yet implemented |
151 | | - // TODO: Get playlist songs from server and add to local queue |
152 | | - await JsRuntime.InvokeVoidAsync("alert", "Local playlist playback not yet fully implemented. Please play individual songs instead."); |
| 166 | + try |
| 167 | + { |
| 168 | + // Get playlist data from server |
| 169 | + var playlists = await homeSpeakerService.GetPlaylistsAsync(); |
| 170 | + var playlist = playlists.FirstOrDefault(p => p.Name == PlaylistName); |
| 171 | + |
| 172 | + if (playlist == null) |
| 173 | + { |
| 174 | + await JsRuntime.InvokeVoidAsync("alert", $"Playlist '{PlaylistName}' not found."); |
| 175 | + return; |
| 176 | + } |
| 177 | + |
| 178 | + // Convert playlist songs to SongViewModels and play them locally |
| 179 | + var songViewModels = playlist.Songs.Select(s => s.ToSongViewModel()).ToList(); |
| 180 | + |
| 181 | + if (songViewModels.Any()) |
| 182 | + { |
| 183 | + await localQueueService.PlaySongsAsync(songViewModels); |
| 184 | + } |
| 185 | + else |
| 186 | + { |
| 187 | + await JsRuntime.InvokeVoidAsync("alert", $"Playlist '{PlaylistName}' is empty."); |
| 188 | + } |
| 189 | + } |
| 190 | + catch (Exception ex) |
| 191 | + { |
| 192 | + await JsRuntime.InvokeVoidAsync("alert", $"Error playing playlist locally: {ex.Message}"); |
| 193 | + } |
153 | 194 | } |
154 | 195 |
|
155 | 196 | protected override async Task OnAfterRenderAsync(bool firstRender) |
|
0 commit comments