superstar_v2/DBObj/SongData.cs

110 lines
4.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using DualScreenDemo;
using System;
using System.IO;
using System.Windows.Markup;
namespace DBObj
{
public class SongData
{
private Song basic;
private Artist A ;
private Artist B ;
public bool isPublicSong { get; set; }
public PlayState state;
public SongData(string songNumber, string song, string filename, int humanVoice, bool isPublic)
{
basic=new(songNumber,song,"",filename,humanVoice);
isPublicSong = isPublic;
}
public SongData(string songNumber, string song, string artistA, string artistB, string filename, string artistASimplified, string artistBSimplified, string songSimplified, int humanVoice)
{
basic=new(songNumber,song,songSimplified,filename,humanVoice);
A= new Artist(artistA, artistASimplified);
if(artistB!=null){
B = new Artist(artistB, artistBSimplified);
}
isPublicSong = false;
}
public SongData(SongData value,PlayState s){
basic = value.getBasic();
A = value.getA();
B = value.getB();
state =s;
}
public Song getBasic() => basic;
public Artist getA() => A;
public Artist getB() => B;
public string getNumber() {return basic.getNumber();}
public string getName(bool IsSimplified=false) { return basic.getName(IsSimplified); }
public string getName() { return basic.getName();}
public string getArtist_A(bool IsSimplified) { return A.getName(IsSimplified); }
public string getArtist_A() { return A.getName();}
public string getArtist_B(bool IsSimplified) { return B.getName(IsSimplified); }
public string getArtist_B() { return B.getName();}
public int getNameLength() { return basic.getName().Length; }
public string getFileName() {return basic.getFileName();}
public string next_song_text()
{
var str = (state == PlayState.InsertPlayback) ? GetStateTxt(false) : "";
return String.Format("下一首:{0} {1}", basic.getName(false),str);
}
public string artist_text()
{
return B!=null
? $"{A.getName(false)} - {B.getName(false)}"
: A.getName(false);
}
public string name_text()
{
return B!=null
? String.Format("{0} - {1} - {2}", A.getName(false), B.getName(false), basic.getName(false))
: String.Format("{0} - {1}", A.getName(false), basic.getName(false));
}
public string getFile()
{
return FindExistingPath(basic.getFileName());
}
private string FindExistingPath(string filename)
{
foreach (var server in Utils.Env.GetSongServers())
{
Console.WriteLine($"伺服器路徑: '{server}'");
string fullPath = Path.Combine(server, filename);
if (File.Exists(fullPath)) return fullPath;
}
return null; // 找不到就回原本的 filename不加路徑
}
public Color GetStateColor(){
Color c = Color.White;
if (state == PlayState.Played){
c = Color.Gray;//Color.FromArgb(200, 75, 125); // 播畢顏色:紫紅色
}else if (state == PlayState.Playing){
c = Color.LimeGreen;
}else if (state == PlayState.InsertPlayback){
c = Color.Gold;
}
return c;
}
public string GetStateTxt(bool IsSimplified){
return (state==PlayState.NotPlayed)?"":$"({state.GetDescription(IsSimplified)})";
}
public void SetState(PlayState s) => state = s;
public PlayState GetState()
{
return state;
}
public int getHumanVoice() { return basic.getHumanVoice(); }
public override string ToString()
{
return B!=null
? String.Format("{0} - {1} - {2} - {3}", state, A.getName(), B.getName(), basic.getName())
: String.Format("{0} - {1} - {2}", state, A.getName(), basic.getName());
}
}
}