Changed playlist.

This commit is contained in:
Florian Kuepper committed 2012-06-19 18:12:25 +02:00
1 parent 6202c67156
commit e6556e54ee
2 files changed
+221 -198

No files matched your search

+17 -198
View File
@@ -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
}
}
+204
View File
@@ -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);
}
}
}
}
}