Merge pull request #1555 from DGP-Studio/feat/dailynote_archon

This commit is contained in:
DismissedLight
2024-05-07 15:51:43 +08:00
committed by GitHub
18 changed files with 327 additions and 40 deletions

View File

@@ -17,8 +17,13 @@
<x:String x:Key="UI_Icon_Intee_Explore_1">https://api.snapgenshin.com/static/raw/Bg/UI_Icon_Intee_Explore_1.png</x:String>
<x:String x:Key="UI_ImgSign_ItemIcon">https://api.snapgenshin.com/static/raw/Bg/UI_ImgSign_ItemIcon.png</x:String>
<x:String x:Key="UI_ItemIcon_None">https://api.snapgenshin.com/static/raw/Bg/UI_ItemIcon_None.png</x:String>
<x:String x:Key="UI_MarkQuest_Events_Proce">https://api.snapgenshin.com/static/raw/Bg/UI_MarkQuest_Events_Proce.png</x:String>
<x:String x:Key="UI_MarkTower">https://api.snapgenshin.com/static/raw/Bg/UI_MarkTower.png</x:String>
<!-- Mark -->
<x:String x:Key="UI_MarkQuest_Events_Proce">https://api.snapgenshin.com/static/raw/Mark/UI_MarkQuest_Events_Proce.png</x:String>
<x:String x:Key="UI_MarkQuest_Events_Start">https://api.snapgenshin.com/static/raw/Mark/UI_MarkQuest_Events_Start.png</x:String>
<x:String x:Key="UI_MarkQuest_Main_Proce">https://api.snapgenshin.com/static/raw/Mark/UI_MarkQuest_Main_Proce.png</x:String>
<x:String x:Key="UI_MarkQuest_Main_Start">https://api.snapgenshin.com/static/raw/Mark/UI_MarkQuest_Main_Start.png</x:String>
<x:String x:Key="UI_MarkTower">https://api.snapgenshin.com/static/raw/Mark/UI_MarkTower.png</x:String>
<!-- ItemIcon -->
<x:String x:Key="UI_ItemIcon_201">https://api.snapgenshin.com/static/raw/ItemIcon/UI_ItemIcon_201.png</x:String>

View File

@@ -23,6 +23,18 @@
"Equatable": true,
"EqualityOperators": true
},
{
"Name": "ChapterId",
"Documentation": "章节 Id",
"Equatable": true,
"EqualityOperators": true
},
{
"Name": "ChapterGroupId",
"Documentation": "章节分组 Id",
"Equatable": true,
"EqualityOperators": true
},
{
"Name": "EquipAffixId",
"Documentation": "装备属性 Id",
@@ -113,6 +125,12 @@
"Equatable": true,
"EqualityOperators": true
},
{
"Name": "QuestId",
"Documentation": "任务 Id",
"Equatable": true,
"EqualityOperators": true
},
{
"Name": "ReliquaryLevel",
"Documentation": "圣遗物等级 1 - 21",

View File

@@ -4,6 +4,8 @@
using CommunityToolkit.Mvvm.ComponentModel;
using Snap.Hutao.Core.Abstraction;
using Snap.Hutao.Model.Entity.Abstraction;
using Snap.Hutao.Model.Primitive;
using Snap.Hutao.ViewModel.DailyNote;
using Snap.Hutao.ViewModel.User;
using Snap.Hutao.Web.Hoyolab.Takumi.Binding;
using Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.DailyNote;
@@ -53,6 +55,9 @@ internal sealed class DailyNoteEntry : ObservableObject, IMappingFrom<DailyNoteE
/// </summary>
public DailyNote? DailyNote { get; set; }
[NotMapped]
public DailyNoteArchonQuestView ArchonQuestView { get; set; } = default!;
/// <summary>
/// 刷新时间
/// </summary>
@@ -128,4 +133,4 @@ internal sealed class DailyNoteEntry : ObservableObject, IMappingFrom<DailyNoteE
other.ExpeditionNotifySuppressed = ExpeditionNotifySuppressed;
other.OnPropertyChanged(nameof(ExpeditionNotifySuppressed));
}
}
}

View File

