Files
BeWoPlaner/BeWo/ViewModel/AiConversationMessageVM.cs
2026-07-28 11:16:58 +02:00

93 lines
2.7 KiB
C#

using System;
using BS.Shared;
using BS.Shared.DataContracts.Feature.AI;
using Newtonsoft.Json;
namespace BeWo.ViewModel
{
public class AiConversationMessageVM : AbstractDCMapperVM<AiConversationMessageDC>
{
private bool _IsChecked;
private string _Message;
public AiConversationMessageVM(AiConversationMessageDC dc) : base(dc, dc.Oid is null)
{
}
public event EventHandler IsCheckedChanged;
public bool IsChecked
{
get { return _IsChecked; }
set
{
if (!AreDifferent(IsChecked, value))
return;
_IsChecked = value;
FirePropertyChanged(nameof(IsChecked));
IsCheckedChanged?.Invoke(this, EventArgs.Empty);
}
}
public string Message
{
get { return _Message; }
set
{
if (!AreDifferent(Message, value))
return;
_Message = value;
StoreDirtyInformation(AreDifferent(DataContract.Message, value), nameof(Message));
FirePropertyChanged(nameof(Message));
}
}
public AiConversationMessageRole Role => DataContract.Role;
public string ModelName => DataContract.ModelName;
public int Duration => DataContract.Duration ?? 0;
public string DurationSec => ((double)Duration / 1000).ToString("0.#");
public DateTime Created => DataContract.Created;
public bool ShowMessage => DataContract.ShowMessage;
public string UsedPromptbausteinTitle => DataContract.UsedPromptbausteinTitle;
/// <summary>True, wenn die Nachricht mittels Promptbaustein erstellt wurde (Titel gecacht).</summary>
public bool HasUsedPromptbaustein => !string.IsNullOrWhiteSpace(UsedPromptbausteinTitle);
/// <summary>Steuert, ob der Prompt ausklappbar ist. False => Button disabled + Tooltip "Versteckt".</summary>
public bool ShowPrompt => DataContract.ShowPrompt;
/// <summary>Prompt-Text des verwendeten Promptbausteins (nur befüllt, wenn ShowPrompt true).</summary>
public string UsedPromptbausteinContent => DataContract.UsedPromptbausteinContent;
/// <summary>Schrittnummer innerhalb der Routine (0-basiert), sonst null.</summary>
public int? StepCount => DataContract.StepCount;
/// <summary>Platzhalter für ausgeblendete Nachrichten: Promptbaustein-Titel, sonst Standardtext.</summary>
public string HiddenMessageText => string.IsNullOrWhiteSpace(UsedPromptbausteinTitle)
? "Nachricht ausgeblendet"
: UsedPromptbausteinTitle;
protected override void InitByDataContract(AiConversationMessageDC pDataContract)
{
_Message = pDataContract.Message;
}
protected override AiConversationMessageDC MapToDataContract(AiConversationMessageDC pDataContract, bool doCommit)
{
pDataContract.Message = _Message;
return pDataContract;
}
public void SetIsChecked(bool value)
{
_IsChecked = value;
FirePropertyChanged(nameof(IsChecked));
}
}
}