superstar_v2/DBObj/SongData.cs

110 lines
4.2 KiB
C#
Raw Normal View History

2025-07-08 13:37:12 +08:00
using DualScreenDemo;
using System;
using System.IO;
using System.Windows.Markup;
2025-04-07 16:54:10 +08:00
namespace DBObj
{
public class SongData
{
private Song basic;
private Artist A ;
private Artist B ;
2025-07-08 13:37:12 +08:00
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);
2025-07-08 13:37:12 +08:00
isPublicSong = isPublic;
}
public SongData(string songNumber, string song, string artistA, string artistB, string filename, string artistASimplified, string artistBSimplified, string songSimplified, int humanVoice)
2025-04-21 11:33:31 +08:00
{
basic=new(songNumber,song,songSimplified,filename,humanVoice);
A= new Artist(artistA, artistASimplified);
if(artistB!=null){
B = new Artist(artistB, artistBSimplified);
}
2025-07-08 13:37:12 +08:00
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();}
2025-07-17 18:08:22 +08:00
public string next_song_text()
2025-07-08 18:13:36 +08:00
{
2025-07-17 18:08:22 +08:00
var str = (state == PlayState.InsertPlayback) ? GetStateTxt(false) : "";
return String.Format("下一首:{0} {1}", basic.getName(false),str);
2025-07-08 18:13:36 +08:00
}
public string artist_text()
{
return B!=null
? $"{A.getName(false)} - {B.getName(false)}"
: A.getName(false);
2025-07-08 18:13:36 +08:00
}
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));
2025-07-08 18:13:36 +08:00
}
2025-07-08 18:13:36 +08:00
public string getFile()
{
return FindExistingPath(basic.getFileName());
2025-07-08 18:13:36 +08:00
}
2025-07-08 13:37:12 +08:00
private string FindExistingPath(string filename)
{
foreach (var server in Utils.Env.GetSongServers())
2025-07-08 18:13:36 +08:00
{
Console.WriteLine($"伺服器路徑: '{server}'");
2025-07-08 13:37:12 +08:00
string fullPath = Path.Combine(server, filename);
if (File.Exists(fullPath)) return fullPath;
}
2025-07-08 18:13:36 +08:00
return null; // 找不到就回原本的 filename不加路徑
2025-07-08 13:37:12 +08:00
}
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)})";
}
2025-07-08 13:37:12 +08:00
public void SetState(PlayState s) => state = s;
public PlayState GetState()
{
return state;
2025-04-07 16:54:10 +08:00
}
public int getHumanVoice() { return basic.getHumanVoice(); }
2025-04-07 16:54:10 +08:00
public override string ToString()
{
2025-07-08 13:37:12 +08:00
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());
2025-04-07 16:54:10 +08:00
}
}
}