2025-07-08 13:37:12 +08:00
|
|
|
|
using DualScreenDemo;
|
|
|
|
|
using System;
|
|
|
|
|
using System.IO;
|
2025-07-14 18:08:12 +08:00
|
|
|
|
using System.Windows.Markup;
|
2025-04-07 16:54:10 +08:00
|
|
|
|
namespace DBObj
|
|
|
|
|
{
|
|
|
|
|
public class SongData
|
|
|
|
|
{
|
2025-07-14 18:08:12 +08:00
|
|
|
|
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)
|
2025-07-04 18:19:41 +08:00
|
|
|
|
{
|
2025-07-14 18:08:12 +08:00
|
|
|
|
basic=new(songNumber,song,"",filename,humanVoice);
|
2025-07-08 13:37:12 +08:00
|
|
|
|
isPublicSong = isPublic;
|
2025-07-04 18:19:41 +08:00
|
|
|
|
}
|
|
|
|
|
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
|
|
|
|
{
|
2025-07-14 18:08:12 +08:00
|
|
|
|
basic=new(songNumber,song,songSimplified,filename,humanVoice);
|
2025-08-11 17:36:01 +08:00
|
|
|
|
A = new Artist(artistA, artistASimplified);
|
|
|
|
|
B = !artistB.Equals("") ? new Artist(artistB, artistBSimplified) : null;
|
|
|
|
|
isPublicSong = false;
|
2025-07-08 13:37:12 +08:00
|
|
|
|
}
|
2025-07-21 12:57:23 +08:00
|
|
|
|
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;
|
|
|
|
|
|
2025-08-11 17:36:01 +08:00
|
|
|
|
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();
|
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()
|
|
|
|
|
{
|
2025-07-14 18:08:12 +08:00
|
|
|
|
return B!=null
|
|
|
|
|
? $"{A.getName(false)} - {B.getName(false)}"
|
|
|
|
|
: A.getName(false);
|
2025-07-08 18:13:36 +08:00
|
|
|
|
}
|
|
|
|
|
public string name_text()
|
|
|
|
|
{
|
2025-07-14 18:08:12 +08:00
|
|
|
|
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-08-01 16:37:33 +08:00
|
|
|
|
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;
|
|
|
|
|
}
|
2025-07-14 18:08:12 +08:00
|
|
|
|
|
2025-07-08 18:13:36 +08:00
|
|
|
|
public string getFile()
|
|
|
|
|
{
|
2025-07-14 18:08:12 +08:00
|
|
|
|
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)
|
|
|
|
|
{
|
2025-07-16 18:25:56 +08:00
|
|
|
|
foreach (var server in Utils.Env.GetSongServers())
|
2025-07-08 18:13:36 +08:00
|
|
|
|
{
|
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
|
|
|
|
}
|
2025-08-11 17:36:01 +08:00
|
|
|
|
public Color GetStateColor() => state switch
|
2025-07-08 13:37:12 +08:00
|
|
|
|
{
|
2025-08-11 17:36:01 +08:00
|
|
|
|
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;
|
2025-04-07 16:54:10 +08:00
|
|
|
|
|
2025-08-11 17:36:01 +08:00
|
|
|
|
public PlayState GetState() => state;
|
|
|
|
|
|
|
|
|
|
public int getHumanVoice() => basic.getHumanVoice();
|
2025-04-07 16:54:10 +08:00
|
|
|
|
public override string ToString()
|
|
|
|
|
{
|
2025-08-06 09:19:34 +08:00
|
|
|
|
return String.Format("{0} {1}", basic.getName(),state.GetDescription() );
|
2025-04-07 16:54:10 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|