using DM_Weight.Finger; using DM_Weight.HIKVISION; using DM_Weight.msg; using DM_Weight.Port; using DM_Weight.util; using DM_Weight.Views; using log4net; using log4net.Repository.Hierarchy; using MaterialDesignThemes.Wpf; using Prism.Commands; using Prism.Events; using Prism.Mvvm; using Prism.Regions; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media; using Unity; namespace DM_Weight.ViewModels { internal class MainWindowViewModel : BindableBase { #region 录屏相关 //public Recorder _recorder; private string _outputFolder; private string _outputFilePath; //public static MainWindowViewModel vm; #endregion private readonly ILog logger = LogManager.GetLogger(typeof(MainWindowViewModel)); private string _title = "Prism App"; //标题 private ISnackbarMessageQueue _snackbarMessageQueue = new SnackbarMessageQueue(TimeSpan.FromSeconds(3)); private SolidColorBrush _colorBrush; //private PortUtil _portUtil; private ScreenUtil _screenUtil; public SolidColorBrush Background { get => _colorBrush; set => SetProperty(ref _colorBrush, value); } public ISnackbarMessageQueue SnackbarMessageQueue { get => _snackbarMessageQueue; set => SetProperty(ref _snackbarMessageQueue, value); } public string Title { get { return _title; } set { SetProperty(ref _title, value); } } IEventAggregator eventAggregator; //public MainWindowViewModel(IEventAggregator eventAggregator, PortUtil portUtil, ScreenUtil screenUtil) //{ // _portUtil = portUtil; // this.eventAggregator = eventAggregator; // this.eventAggregator.GetEvent().Subscribe(doMyPrismEvent2); // _screenUtil = screenUtil; //} private FingerprintUtil _fingerprintUtil; IRegionManager _regionManager; IUnityContainer _container; //private CHKFunction _cHKFunction; FFmpegHelper fFmpegHelper; public MainWindowViewModel(IRegionManager regionManager, IUnityContainer container, IEventAggregator eventAggregator, FingerprintUtil fingerprintUtil, ScreenUtil screenUtil, FFmpegHelper fFmpegHelper) { //vm = this; //_portUtil = portUtil; this.eventAggregator = eventAggregator; this.eventAggregator.GetEvent().Subscribe(doMyPrismEvent2); this.eventAggregator.GetEvent().Subscribe(PrintScreen); _screenUtil = screenUtil; _fingerprintUtil = fingerprintUtil; _regionManager = regionManager; _container = container; //_cHKFunction = cHKFunction; System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() => { if (App.DbConnectionFail) { _regionManager.RequestNavigate("MainRegion", "EmergencyWindow"); } else { _container.RegisterType("LoginWindow"); _regionManager.RequestNavigate("MainRegion", "LoginWindow"); } })); this.fFmpegHelper = fFmpegHelper; } void doMyPrismEvent2(AlertMsg msg) { switch (msg.Type) { case MsgType.INFO: this.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00e676")); break; case MsgType.ERROR: this.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c")); break; default: this.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00e676")); break; } SnackbarMessageQueue.Enqueue(msg.Message); } #region 录屏 /// /// 录屏事件 /// /// 0停止录屏;1开始录屏;2退出软件清进程 void PrintScreen(int type) { logger.Info($"录屏事件PrintScreen{type}"); if (type == 0) { fFmpegHelper.stopFlag = true; fFmpegHelper.StopRecording(); //StopPrintScreen(); ////删除7天前的录屏文件 //if (Directory.Exists(_outputFolder)) //{ // var files = Directory.GetFiles(_outputFolder); // foreach (var file in files) // { // var fileInfo = new FileInfo(file); // if (fileInfo.CreationTime < DateTime.Now.AddDays(-7)) // { // try // { // fileInfo.Delete(); // } // catch (Exception ex) // { // logger.Info($"删除录屏文件失败: {ex.Message}"); // } // } // } //} } else if (type == 1) { fFmpegHelper.stopFlag = false; // StartPrintScreen(); // 创建输出目录 _outputFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "Log", "ScreenRecordings"); if (!Directory.Exists(_outputFolder)) { Directory.CreateDirectory(_outputFolder); } // 生成输出文件名 string timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmss"); _outputFilePath = Path.Combine(_outputFolder, $"{timestamp}.webm"); fFmpegHelper.StartRecording(_outputFilePath, 25); } else if (type == 2) { // _recorder?.Dispose(); } } #endregion //void StopPrintScreen() //{ // //退出登录结束录屏 // _recorder?.Stop(); //} ////录屏 //void StartPrintScreen() //{ // // 创建输出目录 // _outputFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "Log", "ScreenRecordings"); // if (!Directory.Exists(_outputFolder)) // { // Directory.CreateDirectory(_outputFolder); // } // // 生成输出文件名 // string timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmss"); // _outputFilePath = Path.Combine(_outputFolder, $"{timestamp}.mp4"); // // 设置录制选项 // var options = new RecorderOptions(); // // 创建录制器实例 // _recorder = Recorder.CreateRecorder(options); // // 设置事件处理 // _recorder.OnRecordingComplete += Recorder_OnRecordingComplete; // _recorder.OnRecordingFailed += Recorder_OnRecordingFailed; // // 开始录制 // _recorder.Record(_outputFilePath); //} ////录制失败 //private void Recorder_OnRecordingFailed(object sender, RecordingFailedEventArgs e) //{ // logger.Info($"录制失败: {e.Error}"); //} ////录制完成 //private void Recorder_OnRecordingComplete(object sender, RecordingCompleteEventArgs e) //{ // logger.Info($"录制完成: {e.FilePath}"); //} } }