Skip to content

Commit

Permalink
change type of gacha_type
Browse files Browse the repository at this point in the history
  • Loading branch information
Scighost committed Sep 16, 2024
1 parent 3b7bbd5 commit 230f454
Show file tree
Hide file tree
Showing 34 changed files with 378 additions and 610 deletions.
205 changes: 1 addition & 204 deletions src/Starward.Core/EnumExtension.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using Starward.Core.Gacha;
using Starward.Core.Launcher;
using Starward.Core.Launcher;
using Starward.Core.SelfQuery;
using System.ComponentModel;
using System.Reflection;
Expand All @@ -25,208 +24,6 @@ public static string ToDescription(this Enum @enum)
}


public static GameBizEnum ToGame(this GameBizEnum biz)
{
return (int)biz switch
{
11 or 12 or 13 or 14 => GameBizEnum.GenshinImpact,
21 or 22 or 24 => GameBizEnum.StarRail,
>= 31 and <= 37 => GameBizEnum.Honkai3rd,
41 or 42 or 44 => GameBizEnum.ZZZ,
_ => GameBizEnum.None,
};
}


public static string ToGameName(this GameBizEnum biz)
{
return biz.ToGame() switch
{
GameBizEnum.GenshinImpact => CoreLang.Game_GenshinImpact,
GameBizEnum.StarRail => CoreLang.Game_HonkaiStarRail,
GameBizEnum.Honkai3rd => CoreLang.Game_HonkaiImpact3rd,
GameBizEnum.ZZZ => CoreLang.Game_ZZZ,
_ => "",
};
}


public static string ToGameServer(this GameBizEnum biz)
{
return biz switch
{
GameBizEnum.hk4e_cn => CoreLang.GameServer_ChinaOfficial,
GameBizEnum.hk4e_global => CoreLang.GameServer_GlobalOfficial,
GameBizEnum.hk4e_cloud => CoreLang.GameServer_ChinaCloud,
GameBizEnum.hk4e_bilibili => CoreLang.GameServer_Bilibili,
GameBizEnum.hkrpg_cn => CoreLang.GameServer_ChinaOfficial,
GameBizEnum.hkrpg_global => CoreLang.GameServer_GlobalOfficial,
GameBizEnum.hkrpg_bilibili => CoreLang.GameServer_Bilibili,
GameBizEnum.bh3_cn => CoreLang.GameServer_ChinaOfficial,
GameBizEnum.bh3_global => CoreLang.GameServer_EuropeAmericas,
GameBizEnum.bh3_jp => CoreLang.GameServer_Japan,
GameBizEnum.bh3_kr => CoreLang.GameServer_Korea,
GameBizEnum.bh3_overseas => CoreLang.GameServer_SoutheastAsia,
GameBizEnum.bh3_tw => CoreLang.GameServer_TraditionalChinese,
GameBizEnum.nap_cn => CoreLang.GameServer_ChinaOfficial,
GameBizEnum.nap_global => CoreLang.GameServer_GlobalOfficial,
GameBizEnum.nap_bilibili => CoreLang.GameServer_Bilibili,
_ => "",
};
}


public static bool IsChinaServer(this GameBizEnum biz)
{
return (int)biz switch
{
11 or 13 or 14 or 21 or 24 or 31 or 41 => true,
_ => false,
};
}


public static bool IsGlobalServer(this GameBizEnum biz)
{
return (int)biz switch
{
12 or 22 or (>= 32 and <= 36) or 42 => true,
_ => false,
};
}


public static bool IsBilibiliServer(this GameBizEnum biz)
{
return (int)biz switch
{
14 or 24 or 44 => true,
_ => false,
};
}



public static bool IsChinaOfficial(this GameBizEnum biz)
{
return biz switch
{
GameBizEnum.hk4e_cn or GameBizEnum.hkrpg_cn or GameBizEnum.bh3_cn or GameBizEnum.nap_cn => true,
_ => false,
};
}


