/*
* Copyright (c) 2025 LG Electronics Inc.
* SPDX-License-Identifier: LicenseRef-LGE-Proprietary
*/
using Aurora.Api;
using Aurora.View;
using VisionCommon;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Reactive.Linq;
using System.Windows;
using VisionSequence.Aligner;
using VisionAligner;
namespace VisionUI.Aligner {
/// 패턴 로그 뷰 모델
public class PatternLogViewModel : NotifyPropertyChangedBase {
private Logger _Logger = new Logger(typeof(PatternLogViewModel).Name);
private ObservableCollection patternResultItems;
/// Pattern 결과 Items
public ObservableCollection PatternResultItems { get => patternResultItems; set => SetProperty(ref patternResultItems, value); }
private DateTime selectedDate;
/// 선택한 날짜
public DateTime SelectedDate { get => selectedDate; set { SetProperty(ref selectedDate, value); CalendarChanged(value); } }
private SubSysInfo _SubSysInfo;
private SubSysRecipe _SubSysRecipe;
private CsvManager _CsvManager = new CsvManager();
///
/// 생성자
///
/// 서브시스템 정보
public PatternLogViewModel(SubSysInfo subSysInfo) {
_SubSysInfo = subSysInfo;
_SubSysRecipe = VisionRecipeManager.GetSubSysRecipe(_SubSysInfo);
PatternResultItems = new ObservableCollection();
//ProcResultItemManager.SetPatternResultItems(_SubSysInfo, PatternResultItems);
SelectedDate = DateTime.Now.Date;
SetObservable();
}
private void SetObservable() {
foreach (var fovRecipe in _SubSysRecipe.FovRecipes) {
var fovInfo = VisionRecipeManager.GetFovInfo(_SubSysInfo, fovRecipe.FovId);
var disposable_1 = VisionEnv.AuroraEnv.EventObservable.AsObservable(VisionEventId.UPDATE_PATTERN_RESULT).
Where(x => x.From == fovInfo.GetKey()).Subscribe(msg => UpdatePatternResult(msg));
DisposableManager.AddDisposable(eDpsGroupKey.SubMenu_Align, disposable_1);
var disposable_2 = VisionEnv.AuroraEnv.EventObservable.AsObservable(VisionEventId.UPDATE_PATTERN_RESULTS).
Where(x => x.From == fovInfo.GetKey()).Subscribe(msg => UpdatePatternResults(msg));
DisposableManager.AddDisposable(eDpsGroupKey.SubMenu_Align, disposable_2);
}
}
///
/// 패턴 결과 업데이트
///
/// 이벤트 메세지
public void UpdatePatternResult(EventMessage msg) {
var patternResult = msg.Param as PatternResult;
PatternResultItem item = PatternResultItemManager.GetPatternResultItem(_SubSysInfo, patternResult);
Application.Current.Dispatcher.BeginInvoke(
new Action(() => {
PatternResultItems.Add(item);
}));
_CsvManager.SaveCsv(_SubSysInfo, item, eSaveDataType.Pattern);
}
///
/// 여러개의 패턴 결과 업데이트
///
/// 이벤트 메세지
public void UpdatePatternResults(EventMessage msg) {
if (msg.Param == null) {
_Logger.FuncE("msg.Param is null.");
return;
}
var patternResults = msg.Param as List;
Application.Current.Dispatcher.BeginInvoke(
new Action(() => {
foreach (var patternResult in patternResults) {
var item = PatternResultItemManager.GetPatternResultItem(_SubSysInfo, patternResult);
PatternResultItems.Add(item);
}
}));
var dataList = new List();
foreach (var patternResult in patternResults) {
dataList.Add(PatternResultItemManager.GetPatternResultItem(_SubSysInfo, patternResult));
}
_CsvManager.SaveCsv(_SubSysInfo, dataList, eSaveDataType.Pattern);
}
private void CalendarChanged(DateTime dateTime) {
LoadCsv(dateTime);
}
private void LoadCsv(DateTime dateTime) {
try {
PatternResultItems?.Clear();
List items =
_CsvManager.LoadCsv(_SubSysInfo, dateTime, eSaveDataType.Pattern);
if (items != null) { // 로드할 파일이 없으면 items가 null임.
foreach (PatternResultItem item in items) {
PatternResultItems.Add(item);
}
}
}
catch (Exception e) {
_Logger.FuncE(e.Message);
}
}
}
}