Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions ElectronicObserver.Core/Types/CsvDateConverter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using System;
using System.Text.Json;
using System.Text.Json.Serialization;

namespace ElectronicObserver.Core.Types;

public class CsvDateConverter : JsonConverter<DateTime>
{
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
string? raw = reader.GetString();

if (raw is null) return new();

return DateTimeHelper.CSVStringToTime(raw);
}

public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
{
writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss"));
}
}
22 changes: 22 additions & 0 deletions ElectronicObserver.Core/Types/CsvNullableDateConverter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using System;
using System.Text.Json;
using System.Text.Json.Serialization;

namespace ElectronicObserver.Core.Types;

public class CsvNullableDateConverter : JsonConverter<DateTime?>
{
public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
string? raw = reader.GetString();

if (raw is null) return null;

return DateTimeHelper.CSVStringToTime(raw);
}

public override void Write(Utf8JsonWriter writer, DateTime? value, JsonSerializerOptions options)
{
writer.WriteStringValue(value?.ToString("yyyy-MM-dd HH:mm:ss"));
}
}

This file was deleted.

9 changes: 9 additions & 0 deletions ElectronicObserver.Core/Types/MaintenanceState.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace ElectronicObserver.Core.Types;

public enum MaintenanceState
{
None = 0,
EventStart = 1,
EventEnd = 2,
Regular = 3
};
7 changes: 0 additions & 7 deletions ElectronicObserver.Core/Types/Quests/IQuestIdentifier.cs

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ public record QuestMetadata
public DateTime? EndTime { get; set; }

[JsonPropertyName("resetType")]
public QuestProgressResetType? QuestProgressResetType { get; set; }
public QuestResetType? QuestProgressResetType { get; set; }
}
52 changes: 52 additions & 0 deletions ElectronicObserver.Core/Types/SoftwareUpdateData.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
using System;
using System.Text.Json.Serialization;

namespace ElectronicObserver.Core.Types;

public class SoftwareUpdateData
{
[JsonPropertyName("bld_date")]
[JsonConverter(typeof(CsvDateConverter))]
public DateTime BuildDate { get; set; }

[JsonPropertyName("ver")]
public string AppVersion { get; set; } = "0.0.0.0";

[JsonPropertyName("url")]
public string AppDownloadUrl { get; set; } = "";

[JsonPropertyName("ApiServer")]
public string AppApiServerUrl { get; set; } = "";

[JsonPropertyName("nodes")]
public int Destination { get; set; }

[JsonPropertyName("QuestTrackers")]
public int QuestTrackers { get; set; }

[JsonPropertyName("QuestsMetadata")]
public int QuestsMetadata { get; set; }

[JsonPropertyName("Locks")]
public int EventLocks { get; set; }

[JsonPropertyName("FitBonuses")]
public int FitBonuses { get; set; }

[JsonPropertyName("EquipmentUpgrades")]
public int EquipmentUpgrades { get; set; }

[JsonPropertyName("MaintStart")]
[JsonConverter(typeof(CsvDateConverter))]
public DateTime MaintenanceStart { get; set; }

[JsonPropertyName("MaintEnd")]
[JsonConverter(typeof(CsvNullableDateConverter))]
public DateTime? MaintenanceEnd { get; set; }

[JsonPropertyName("MaintInfoLink")]
public string MaintenanceInformationLink { get; set; } = "";

[JsonPropertyName("MaintEventState")]
public MaintenanceState EventState { get; set; }
}
24 changes: 24 additions & 0 deletions ElectronicObserver.Core/Types/TranslationUpdateData.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using System.Text.Json.Serialization;

namespace ElectronicObserver.Core.Types;

public class TranslationUpdateData
{
[JsonPropertyName("equipment")]
public string Equipment { get; set; } = "";

[JsonPropertyName("expedition")]
public string Expedition { get; set; } = "";

[JsonPropertyName("operation")]
public string Operation { get; set; } = "";

[JsonPropertyName("quest")]
public string Quest { get; set; } = "";

[JsonPropertyName("ship")]
public string Ship { get; set; } = "";

[JsonPropertyName("Locks")]
public int LockTranslations { get; set; }
}
10 changes: 9 additions & 1 deletion ElectronicObserver/Data/Quest/ProgressData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace ElectronicObserver.Data.Quest;
/// 任務の進捗を管理する基底クラスです。
/// </summary>
[DataContract(Name = "ProgressData")]
public abstract class ProgressData : IIdentifiable, IQuestIdentifier
public abstract class ProgressData : IIdentifiable
{

/// <summary>
Expand Down Expand Up @@ -198,6 +198,14 @@ public virtual void ApplyTemporaryProgress(QuestData q)
}
}