public static bool IsGlobalOfficial(this GameBizEnum biz)
{
return biz switch
{
GameBizEnum.hk4e_global or GameBizEnum.hkrpg_global or GameBizEnum.bh3_global or GameBizEnum.nap_global => true,
GameBizEnum.bh3_jp or GameBizEnum.bh3_kr or GameBizEnum.bh3_overseas or GameBizEnum.bh3_tw => true,
_ => false,
};
}


public static bool IsBilibili(this GameBizEnum biz)
{
return biz switch
{
GameBizEnum.hk4e_bilibili or GameBizEnum.hkrpg_bilibili or GameBizEnum.nap_bilibili => true,
_ => false,
};
}


public static bool IsChinaCloud(this GameBizEnum biz)
{
return biz switch
{
GameBizEnum.hk4e_cloud => true,
_ => false,
};
}




public static string GetLauncherRegistryKey(this GameBizEnum biz)
{
return biz switch
{
GameBizEnum.hk4e_cn or GameBizEnum.hk4e_bilibili => GameRegistry.LauncherPath_hk4e_cn,
GameBizEnum.hk4e_global => GameRegistry.LauncherPath_hk4e_global,
GameBizEnum.hk4e_cloud => GameRegistry.LauncherPath_hk4e_cloud,
GameBizEnum.hkrpg_cn or GameBizEnum.hkrpg_bilibili => GameRegistry.LauncherPath_hkrpg_cn,
GameBizEnum.hkrpg_global => GameRegistry.LauncherPath_hkrpg_global,
GameBizEnum.bh3_cn => GameRegistry.LauncherPath_bh3_cn,
GameBizEnum.bh3_global => GameRegistry.LauncherPath_bh3_global,
GameBizEnum.bh3_jp => GameRegistry.LauncherPath_bh3_jp,
GameBizEnum.bh3_kr => GameRegistry.LauncherPath_bh3_kr,
GameBizEnum.bh3_overseas => GameRegistry.LauncherPath_bh3_overseas,
GameBizEnum.bh3_tw => GameRegistry.LauncherPath_bh3_tw,
GameBizEnum.nap_cn or GameBizEnum.nap_bilibili => GameRegistry.LauncherPath_HYP_cn,
GameBizEnum.nap_global => GameRegistry.LauncherPath_HYP_os,
_ => "HKEY_LOCAL_MACHINE",
};
}



public static string GetGameRegistryKey(this GameBizEnum biz)
{
return biz switch
{
GameBizEnum.hk4e_cn or GameBizEnum.hk4e_bilibili => GameRegistry.GamePath_hk4e_cn,
GameBizEnum.hk4e_global => GameRegistry.GamePath_hk4e_global,
GameBizEnum.hk4e_cloud => GameRegistry.GamePath_hk4e_cloud,
GameBizEnum.hkrpg_cn or GameBizEnum.hkrpg_bilibili => GameRegistry.GamePath_hkrpg_cn,
GameBizEnum.hkrpg_global => GameRegistry.GamePath_hkrpg_global,
GameBizEnum.bh3_cn => GameRegistry.GamePath_bh3_cn,
GameBizEnum.bh3_global => GameRegistry.GamePath_bh3_global,
GameBizEnum.bh3_jp => GameRegistry.GamePath_bh3_jp,
GameBizEnum.bh3_kr => GameRegistry.GamePath_bh3_kr,
GameBizEnum.bh3_overseas => GameRegistry.GamePath_bh3_overseas,
GameBizEnum.bh3_tw => GameRegistry.GamePath_bh3_tw,
GameBizEnum.nap_cn or GameBizEnum.nap_bilibili => GameRegistry.GamePath_nap_cn,
GameBizEnum.nap_global => GameRegistry.GamePath_nap_global,
_ => "HKEY_CURRENT_USER",
};
}


