126 lines
4.8 KiB
C#
126 lines
4.8 KiB
C#
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()
|
||
{
|
||
basic = new("", "", "", "", 1, 1, "");
|
||
A = new("", "");
|
||
B = new("", "");
|
||
isPublicSong = false;
|
||
}
|
||
public SongData(string songNumber, string song, string filename, int humanVoice, bool isPublic)
|
||
{
|
||
basic = new(songNumber, song, "", filename, humanVoice, 0, "");
|
||
isPublicSong = isPublic;
|
||
}
|
||
public SongData(string songNumber, string song, string artistA, string artistB, string filename, string artistASimplified, string artistBSimplified, string songSimplified, int humanVoice,int dbChange,string situation)
|
||
{
|
||
basic=new(songNumber,song,songSimplified,filename,humanVoice,dbChange,situation);
|
||
A = new Artist(artistA, artistASimplified);
|
||
B = !artistB.Equals("") ? new Artist(artistB, artistBSimplified) : null;
|
||
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() => basic.getNumber();
|
||
public string getName(bool IsSimplified=false) => basic.getName(IsSimplified);
|
||
public string getName() => basic.getName();
|
||
public string getArtist_A(bool IsSimplified) => A.getName(IsSimplified);
|
||
public string getArtist_A() => A.getName();
|
||
public string getArtist_B(bool IsSimplified) => B.getName(IsSimplified);
|
||
public string getArtist_B() => B.getName();
|
||
public int getNameLength() =>basic.getName().Length;
|
||
public string getFileName() => 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 bool FileExistsInServers()
|
||
{
|
||
foreach (var server in Utils.Env.GetSongServers())
|
||
{
|
||
try
|
||
{
|
||
string fullPath = Path.Combine(server, basic.getFileName());
|
||
if (File.Exists(fullPath))
|
||
{
|
||
Console.WriteLine($"找到檔案: {fullPath}");
|
||
return true;
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
Console.WriteLine($"檢查檔案時發生錯誤: {ex.Message}");
|
||
}
|
||
}
|
||
|
||
Console.WriteLine($"全部 server 都找不到檔案: {basic.getFileName()}");
|
||
return false;
|
||
}
|
||
|
||
public string getFile()
|
||
{
|
||
return FindExistingPath(basic.getFileName());
|
||
}
|
||
private string FindExistingPath(string filename)
|
||
{
|
||
foreach (var server in Utils.Env.GetSongServers())
|
||
{
|
||
string fullPath = Path.Combine(server, filename);
|
||
if (File.Exists(fullPath)) return fullPath;
|
||
}
|
||
return null; // 找不到就回原本的 filename,不加路徑
|
||
}
|
||
public Color GetStateColor() => state switch
|
||
{
|
||
PlayState.Played => Color.Gray,
|
||
PlayState.Skipped => Color.Gray,
|
||
PlayState.NoFile => Color.Gray,
|
||
PlayState.Playing => Color.LimeGreen,
|
||
PlayState.InsertPlayback => Color.Gold,
|
||
_ => Color.White
|
||
};
|
||
public string GetStateTxt(bool IsSimplified) => (state==PlayState.NotPlayed)?"":$"({state.GetDescription(IsSimplified)})";
|
||
public void SetState(PlayState s) => state = s;
|
||
|
||
public PlayState GetState() => state;
|
||
|
||
public int getHumanVoice() => basic.getHumanVoice();
|
||
public override string ToString()
|
||
{
|
||
return String.Format("{0} {1}", basic.getName(),state.GetDescription() );
|
||
}
|
||
}
|
||
} |