61 lines
1.6 KiB
Dart
61 lines
1.6 KiB
Dart
import 'package:yumi/app/constants/sc_global_config.dart';
|
|
import 'package:yumi/shared/data_sources/sources/local/user_manager.dart';
|
|
|
|
class SCH5UrlUtils {
|
|
static String appendAppParams(String url) {
|
|
return _appendQueryParams(url, appendLang: true, appendToken: true);
|
|
}
|
|
|
|
static String appendToken(String url) {
|
|
return _appendQueryParams(url, appendLang: false, appendToken: true);
|
|
}
|
|
|
|
static String _appendQueryParams(
|
|
String url, {
|
|
required bool appendLang,
|
|
required bool appendToken,
|
|
}) {
|
|
final trimmedUrl = url.trim();
|
|
if (trimmedUrl.isEmpty) {
|
|
return url;
|
|
}
|
|
|
|
final uri = Uri.tryParse(trimmedUrl);
|
|
if (uri == null) {
|
|
return url;
|
|
}
|
|
|
|
final queryParameters = <String, dynamic>{};
|
|
uri.queryParametersAll.forEach((key, values) {
|
|
queryParameters[key] = List<String>.from(values);
|
|
});
|
|
|
|
var hasChanges = false;
|
|
if (appendLang && !_hasQueryKey(queryParameters, 'lang')) {
|
|
queryParameters['lang'] = SCGlobalConfig.lang;
|
|
hasChanges = true;
|
|
}
|
|
|
|
final token = AccountStorage().getToken();
|
|
if (appendToken &&
|
|
token.isNotEmpty &&
|
|
!_hasQueryKey(queryParameters, 'token')) {
|
|
queryParameters['token'] = token;
|
|
hasChanges = true;
|
|
}
|
|
|
|
if (!hasChanges) {
|
|
return url;
|
|
}
|
|
|
|
return uri.replace(queryParameters: queryParameters).toString();
|
|
}
|
|
|
|
static bool _hasQueryKey(Map<String, dynamic> queryParameters, String key) {
|
|
final lowerKey = key.toLowerCase();
|
|
return queryParameters.keys.any(
|
|
(queryKey) => queryKey.toLowerCase() == lowerKey,
|
|
);
|
|
}
|
|
}
|