public static string ToLocalization(this GachaType gachaType)
{
return gachaType switch
{
GachaType.StellarWarp => CoreLang.GachaType_StellarWarp,
GachaType.DepartureWarp => CoreLang.GachaType_DepartureWarp,
GachaType.CharacterEventWarp => CoreLang.GachaType_CharacterEventWarp,
GachaType.LightConeEventWarp => CoreLang.GachaType_LightConeEventWarp,
GachaType.NoviceWish => CoreLang.GachaType_NoviceWish,
GachaType.PermanentWish => CoreLang.GachaType_PermanentWish,
GachaType.CharacterEventWish => CoreLang.GachaType_CharacterEventWish,
GachaType.CharacterEventWish_2 => CoreLang.GachaType_CharacterEventWish_2,
GachaType.WeaponEventWish => CoreLang.GachaType_WeaponEventWish,
GachaType.ChronicledWish => CoreLang.GachaType_ChronicledWish,
_ => "",
};
}


public static string ToZZZLocalization(this GachaType gachaType)
{
return gachaType switch
{
GachaType.StandardChannel => CoreLang.GachaType_StandardChannel,
GachaType.ExclusiveChannel => CoreLang.GachaType_ExclusiveChannel,
GachaType.WEngineChannel => CoreLang.GachaType_WEngineChannel,
GachaType.BangbooChannel => CoreLang.GachaType_BangbooChannel,
_ => "",
};
}



public static string ToLocalization(this PostType postType)
{
Expand Down
29 changes: 29 additions & 0 deletions src/Starward.Core/Gacha/GachaItemIdJsonConverter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using System.Text.Json;
using System.Text.Json.Serialization;

namespace Starward.Core.Gacha;

internal class GachaItemIdJsonConverter : JsonConverter<int>
{
public override int Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType is JsonTokenType.Number)
{
return reader.GetInt32();
}
if ((reader.TokenType is JsonTokenType.String))
{
var str = reader.GetString();
if (int.TryParse(str, out var id))
{
return id;
}
}
return 0;
}

public override void Write(Utf8JsonWriter writer, int value, JsonSerializerOptions options)
{
writer.WriteStringValue(value.ToString());
}
}
25 changes: 16 additions & 9 deletions src/Starward.Core/Gacha/GachaLogClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public abstract class GachaLogClient
protected readonly HttpClient _httpClient;


protected abstract IReadOnlyCollection<GachaType> GachaTypes { get; init; }
public abstract IReadOnlyCollection<IGachaType> QueryGachaTypes { get; init; }