@@ -3,14 +3,42 @@
namespace Snap.Hutao.Model.Intrinsic;
internal enum QuestType
internal enum QuestType : uint
{
/// <summary>
/// Archon Quest 魔神任务
/// </summary>
AQ,
/// <summary>
/// Fractions Quest 帮派任务
/// </summary>
FQ,
/// <summary>
/// Legend Quest 传说任务
/// </summary>
LQ,
/// <summary>
/// Event Quest 活动任务
/// </summary>
EQ,
/// <summary>
/// Daily Quest 日常任务
/// </summary>
DQ,
/// <summary>
/// Indescribable Quest 不可描述的任务?
/// </summary>
IQ,
VQ,
/// <summary>
/// World Quest 世界任务
/// </summary>
WQ,
}

View File

@@ -0,0 +1,34 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Model.Intrinsic;
using Snap.Hutao.Model.Primitive;
namespace Snap.Hutao.Model.Metadata;
internal sealed class Chapter
{
public ChapterId Id { get; set; }
public ChapterGroupId GroupId { get; set; }
public QuestId BeginQuestId { get; set; }
public QuestId EndQuestId { get; set; }
public uint NeedPlayerLevel { get; set; }
public string Number { get; set; } = default!;
public string Title { get; set; } = default!;
public string Icon { get; set; } = default!;
public string ImageTitle { get; set; } = default!;
public string SerialNumberIcon { get; set; } = default!;
public City CityId { get; set; }
public QuestType QuestType { get; set; }
}

View File

@@ -6,6 +6,7 @@ namespace Snap.Hutao.Model.Metadata;
// CityTaskOpenExcelConfig
internal enum City : uint
{
None = 0,
Mondstadt = 1,
Liyue = 2,
Inazuma = 3,

View File

@@ -3044,6 +3044,9 @@
<data name="WebBridgeShareCopyToClipboardSuccess" xml:space="preserve">
<value>已复制到剪贴板</value>
</data>
<data name="WebDailyNoteArchonQuestChapterFinished" xml:space="preserve">
<value>所有魔神任务已完成</value>
</data>
<data name="WebDailyNoteArchonQuestStatusFinished" xml:space="preserve">
<value>全部完成</value>
</data>

View File

@@ -0,0 +1,13 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Model.Metadata;
using Snap.Hutao.Service.Metadata.ContextAbstraction;
namespace Snap.Hutao.Service.DailyNote;
internal class DailyNoteMetadataContext : IMetadataContext,
IMetadataListChapterSource
{
public List<Chapter> Chapters { get; set; } = default!;
}

View File

@@ -5,7 +5,11 @@ using CommunityToolkit.Mvvm.Messaging;
using Snap.Hutao.Core.DependencyInjection.Abstraction;
using Snap.Hutao.Message;
using Snap.Hutao.Model.Entity;
using Snap.Hutao.Service.Abstraction;
using Snap.Hutao.Service.Metadata;
using Snap.Hutao.Service.Metadata.ContextAbstraction;
using Snap.Hutao.Service.User;
using Snap.Hutao.ViewModel.DailyNote;
using Snap.Hutao.ViewModel.User;
using Snap.Hutao.Web.Hoyolab;
using Snap.Hutao.Web.Hoyolab.Takumi.GameRecord;
@@ -83,9 +87,18 @@ internal sealed partial class DailyNoteService : IDailyNoteService, IRecipient<U
await userService.GetRoleCollectionAsync().ConfigureAwait(false);
await RefreshDailyNotesCoreAsync(forceRefresh, token).ConfigureAwait(false);
List<DailyNoteEntry> entryList = await dailyNoteDbService.GetDailyNoteEntryListIncludingUserAsync(token).ConfigureAwait(false);
entryList.ForEach(entry => { entry.UserGameRole = userService.GetUserGameRoleByUid(entry.Uid); });
entries = entryList.ToObservableCollection();
using (IServiceScope scope = serviceProvider.CreateScope())
{
DailyNoteMetadataContext context = await scope.GetRequiredService<IMetadataService>().GetContextAsync<DailyNoteMetadataContext>(token).ConfigureAwait(false);
List<DailyNoteEntry> entryList = await dailyNoteDbService.GetDailyNoteEntryListIncludingUserAsync(token).ConfigureAwait(false);
entryList.ForEach(entry =>
{
entry.UserGameRole = userService.GetUserGameRoleByUid(entry.Uid);
entry.ArchonQuestView = DailyNoteArchonQuestView.Create(entry.DailyNote, context.Chapters);
});
entries = entryList.ToObservableCollection();
}
}
return entries;
@@ -159,4 +172,4 @@ internal sealed partial class DailyNoteService : IDailyNoteService, IRecipient<U
}
}
}
}
}

