playlist loading from json and displaying it properly
This commit is contained in:
@@ -60,6 +60,7 @@
|
||||
<Button Content="Musik" Height="60" Foreground="White" Background="Transparent" Click="Musik_OnClick"/>
|
||||
<Button Content="Photos" Height="60" Foreground="White" Background="Transparent" Click="Photo_OnClick"/>
|
||||
<Button Content="Video" Height="60" Foreground="White" Background="Transparent" Click="Video_OnClick" />
|
||||
<Button Content="Playlist" Height="60" Foreground="White" Background="Transparent" Click="PlayListButton_OnClick" />
|
||||
</StackPanel>
|
||||
|
||||
<!-- MAIN CONTENT WRAPPED IN A GRID FOR LAYERING -->
|
||||
@@ -140,6 +141,12 @@
|
||||
</WrapPanel>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
<!--Playlists-->
|
||||
<ScrollViewer x:Name="ScrollContentPlaylist" Background="#444" Panel.ZIndex="0" Visibility="Collapsed">
|
||||
<StackPanel x:Name="PlaylistContentPanel">
|
||||
<Button Content="New Playlist" Background="Black" Foreground="White" Click="PlayListButton_Click"></Button>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</Grid>
|
||||
|
||||
<!-- SETTINGS BUTTON -->
|
||||
|
@@ -39,13 +39,14 @@ public partial class MainWindow : Window
|
||||
|
||||
PlaylistEditor popupWindow;
|
||||
|
||||
ObjListBP _favorites = new ObjListBP();
|
||||
ObjListBP _playlists = new ObjListBP();
|
||||
|
||||
private Catagory Muvie = new Catagory("Muvie");
|
||||
private Catagory Serie = new Catagory("Serie");
|
||||
private Catagory Music = new Catagory("Music");
|
||||
private Catagory Photo = new Catagory("Photos");
|
||||
|
||||
private Catagory Favorites;
|
||||
|
||||
List<string> suportedVidioFiles = new List<string>();
|
||||
List<string> suportedMusicFiles = new List<string>();
|
||||
@@ -83,12 +84,13 @@ public partial class MainWindow : Window
|
||||
#region Init wpf
|
||||
InitializeComponent();
|
||||
//Initialise but Hide
|
||||
logWin.Show();
|
||||
//logWin.Show();
|
||||
//logWin.Hide();
|
||||
//this.Hide();
|
||||
//Begin Login Process
|
||||
var login = new LogIn();
|
||||
login.Show();
|
||||
Favorites = new Catagory("Favorites",Favorites_Home);
|
||||
|
||||
#endregion
|
||||
//Quinn Dont change or remuve!!!
|
||||
@@ -384,16 +386,32 @@ public partial class MainWindow : Window
|
||||
tmpBP.Add(Serie);
|
||||
tmpBP.Add(Photo);
|
||||
tmpBP.Add(Music);
|
||||
popupWindow = new PlaylistEditor(tmpBP);
|
||||
popupWindow = new PlaylistEditor(tmpBP,false);
|
||||
popupWindow.Owner = this;
|
||||
popupWindow.ShowInTaskbar = false;
|
||||
popupWindow.Show();
|
||||
}
|
||||
|
||||
private void EdditFav_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
ObservableCollection<Catagory> tmpBP= new ObservableCollection<Catagory>();
|
||||
tmpBP.Add(Muvie);
|
||||
tmpBP.Add(Serie);
|
||||
tmpBP.Add(Photo);
|
||||
tmpBP.Add(Music);
|
||||
popupWindow = new PlaylistEditor(tmpBP,true);
|
||||
popupWindow.Owner = this;
|
||||
popupWindow.ShowInTaskbar = false;
|
||||
popupWindow.Show();
|
||||
}
|
||||
|
||||
|
||||
|
||||
#region Catagory btns
|
||||
private void Home_OnClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
Close_Player();
|
||||
ScrollContentPlaylist.Visibility = Visibility.Collapsed;
|
||||
ScrollContentCat.Visibility = Visibility.Collapsed;
|
||||
ScrollContentHome.Visibility = Visibility.Visible;
|
||||
MenueItems();
|
||||
@@ -402,6 +420,7 @@ public partial class MainWindow : Window
|
||||
{
|
||||
Close_Player();
|
||||
Name_of_Catagory_Text1.Visibility = Visibility.Collapsed;
|
||||
ScrollContentPlaylist.Visibility = Visibility.Collapsed;
|
||||
|
||||
ScrollContentHome.Visibility = Visibility.Collapsed;
|
||||
ScrollContentCat.Visibility = Visibility.Visible;
|
||||
@@ -412,6 +431,7 @@ public partial class MainWindow : Window
|
||||
{
|
||||
Close_Player();
|
||||
Name_of_Catagory_Text1.Visibility = Visibility.Collapsed;
|
||||
ScrollContentPlaylist.Visibility = Visibility.Collapsed;
|
||||
|
||||
ScrollContentHome.Visibility = Visibility.Collapsed;
|
||||
ScrollContentCat.Visibility = Visibility.Visible;
|
||||
@@ -422,12 +442,22 @@ public partial class MainWindow : Window
|
||||
{
|
||||
Close_Player();
|
||||
Name_of_Catagory_Text1.Visibility = Visibility.Visible;
|
||||
|
||||
ScrollContentPlaylist.Visibility = Visibility.Collapsed;
|
||||
ScrollContentHome.Visibility = Visibility.Collapsed;
|
||||
ScrollContentCat.Visibility = Visibility.Visible;
|
||||
Name_of_Catagory1.Visibility = Visibility.Visible;
|
||||
MenueItems(ref Muvie,ref Serie);
|
||||
}
|
||||
private void PlayListButton_OnClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
Close_Player();
|
||||
Name_of_Catagory_Text1.Visibility = Visibility.Collapsed;
|
||||
|
||||
ScrollContentHome.Visibility = Visibility.Collapsed;
|
||||
ScrollContentCat.Visibility = Visibility.Collapsed;
|
||||
Name_of_Catagory1.Visibility = Visibility.Collapsed;
|
||||
PopulateAllCategoriesFromPlaylists();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -569,16 +599,9 @@ public partial class MainWindow : Window
|
||||
return itemsBag.ToList();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region Comunication
|
||||
public void addFavorit(ref Item item)
|
||||
{
|
||||
_favorites.SharedRefs.Add(item);
|
||||
}
|
||||
public void ReciveErrorLog(string logMessage)
|
||||
{
|
||||
log.Error(logMessage);
|
||||
@@ -588,7 +611,7 @@ public partial class MainWindow : Window
|
||||
if(suportedVidioFiles.Contains(Path.GetExtension(filePath))||suportedPhotoFiles.Contains(Path.GetExtension(filePath)))
|
||||
VideoView.Visibility = Visibility.Visible;
|
||||
var media = new Media(_libVLC, filePath, FromType.FromPath);
|
||||
|
||||
Console.WriteLine(filePath);
|
||||
media.ParsedChanged += (sender, args) =>
|
||||
{
|
||||
if (args.ParsedStatus == MediaParsedStatus.Done)
|
||||
@@ -596,6 +619,7 @@ public partial class MainWindow : Window
|
||||
Dispatcher.Invoke(() =>
|
||||
{
|
||||
var duration = media.Duration;
|
||||
Console.WriteLine(duration);
|
||||
videoSliderInit(duration / 1000);
|
||||
});
|
||||
}
|
||||
@@ -604,7 +628,6 @@ public partial class MainWindow : Window
|
||||
media.Parse(MediaParseOptions.ParseLocal);
|
||||
_mediaPlayer.Play(media);
|
||||
}
|
||||
|
||||
public void setStrings()
|
||||
{
|
||||
#region type?
|
||||
@@ -699,15 +722,115 @@ public partial class MainWindow : Window
|
||||
VideoView.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
|
||||
public void RecivePlaylist(ObjListBP items)
|
||||
public void RecivePlaylist(Catagory items)
|
||||
{
|
||||
_playlists.SharedRefs.Add(items);
|
||||
RecivePlaylist();
|
||||
var writer = new Jason_Writer();
|
||||
var tmp = new List<locJasonPlaylist>();
|
||||
int index = 0;
|
||||
foreach (var VARIABLE in items.getAllItems())
|
||||
{
|
||||
tmp.Add(new locJasonPlaylist());
|
||||
tmp[index].name = VARIABLE.Name;
|
||||
tmp[index].path = VARIABLE.Path;
|
||||
tmp[index].type = VARIABLE.Type;
|
||||
index++;
|
||||
}
|
||||
writer.SavePlaylistListAsync(items.name,tmp);
|
||||
Console.WriteLine("wrote"+items.name);
|
||||
}
|
||||
public void RecivePlaylist(Catagory items,bool favorite)
|
||||
{
|
||||
if (favorite)
|
||||
{
|
||||
Favorites.clear();
|
||||
foreach (var VARIABLE in items.getAllItems())
|
||||
{
|
||||
Favorites.addItem(VARIABLE);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var VARIABLE in _playlists.SharedRefs)
|
||||
{
|
||||
if (VARIABLE.name == items.name)
|
||||
{
|
||||
|
||||
VARIABLE.clear();
|
||||
foreach (var var2 in items.getAllItems())
|
||||
{
|
||||
VARIABLE.addItem(var2);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
RecivePlaylist();
|
||||
var writer = new Jason_Writer();
|
||||
var tmp = new List<locJasonPlaylist>();
|
||||
int index = 0;
|
||||
foreach (var VARIABLE in items.getAllItems())
|
||||
{
|
||||
tmp.Add(new locJasonPlaylist());
|
||||
tmp[index].name = VARIABLE.Name;
|
||||
tmp[index].path = VARIABLE.Path;
|
||||
tmp[index].type = VARIABLE.Type;
|
||||
index++;
|
||||
}
|
||||
writer.SavePlaylistListAsync(items.name,tmp);
|
||||
Console.WriteLine("faf updated");
|
||||
if (favorite)
|
||||
Application.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
MenueItems(); // safely update UI
|
||||
});
|
||||
|
||||
|
||||
foreach (var VARIABLE in items.getAllItems())
|
||||
{
|
||||
Console.WriteLine(VARIABLE.Name);
|
||||
}
|
||||
}
|
||||
public void RecivePlaylist()
|
||||
{
|
||||
popupWindow.Close();
|
||||
}
|
||||
|
||||
private void PopulateAllCategoriesFromPlaylists()
|
||||
{
|
||||
PlaylistContentPanel.Children.Clear(); // Optional: clear previous entries
|
||||
|
||||
foreach (Catagory category in _playlists.SharedRefs)
|
||||
{
|
||||
// Create TextBlock for category name
|
||||
var textBlock = new TextBlock
|
||||
{
|
||||
Text = category.name,
|
||||
FontSize = 18,
|
||||
Foreground = Brushes.White,
|
||||
Margin = new Thickness(0, 10, 0, 5)
|
||||
};
|
||||
|
||||
// Create WrapPanel for items
|
||||
var wrapPanel = new WrapPanel
|
||||
{
|
||||
Margin = new Thickness(0, 0, 0, 10)
|
||||
};
|
||||
|
||||
// Fill WrapPanel with items
|
||||
PopulatePanelWithItems(category.getAllItems(), wrapPanel);
|
||||
|
||||
// Add both to the ScrollViewer's inner panel
|
||||
PlaylistContentPanel.Children.Add(textBlock);
|
||||
PlaylistContentPanel.Children.Add(wrapPanel);
|
||||
}
|
||||
|
||||
// Make the ScrollViewer visible
|
||||
ScrollContentPlaylist.Visibility = Visibility.Visible;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
@@ -726,6 +849,7 @@ public partial class MainWindow : Window
|
||||
}
|
||||
void MenueItems()
|
||||
{
|
||||
PopulatePanelWithItems(Favorites.getAllItems(), Favorites_Home);
|
||||
PopulatePanelWithItems(Muvie.getAllItems(), Muvies_Home);
|
||||
PopulatePanelWithItems(Serie.getAllItems(), Series_Home);
|
||||
PopulatePanelWithItems(Photo.getAllItems(), Photos_Home);
|
||||
@@ -831,40 +955,98 @@ public partial class MainWindow : Window
|
||||
#region load saved data
|
||||
|
||||
private async void LoadSavedData()
|
||||
{
|
||||
try
|
||||
{
|
||||
Jason_Writer jason_Writer = new Jason_Writer(); // Uses default "Temp Data" folder
|
||||
|
||||
// Load main media lists
|
||||
var muvies = await jason_Writer.LoadListAsync("Muvies");
|
||||
var series = await jason_Writer.LoadListAsync("Series");
|
||||
var photos = await jason_Writer.LoadListAsync("Photos");
|
||||
var music = await jason_Writer.LoadListAsync("Music");
|
||||
var favorites = await jason_Writer.LoadListAsync("Favorit");
|
||||
|
||||
// Initialize progress bar with total count
|
||||
progressScann = new ProgressBar("Reading saved data",
|
||||
muvies.Count + series.Count + photos.Count + music.Count + favorites.Count);
|
||||
progressScann.Show();
|
||||
|
||||
// Create Item lists from JSON
|
||||
List<Item> MuvieItems = CreateItemsFromJson(muvies);
|
||||
List<Item> SerieItems = CreateItemsFromJson(series);
|
||||
List<Item> PhotoItems = CreateItemsFromJson(photos, isPhoto: true);
|
||||
List<Item> MusicItems = CreateItemsFromJson(music, isPhoto: false, isMusic: true);
|
||||
|
||||
Muvie.addItems(MuvieItems);
|
||||
Serie.addItems(SerieItems);
|
||||
Photo.addItems(PhotoItems);
|
||||
Music.addItems(MusicItems);
|
||||
|
||||
// Combine all media items for playlist/favorite matching
|
||||
var allLocs = muvies.Concat(series).Concat(photos).Concat(music).ToList();
|
||||
|
||||
// Enrich favorite items by matching them with main list entries
|
||||
var enrichedFavorites = new List<locJason>();
|
||||
foreach (var fav in favorites)
|
||||
{
|
||||
try
|
||||
var match = allLocs.FirstOrDefault(item =>
|
||||
string.Equals(item.path, fav.path, StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
if (match != null)
|
||||
{
|
||||
Jason_Writer jason_Writer = new Jason_Writer(); // Use default "Temp Data" folder
|
||||
JasonToString jasonToString = new JasonToString();
|
||||
|
||||
var muvies = await jason_Writer.LoadListAsync("Muvies");
|
||||
var series = await jason_Writer.LoadListAsync("Series");
|
||||
var photos = await jason_Writer.LoadListAsync("Photos");
|
||||
var music = await jason_Writer.LoadListAsync("Music");
|
||||
|
||||
progressScann = new ProgressBar("Reading saved data",muvies.Count+series.Count+photos.Count+music.Count);
|
||||
progressScann.Show();
|
||||
|
||||
List<Item> MuvieItems = CreateItemsFromJson(muvies);
|
||||
List<Item> SerieItems = CreateItemsFromJson(series);
|
||||
List<Item> PhotoItems = CreateItemsFromJson(photos, isPhoto: true);
|
||||
List<Item> MusicItems = CreateItemsFromJson(music, isPhoto: false, isMusic: true);
|
||||
|
||||
Muvie.addItems(MuvieItems);
|
||||
Serie.addItems(SerieItems);
|
||||
Photo.addItems(PhotoItems);
|
||||
Music.addItems(MusicItems);
|
||||
|
||||
MenueItems(); // Re-populate the UI
|
||||
progressScann.Hide();
|
||||
log.Log("Loaded saved data from JSON.");
|
||||
enrichedFavorites.Add(match);
|
||||
}
|
||||
catch (Exception ex)
|
||||
else
|
||||
{
|
||||
MessageBox.Show($"Failed to load saved data:\n{ex.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
log.Error($"LoadSavedData error: {ex}");
|
||||
enrichedFavorites.Add(fav); // fallback if not found
|
||||
Console.WriteLine($"[Warning] Favorite not found in main lists: {fav.path}");
|
||||
}
|
||||
}
|
||||
|
||||
List<Item> FavoriteItems = CreateItemsFromJson(enrichedFavorites);
|
||||
Favorites.addItems(FavoriteItems);
|
||||
|
||||
// Load playlists
|
||||
var playlistNames = await jason_Writer.GetSavedPlaylistNamesAsync();
|
||||
|
||||
foreach (var playlistName in playlistNames)
|
||||
{
|
||||
var playlistEntries = await jason_Writer.LoadPlaylistListAsync(playlistName);
|
||||
|
||||
var matchedLocs = new List<locJason>();
|
||||
foreach (var entry in playlistEntries)
|
||||
{
|
||||
var match = allLocs.FirstOrDefault(item =>
|
||||
string.Equals(item.path, entry.path, StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
if (match != null)
|
||||
{
|
||||
matchedLocs.Add(match);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"[Warning] Playlist '{playlistName}' contains unknown path: {entry.path}");
|
||||
}
|
||||
}
|
||||
|
||||
List<Item> PlaylistItems = CreateItemsFromJson(matchedLocs);
|
||||
var playlistCategory = new Catagory(playlistName);
|
||||
playlistCategory.addItems(PlaylistItems);
|
||||
_playlists.SharedRefs.Add(playlistCategory);
|
||||
}
|
||||
|
||||
MenueItems(); // Refresh the UI
|
||||
progressScann.Hide();
|
||||
log.Log("Loaded saved data from JSON.");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show($"Failed to load saved data:\n{ex.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
log.Error($"LoadSavedData error: {ex}");
|
||||
}
|
||||
}
|
||||
|
||||
private List<Item> CreateItemsFromJson(List<locJason> jsonItems)
|
||||
{
|
||||
return CreateItemsFromJson(jsonItems, isPhoto: false, isMusic: false);
|
||||
@@ -1006,6 +1188,4 @@ public partial class MainWindow : Window
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
}
|
@@ -51,7 +51,7 @@
|
||||
<Button Content="Return" Grid.Column="0" Width="100" HorizontalAlignment="Right" Margin="0,10,0,0"
|
||||
Click="Return_Click"/>
|
||||
<Button Content="Add" Grid.Column="1" Width="100" HorizontalAlignment="Left" Margin="0,10,0,0"
|
||||
Click="Add_Click" Visibility="Collapsed" Name="add_btn"/>
|
||||
Visibility="Collapsed" Name="add_btn"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Window>
|
@@ -10,15 +10,28 @@ namespace ShadowStream.Views
|
||||
public partial class PlaylistEditor : Window
|
||||
{
|
||||
private ObservableCollection<Catagory> _sharedList;
|
||||
|
||||
private bool Fav;
|
||||
//pointer
|
||||
//private unsafe Catagory* _sharedListLock;
|
||||
|
||||
Catagory _selectedCatagory;
|
||||
|
||||
public PlaylistEditor(ObservableCollection<Catagory> sharedList)
|
||||
public PlaylistEditor(ObservableCollection<Catagory> sharedList,bool isFaF)
|
||||
{
|
||||
InitializeComponent();
|
||||
_sharedList = sharedList;
|
||||
if (isFaF)
|
||||
{
|
||||
PlaylistNameBox.Text = "Favorit";
|
||||
PlaylistNameBox.IsReadOnly = true;
|
||||
add_btn.Click += Edit_Click;
|
||||
add_btn.Content = "Edit";
|
||||
}
|
||||
else
|
||||
{
|
||||
add_btn.Click += Add_Click;
|
||||
}
|
||||
}
|
||||
|
||||
private void ShowSublist(string categoryName)
|
||||
@@ -69,12 +82,12 @@ namespace ShadowStream.Views
|
||||
|
||||
private void Add_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
ObjListBP tmp = new ObjListBP(PlaylistNameBox.Text);
|
||||
Catagory tmp = new Catagory(PlaylistNameBox.Text);
|
||||
foreach (var VARIABLE in _selectedCatagory.getAllItems())
|
||||
{
|
||||
if (VARIABLE.IsAdded)
|
||||
{
|
||||
tmp.SharedRefs.Add(VARIABLE);
|
||||
tmp.addItem(VARIABLE);
|
||||
Console.WriteLine(VARIABLE.Name);
|
||||
}
|
||||
}
|
||||
@@ -85,5 +98,24 @@ namespace ShadowStream.Views
|
||||
mainWin.RecivePlaylist(tmp);
|
||||
}
|
||||
}
|
||||
|
||||
private void Edit_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
Catagory tmp = new Catagory(PlaylistNameBox.Text);
|
||||
foreach (var VARIABLE in _selectedCatagory.getAllItems())
|
||||
{
|
||||
if (VARIABLE.IsAdded)
|
||||
{
|
||||
tmp.addItem(VARIABLE);
|
||||
Console.WriteLine(VARIABLE.Name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (this.Owner is MainWindow mainWin)
|
||||
{
|
||||
mainWin.RecivePlaylist(tmp,true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user