Changed playlist.
This commit is contained in:
1 parent
6202c67156
commit
e6556e54ee
2 files changed
+221
-198
No files matched your search
+17
-198
@@ -6,40 +6,17 @@ using System.Xml;
|
||||
using System.Xml.XPath;
|
||||
|
||||
using Vocaluxe.Lib.Song;
|
||||
using Vocaluxe.Lib.Playlist;
|
||||
|
||||
namespace Vocaluxe.Base
|
||||
{
|
||||
class CPlaylistSong
|
||||
{
|
||||
public int SongID;
|
||||
public GameModes.EGameMode gm;
|
||||
|
||||
public CPlaylistSong(int SongID, GameModes.EGameMode gm)
|
||||
{
|
||||
this.SongID = SongID;
|
||||
this.gm = gm;
|
||||
}
|
||||
|
||||
public CPlaylistSong()
|
||||
{
|
||||
gm = GameModes.EGameMode.TR_GAMEMODE_NORMAL;
|
||||
}
|
||||
}
|
||||
|
||||
struct SPlaylist
|
||||
{
|
||||
public string PlaylistName;
|
||||
public string PlaylistFile;
|
||||
public List<CPlaylistSong> Songs;
|
||||
}
|
||||
|
||||
static class CPlaylists
|
||||
{
|
||||
private static XmlWriterSettings _settings = new XmlWriterSettings();
|
||||
private static List<CPlaylist> _Playlists;
|
||||
private static CHelper Helper = new CHelper();
|
||||
private static List<SPlaylist> _Playlists;
|
||||
|
||||
public static SPlaylist[] Playlists
|
||||
public static CPlaylist[] Playlists
|
||||
{
|
||||
get { return _Playlists.ToArray(); }
|
||||
}
|
||||
@@ -51,27 +28,35 @@ namespace Vocaluxe.Base
|
||||
|
||||
public static void Init()
|
||||
{
|
||||
_settings.Indent = true;
|
||||
_settings.Encoding = System.Text.Encoding.UTF8;
|
||||
_settings.ConformanceLevel = ConformanceLevel.Document;
|
||||
|
||||
LoadPlaylists();
|
||||
}
|
||||
|
||||
public static void LoadPlaylists()
|
||||
{
|
||||
_Playlists = new List<SPlaylist>();
|
||||
_Playlists = new List<CPlaylist>();
|
||||
List<string> files = new List<string>();
|
||||
files.AddRange(Helper.ListFiles(CSettings.sFolderPlaylists, "*.xml", true, true));
|
||||
|
||||
foreach (string file in files)
|
||||
{
|
||||
LoadPlaylist(file);
|
||||
CPlaylist playlist = new CPlaylist(file);
|
||||
}
|
||||
|
||||
SortPlaylistsByName();
|
||||
}
|
||||
|
||||
#region private methods
|
||||
|
||||
private static void SortPlaylistsByName()
|
||||
{
|
||||
_Playlists.Sort(CompareByPlaylistName);
|
||||
}
|
||||
|
||||
private static int CompareByPlaylistName(CPlaylist a, CPlaylist b)
|
||||
{
|
||||
return String.Compare(a.PlaylistName, b.PlaylistName);
|
||||
}
|
||||
|
||||
public static void DeletePlaylist(int PlaylistID)
|
||||
{
|
||||
if (PlaylistID < 0 || PlaylistID >= _Playlists.Count)
|
||||
@@ -90,172 +75,6 @@ namespace Vocaluxe.Base
|
||||
}
|
||||
}
|
||||
|
||||
#region private methods
|
||||
|
||||
private static void SortPlaylistsByName()
|
||||
{
|
||||
_Playlists.Sort(CompareByPlaylistName);
|
||||
}
|
||||
|
||||
private static int CompareByPlaylistName(SPlaylist a, SPlaylist b)
|
||||
{
|
||||
return String.Compare(a.PlaylistName, b.PlaylistName);
|
||||
}
|
||||
|
||||
private static void SavePlaylist(int PlaylistID)
|
||||
{
|
||||
if (PlaylistID < 0 || PlaylistID >= _Playlists.Count)
|
||||
return;
|
||||
|
||||
string filename = string.Empty;
|
||||
foreach (char chr in _Playlists[PlaylistID].PlaylistName)
|
||||
{
|
||||
if (char.IsLetter(chr))
|
||||
filename += chr.ToString();
|
||||
}
|
||||
|
||||
if (filename == String.Empty)
|
||||
filename = "1";
|
||||
|
||||
int i = 0;
|
||||
while (File.Exists(Path.Combine(CSettings.sFolderPlaylists, filename + ".xml")))
|
||||
{
|
||||
i++;
|
||||
if (!File.Exists(Path.Combine(CSettings.sFolderPlaylists, filename + i + ".xml")))
|
||||
{
|
||||
filename += i;
|
||||
}
|
||||
}
|
||||
|
||||
SPlaylist playlist = _Playlists[PlaylistID];
|
||||
playlist.PlaylistFile = Path.Combine(CSettings.sFolderPlaylists, filename + ".xml");
|
||||
_Playlists[PlaylistID] = playlist;
|
||||
|
||||
XmlWriter writer;
|
||||
try
|
||||
{
|
||||
writer = XmlWriter.Create(_Playlists[PlaylistID].PlaylistFile, _settings);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
CLog.LogError("Error creating/opening Playlist File " + _Playlists[PlaylistID].PlaylistFile + ": " + e.Message);
|
||||
return;
|
||||
}
|
||||
|
||||
if (writer == null)
|
||||
{
|
||||
CLog.LogError("Error creating/opening Playlist File " + _Playlists[PlaylistID].PlaylistFile);
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WriteStartDocument();
|
||||
writer.WriteStartElement("root");
|
||||
|
||||
writer.WriteStartElement("Info");
|
||||
writer.WriteElementString("PlaylistName", _Playlists[PlaylistID].PlaylistName);
|
||||
writer.WriteEndElement();
|
||||
|
||||
writer.WriteStartElement("Songs");
|
||||
for (i = 0; i < playlist.Songs.Count; i++)
|
||||
{
|
||||
CSong[] songs = CSongs.AllSongs;
|
||||
CSong song = new CSong();
|
||||
for (int s = 0; i <= songs.Length; s++)
|
||||
{
|
||||
if (songs[s].ID == playlist.Songs[i].SongID)
|
||||
{
|
||||
song = songs[s];
|
||||
break;
|
||||
}
|
||||
}
|
||||
writer.WriteStartElement("Song" + (i+1).ToString());
|
||||
writer.WriteElementString("Artist", song.Artist);
|
||||
writer.WriteElementString("Title", song.Title);
|
||||
writer.WriteElementString("GameMode", Enum.GetName(typeof(GameModes.EGameMode), playlist.Songs[i].gm));
|
||||
writer.WriteEndElement();
|
||||
}
|
||||
writer.WriteEndElement();
|
||||
|
||||
writer.WriteEndElement(); //end of root
|
||||
writer.WriteEndDocument();
|
||||
|
||||
writer.Flush();
|
||||
writer.Close();
|
||||
}
|
||||
|
||||
private static void LoadPlaylist(string FileName)
|
||||
{
|
||||
bool loaded = false;
|
||||
XPathDocument xPathDoc = null;
|
||||
XPathNavigator navigator = null;
|
||||
|
||||
SPlaylist playlist = new SPlaylist();
|
||||
playlist.PlaylistFile = Path.Combine(CSettings.sFolderPlaylists, FileName);
|
||||
|
||||
try
|
||||
{
|
||||
xPathDoc = new XPathDocument(playlist.PlaylistFile);
|
||||
navigator = xPathDoc.CreateNavigator();
|
||||
loaded = true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
loaded = false;
|
||||
if (navigator != null)
|
||||
navigator = null;
|
||||
|
||||
if (xPathDoc != null)
|
||||
xPathDoc = null;
|
||||
|
||||
CLog.LogError("Error opening Playlist File " + FileName + ": " + e.Message);
|
||||
}
|
||||
|
||||
if (loaded)
|
||||
{
|
||||
string value = String.Empty;
|
||||
if (CHelper.GetValueFromXML("//root/Info/PlaylistName", navigator, ref value, value))
|
||||
{
|
||||
playlist.PlaylistName = value;
|
||||
|
||||
playlist.Songs = new List<CPlaylistSong>();
|
||||
|
||||
List<string> songs = CHelper.GetValuesFromXML("Songs", navigator);
|
||||
string artist = String.Empty;
|
||||
string title = String.Empty;
|
||||
GameModes.EGameMode gm = GameModes.EGameMode.TR_GAMEMODE_NORMAL;
|
||||
|
||||
for (int i = 0; i < songs.Count; i++)
|
||||
{
|
||||
CHelper.GetValueFromXML("//root/Songs/" + songs[i] + "/Artist", navigator, ref artist, String.Empty);
|
||||
CHelper.GetValueFromXML("//root/Songs/" + songs[i] + "/Title", navigator, ref title, String.Empty);
|
||||
CHelper.TryGetEnumValueFromXML<GameModes.EGameMode>("//root/Songs/" + songs[i] + "/GameMode", navigator, ref gm);
|
||||
|
||||
CPlaylistSong song = new CPlaylistSong();
|
||||
CSong[] AllSongs = CSongs.AllSongs;
|
||||
|
||||
for (int s = 0; s < AllSongs.Length; s++)
|
||||
{
|
||||
if (AllSongs[s].Artist == artist && AllSongs[s].Title == title)
|
||||
{
|
||||
song.SongID = AllSongs[s].ID;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
song.gm = gm;
|
||||
|
||||
playlist.Songs.Add(song);
|
||||
}
|
||||
|
||||
_Playlists.Add(playlist);
|
||||
}
|
||||
else
|
||||
{
|
||||
CLog.LogError("Can't find PlaylistName in Playlist File: " + FileName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,204 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Xml;
|
||||
using System.Xml.XPath;
|
||||
|
||||
using Vocaluxe.Lib.Song;
|
||||
using Vocaluxe.Base;
|
||||
|
||||
|
||||
namespace Vocaluxe.Lib.Playlist
|
||||
{
|
||||
public class CPlaylistSong
|
||||
{
|
||||
public int SongID;
|
||||
public GameModes.EGameMode gm;
|
||||
|
||||
public CPlaylistSong(int SongID, GameModes.EGameMode gm)
|
||||
{
|
||||
this.SongID = SongID;
|
||||
this.gm = gm;
|
||||
}
|
||||
|
||||
public CPlaylistSong()
|
||||
{
|
||||
gm = GameModes.EGameMode.TR_GAMEMODE_NORMAL;
|
||||
}
|
||||
}
|
||||
|
||||
public class CPlaylist
|
||||
{
|
||||
private static XmlWriterSettings _settings = new XmlWriterSettings();
|
||||
private static CHelper Helper = new CHelper();
|
||||
|
||||
public string PlaylistName;
|
||||
public string PlaylistFile;
|
||||
public List<CPlaylistSong> Songs;
|
||||
|
||||
public CPlaylist()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
public CPlaylist(string file)
|
||||
{
|
||||
Init();
|
||||
PlaylistName = file;
|
||||
LoadPlaylist();
|
||||
}
|
||||
|
||||
private void Init()
|
||||
{
|
||||
_settings.Indent = true;
|
||||
_settings.Encoding = System.Text.Encoding.UTF8;
|
||||
_settings.ConformanceLevel = ConformanceLevel.Document;
|
||||
}
|
||||
|
||||
|
||||
private void SavePlaylist()
|
||||
{
|
||||
string filename = string.Empty;
|
||||
foreach (char chr in PlaylistName)
|
||||
{
|
||||
if (char.IsLetter(chr))
|
||||
filename += chr.ToString();
|
||||
}
|
||||
|
||||
if (filename == String.Empty)
|
||||
filename = "1";
|
||||
|
||||
int i = 0;
|
||||
while (File.Exists(Path.Combine(CSettings.sFolderPlaylists, filename + ".xml")))
|
||||
{
|
||||
i++;
|
||||
if (!File.Exists(Path.Combine(CSettings.sFolderPlaylists, filename + i + ".xml")))
|
||||
{
|
||||
filename += i;
|
||||
}
|
||||
}
|
||||
|
||||
PlaylistFile = Path.Combine(CSettings.sFolderPlaylists, filename + ".xml");
|
||||
|
||||
XmlWriter writer;
|
||||
try
|
||||
{
|
||||
writer = XmlWriter.Create(PlaylistFile, _settings);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
CLog.LogError("Error creating/opening Playlist File " + PlaylistFile + ": " + e.Message);
|
||||
return;
|
||||
}
|
||||
|
||||
if (writer == null)
|
||||
{
|
||||
CLog.LogError("Error creating/opening Playlist File " + PlaylistFile);
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WriteStartDocument();
|
||||
writer.WriteStartElement("root");
|
||||
|
||||
writer.WriteStartElement("Info");
|
||||
writer.WriteElementString("PlaylistName", PlaylistName);
|
||||
writer.WriteEndElement();
|
||||
|
||||
writer.WriteStartElement("Songs");
|
||||
for (i = 0; i < Songs.Count; i++)
|
||||
{
|
||||
CSong[] songs = CSongs.AllSongs;
|
||||
CSong song = new CSong();
|
||||
for (int s = 0; i <= songs.Length; s++)
|
||||
{
|
||||
if (songs[s].ID == Songs[i].SongID)
|
||||
{
|
||||
song = songs[s];
|
||||
break;
|
||||
}
|
||||
}
|
||||
writer.WriteStartElement("Song" + (i + 1).ToString());
|
||||
writer.WriteElementString("Artist", song.Artist);
|
||||
writer.WriteElementString("Title", song.Title);
|
||||
writer.WriteElementString("GameMode", Enum.GetName(typeof(GameModes.EGameMode), Songs[i].gm));
|
||||
writer.WriteEndElement();
|
||||
}
|
||||
writer.WriteEndElement();
|
||||
|
||||
writer.WriteEndElement(); //end of root
|
||||
writer.WriteEndDocument();
|
||||
|
||||
writer.Flush();
|
||||
writer.Close();
|
||||
}
|
||||
|
||||
private void LoadPlaylist()
|
||||
{
|
||||
bool loaded = false;
|
||||
XPathDocument xPathDoc = null;
|
||||
XPathNavigator navigator = null;
|
||||
|
||||
try
|
||||
{
|
||||
xPathDoc = new XPathDocument(PlaylistFile);
|
||||
navigator = xPathDoc.CreateNavigator();
|
||||
loaded = true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
loaded = false;
|
||||
if (navigator != null)
|
||||
navigator = null;
|
||||
|
||||
if (xPathDoc != null)
|
||||
xPathDoc = null;
|
||||
|
||||
CLog.LogError("Error opening Playlist File " + PlaylistFile + ": " + e.Message);
|
||||
}
|
||||
|
||||
if (loaded)
|
||||
{
|
||||
string value = String.Empty;
|
||||
if (CHelper.GetValueFromXML("//root/Info/PlaylistName", navigator, ref value, value))
|
||||
{
|
||||
PlaylistName = value;
|
||||
|
||||
Songs = new List<CPlaylistSong>();
|
||||
|
||||
List<string> songs = CHelper.GetValuesFromXML("Songs", navigator);
|
||||
string artist = String.Empty;
|
||||
string title = String.Empty;
|
||||
GameModes.EGameMode gm = GameModes.EGameMode.TR_GAMEMODE_NORMAL;
|
||||
|
||||
for (int i = 0; i < songs.Count; i++)
|
||||
{
|
||||
CHelper.GetValueFromXML("//root/Songs/" + songs[i] + "/Artist", navigator, ref artist, String.Empty);
|
||||
CHelper.GetValueFromXML("//root/Songs/" + songs[i] + "/Title", navigator, ref title, String.Empty);
|
||||
CHelper.TryGetEnumValueFromXML<GameModes.EGameMode>("//root/Songs/" + songs[i] + "/GameMode", navigator, ref gm);
|
||||
|
||||
CPlaylistSong song = new CPlaylistSong();
|
||||
CSong[] AllSongs = CSongs.AllSongs;
|
||||
|
||||
for (int s = 0; s < AllSongs.Length; s++)
|
||||
{
|
||||
if (AllSongs[s].Artist == artist && AllSongs[s].Title == title)
|
||||
{
|
||||
song.SongID = AllSongs[s].ID;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
song.gm = gm;
|
||||
|
||||
Songs.Add(song);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
CLog.LogError("Can't find PlaylistName in Playlist File: " + PlaylistFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user