Skip to content

Commit 5a07c5e

Browse files
committed
chore: mml 依赖检测条件修改
1 parent ac525de commit 5a07c5e

4 files changed

Lines changed: 71 additions & 23 deletions

File tree

MaiChartManager/Controllers/Mod/InstallationController.cs

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System.Diagnostics;
1+
using System.Diagnostics;
22
using System.IO.Compression;
33
using System.Security.Cryptography;
44
using MaiChartManager.Utils;
@@ -34,7 +34,8 @@ public record GameModInfo(
3434
bool IsJudgeDisplay4BInstalled,
3535
bool IsHidConflictExist,
3636
AquaMaiSignatureV2.VerifyResult? Signature,
37-
bool IsMmlLibInstalled
37+
bool IsAdxHidIoModAbsent,
38+
bool IsMmlLegacyLibsInstalled
3839
);
3940

4041
[HttpGet]
@@ -55,7 +56,17 @@ public GameModInfo GetGameModInfo()
5556
sig = AquaMaiSignatureV2.VerifySignature(System.IO.File.ReadAllBytes(ModPaths.AquaMaiDllInstalledPath));
5657
}
5758

58-
return new GameModInfo(IsMelonInstalled(), aquaMaiInstalled, aquaMaiVersion, aquaMaiBuiltinVersion!, GetIsJudgeDisplay4BInstalled(), GetIsHidConflictExist(), sig, GetIsMmlLibInstalled());
59+
return new GameModInfo(
60+
IsMelonInstalled(),
61+
aquaMaiInstalled,
62+
aquaMaiVersion,
63+
aquaMaiBuiltinVersion!,
64+
GetIsJudgeDisplay4BInstalled(),
65+
GetIsHidConflictExist(),
66+
sig,
67+
GetIsAdxHidIoModAbsent(),
68+
GetIsMmlLegacyLibsInstalled()
69+
);
5970
}
6071

6172
[NonAction]
@@ -100,12 +111,14 @@ public void DeleteHidConflict()
100111
#endregion
101112

102113
[NonAction]
103-
private static bool GetIsMmlLibInstalled()
114+
private static bool GetIsAdxHidIoModAbsent()
115+
{
116+
return !System.IO.File.Exists(Path.Combine(StaticSettings.GamePath, @"Mods\ADXHIDIOMod.dll"));
117+
}
118+
119+
[NonAction]
120+
private static bool GetIsMmlLegacyLibsInstalled()
104121
{
105-
if (System.IO.File.Exists(Path.Combine(StaticSettings.GamePath, @"Mods\ADXHIDIOMod.dll")))
106-
{
107-
return false;
108-
}
109122
if (!System.IO.File.Exists(Path.Combine(StaticSettings.GamePath, @"Sinmai_Data\Plugins\hidapi.dll")))
110123
{
111124
return false;
@@ -118,21 +131,32 @@ private static bool GetIsMmlLibInstalled()
118131
return true;
119132
}
120133

134+
private static void CopyFile(string src, string dest)
135+
{
136+
Directory.CreateDirectory(Path.GetDirectoryName(dest)!);
137+
using var read = System.IO.File.OpenRead(src);
138+
using var write = System.IO.File.Open(dest, FileMode.Create);
139+
read.CopyTo(write);
140+
}
141+
142+
public record InstallMmlLibsDto(bool UseLegacy);
143+
121144
[HttpPost]
122-
public void InstallMmlLibs()
145+
public void InstallMmlLibs([FromBody] InstallMmlLibsDto req)
123146
{
124-
if (GetIsMmlLibInstalled()) return;
147+
var isMaimollerLegacyModeEnabled = req.UseLegacy;
125148
if (System.IO.File.Exists(Path.Combine(StaticSettings.GamePath, @"Mods\ADXHIDIOMod.dll")))
126149
{
127150
System.IO.File.Delete(Path.Combine(StaticSettings.GamePath, @"Mods\ADXHIDIOMod.dll"));
128151
}
152+
if (!isMaimollerLegacyModeEnabled || GetIsMmlLegacyLibsInstalled()) return;
129153
if (!System.IO.File.Exists(Path.Combine(StaticSettings.GamePath, @"Sinmai_Data\Plugins\hidapi.dll")))
130154
{
131-
System.IO.File.Copy(Path.Combine(StaticSettings.exeDir, @"hidapi.dll"), Path.Combine(StaticSettings.GamePath, @"Sinmai_Data\Plugins\hidapi.dll"));
155+
CopyFile(Path.Combine(StaticSettings.exeDir, @"hidapi.dll"), Path.Combine(StaticSettings.GamePath, @"Sinmai_Data\Plugins\hidapi.dll"));
132156
}
133157
if (!System.IO.File.Exists(Path.Combine(StaticSettings.GamePath, @"Sinmai_Data\Plugins\libadxhid.dll")))
134158
{
135-
System.IO.File.Copy(Path.Combine(StaticSettings.exeDir, @"libadxhid.dll"), Path.Combine(StaticSettings.GamePath, @"Sinmai_Data\Plugins\libadxhid.dll"));
159+
CopyFile(Path.Combine(StaticSettings.exeDir, @"libadxhid.dll"), Path.Combine(StaticSettings.GamePath, @"Sinmai_Data\Plugins\libadxhid.dll"));
136160
}
137161
}
138162

@@ -143,7 +167,7 @@ public void InstallJudgeDisplay4B()
143167

144168
foreach (var file in Directory.EnumerateFiles(judgeDisplay4BPath))
145169
{
146-
System.IO.File.Copy(file, Path.Combine(StaticSettings.SkinAssetsDir, Path.GetFileName(file)), true);
170+
CopyFile(file, Path.Combine(StaticSettings.SkinAssetsDir, Path.GetFileName(file)));
147171
}
148172
}
149173

