first commit

This commit is contained in:
2026-05-22 22:00:37 +08:00
commit fee7291ab9
152 changed files with 8954 additions and 0 deletions

View File

@@ -0,0 +1,98 @@
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';
class TitleServerConfig {
final String titleServerUrl;
final String aesKey;
final String aesIv;
final String obfuscateParam;
final String apiVersion;
final String clientId;
final int regionId;
final int placeId;
const TitleServerConfig({
required this.titleServerUrl,
required this.aesKey,
required this.aesIv,
this.obfuscateParam = 'LatuAa81',
this.apiVersion = '1.53',
required this.clientId,
this.regionId = 1,
this.placeId = 1403,
});
List<int> get aesKeyBytes => utf8.encode(aesKey);
List<int> get aesIvBytes => utf8.encode(aesIv);
Map<String, dynamic> toJson() => {
'titleServerUrl': titleServerUrl,
'aesKey': aesKey,
'aesIv': aesIv,
'obfuscateParam': obfuscateParam,
'apiVersion': apiVersion,
'clientId': clientId,
'regionId': regionId,
'placeId': placeId,
};
factory TitleServerConfig.fromJson(Map<String, dynamic> json) {
return TitleServerConfig(
titleServerUrl: json['titleServerUrl'] as String? ?? '',
aesKey: json['aesKey'] as String? ?? '',
aesIv: json['aesIv'] as String? ?? '',
obfuscateParam: json['obfuscateParam'] as String? ?? 'LatuAa81',
apiVersion: json['apiVersion'] as String? ?? '1.53',
clientId: json['clientId'] as String? ?? '',
regionId: json['regionId'] as int? ?? 1,
placeId: json['placeId'] as int? ?? 1403,
);
}
}
class TitleServerConfigHolder {
static const _storageKey = 'title_server_config';
static final TitleServerConfigHolder _instance = TitleServerConfigHolder._();
factory TitleServerConfigHolder() => _instance;
TitleServerConfigHolder._();
TitleServerConfig? _config;
TitleServerConfig? get config => _config;
bool get isConfigured {
final c = _config;
return c != null &&
c.titleServerUrl.isNotEmpty &&
c.aesKey.isNotEmpty &&
c.aesIv.isNotEmpty &&
c.clientId.isNotEmpty;
}
Future<void> init() async {
final prefs = await SharedPreferences.getInstance();
final raw = prefs.getString(_storageKey);
if (raw != null) {
try {
_config = TitleServerConfig.fromJson(
jsonDecode(raw) as Map<String, dynamic>,
);
} catch (_) {
_config = null;
}
}
}
Future<void> update(TitleServerConfig config) async {
_config = config;
final prefs = await SharedPreferences.getInstance();
await prefs.setString(_storageKey, jsonEncode(config.toJson()));
}
Future<void> clear() async {
_config = null;
final prefs = await SharedPreferences.getInstance();
await prefs.remove(_storageKey);
}
}