Skip to content

Commit cf8c5f2

Browse files
committedApr 30, 2024
fix: Move settings code to Settings Class instead of allTimeData Class
1 parent 507d75a commit cf8c5f2

File tree

12 files changed

+681
-765
lines changed

12 files changed

+681
-765
lines changed
 

‎packages/server/router/index.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -435,15 +435,14 @@ export default function buildBaseApi(server: Server) {
435435
return sendJson(res, { error: 'not_ready' });
436436
}
437437

438-
const { settings, menuData } = osuInstance.entities.getServices([
439-
'settings',
440-
'menuData'
441-
]);
438+
const { allTimesData, menuData } = osuInstance.entities.getServices(
439+
['allTimesData', 'menuData']
440+
);
442441

443442
const beatmapFilePath =
444443
query.path ||
445444
path.join(
446-
settings.gameFolder,
445+
allTimesData.GameFolder,
447446
'Songs',
448447
menuData.Folder,
449448
menuData.Path

‎packages/server/router/v1.ts

+5-3
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,10 @@ export default function buildV1Api({
3333
return sendJson(res, { error: 'not_ready' });
3434
}
3535

36-
const { settings } = osuInstance.entities.getServices(['settings']);
37-
if (settings.songsFolder === '') {
36+
const { allTimesData } = osuInstance.entities.getServices([
37+
'allTimesData'
38+
]);
39+
if (allTimesData.SongsFolder === '') {
3840
res.statusCode = 500;
3941
return sendJson(res, { error: 'not_ready' });
4042
}
@@ -43,7 +45,7 @@ export default function buildV1Api({
4345
res,
4446
baseUrl: url,
4547
pathname: req.params.filePath,
46-
folderPath: settings.songsFolder
48+
folderPath: allTimesData.SongsFolder
4749
});
4850
} catch (error) {
4951
wLogger.error((error as any).message);

‎packages/server/router/v2.ts

+14-8
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,10 @@ export default function buildV2Api({
6969
return sendJson(res, { error: 'not_ready' });
7070
}
7171

72-
const { settings } = osuInstance.entities.getServices(['settings']);
73-
if (settings.songsFolder === '') {
72+
const { allTimesData } = osuInstance.entities.getServices([
73+
'allTimesData'
74+
]);
75+
if (allTimesData.SongsFolder === '') {
7476
res.statusCode = 500;
7577
return sendJson(res, { error: 'not_ready' });
7678
}
@@ -79,7 +81,7 @@ export default function buildV2Api({
7981
res,
8082
baseUrl: url,
8183
pathname: req.params.filePath,
82-
folderPath: settings.songsFolder
84+
folderPath: allTimesData.SongsFolder
8385
});
8486
} catch (error) {
8587
wLogger.error((error as any).message);
@@ -101,19 +103,23 @@ export default function buildV2Api({
101103
return sendJson(res, { error: 'not_ready' });
102104
}
103105

104-
const { settings } = osuInstance.entities.getServices(['settings']);
106+
const { allTimesData } = osuInstance.entities.getServices([
107+
'allTimesData'
108+
]);
105109
if (
106-
(settings.gameFolder === '' && settings.skinFolder === '') ||
107-
(settings.gameFolder == null && settings.skinFolder == null)
110+
(allTimesData.GameFolder === '' &&
111+
allTimesData.SkinFolder === '') ||
112+
(allTimesData.GameFolder == null &&
113+
allTimesData.SkinFolder == null)
108114
) {
109115
res.statusCode = 500;
110116
return sendJson(res, { error: 'not_ready' });
111117
}
112118

113119
const folder = path.join(
114-
settings.gameFolder,
120+
allTimesData.GameFolder,
115121
'Skins',
116-
settings.skinFolder
122+
allTimesData.SkinFolder
117123
);
118124
directoryWalker({
119125
res,

‎packages/tosu/src/api/types/v2.ts

+11-78
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
import {
2+
Audio,
3+
Background,
4+
Client,
5+
Cursor,
6+
Keybinds,
7+
Mania,
8+
Mouse,
9+
Resolution
10+
} from '@/utils/settings.types';
11+
112
export enum BeatmapStatuses {
213
Graveyard = '-2',
314
Wip = '-1',
@@ -198,97 +209,22 @@ export interface Skin {
198209
name: string;
199210
}
200211

201-
export interface Cursor {
202-
useSkinCursor: boolean;
203-
autoSize: boolean;
204-
size: number;
205-
}
206-
207-
export interface Mouse {
208-
rawInput: boolean;
209-
disableButtons: boolean;
210-
disableWheel: boolean;
211-
sensitivity: number;
212-
}
213-
214-
export interface Mania {
215-
speedBPMScale: boolean;
216-
usePerBeatmapSpeedScale: boolean;
217-
}
218-
219212
export interface SettingsLeaderboard {
220213
visible: boolean;
221214
type: NumberName;
222215
}
223216

224-
export interface Resolution {
225-
fullscreen: boolean;
226-
width: number;
227-
height: number;
228-
widthFullscreen: number;
229-
heightFullscreen: number;
230-
}
231-
232-
export interface Client {
233-
updateAvailable: boolean;
234-
branch: number;
235-
version: string;
236-
}
237-
238217
export interface ScoreMeter {
239218
type: NumberName;
240219
size: number;
241220
}
242221

243-
export interface Background {
244-
storyboard: boolean;
245-
video: boolean;
246-
dim: number;
247-
}
248-
249-
export interface Audio {
250-
ignoreBeatmapSounds: boolean;
251-
useSkinSamples: boolean;
252-
volume: Volume;
253-
offset: Offset;
254-
}
255-
256-
export interface Offset {
257-
universal: number;
258-
}
259-
260222
export interface Volume {
261223
master: number;
262224
music: number;
263225
effect: number;
264226
}
265227

266-
export interface Keybinds {
267-
osu: Osu;
268-
fruits: Fruits;
269-
taiko: Taiko;
270-
quickRetry: string;
271-
}
272-
273-
export interface Osu {
274-
k1: string;
275-
k2: string;
276-
smokeKey: string;
277-
}
278-
279-
export interface Fruits {
280-
k1: string;
281-
k2: string;
282-
Dash: string;
283-
}
284-
285-
export interface Taiko {
286-
innerLeft: string;
287-
innerRight: string;
288-
outerLeft: string;
289-
outerRight: string;
290-
}
291-
292228
export interface NumberName {
293229
number: number;
294230
name: string;
@@ -537,9 +473,6 @@ export interface DirectPath {
537473
beatmapAudio: string;
538474
beatmapFolder: string;
539475
skinFolder: string;
540-
collections: string;
541-
osudb: string;
542-
scoresdb: string;
543476
}
544477

545478
export interface Tourney {

‎packages/tosu/src/api/utils/buildResult.ts

+3-5
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ export const buildResult = (
5050
instanceManager: InstanceManager
5151
): ApiAnswer => {
5252
const {
53-
settings,
5453
bassDensityData,
5554
allTimesData,
5655
menuData,
@@ -59,7 +58,6 @@ export const buildResult = (
5958
beatmapPpData,
6059
userProfile
6160
} = service.getServices([
62-
'settings',
6361
'bassDensityData',
6462
'allTimesData',
6563
'menuData',
@@ -78,9 +76,9 @@ export const buildResult = (
7876
settings: {
7977
showInterface: allTimesData.ShowInterface,
8078
folders: {
81-
game: settings.gameFolder,
82-
skin: settings.skinFolder,
83-
songs: settings.songsFolder
79+
game: allTimesData.GameFolder,
80+
skin: allTimesData.SkinFolder,
81+
songs: allTimesData.SongsFolder
8482
}
8583
},
8684
menu: {

‎packages/tosu/src/api/utils/buildResultV2.ts

+8-35
Original file line numberDiff line numberDiff line change
@@ -161,10 +161,7 @@ export const buildResult = (
161161
number: menuData.MenuGameMode,
162162
name: Modes[menuData.MenuGameMode] || ''
163163
},
164-
audio: {
165-
...settings.audio,
166-
offset: settings.offset
167-
},
164+
audio: settings.audio,
168165
background: settings.background,
169166

170167
keybinds: settings.keybinds
@@ -405,9 +402,9 @@ export const buildResult = (
405402
createdAt: resultsScreenData.Date
406403
},
407404
folders: {
408-
game: settings.gameFolder,
409-
skin: settings.skinFolder,
410-
songs: settings.songsFolder,
405+
game: allTimesData.GameFolder,
406+
skin: allTimesData.SkinFolder,
407+
songs: allTimesData.SongsFolder,
411408
beatmap: menuData.Folder
412409
},
413410
files: {
@@ -416,38 +413,14 @@ export const buildResult = (
416413
audio: menuData.AudioFilename
417414
},
418415
directPath: {
419-
beatmapFile: path.join(
420-
settings.gameFolder,
421-
'Songs',
422-
menuData.Folder,
423-
menuData.Path
424-
),
416+
beatmapFile: path.join(menuData.Folder, menuData.Path),
425417
beatmapBackground: path.join(
426-
settings.gameFolder,
427-
'Songs',
428418
menuData.Folder,
429419
menuData.BackgroundFilename
430420
),
431-
beatmapAudio: path.join(
432-
settings.gameFolder,
433-
'Songs',
434-
menuData.Folder,
435-
menuData.AudioFilename
436-
),
437-
beatmapFolder: path.join(
438-
settings.gameFolder,
439-
'Songs',
440-
menuData.Folder
441-
),
442-
skinFolder: path.join(
443-
settings.gameFolder,
444-
'Skins',
445-
settings.skinFolder
446-
),
447-
448-
collections: path.join(settings.gameFolder, 'collection.db'),
449-
osudb: path.join(settings.gameFolder, 'osu!.db'),
450-
scoresdb: path.join(settings.gameFolder, 'scores.db')
421+
beatmapAudio: path.join(menuData.Folder, menuData.AudioFilename),
422+
beatmapFolder: menuData.Folder,
423+
skinFolder: allTimesData.SkinFolder
451424
},
452425

453426
tourney: buildTourneyData(instanceManager)

‎packages/tosu/src/entities/AllTimesData/index.ts

+17-507
Large diffs are not rendered by default.

‎packages/tosu/src/entities/BeatmapPpData/index.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -193,14 +193,14 @@ export class BeatmapPPData extends AbstractEntity {
193193
updateMapMetadata(currentMods: number) {
194194
const startTime = performance.now();
195195

196-
const { menuData, settings } = this.services.getServices([
196+
const { menuData, allTimesData } = this.services.getServices([
197197
'menuData',
198-
'settings',
198+
'allTimesData',
199199
'beatmapPpData'
200200
]);
201201

202202
const mapPath = path.join(
203-
settings.songsFolder,
203+
allTimesData.SongsFolder,
204204
menuData.Folder,
205205
menuData.Path
206206
);

‎packages/tosu/src/entities/GamePlayData/index.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -508,12 +508,12 @@ export class GamePlayData extends AbstractEntity {
508508
return;
509509
}
510510

511-
const { settings, beatmapPpData } = this.services.getServices([
512-
'settings',
511+
const { allTimesData, beatmapPpData } = this.services.getServices([
512+
'allTimesData',
513513
'beatmapPpData'
514514
]);
515515

516-
if (!settings.gameFolder) {
516+
if (!allTimesData.GameFolder) {
517517
wLogger.debug(
518518
'GD(updateStarsAndPerformance) game folder not found'
519519
);

‎packages/tosu/src/entities/Settings/index.ts

+508-99
Large diffs are not rendered by default.

‎packages/tosu/src/objects/instanceManager/osuInstance.ts

+12-19
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ export class OsuInstance {
119119

120120
this.entities.set('process', this.process);
121121
this.entities.set('patterns', new MemoryPatterns());
122-
this.entities.set('settings', new Settings());
122+
this.entities.set('settings', new Settings(this.entities));
123123
this.entities.set('allTimesData', new AllTimesData(this.entities));
124124
this.entities.set('beatmapPpData', new BeatmapPPData(this.entities));
125125
this.entities.set('menuData', new MenuData(this.entities));
@@ -263,32 +263,33 @@ export class OsuInstance {
263263
while (!this.isDestroyed) {
264264
try {
265265
allTimesData.updateState();
266+
settings.updateState();
266267
menuData.updateState();
267268

268269
// osu! calculates audioTrack length a little bit after updating menuData, sooo.. lets this thing run regardless of menuData updating
269270
if (menuData.Folder !== '' && menuData.Folder !== null) {
270271
menuData.updateMP3Length();
271272
}
272273

273-
if (!settings.gameFolder) {
274-
settings.setGameFolder(path.join(this.path, '..'));
274+
if (!allTimesData.GameFolder) {
275+
allTimesData.setGameFolder(path.join(this.path, '..'));
275276

276277
// condition when user have different BeatmapDirectory in osu! config
277-
if (fs.existsSync(allTimesData.SongsFolder)) {
278-
settings.setSongsFolder(allTimesData.SongsFolder);
278+
if (fs.existsSync(allTimesData.MemorySongsFolder)) {
279+
allTimesData.setSongsFolder(
280+
allTimesData.MemorySongsFolder
281+
);
279282
} else {
280-
settings.setSongsFolder(
283+
allTimesData.setSongsFolder(
281284
path.join(
282285
this.path,
283286
'../',
284-
allTimesData.SongsFolder
287+
allTimesData.MemorySongsFolder
285288
)
286289
);
287290
}
288291
}
289292

290-
settings.setSkinFolder(path.join(allTimesData.SkinFolder));
291-
292293
switch (allTimesData.Status) {
293294
case 0:
294295
bassDensityData.updateState();
@@ -405,7 +406,6 @@ export class OsuInstance {
405406
const entities = this.entities.getServices([
406407
'menuData',
407408
'allTimesData',
408-
'settings',
409409
'gamePlayData',
410410
'beatmapPpData'
411411
]);
@@ -416,17 +416,10 @@ export class OsuInstance {
416416
updateMapMetadata(entries: {
417417
menuData: MenuData;
418418
allTimesData: AllTimesData;
419-
settings: Settings;
420419
gamePlayData: GamePlayData;
421420
beatmapPpData: BeatmapPPData;
422421
}) {
423-
const {
424-
menuData,
425-
allTimesData,
426-
settings,
427-
gamePlayData,
428-
beatmapPpData
429-
} = entries;
422+
const { menuData, allTimesData, gamePlayData, beatmapPpData } = entries;
430423
const currentMods =
431424
allTimesData.Status === 2 || allTimesData.Status === 7
432425
? gamePlayData.Mods
@@ -436,7 +429,7 @@ export class OsuInstance {
436429

437430
if (
438431
menuData.Path?.endsWith('.osu') &&
439-
settings.gameFolder &&
432+
allTimesData.GameFolder &&
440433
this.previousState !== currentState
441434
) {
442435
this.previousState = currentState;
+93
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
export interface IBindable {
2+
setValue: (value: any) => void;
3+
}
4+
5+
export interface IConfigBindable extends IBindable {
6+
type: 'bool' | 'byte' | 'int' | 'double' | 'string' | 'bstring' | 'enum';
7+
}
8+
9+
export interface Keybinds {
10+
osu: KeybindsOsu;
11+
fruits: KeybindsFruits;
12+
taiko: KeybindsTaiko;
13+
quickRetry: string;
14+
}
15+
16+
export interface KeybindsOsu {
17+
k1: string;
18+
k2: string;
19+
smokeKey: string;
20+
}
21+
22+
export interface KeybindsFruits {
23+
k1: string;
24+
k2: string;
25+
Dash: string;
26+
}
27+
28+
export interface KeybindsTaiko {
29+
innerLeft: string;
30+
innerRight: string;
31+
outerLeft: string;
32+
outerRight: string;
33+
}
34+
35+
export interface Volume {
36+
master: number;
37+
music: number;
38+
effect: number;
39+
}
40+
41+
export interface Audio {
42+
ignoreBeatmapSounds: boolean;
43+
useSkinSamples: boolean;
44+
volume: Volume;
45+
offset: Offset;
46+
}
47+
48+
export interface Background {
49+
storyboard: boolean;
50+
video: boolean;
51+
dim: number;
52+
}
53+
54+
export interface Client {
55+
updateAvailable: boolean;
56+
branch: number;
57+
version: string;
58+
}
59+
60+
export interface Resolution {
61+
fullscreen: boolean;
62+
width: number;
63+
height: number;
64+
widthFullscreen: number;
65+
heightFullscreen: number;
66+
}
67+
68+
export interface ScoreMeter {
69+
type: number;
70+
size: number;
71+
}
72+
73+
export interface Offset {
74+
universal: number;
75+
}
76+
77+
export interface Cursor {
78+
useSkinCursor: boolean;
79+
autoSize: boolean;
80+
size: number;
81+
}
82+
83+
export interface Mouse {
84+
disableButtons: boolean;
85+
disableWheel: boolean;
86+
rawInput: boolean;
87+
sensitivity: number;
88+
}
89+
90+
export interface Mania {
91+
speedBPMScale: boolean;
92+
usePerBeatmapSpeedScale: boolean;
93+
}

0 commit comments

Comments
 (0)
Please sign in to comment.