View File

@@ -0,0 +1,11 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Model.Metadata;
namespace Snap.Hutao.Service.Metadata.ContextAbstraction;
internal interface IMetadataListChapterSource
{
public List<Chapter> Chapters { get; set; }
}

View File

@@ -23,6 +23,11 @@ internal static class MetadataServiceContextExtension
listAchievementSource.Achievements = await metadataService.GetAchievementListAsync(token).ConfigureAwait(false);
}
if (context is IMetadataListChapterSource listChapterSource)
{
listChapterSource.Chapters = await metadataService.GetChapterListAsync(token).ConfigureAwait(false);
}
if (context is IMetadataListGachaEventSource listGachaEventSource)
{
listGachaEventSource.GachaEvents = await metadataService.GetGachaEventListAsync(token).ConfigureAwait(false);

View File

@@ -10,6 +10,7 @@ internal static class MetadataFileNames
public const string FileNameAvatar = "Avatar";
public const string FileNameAvatarCurve = "AvatarCurve";
public const string FileNameAvatarPromote = "AvatarPromote";
public const string FileNameChapter = "Chapter";
public const string FileNameDisplayItem = "DisplayItem";
public const string FileNameGachaEvent = "GachaEvent";
public const string FileNameMaterial = "Material";

View File

@@ -20,6 +20,11 @@ internal static class MetadataServiceListExtension
return metadataService.FromCacheOrFileAsync<List<Model.Metadata.Achievement.Achievement>>(FileNameAchievement, token);
}
public static ValueTask<List<Chapter>> GetChapterListAsync(this IMetadataService metadataService, CancellationToken token = default)
{
return metadataService.FromCacheOrFileAsync<List<Chapter>>(FileNameChapter, token);
}
public static ValueTask<List<AchievementGoal>> GetAchievementGoalListAsync(this IMetadataService metadataService, CancellationToken token = default)
{
return metadataService.FromCacheOrFileAsync<List<AchievementGoal>>(FileNameAchievementGoal, token);

View File

@@ -3,7 +3,8 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cw="using:CommunityToolkit.WinUI"
xmlns:cwc="using:CommunityToolkit.WinUI.Controls"
xmlns:cwcont="using:CommunityToolkit.WinUI.Controls"
xmlns:cwconv="using:CommunityToolkit.WinUI.Converters"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mxi="using:Microsoft.Xaml.Interactivity"
@@ -12,6 +13,7 @@
xmlns:shch="using:Snap.Hutao.Control.Helper"
xmlns:shci="using:Snap.Hutao.Control.Image"
xmlns:shcm="using:Snap.Hutao.Control.Markup"
xmlns:shme="using:Snap.Hutao.Model.Entity"
xmlns:shvc="using:Snap.Hutao.View.Control"
xmlns:shvcp="using:Snap.Hutao.View.Card.Primitive"
xmlns:shvd="using:Snap.Hutao.ViewModel.DailyNote"
@@ -26,6 +28,16 @@
<Page.Resources>
<shc:BindingProxy x:Key="ViewModelBindingProxy" DataContext="{Binding}"/>
<cwconv:BoolToObjectConverter
x:Name="DailyTaskIconConverter"
FalseValue="{StaticResource UI_MarkQuest_Events_Start}"
TrueValue="{StaticResource UI_MarkQuest_Events_Proce}"/>
<cwconv:BoolToObjectConverter
x:Name="ArchonQuestIconConverter"
FalseValue="{StaticResource UI_MarkQuest_Main_Start}"
TrueValue="{StaticResource UI_MarkQuest_Main_Proce}"/>
<DataTemplate x:Key="UserAndUidTemplate">
<Grid Padding="0,0,0,16">
<TextBlock VerticalAlignment="Center" Text="{Binding Uid}"/>
@@ -43,7 +55,7 @@
</Grid>
</DataTemplate>
<DataTemplate x:Key="DailyNoteEntryTemplate">
<DataTemplate x:Key="DailyNoteEntryTemplate" x:DataType="shme:DailyNoteEntry">
<ItemContainer cw:Effects.Shadow="{ThemeResource CompatCardShadow}">
<ItemContainer.Resources>
<SolidColorBrush x:Key="ItemContainerPointerOverBackground" Color="Transparent"/>
@@ -108,6 +120,43 @@
Grid.Row="1"
Margin="0,8,0,0"
Spacing="6">
<Grid Style="{ThemeResource GridCardStyle}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<ProgressBar
Grid.ColumnSpan="2"
Height="40"
MinHeight="48"
Background="{x:Null}"
CornerRadius="{ThemeResource ControlCornerRadius}"
Maximum="{Binding ArchonQuestView.Ids.Count, Mode=OneWay}"
Opacity="{StaticResource LargeBackgroundProgressBarOpacity}"
Value="{Binding ArchonQuestView.ProgressValue, Mode=OneWay}"/>
<shci:CachedImage
Grid.Column="0"
Margin="4"
VerticalAlignment="Center"
shch:FrameworkElementHelper.SquareLength="32"
Source="{Binding DailyNote.IsArchonQuestFinished, Converter={StaticResource ArchonQuestIconConverter}}"/>
<StackPanel
Grid.Column="1"
Margin="8,0,0,0"
VerticalAlignment="Center">
<TextBlock
Style="{StaticResource SubtitleTextBlockStyle}"
Text="{Binding ArchonQuestView.ProgressFormatted, Mode=OneWay}"
TextTrimming="CharacterEllipsis"
TextWrapping="NoWrap"/>
<TextBlock
Opacity="0.6"
Style="{StaticResource CaptionTextBlockStyle}"
Text="{Binding ArchonQuestView.ChapterFormatted, Mode=OneWay}"
TextTrimming="CharacterEllipsis"
TextWrapping="NoWrap"/>
</StackPanel>
</Grid>
<Grid Style="{ThemeResource GridCardStyle}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
@@ -202,7 +251,7 @@
Margin="4"
VerticalAlignment="Center"
shch:FrameworkElementHelper.SquareLength="32"
Source="{StaticResource UI_MarkQuest_Events_Proce}"/>
Source="{Binding DailyNote.DailyTask.IsExtraTaskRewardReceived, Converter={StaticResource DailyTaskIconConverter}}"/>
<StackPanel
Grid.Column="1"
Margin="8,0,0,0"
@@ -333,7 +382,7 @@
ItemsSource="{Binding DailyNote.Expeditions, Mode=OneWay}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<cwc:UniformGrid
<cwcont:UniformGrid
ColumnSpacing="8"
Columns="2"
RowSpacing="8"/>
@@ -450,16 +499,16 @@
<x:Double x:Key="SettingsCardWrapNoIconThreshold">0</x:Double>
</StackPanel.Resources>
<cwc:HeaderedContentControl
<cwcont:HeaderedContentControl
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch"
IsEnabled="{Binding RuntimeOptions.IsElevated, Converter={StaticResource BoolNegationConverter}}">
<cwc:HeaderedContentControl.Header>
<cwcont:HeaderedContentControl.Header>
<TextBlock
Margin="1,0,0,5"
Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="{shcm:ResourceString Name=ViewPageDailyNoteSettingRefreshHeader}"/>
</cwc:HeaderedContentControl.Header>
</cwcont:HeaderedContentControl.Header>
<StackPanel Spacing="{StaticResource SettingsCardSpacing}">
<InfoBar
Title="{shcm:ResourceString Name=ViewPageDailyNoteSettingRefreshElevatedHint}"
@@ -467,12 +516,12 @@
IsOpen="True"
Severity="Warning"
Visibility="{Binding RuntimeOptions.IsElevated, Converter={StaticResource BoolToVisibilityConverter}}"/>
<cwc:SettingsCard
<cwcont:SettingsCard
Description="{shcm:ResourceString Name=ViewPageDailyNoteSettingAutoRefreshDescription}"
Header="{shcm:ResourceString Name=ViewPageDailyNoteSettingAutoRefresh}"
HeaderIcon="{shcm:FontIcon Glyph=&#xE72C;}">
<ToggleSwitch Margin="24,0,0,0" IsOn="{Binding DailyNoteOptions.IsAutoRefreshEnabled, Mode=TwoWay}"/>
</cwc:SettingsCard>
</cwcont:SettingsCard>
<RadioButtons
Margin="1,11,0,5"
IsEnabled="{Binding DailyNoteOptions.IsAutoRefreshEnabled}"
@@ -488,15 +537,15 @@
</RadioButtons.ItemTemplate>
</RadioButtons>
</StackPanel>
</cwc:HeaderedContentControl>
</cwcont:HeaderedContentControl>
<cwc:HeaderedContentControl
<cwcont:HeaderedContentControl
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch"
IsEnabled="{Binding RuntimeOptions.IsToastAvailable}">
<cwc:HeaderedContentControl.Header>
<cwcont:HeaderedContentControl.Header>
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}" Text="{shcm:ResourceString Name=ViewPageDailyNoteNotificationHeader}"/>
</cwc:HeaderedContentControl.Header>
</cwcont:HeaderedContentControl.Header>
<StackPanel Spacing="{StaticResource SettingsCardSpacing}">
<InfoBar
Title="胡桃的通知权限已被关闭"
@@ -504,23 +553,23 @@
IsOpen="True"
Severity="Warning"
Visibility="{Binding RuntimeOptions.IsToastAvailable, Converter={StaticResource BoolToVisibilityRevertConverter}}"/>
<cwc:SettingsCard
<cwcont:SettingsCard
Description="{shcm:ResourceString Name=ViewPageDailyNoteSlientModeDescription}"
Header="{shcm:ResourceString Name=ViewPageDailyNoteSlientModeHeader}"
HeaderIcon="{shcm:FontIcon Glyph=&#xE7ED;}">
<ToggleSwitch Margin="24,0,0,0" IsOn="{Binding DailyNoteOptions.IsSilentWhenPlayingGame, Mode=TwoWay}"/>
</cwc:SettingsCard>
<cwc:SettingsCard
</cwcont:SettingsCard>
<cwcont:SettingsCard
Description="{shcm:ResourceString Name=ViewPageDailyNoteReminderDescription}"
Header="{shcm:ResourceString Name=ViewPageDailyNoteReminderHeader}"
HeaderIcon="{shcm:FontIcon Glyph=&#xEA8F;}">
<ToggleSwitch Margin="24,0,0,0" IsOn="{Binding DailyNoteOptions.IsReminderNotification, Mode=TwoWay}"/>
</cwc:SettingsCard>
</cwcont:SettingsCard>
</StackPanel>
</cwc:HeaderedContentControl>
</cwcont:HeaderedContentControl>
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}" Text="{shcm:ResourceString Name=ViewPageDailyNoteDataInteropHeader}"/>
<cwc:SettingsCard
<cwcont:SettingsCard
Command="{Binding ConfigDailyNoteWebhookUrlCommand}"
Description="{shcm:ResourceString Name=ViewPageDailyNoteConfigWebhookDescription}"
Header="{shcm:ResourceString Name=ViewPageDailyNoteConfigWebhookHeader}"

