123 lines
3.9 KiB
C#
123 lines
3.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using Newtonsoft.Json;
|
|
|
|
namespace ShadowStream.ObjecktForJason;
|
|
|
|
public class Jason_Writer
|
|
{
|
|
private readonly string _folderPath;
|
|
|
|
public Jason_Writer(string folderName = "Temp Data")
|
|
{
|
|
_folderPath = Path.Combine(Environment.CurrentDirectory, folderName);
|
|
|
|
if (!Directory.Exists(_folderPath))
|
|
Directory.CreateDirectory(_folderPath);
|
|
}
|
|
|
|
// Save one list of locJason objects to JSON file with given name
|
|
public async Task SaveList(string listName, List<locJason> list)
|
|
{
|
|
Console.WriteLine($"Saving JSON list '{listName}' with {list.Count} items.");
|
|
foreach (var item in list)
|
|
{
|
|
Console.WriteLine($" - Path: {item.path}, Type: {item.type}, ImageData length: {(item.imageData?.Length ?? 0)}");
|
|
}
|
|
|
|
string filePath = Path.Combine(_folderPath, $"{listName}.json");
|
|
string jsonString = JsonConvert.SerializeObject(list, Formatting.Indented);
|
|
await File.WriteAllTextAsync(filePath, jsonString);
|
|
|
|
Console.WriteLine($"Saved JSON to: {filePath}");
|
|
}
|
|
|
|
|
|
|
|
|
|
// Load one list of locJason objects from JSON file with given name
|
|
public async Task<List<locJason>> LoadListAsync(string listName)
|
|
{
|
|
string filePath = Path.Combine(_folderPath, $"{listName}.json");
|
|
|
|
if (!File.Exists(filePath))
|
|
return new List<locJason>();
|
|
|
|
string jsonString = await File.ReadAllTextAsync(filePath);
|
|
return JsonConvert.DeserializeObject<List<locJason>>(jsonString) ?? new List<locJason>();
|
|
}
|
|
|
|
// Check if list file exists
|
|
public bool ListExists(string listName)
|
|
{
|
|
string filePath = Path.Combine(_folderPath, $"{listName}.json");
|
|
return File.Exists(filePath);
|
|
}
|
|
|
|
|
|
public async Task SavePlaylistListAsync(string listName, List<locJasonPlaylist> list)
|
|
{
|
|
Console.WriteLine($"Saving playlist list '{listName}' with {list.Count} items.");
|
|
|
|
foreach (var item in list)
|
|
{
|
|
Console.WriteLine($" - Name: {item.name}, Path: {item.path}, Type: {item.type}");
|
|
}
|
|
|
|
string filePath = Path.Combine(_folderPath, $"{listName}.json"); // keep same naming as original
|
|
string jsonString = JsonConvert.SerializeObject(list, Formatting.Indented);
|
|
await File.WriteAllTextAsync(filePath, jsonString);
|
|
|
|
Console.WriteLine($"Saved JSON to: {filePath}");
|
|
}
|
|
|
|
public async Task<List<locJasonPlaylist>> LoadPlaylistListAsync(string listName)
|
|
{
|
|
string filePath = Path.Combine(_folderPath, $"{listName}.json");
|
|
|
|
if (!File.Exists(filePath))
|
|
{
|
|
Console.WriteLine($"List file '{filePath}' not found. Returning empty list.");
|
|
return new List<locJasonPlaylist>();
|
|
}
|
|
|
|
string jsonString = await File.ReadAllTextAsync(filePath);
|
|
var list = JsonConvert.DeserializeObject<List<locJasonPlaylist>>(jsonString);
|
|
return list ?? new List<locJasonPlaylist>();
|
|
}
|
|
public async Task<List<string>> GetSavedPlaylistNamesAsync()
|
|
{
|
|
string playlistFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Temp Data");
|
|
|
|
if (!Directory.Exists(playlistFolder))
|
|
return new List<string>();
|
|
|
|
var files = Directory.GetFiles(playlistFolder, "*.json");
|
|
var playlistNames = new List<string>();
|
|
|
|
foreach (var file in files)
|
|
{
|
|
string name = Path.GetFileNameWithoutExtension(file);
|
|
if (IsPlaylistFile(name)) // uses the updated method
|
|
{
|
|
playlistNames.Add(name);
|
|
}
|
|
}
|
|
|
|
return playlistNames;
|
|
}
|
|
|
|
|
|
private bool IsPlaylistFile(string fileName)
|
|
{
|
|
// Exclude main media files and the favorites file
|
|
var reserved = new[] { "Muvies", "Series", "Photos", "Music", "Favorit" };
|
|
return !reserved.Contains(fileName);
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|