Expand All @@ -89,7 +89,7 @@ public GachaLogClient(HttpClient? httpClient = null)
public async Task<long> GetUidByGachaUrlAsync(string gachaUrl)
{
var prefix = GetGachaUrlPrefix(gachaUrl);
foreach (var gachaType in GachaTypes)
foreach (var gachaType in QueryGachaTypes)
{
var param = new GachaLogQuery(gachaType, 1, 1, 0);
var list = await GetGachaLogByQueryAsync<GachaLogItem>(prefix, param);
Expand All @@ -103,10 +103,10 @@ public async Task<long> GetUidByGachaUrlAsync(string gachaUrl)



public abstract Task<IEnumerable<GachaLogItem>> GetGachaLogAsync(string gachaUrl, long endId = 0, string? lang = null, IProgress<(GachaType GachaType, int Page)>? progress = null, CancellationToken cancellationToken = default);
public abstract Task<IEnumerable<GachaLogItem>> GetGachaLogAsync(string gachaUrl, long endId = 0, string? lang = null, IProgress<(IGachaType GachaType, int Page)>? progress = null, CancellationToken cancellationToken = default);


public abstract Task<IEnumerable<GachaLogItem>> GetGachaLogAsync(string gachaUrl, GachaType gachaType, long endId = 0, string? lang = null, IProgress<(GachaType GachaType, int Page)>? progress = null, CancellationToken cancellationToken = default);
public abstract Task<IEnumerable<GachaLogItem>> GetGachaLogAsync(string gachaUrl, IGachaType gachaType, long endId = 0, string? lang = null, IProgress<(IGachaType GachaType, int Page)>? progress = null, CancellationToken cancellationToken = default);


public abstract Task<IEnumerable<GachaLogItem>> GetGachaLogAsync(string gachaUrl, GachaLogQuery query, CancellationToken cancellationToken = default);
Expand Down Expand Up @@ -249,12 +249,12 @@ protected async Task<T> CommonGetAsync<T>(string url, CancellationToken cancella



protected async Task<List<T>> GetGachaLogAsync<T>(string gachaUrl, long endId = 0, string? lang = null, IProgress<(GachaType GachaType, int Page)>? progress = null, CancellationToken cancellationToken = default) where T : GachaLogItem
protected async Task<List<T>> GetGachaLogAsync<T>(string gachaUrl, long endId = 0, string? lang = null, IProgress<(IGachaType GachaType, int Page)>? progress = null, CancellationToken cancellationToken = default) where T : GachaLogItem
{
endId = Math.Clamp(endId, 0, long.MaxValue);
var prefix = GetGachaUrlPrefix(gachaUrl, lang);
var result = new List<T>();
foreach (var gachaType in GachaTypes)
foreach (var gachaType in QueryGachaTypes)
{
result.AddRange(await GetGachaLogByTypeAsync<T>(prefix, gachaType, endId, progress, cancellationToken));
}
Expand All @@ -264,7 +264,7 @@ protected async Task<List<T>> GetGachaLogAsync<T>(string gachaUrl, long endId =



protected async Task<List<T>> GetGachaLogAsync<T>(string gachaUrl, GachaType gachaType, long endId = 0, string? lang = null, IProgress<(GachaType GachaType, int Page)>? progress = null, CancellationToken cancellationToken = default) where T : GachaLogItem
protected async Task<List<T>> GetGachaLogAsync<T>(string gachaUrl, IGachaType gachaType, long endId = 0, string? lang = null, IProgress<(IGachaType GachaType, int Page)>? progress = null, CancellationToken cancellationToken = default) where T : GachaLogItem
{
endId = Math.Clamp(endId, 0, long.MaxValue);
var prefix = GetGachaUrlPrefix(gachaUrl, lang);
Expand Down Expand Up @@ -296,7 +296,7 @@ protected virtual async Task<List<T>> GetGachaLogByQueryAsync<T>(string gachaUrl



private async Task<List<T>> GetGachaLogByTypeAsync<T>(string prefix, GachaType gachaType, long endId = 0, IProgress<(GachaType GachaType, int Page)>? progress = null, CancellationToken cancellationToken = default) where T : GachaLogItem
private async Task<List<T>> GetGachaLogByTypeAsync<T>(string prefix, IGachaType gachaType, long endId = 0, IProgress<(IGachaType GachaType, int Page)>? progress = null, CancellationToken cancellationToken = default) where T : GachaLogItem
{
var param = new GachaLogQuery(gachaType, 1, 20, 0);
var result = new List<T>();
Expand Down Expand Up @@ -358,6 +358,10 @@ private async Task<List<T>> GetGachaLogByTypeAsync<T>(string prefix, GachaType g




#region Gacha Info


public async Task<GenshinGachaWiki> GetGenshinGachaInfoAsync(GameBiz gameBiz, string lang, CancellationToken cancellationToken = default)
{
lang = LanguageUtil.FilterLanguage(lang);
Expand Down Expand Up @@ -415,7 +419,6 @@ public async Task<StarRailGachaWiki> GetStarRailGachaInfoAsync(GameBiz gameBiz,
}



// todo
[Obsolete("Not finished", true)]
public async Task<GenshinGachaWiki> GetZZZGachaInfoAsync(GameBiz gameBiz, string lang, CancellationToken cancellationToken = default)
Expand All @@ -438,4 +441,8 @@ public async Task<GenshinGachaWiki> GetZZZGachaInfoAsync(GameBiz gameBiz, string



#endregion



}
Loading

0 comments on commit 230f454

Please sign in to comment.