View File

@@ -0,0 +1,82 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Model.Intrinsic;
using Snap.Hutao.Model.Metadata;
using Snap.Hutao.Model.Primitive;
using Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.DailyNote;
using WebDailyNote = Snap.Hutao.Web.Hoyolab.Takumi.GameRecord.DailyNote.DailyNote;
namespace Snap.Hutao.ViewModel.DailyNote;
internal sealed class DailyNoteArchonQuestView
{
private readonly WebDailyNote? dailyNote;
private DailyNoteArchonQuestView(WebDailyNote? dailyNote, List<Chapter> chapters)
{
this.dailyNote = dailyNote;
Ids = chapters
.Where(chapter => chapter.QuestType is QuestType.AQ)
.Select(chapter => chapter.Id)
.ToList();
}
public List<ChapterId> Ids { get; set; } = default!;
public int ProgressValue
{
get
{
if (TryGetFirstArchonQuest(out ArchonQuest? quest))
{
return Ids.IndexOf(quest.Id);
}
return Ids.Count;
}
}
public string ProgressFormatted
{
get
{
if (TryGetFirstArchonQuest(out ArchonQuest? quest))
{
return quest.Status.GetLocalizedDescription();
}
return SH.WebDailyNoteArchonQuestStatusFinished;
}
}
public string ChapterFormatted
{
get
{
if (TryGetFirstArchonQuest(out ArchonQuest? quest))
{
return $"{quest.ChapterNum} {quest.ChapterTitle}";
}
return SH.WebDailyNoteArchonQuestChapterFinished;
}
}
public static DailyNoteArchonQuestView Create(WebDailyNote? dailyNote, List<Chapter> chapters)
{
return new(dailyNote, chapters);
}
private bool TryGetFirstArchonQuest([NotNullWhen(true)] out ArchonQuest? archonQuest)
{
if (dailyNote is { ArchonQuestProgress.List: [{ } target, ..] })
{
archonQuest = target;
return true;
}
archonQuest = default;
return false;
}
}