@@ -173,10 +197,7 @@ public void InstallAquaMai()
173197
{
174198
var src = Path.Combine(StaticSettings.exeDir, "AquaMai.dll");
175199
var dest = Path.Combine(StaticSettings.GamePath, @"Mods\AquaMai.dll");
176-
Directory.CreateDirectory(Path.GetDirectoryName(dest));
177-
using var read = System.IO.File.OpenRead(src);
178-
using var write = System.IO.File.Open(dest, FileMode.Create);
179-
read.CopyTo(write);
200+
CopyFile(src, dest);
180201
}
181202

182203
[HttpPost]
@@ -263,4 +284,4 @@ public void KillGameProcess()
263284
}
264285
}
265286
}
266-
}
287+
}

MaiChartManager/Front/src/client/apiGen.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,8 @@ export interface GameModInfo {
172172
isJudgeDisplay4BInstalled?: boolean;
173173
isHidConflictExist?: boolean;
174174
signature?: VerifyResult;
175-
isMmlLibInstalled?: boolean;
175+
isAdxHidIoModAbsent?: boolean;
176+
isMmlLegacyLibsInstalled?: boolean;
176177
}
177178

178179
export interface GenreAddRequest {
@@ -278,6 +279,10 @@ export interface InstallAquaMaiOnlineDto {
278279
sign?: string | null;
279280
}
280281

282+
export interface InstallMmlLibsDto {
283+
useLegacy?: boolean;
284+
}
285+
281286
export interface MusicIdAndAssetDirPair {
282287
/** @format int32 */
283288
id?: number;
@@ -1513,10 +1518,12 @@ export class Api<
15131518
* @name InstallMmlLibs
15141519
* @request POST:/MaiChartManagerServlet/InstallMmlLibsApi
15151520
*/
1516-
InstallMmlLibs: (params: RequestParams = {}) =>
1521+
InstallMmlLibs: (data: InstallMmlLibsDto, params: RequestParams = {}) =>
15171522
this.request<void, any>({
15181523
path: `/MaiChartManagerServlet/InstallMmlLibsApi`,
15191524
method: "POST",
1525+
body: data,
1526+
type: ContentType.Json,
15201527
...params,
15211528
}),
15221529

MaiChartManager/Front/src/views/ModManager/sectionPanelOverride/GameSystem.MaimollerIO/index.tsx

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export default defineComponent({
1515
},
1616
setup(props, { emit }) {
1717
const install = useAsyncState(async () => {
18-
await api.InstallMmlLibs();
18+
await api.InstallMmlLibs({ useLegacy: isLegacyModeEnabled.value });
1919
await updateModInfo();
2020
}, undefined, {
2121
immediate: false,
@@ -34,12 +34,32 @@ export default defineComponent({
3434
];
3535

3636
const PREFIX = 'GameSystem.MaimollerIO.';
37+
const useLegacyEntryPath = PREFIX + 'UseLegacy';
3738
const knownPaths = [
3839
...['P1', 'Touch1p', 'Button1p', 'Led1p', 'P2', 'Touch2p', 'Button2p', 'Led2p', 'Button1', 'Button2', 'Button3', 'Button4'].map(it => PREFIX + it),
3940
];
4041

42+
const isLegacyModeEnabled = computed(() => {
43+
const legacyEntry = props.entryStates[useLegacyEntryPath];
44+
if (!legacyEntry) {
45+
return true;
46+
}
47+
return Boolean(legacyEntry.value);
48+
});
49+
50+
const isMmlRequirementSatisfied = computed(() => {
51+
const isAdxHidIoModAbsent = Boolean(modInfo.value?.isAdxHidIoModAbsent);
52+
if (!isAdxHidIoModAbsent) {
53+
return false;
54+
}
55+
if (!isLegacyModeEnabled.value) {
56+
return true;
57+
}
58+
return Boolean(modInfo.value?.isMmlLegacyLibsInstalled);
59+
});
60+
4161
return () => <div class="flex flex-col gap-2">
42-
{!modInfo.value?.isMmlLibInstalled ? <div class="flex gap-2 items-center m-l-35">
62+
{!isMmlRequirementSatisfied.value ? <div class="flex gap-2 items-center m-l-35">
4363
<span class="c-orange">{t('mod.mmlIo.notInstalled')}</span>
4464
<Button variant="secondary" onClick={() => install.execute()} ing={install.isLoading.value}>{t('mod.oneClickInstall')}</Button>
4565
</div>

MaiChartManager/MaiChartManager.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
</PropertyGroup>
2929
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
3030
<IsPublishable>False</IsPublishable>
31-
<DefineConstants>TRACE</DefineConstants>
31+
<DefineConstants>TRACE;CRACK</DefineConstants>
3232
<OutputType>Exe</OutputType>
3333
</PropertyGroup>
3434
<PropertyGroup Condition="'$(Configuration)'=='Release'">

0 commit comments

Comments
 (0)