public QuestResetType GetProgressResetType() => TryGetQuest()?.GetProgressResetType() ?? QuestResetType.Unknown;

private QuestData? TryGetQuest()
{
if (!KCDatabase.Instance.Quest.Quests.ContainsKey(QuestID)) return null;

return KCDatabase.Instance.Quest[QuestID];
}

/// <summary>
/// この任務の達成に必要な条件を表す文字列を返します。
Expand Down
68 changes: 64 additions & 4 deletions ElectronicObserver/Data/QuestData.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
using ElectronicObserver.Core.Types.Data;
using System;
using System.Collections.Generic;
using ElectronicObserver.Core.Types.Data;
using ElectronicObserver.Core.Types.Quests;
using ElectronicObserver.Core.Types.Serialization.Quests;

namespace ElectronicObserver.Data;

/// <summary>
/// 任務のデータを保持します。
/// </summary>
public class QuestData : ResponseWrapper, IIdentifiable, IQuestIdentifier
public class QuestData : ResponseWrapper, IIdentifiable
{

/// <summary>
Expand All @@ -25,8 +28,6 @@ public class QuestData : ResponseWrapper, IIdentifiable, IQuestIdentifier
/// </summary>
public int Type => (int)RawData.api_type;

public QuestResetType QuestResetType => (QuestResetType)Type;

/// <summary>
/// 周期アイコン種別
/// 1=単発, 2=デイリー, 3=ウィークリー, 6=マンスリー, 7=他(輸送5と空母3,クォータリー), 100+x=イヤーリー(x月-)
Expand Down Expand Up @@ -88,7 +89,66 @@ public int State
/// </summary>
public int Progress => (int)RawData.api_progress_flag;

public QuestResetType GetProgressResetType()
{
Dictionary<int, QuestMetadata> questsMetadata = KCDatabase.Instance.Translation.QuestsMetadata.QuestsMetadataList;

if (questsMetadata.TryGetValue(QuestID, out QuestMetadata? metadata) && metadata.QuestProgressResetType is { } resetType)
{
return resetType;
}

return Type switch
{
1 => QuestResetType.Daily,
2 => QuestResetType.Weekly,
3 => QuestResetType.Monthly,
4 => QuestResetType.Never,
5 => LabelType switch
{
// 2, 3, 6 should never happen
2 => QuestResetType.Daily,
3 => QuestResetType.Weekly,
6 => QuestResetType.Monthly,
7 => ID switch
{
// BD4 - 3 carriers
211 => QuestResetType.Daily,
// BD6 - 5 transports
212 => QuestResetType.Daily,

// this will be incorrect if they add any new odd daily quests
_ => QuestResetType.Quarterly
},
101 => QuestResetType.January,
102 => QuestResetType.February,
103 => QuestResetType.March,
104 => QuestResetType.April,
105 => QuestResetType.May,
106 => QuestResetType.June,
107 => QuestResetType.July,
108 => QuestResetType.August,
109 => QuestResetType.September,
110 => QuestResetType.October,
111 => QuestResetType.November,
112 => QuestResetType.December,

_ => QuestResetType.Unknown
},

_ => QuestResetType.Unknown
};
}

public DateTime? GetEndDateTime()
{
if (KCDatabase.Instance.Translation.QuestsMetadata.QuestsMetadataList.TryGetValue(QuestID, out QuestMetadata? metadata) && metadata.EndTime is { } endTime)
{
return endTime - TimeSpan.FromHours(9) + TimeZoneInfo.Local.BaseUtcOffset;
}

return null;
}

public int ID => QuestID;
public override string ToString() => $"[{QuestID}] {Name}";
Expand Down
3 changes: 2 additions & 1 deletion ElectronicObserver/Data/QuestManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using ElectronicObserver.Core;
using ElectronicObserver.Core.Types.Data;
using ElectronicObserver.Core.Types.Extensions;
using ElectronicObserver.Core.Types.Quests;

namespace ElectronicObserver.Data;

Expand Down Expand Up @@ -56,7 +57,7 @@ public override void LoadFromResponse(string apiname, dynamic data)
//周期任務削除
if (DateTimeHelper.IsCrossedDay(progress.LastUpdateTime, 5, 0, 0))
{
progress.Progresses.RemoveAll(p => p.ProgressResetsDaily(KCDatabase.Instance.Translation.QuestsMetadata.QuestsMetadataList));
progress.Progresses.RemoveAll(p => p.GetProgressResetType() is QuestResetType.Daily);
Quests.RemoveAll(q => q.Type == 1 || q.QuestID == 211 /* 空母3 */ || q.QuestID == 212 /* 輸送5 */ || q.QuestID == 311 /* 演習勝利7 */ );
}
if (DateTimeHelper.IsCrossedWeek(progress.LastUpdateTime, DayOfWeek.Monday, 5, 0, 0))
Expand Down
9 changes: 7 additions & 2 deletions ElectronicObserver/Data/Translation/QuestsMetadata.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using ElectronicObserver.Core.Types.Serialization.Quests;

namespace ElectronicObserver.Data.Translation;
Expand All @@ -8,7 +9,7 @@ public class QuestsMetadata : TranslationBase
{
private string QuestMetadataPath => Path.Join(DataAndTranslationManager.DataFolder, "QuestsMetadata.json");

public List<QuestMetadata> QuestsMetadataList { get; private set; } = [];
public Dictionary<int, QuestMetadata> QuestsMetadataList { get; private set; } = [];

public sealed override void Initialize()
{
Expand All @@ -25,6 +26,10 @@ private void LoadDictionary(string path)
QuestsMetadataList.Clear();

List<QuestMetadata>? json = Load<List<QuestMetadata>>(path);
if (json != null) QuestsMetadataList = json;

if (json is { } list)
{
QuestsMetadataList = list.ToDictionary(item => item.ApiId, item => item);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ private void ReportIssue(IShipData ship, FitBonusValue theoricalBonus, FitBonusV
{
FitBonusIssueModel issue = new FitBonusIssueModel()
{
DataVersion = SoftwareUpdater.CurrentVersion.FitBonuses,
DataVersion = SoftwareUpdater.CurrentDataVersion.FitBonuses,
SoftwareVersion = SoftwareInformation.VersionEnglish,
SoftwareDataSource = Configuration.Config.Control.UpdateRepoURL.ToString(),

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ public void ProcessUpgradeCostResponse(string _, dynamic data)
return new()
{
SoftwareVersion = SoftwareInformation.VersionEnglish,
DataVersion = SoftwareUpdater.CurrentVersion.EquipmentUpgrades,
DataVersion = SoftwareUpdater.CurrentDataVersion.EquipmentUpgrades,
SoftwareDataSource = Configuration.Config.Control.UpdateRepoURL.ToString(),

EquipmentId = Equipment.EquipmentId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public void ProcessUpgradeList(string _, dynamic data)
{
EquipmentUpgradeIssueModel report = new()
{
DataVersion = SoftwareUpdater.CurrentVersion.EquipmentUpgrades,
DataVersion = SoftwareUpdater.CurrentDataVersion.EquipmentUpgrades,
SoftwareVersion = SoftwareInformation.VersionEnglish,
SoftwareDataSource = Configuration.Config.Control.UpdateRepoURL.ToString(),

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public class ElectronicObserverApiService(ElectronicObserverApiTranslationViewMo
private string Url => Configuration.Config.Debug.ElectronicObserverApiUrl switch
{
{ Length: >0 } => Configuration.Config.Debug.ElectronicObserverApiUrl,
_ => SoftwareUpdater.CurrentVersion.AppApiServerUrl,
_ => SoftwareUpdater.CurrentDataVersion.AppApiServerUrl,
};

private ElectronicObserverApiTranslationViewModel Translations { get; } = translations;
Expand Down
Loading