using System; using System.Collections.Generic; using System.ComponentModel; using System.Runtime.CompilerServices; using Newtonsoft.Json; #nullable disable namespace BililiveRecorder.Core.Config.V1 { [Obsolete] [JsonObject(memberSerialization: MemberSerialization.OptIn)] internal class ConfigV1 : INotifyPropertyChanged { //private static readonly Logger logger = LogManager.GetCurrentClassLogger(); /// /// 房间号列表 /// [JsonProperty("roomlist")] public List RoomList { get; set; } = new List(); /// /// 启用的功能 /// //[JsonProperty("feature")] //public EnabledFeature EnabledFeature { get => this._enabledFeature; set => this.SetField(ref this._enabledFeature, value); } /// /// 剪辑-过去的时长(秒) /// [JsonProperty("clip_length_future")] public uint ClipLengthFuture { get => this._clipLengthFuture; set => this.SetField(ref this._clipLengthFuture, value); } /// /// 剪辑-将来的时长(秒) /// [JsonProperty("clip_length_past")] public uint ClipLengthPast { get => this._clipLengthPast; set => this.SetField(ref this._clipLengthPast, value); } /// /// 自动切割模式 /// [JsonProperty("cutting_mode")] public CuttingMode CuttingMode { get => this._cuttingMode; set => this.SetField(ref this._cuttingMode, value); } /// /// 自动切割数值(分钟/MiB) /// [JsonProperty("cutting_number")] public uint CuttingNumber { get => this._cuttingNumber; set => this.SetField(ref this._cuttingNumber, value); } /// /// 录制断开重连时间间隔 毫秒 /// [JsonProperty("timing_stream_retry")] public uint TimingStreamRetry { get => this._timingStreamRetry; set => this.SetField(ref this._timingStreamRetry, value); } /// /// 连接直播服务器超时时间 毫秒 /// [JsonProperty("timing_stream_connect")] public uint TimingStreamConnect { get => this._timingStreamConnect; set => this.SetField(ref this._timingStreamConnect, value); } /// /// 弹幕服务器重连时间间隔 毫秒 /// [JsonProperty("timing_danmaku_retry")] public uint TimingDanmakuRetry { get => this._timingDanmakuRetry; set => this.SetField(ref this._timingDanmakuRetry, value); } /// /// HTTP API 检查时间间隔 秒 /// [JsonProperty("timing_check_interval")] public uint TimingCheckInterval { get => this._timingCheckInterval; set => this.SetField(ref this._timingCheckInterval, value); } /// /// 最大未收到新直播数据时间 毫秒 /// [JsonProperty("timing_watchdog_timeout")] public uint TimingWatchdogTimeout { get => this._timingWatchdogTimeout; set => this.SetField(ref this._timingWatchdogTimeout, value); } /// /// 请求 API 时使用的 Cookie /// [JsonProperty("cookie")] public string Cookie { get => this._cookie; set => this.SetField(ref this._cookie, value); } /// /// 是否同时录制弹幕 /// [JsonProperty("record_danmaku")] public bool RecordDanmaku { get => this._recordDanmaku; set => this.SetField(ref this._recordDanmaku, value); } /// /// 是否记录弹幕原始数据 /// [JsonProperty("record_danmaku_raw")] public bool RecordDanmakuRaw { get => this._recordDanmakuRaw; set => this.SetField(ref this._recordDanmakuRaw, value); } /// /// 是否同时录制 SuperChat /// [JsonProperty("record_danmaku_sc")] public bool RecordDanmakuSuperChat { get => this._recordDanmakuSuperChat; set => this.SetField(ref this._recordDanmakuSuperChat, value); } /// /// 是否同时录制 礼物 /// [JsonProperty("record_danmaku_gift")] public bool RecordDanmakuGift { get => this._recordDanmakuGift; set => this.SetField(ref this._recordDanmakuGift, value); } /// /// 是否同时录制 上船 /// [JsonProperty("record_danmaku_guard")] public bool RecordDanmakuGuard { get => this._recordDanmakuGuard; set => this.SetField(ref this._recordDanmakuGuard, value); } /// /// 触发 的弹幕个数 /// [JsonProperty("record_danmaku_flush_interval")] public uint RecordDanmakuFlushInterval { get => this._recordDanmakuFlushInterval; set => this.SetField(ref this._recordDanmakuFlushInterval, value); } /// /// 替换api.live.bilibili.com服务器为其他反代,可以支持在云服务器上录制 /// [JsonProperty("live_api_host")] public string LiveApiHost { get => this._liveApiHost; set => this.SetField(ref this._liveApiHost, value); } [JsonProperty("record_filename_format")] public string RecordFilenameFormat { get => this._record_filename_format; set => this.SetField(ref this._record_filename_format, value); } [JsonProperty("clip_filename_format")] public string ClipFilenameFormat { get => this._clip_filename_format; set => this.SetField(ref this._clip_filename_format, value); } /// /// Webhook 地址 每行一个 /// [JsonProperty("webhook_urls")] public string WebHookUrls { get => this._webhook_urls; set => this.SetField(ref this._webhook_urls, value); } #region INotifyPropertyChanged public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); protected bool SetField(ref T field, T value, [CallerMemberName] string propertyName = "") { if (EqualityComparer.Default.Equals(field, value)) return false; // logger.Trace("设置 [{0}] 的值已从 [{1}] 修改到 [{2}]", propertyName, field, value); field = value; this.OnPropertyChanged(propertyName); return true; } #endregion private uint _clipLengthPast = 20; private uint _clipLengthFuture = 10; private uint _cuttingNumber = 10; //private EnabledFeature _enabledFeature = EnabledFeature.RecordOnly; private CuttingMode _cuttingMode = CuttingMode.Disabled; private uint _timingWatchdogTimeout = 10 * 1000; private uint _timingStreamRetry = 6 * 1000; private uint _timingStreamConnect = 5 * 1000; private uint _timingDanmakuRetry = 15 * 1000; private uint _timingCheckInterval = 5 * 60; private string _cookie = string.Empty; private string _record_filename_format = @"{roomid}-{name}/录制-{roomid}-{date}-{time}-{title}.flv"; private string _clip_filename_format = @"{roomid}-{name}/剪辑片段-{roomid}-{date}-{time}-{title}.flv"; private bool _recordDanmaku = false; private bool _recordDanmakuRaw = false; private bool _recordDanmakuSuperChat = false; private bool _recordDanmakuGift = false; private bool _recordDanmakuGuard = false; private uint _recordDanmakuFlushInterval = 20; private string _liveApiHost = "https://api.live.bilibili.com"; private string _webhook_urls = ""; } }