using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Messaging; using LiveTools.Data; using Newtonsoft.Json.Linq; using ryCommon; using ryCommonDb; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data; using System.Linq; using System.Reflection.Metadata; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; namespace LiveTools { /// /// FrmRuleView.xaml 的交互逻辑 /// public partial class FrmDirectView : UserControl { public FrmDirectView() { InitializeComponent(); Config.CreateDb(); LvLogs.ItemsSource = list_logs; LvGiftLogs.ItemsSource = list_gift_logs; LoadDb(); WeakReferenceMessenger.Default.Register(this, OnReceive); } public ObservableCollection list_logs { get; set; } = new ObservableCollection(); public ObservableCollection list_gift_logs { get; set; } = new ObservableCollection(); public ObservableCollection list { get; set; } = new ObservableCollection(); public void LoadDb() { IDbInterface db = new SQLiteDataProvider(); db.ConnDb(LiveTools.Config.DbFullPath); var ds = db.ReadData("select * from Direct"); //this.DataContext = DataList; list.Clear(); if (ds.HaveData()) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { var row = ds.GetRow(i); list.Add(new DirectInfo() {Id=row["id"].ToInt(), Name = row["Name"].ToString()??"", Platform = row["Platform"].ToString() ?? "", DirectId = row["DirectId"].ToString() ?? "", EditTime = row["EditTime"].ToInt64().ToDateTime().ToString()}); } } ds?.Dispose(); LvDirect.ItemsSource = list; db.Free(); } private void BtnAdd_Click(object sender, RoutedEventArgs e) { FrmAddDirect frm = new FrmAddDirect { SelectedId = -1, Owner = Application.Current.MainWindow, }; if (frm.ShowDialog()==true) { LoadDb(); } } private void EditDirect() { var row = LvDirect.SelectedItem as DirectInfo; if (row == null) { return; } FrmAddDirect frm = new FrmAddDirect { SelectedId = row.Id, Title = "修改直播", Owner = Application.Current.MainWindow, }; frm.GetInfo(); if (frm.ShowDialog() == true) { LoadDb(); } } private void BtnEdit_Click(object sender, RoutedEventArgs e) { EditDirect(); } private void LvRules_MouseDoubleClick(object sender, MouseButtonEventArgs e) { var row = LvDirect.SelectedItem as DirectInfo; if (row == null) { return; } EditDirect(); } private void BtnDel_Click(object sender, RoutedEventArgs e) { var row = LvDirect.SelectedItem as DirectInfo; if (row == null) { return; } if(HandyControl.Controls.MessageBox.Show("一旦删除,将无法恢复。确定要删除吗?","警告",MessageBoxButton.OKCancel)!= MessageBoxResult.OK) { return; } IDbInterface db = new SQLiteDataProvider(); db.ConnDb(LiveTools.Config.DbFullPath); db.DelById("Direct", row.Id.ToString()); list.Remove(row); db.Free(); } private void LvRules_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { var point = e.GetPosition(null); var hitTestResult = VisualTreeHelper.HitTest(LvDirect, point); if (hitTestResult == null) { LvDirect.SelectedItem = null; } else if(hitTestResult.VisualHit is ScrollViewer) { LvDirect.SelectedItem = null; } } private void UserControl_Loaded(object sender, RoutedEventArgs e) { } private void OnReceive(object recipient, MsgToken message) { if (message.Value is EffectInfo info) { if (message.Msg == "Close") { for (int i = 0; i < list.Count; i++) { if (list[i].Id == info.ID) { list[i].State = ""; var row = LvDirect.SelectedItem as DirectInfo; if (row != null && row.Id== info.ID) { BtnStart.Content = "开启监控"; BtnTestGifts.IsEnabled = false; } break; } } } } } private void BtnStart_Click(object sender, RoutedEventArgs e) { if(Config.MustUpdate) { HandyControl.Controls.MessageBox.Show("当前版本已经过老,请更新到新版再使用。", "提示"); RyFiles.OpenUrl(Config.NewVerUrl); return; } var row = LvDirect.SelectedItem as DirectInfo; if (row == null) { return; } ///如果已经过期 if (Config.UserInfo.UserId.Length == 0 || Config.UserInfo.OutTime < DateTime.Now.ToInt64() || Config.UserInfo.isOut == 1) { HandyControl.Controls.MessageBox.Show("当前账号VIP有效期已经过期,请及时续费,否则功能将失效。", "提示"); } if (row.State.Length == 0) { row.State = "运行中"; BtnTestGifts.IsEnabled = true; BtnStart.Content = "停止监控"; FrmWeb frmWeb = new FrmWeb(); frmWeb.DirectInfo = row; frmWeb.Show(); FrmEffects frmEffects = new FrmEffects(); frmEffects.Title = row.Name + "-" + row.Platform + "特效"; frmEffects.DirectInfo = row; frmEffects.Show(); } else { EffectInfo effectInfo = new EffectInfo(); effectInfo.ID = row.Id; effectInfo.EffectMode = -1; WeakReferenceMessenger.Default.Send(new MsgToken(effectInfo) { ID = MsgTokenId.Effects, From = "Web", Msg = "Close" }); WeakReferenceMessenger.Default.Send(new MsgToken(effectInfo) { ID = MsgTokenId.Effects, From = "Effects", Msg = "Close" }); } } private void LvDirect_SelectionChanged(object sender, SelectionChangedEventArgs e) { list_logs.Clear(); list_gift_logs.Clear(); if (e.AddedItems.Count==1) { var row = e.AddedItems[0] as DirectInfo; if (row == null) { return; } if(row.State == "运行中") { BtnStart.Content = "停止监控"; BtnTestGifts.IsEnabled = true; } else { BtnStart.Content = "开启监控"; BtnTestGifts.IsEnabled = false; } if (System.IO.File.Exists(Config.UserDbFolder + "\\DirectLogs\\" + row.Id + ".log.data")) { var time = DateTime.Now.Date; IDbInterface db_logs = new SQLiteDataProvider(); db_logs.ConnDb(Config.UserDbFolder + "\\DirectLogs\\" + row.Id + ".log.data"); var ds = db_logs.ReadData("select * from Logs where AddTime>="+time.ToInt64()+ " and AddTime<"+ time.AddDays(1).ToInt64()+" order by AddTime desc"); if (ds.HaveData()) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { var item = ds.GetRow(i); list_logs.Add(new LogInfo() { Id = item["id"].ToInt(), Content= item["NickName"].ToString()+":"+ item["Content"].ToString(), AddTime= item["AddTime"].ToInt64().ToDateTime() }); } } ds?.Dispose(); var ds_gifts = db_logs.ReadData("select distinct giftFileName from GiftLogs where AddTime>=" + time.ToInt64() + " and AddTime<" + time.AddDays(1).ToInt64()); if (ds_gifts.HaveData()) { for (int i = 0; i < ds_gifts.Tables[0].Rows.Count; i++) { var item = ds_gifts.GetRow(i); if ((item[0].ToString()??"").Length == 0) { continue; } var ds_gift_count=db_logs.ReadData("select sum(GiftCount) from GiftLogs where AddTime>=" + time.ToInt64() + " and AddTime<" + time.AddDays(1).ToInt64()+ " and giftFileName='"+ item[0].ToString() + "'"); list_gift_logs.Add(new GiftLogInfo() { ImgPath= Config.AllUserDbFolder + "\\GiftImages\\Auto\\" + item[0].ToString(), Content=ds_gift_count.GetFirstRowCellValue()+"个" }); ds_gift_count?.Dispose(); } } ds_gifts?.Dispose(); db_logs.Free(); } } else { BtnTestGifts.IsEnabled = false; } } private void BtnTestGifts_Click(object sender, RoutedEventArgs e) { var row = LvDirect.SelectedItem as DirectInfo; if (row == null) { return; } if (row.State.Length == 0) { return; } EffectInfo effectInfo = new EffectInfo(); effectInfo.ID = row.Id; effectInfo.LoopCount = 1; var picPath = ""; var gifts = System.IO.Directory.GetFiles(Config.SysDbFolder+ "\\Gifts","*.png"); if(gifts!=null && gifts.Length>0) { Random rd = new Random(); picPath = gifts[rd.Next(0, gifts.Length)]; } if (picPath.Length > 0) { JObject jo = new JObject() { { "Name","Rule_ShowPic"}, { "Mode","ShowPic"}, { "PlaySound", Config.PlaySound}, { "PicPath",API.GetRelativePath(picPath) }, { "PicSize",Config.PicSize }, { "PicCount", Config.PicCount }, { "MultiPlaySound", Config.MultiPlaySound }, }; JArray jarr = new JArray(); jarr.Add(jo); effectInfo.ActionList = jarr; } //HandyControl.Controls.MessageBox.Show(row["RuleName"].ToString()); WeakReferenceMessenger.Default.Send(new MsgToken(effectInfo) { ID = MsgTokenId.Effects, From = "Web", Msg = "222" }); } } public class LogInfo : ObservableObject { /// /// id /// public int Id { get; set; } = 0; /// /// AddTime /// public DateTime AddTime { get; set; } = DateTime.Now; /// /// AddTimeStr /// public string AddTimeStr { get { return AddTime.ToString("HH:mm:ss"); } } /// /// Content /// public string Content { get; set; } = ""; } public class GiftLogInfo : ObservableObject { /// /// id /// public int Id { get; set; } = 0; /// /// Content /// public string ImgPath { get; set; } = ""; /// /// Content /// public string Content { get; set; } = ""; } public class DirectInfo : ObservableObject { /// /// id /// public int Id { get; set; } = 0; /// /// 名称 /// public string Name { get; set; } = ""; /// /// 直播平台 /// public string Platform { get; set; } = ""; /// /// 直播ID /// public string DirectId { get; set; } = ""; /// /// 编辑时间 /// public string EditTime { get; set; } = ""; private string _state=""; /// /// 状态 /// public string State { get => _state; set => SetProperty(ref _state, value); } } }