using System; using System.Collections.Generic; using System.Text; using Crosstales.Radio.Model.Enum; using Crosstales.Radio.Util; using UnityEngine; namespace Crosstales.Radio.Model { [Serializable] public class RadioStation { [Tooltip("Name of the radio station.")] [Header("Station Settings")] public string Name; [Tooltip("URL of the station.")] public string Url; [Tooltip("Name of the station.")] [Header("Meta Data")] public string Station; [Tooltip("Genres of the radio.")] public string Genres; [Range(0f, 6f)] [Tooltip("Your rating of the radio.")] public float Rating; [Multiline] [Tooltip("Description of the radio station.")] public string Description; [Tooltip("Icon to represent the radio station.")] public Sprite Icon; [Tooltip("Audio format of the station.")] [Header("Stream Settings")] public AudioFormat Format = AudioFormat.MP3; [Tooltip("Bitrate in kbit/s (default: 128).")] public int Bitrate = Config.DEFAULT_BITRATE; [Tooltip("Size of the streaming-chunk in KB (default: 32).")] public int ChunkSize = Config.DEFAULT_CHUNKSIZE; [Tooltip("Size of the local buffer in KB (default: 64).")] public int BufferSize = Config.DEFAULT_BUFFERSIZE; [Tooltip("Exclude this station if the current RadioPlayer codec is equals this one (default: AudioCodec.None).")] [Header("Codec Settings")] public AudioCodec ExcludedCodec; [HideInInspector] public long TotalDataSize; [HideInInspector] public int TotalDataRequests; [HideInInspector] public float TotalPlayTime; public readonly List PlayedRecords = new List(); private const char splitCharText = ';'; public RadioStation() { } public RadioStation(string name, string url, AudioFormat format) { Name = name.CTToTitleCase(); Url = url; Format = format; } public RadioStation(string name, string url, AudioFormat format, string station, string genres, int bitrate, float rating, string description, Sprite icon, int chunkSize = 64, int bufferSize = 64, AudioCodec excludeCodec = AudioCodec.None) : this(name, url, format) { Station = station; Genres = genres; Bitrate = bitrate; Rating = rating; Description = description; Icon = icon; ChunkSize = chunkSize; BufferSize = bufferSize; ExcludedCodec = excludeCodec; } public string ToTextLine(bool detailed = false) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append(Name); stringBuilder.Append(';'); stringBuilder.Append(Url); stringBuilder.Append(';'); stringBuilder.Append("Stream"); stringBuilder.Append(';'); stringBuilder.Append(Format); stringBuilder.Append(';'); stringBuilder.Append(Station); stringBuilder.Append(';'); stringBuilder.Append(Genres); stringBuilder.Append(';'); stringBuilder.Append(Bitrate); stringBuilder.Append(';'); stringBuilder.Append(Rating); stringBuilder.Append(';'); stringBuilder.Append(Description); stringBuilder.Append(';'); stringBuilder.Append(ExcludedCodec); if (detailed) { stringBuilder.Append(';'); stringBuilder.Append(ChunkSize); stringBuilder.Append(';'); stringBuilder.Append(BufferSize); } return stringBuilder.ToString(); } public string ToShortString() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("Name='"); stringBuilder.Append(Name); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("Url='"); stringBuilder.Append(Url); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("Station='"); stringBuilder.Append(Station); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("Genres='"); stringBuilder.Append(Genres); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("Rating='"); stringBuilder.Append(Rating); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("Description='"); stringBuilder.Append(Description); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("Icon='"); stringBuilder.Append(Icon); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("AudioFormat='"); stringBuilder.Append(Format); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("Bitrate='"); stringBuilder.Append(Bitrate); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("ChunkSize='"); stringBuilder.Append(ChunkSize); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("BufferSize='"); stringBuilder.Append(BufferSize); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("ExcludedCodec='"); stringBuilder.Append(ExcludedCodec); stringBuilder.Append("'"); return stringBuilder.ToString(); } public override bool Equals(object obj) { if (obj == null) { return false; } RadioStation radioStation = obj as RadioStation; if (radioStation == null) { return false; } return Url == radioStation.Url; } public override int GetHashCode() { return Url.GetHashCode(); } public override string ToString() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append(GetType().Name); stringBuilder.Append(Constants.TEXT_TOSTRING_START); stringBuilder.Append("Name='"); stringBuilder.Append(Name); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("Url='"); stringBuilder.Append(Url); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("Station='"); stringBuilder.Append(Station); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("Genres='"); stringBuilder.Append(Genres); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("Rating='"); stringBuilder.Append(Rating); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("Description='"); stringBuilder.Append(Description); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("Icon='"); stringBuilder.Append(Icon); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("AudioFormat='"); stringBuilder.Append(Format); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("Bitrate='"); stringBuilder.Append(Bitrate); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("ChunkSize='"); stringBuilder.Append(ChunkSize); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("BufferSize='"); stringBuilder.Append(BufferSize); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("ExcludedCodec='"); stringBuilder.Append(ExcludedCodec); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("TotalDataSize='"); stringBuilder.Append(TotalDataSize); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("TotalDataRequests='"); stringBuilder.Append(TotalDataRequests); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER); stringBuilder.Append("TotalPlayTime='"); stringBuilder.Append(TotalPlayTime); stringBuilder.Append(Constants.TEXT_TOSTRING_DELIMITER_END); stringBuilder.Append(Constants.TEXT_TOSTRING_END); return stringBuilder.ToString(); } } }