RyLiveTools/Source/Tools/Rules/FrmRuleView.xaml.cs
如果当时 0ec1400de9 ### 2024-04-12更新
------
####  V1.0.2404.1201
- 新增支持手动运行规则。
- 规则播放时间间隔不再针对全局声效,而只针对当前规则声效。
- 修复规则中播放文件夹可能导致无法执行的BUG。
- 修复规则不勾选礼物和点赞,则无法执行的BUG。
2024-04-13 10:13:30 +08:00

174 lines
5.6 KiB
C#

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.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 FrmRuleView :UserControl
{
public FrmRuleView()
{
InitializeComponent();
Config.CreateDb();
LoadDb();
}
public ObservableCollection<RuleInfo> list { get; set; } = new ObservableCollection<RuleInfo>();
public void LoadDb()
{
IDbInterface db = new SQLiteDataProvider();
db.ConnDb(LiveTools.Config.DbFullPath);
var ds = db.ReadData("select * from Rules order by SortIndex desc");
//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 RuleInfo() {Id=row["id"].ToInt(), RuleName = row["RuleName"].ToString()??"", EditTime = row["EditTime"].ToInt64().ToDateTime().ToString()});
}
}
ds?.Dispose();
LvRules.ItemsSource = list;
db.Free();
}
private void BtnAdd_Click(object sender, RoutedEventArgs e)
{
if (Config.MustUpdate)
{
HandyControl.Controls.MessageBox.Show("当前版本已经过老,请更新到新版再使用。", "提示");
RyFiles.OpenUrl(Config.NewVerUrl);
return;
}
FrmAddRule frm = new FrmAddRule
{
SelectedId = -1,
Owner = Application.Current.MainWindow,
};
if (frm.ShowDialog()==true)
{
LoadDb();
}
}
private void EditRule()
{
var row = LvRules.SelectedItem as RuleInfo;
if (row == null) { return; }
FrmAddRule frm = new FrmAddRule
{
SelectedId = row.Id,
Title = "修改规则",
Owner = Application.Current.MainWindow,
};
frm.GetInfo();
if (frm.ShowDialog() == true)
{
LoadDb();
}
}
private void BtnEdit_Click(object sender, RoutedEventArgs e)
{
EditRule();
}
private void LvRules_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
var row = LvRules.SelectedItem as RuleInfo;
if (row == null) { return; }
EditRule();
}
private void BtnDel_Click(object sender, RoutedEventArgs e)
{
var row = LvRules.SelectedItem as RuleInfo;
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("Rules", 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(LvRules, point);
if (hitTestResult == null)
{
LvRules.SelectedItem = null;
}
else if(hitTestResult.VisualHit is ScrollViewer item)
{
LvRules.SelectedItem = null;
}
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
}
private void Cell_Button_Click(object sender, RoutedEventArgs e)
{
var btn = sender as Button;
var c = btn.DataContext as RuleInfo;
if (c != null)
{
IDbInterface db = new SQLiteDataProvider();
db.ConnDb(LiveTools.Config.DbFullPath);
var ds = db.ReadData("select * from Rules where id="+c.Id);
if (ds.HaveData())
{
EffectInfo effectInfo = new EffectInfo();
effectInfo.ID = 0;
effectInfo.LoopCount = 1;
JObject jo = JObject.Parse(ds.GetRow(0)["RuleJson"].ToString() ?? "");
effectInfo.ActionList = jo.GetJsonValue("ActionList", new JArray());
WeakReferenceMessenger.Default.Send<MsgToken>(new MsgToken(effectInfo) { ID = MsgTokenId.Effects, From = "Web", Msg = "222" });
}
ds?.Dispose();
db.Free();
}
}
}
public class RuleInfo
{
/// <summary>
/// id
/// </summary>
public int Id { get; set; } = 0;
/// <summary>
/// 规则名称
/// </summary>
public string RuleName { get; set; } = "";
/// <summary>
/// 编辑时间
/// </summary>
public string EditTime { get; set; } = "";
}
}