View File

@@ -7,6 +7,7 @@ using Snap.Hutao.Core;
using Snap.Hutao.Factory.ContentDialog;
using Snap.Hutao.Model.Entity;
using Snap.Hutao.Service.DailyNote;
using Snap.Hutao.Service.Metadata;
using Snap.Hutao.Service.Notification;
using Snap.Hutao.Service.User;
using Snap.Hutao.View.Control;
@@ -27,6 +28,7 @@ internal sealed partial class DailyNoteViewModel : Abstraction.ViewModel
private readonly IContentDialogFactory contentDialogFactory;
private readonly IDailyNoteService dailyNoteService;
private readonly DailyNoteOptions dailyNoteOptions;
private readonly IMetadataService metadataService;
private readonly IInfoBarService infoBarService;
private readonly RuntimeOptions runtimeOptions;
private readonly ITaskContext taskContext;
@@ -53,22 +55,26 @@ internal sealed partial class DailyNoteViewModel : Abstraction.ViewModel
protected override async ValueTask<bool> InitializeUIAsync()
{
try
if (await metadataService.InitializeAsync().ConfigureAwait(false))
{
await taskContext.SwitchToBackgroundAsync();
ObservableCollection<UserAndUid> roles = await userService.GetRoleCollectionAsync().ConfigureAwait(false);
ObservableCollection<DailyNoteEntry> entries = await dailyNoteService.GetDailyNoteEntryCollectionAsync().ConfigureAwait(false);
try
{
await taskContext.SwitchToBackgroundAsync();
ObservableCollection<UserAndUid> roles = await userService.GetRoleCollectionAsync().ConfigureAwait(false);
ObservableCollection<DailyNoteEntry> entries = await dailyNoteService.GetDailyNoteEntryCollectionAsync().ConfigureAwait(false);
await taskContext.SwitchToMainThreadAsync();
UserAndUids = roles;
DailyNoteEntries = entries;
return true;
}
catch (Core.ExceptionService.UserdataCorruptedException ex)
{
infoBarService.Error(ex);
return false;
await taskContext.SwitchToMainThreadAsync();
UserAndUids = roles;
DailyNoteEntries = entries;
return true;
}
catch (Core.ExceptionService.UserdataCorruptedException ex)
{
infoBarService.Error(ex);
}
}
return false;
}
[Command("TrackRoleCommand")]

View File

@@ -33,6 +33,7 @@ internal static class StaticResource
{ "IconElement", 0 },
{ "ItemIcon", 0 },
{ "LoadingPic", 0 },
{ "Mark", 0 },
{ "MonsterIcon", 0 },
{ "MonsterSmallIcon", 0 },
{ "NameCardIcon", 0 },
@@ -62,6 +63,7 @@ internal static class StaticResource
{ "IconElement", 3 },
{ "ItemIcon", 4 },
{ "LoadingPic", 2 },
{ "Mark", 0 },
{ "MonsterIcon", 3 },
{ "MonsterSmallIcon", 2 },
{ "NameCardIcon", 3 },

View File

@@ -132,4 +132,10 @@ internal sealed class DailyNote : DailyNoteCommon
[JsonPropertyName("archon_quest_progress")]
public ArchonQuestProgress ArchonQuestProgress { get; set; } = default!;
[JsonIgnore]
public bool IsArchonQuestFinished
{
get => ArchonQuestProgress.List.Count == 0;
}
}