------ #### V1.0.2404.1201 - 新增支持手动运行规则。 - 规则播放时间间隔不再针对全局声效,而只针对当前规则声效。 - 修复规则中播放文件夹可能导致无法执行的BUG。 - 修复规则不勾选礼物和点赞,则无法执行的BUG。
362 lines
14 KiB
C#
362 lines
14 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// FrmRuleView.xaml 的交互逻辑
|
|
/// </summary>
|
|
public partial class FrmDirectView : UserControl
|
|
{
|
|
public FrmDirectView()
|
|
{
|
|
InitializeComponent();
|
|
Config.CreateDb();
|
|
LvLogs.ItemsSource = list_logs;
|
|
LvGiftLogs.ItemsSource = list_gift_logs;
|
|
LoadDb();
|
|
WeakReferenceMessenger.Default.Register<MsgToken>(this, OnReceive);
|
|
}
|
|
public ObservableCollection<LogInfo> list_logs { get; set; } = new ObservableCollection<LogInfo>();
|
|
public ObservableCollection<GiftLogInfo> list_gift_logs { get; set; } = new ObservableCollection<GiftLogInfo>();
|
|
public ObservableCollection<DirectInfo> list { get; set; } = new ObservableCollection<DirectInfo>();
|
|
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<MsgToken>(new MsgToken(effectInfo) { ID = MsgTokenId.Effects, From = "Web", Msg = "Close" });
|
|
WeakReferenceMessenger.Default.Send<MsgToken>(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<MsgToken>(new MsgToken(effectInfo) { ID = MsgTokenId.Effects, From = "Web", Msg = "222" });
|
|
}
|
|
}
|
|
public class LogInfo : ObservableObject
|
|
{
|
|
/// <summary>
|
|
/// id
|
|
/// </summary>
|
|
public int Id { get; set; } = 0;
|
|
/// <summary>
|
|
/// AddTime
|
|
/// </summary>
|
|
public DateTime AddTime { get; set; } = DateTime.Now;
|
|
/// <summary>
|
|
/// AddTimeStr
|
|
/// </summary>
|
|
public string AddTimeStr {
|
|
get
|
|
{
|
|
return AddTime.ToString("HH:mm:ss");
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Content
|
|
/// </summary>
|
|
public string Content { get; set; } = "";
|
|
}
|
|
public class GiftLogInfo : ObservableObject
|
|
{
|
|
/// <summary>
|
|
/// id
|
|
/// </summary>
|
|
public int Id { get; set; } = 0;
|
|
/// <summary>
|
|
/// Content
|
|
/// </summary>
|
|
public string ImgPath { get; set; } = "";
|
|
/// <summary>
|
|
/// Content
|
|
/// </summary>
|
|
public string Content { get; set; } = "";
|
|
}
|
|
public class DirectInfo : ObservableObject
|
|
{
|
|
/// <summary>
|
|
/// id
|
|
/// </summary>
|
|
public int Id { get; set; } = 0;
|
|
/// <summary>
|
|
/// 名称
|
|
/// </summary>
|
|
public string Name { get; set; } = "";
|
|
/// <summary>
|
|
/// 直播平台
|
|
/// </summary>
|
|
public string Platform { get; set; } = "";
|
|
/// <summary>
|
|
/// 直播ID
|
|
/// </summary>
|
|
public string DirectId { get; set; } = "";
|
|
/// <summary>
|
|
/// 编辑时间
|
|
/// </summary>
|
|
public string EditTime { get; set; } = "";
|
|
private string _state="";
|
|
/// <summary>
|
|
/// 状态
|
|
/// </summary>
|
|
public string State {
|
|
get => _state;
|
|
set => SetProperty(ref _state, value);
|
|
}
|
|
}
|
|
}
|