mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-10-20 17:53:46 +02:00
Compare commits
12 Commits
b9931e00e7
...
a56069e881
Author | SHA1 | Date | |
---|---|---|---|
|
a56069e881 | ||
|
a34e45363b | ||
|
e1a89f5f67 | ||
|
f7f6e0cde7 | ||
|
5a58522bf6 | ||
|
9347af2090 | ||
|
b294e57367 | ||
|
4234e16432 | ||
|
a64f2e1af7 | ||
|
926462407c | ||
|
1b499700fd | ||
|
930a4b411e |
2
.flutter
2
.flutter
Submodule .flutter updated: 05db968908...a402d9a437
@@ -1,6 +1,7 @@
|
|||||||
import java.io.FileInputStream
|
import java.io.FileInputStream
|
||||||
import java.util.Properties
|
import java.util.Properties
|
||||||
import com.android.build.api.variant.FilterConfiguration.FilterType.*
|
import com.android.build.api.variant.FilterConfiguration.FilterType.*
|
||||||
|
import com.android.build.gradle.internal.api.ApkVariantOutputImpl
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("com.android.application")
|
id("com.android.application")
|
||||||
@@ -86,18 +87,17 @@ android {
|
|||||||
|
|
||||||
val abiCodes = mapOf("x86_64" to 1, "armeabi-v7a" to 2, "arm64-v8a" to 3)
|
val abiCodes = mapOf("x86_64" to 1, "armeabi-v7a" to 2, "arm64-v8a" to 3)
|
||||||
|
|
||||||
androidComponents {
|
android.applicationVariants.configureEach {
|
||||||
onVariants { variant ->
|
val variant = this
|
||||||
variant.outputs.forEach { output ->
|
variant.outputs.forEach { output ->
|
||||||
val name = output.filters.find { it.filterType == ABI }?.identifier
|
val abiVersionCode = abiCodes[output.filters.find { it.filterType == "ABI" }?.identifier]
|
||||||
val baseAbiCode = abiCodes[name] ?: 0
|
if (abiVersionCode != null) {
|
||||||
if (baseAbiCode != null) {
|
(output as ApkVariantOutputImpl).versionCodeOverride = variant.versionCode * 10 + abiVersionCode
|
||||||
output.versionCode.set(baseAbiCode + ((output.versionCode.get() ?: 0) * 10))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5")
|
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5")
|
||||||
}
|
}
|
||||||
|
@@ -335,7 +335,7 @@
|
|||||||
"foregroundService": "Obtainium フォアグラウンドサービス",
|
"foregroundService": "Obtainium フォアグラウンドサービス",
|
||||||
"foregroundServiceExplanation": "アップデート確認にフォアグラウンドサービスを使用する(より信頼性が高いが、より電力を消費する)",
|
"foregroundServiceExplanation": "アップデート確認にフォアグラウンドサービスを使用する(より信頼性が高いが、より電力を消費する)",
|
||||||
"fgServiceNotice": "この通知は、バックグラウンドでアップデートを確認するために必要です(OSの設定で非表示にできます)。",
|
"fgServiceNotice": "この通知は、バックグラウンドでアップデートを確認するために必要です(OSの設定で非表示にできます)。",
|
||||||
"excludeSecrets": "秘密を除く",
|
"excludeSecrets": "シークレットを除く",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "アプリを削除しますか?",
|
"one": "アプリを削除しますか?",
|
||||||
"other": "アプリを削除しますか?"
|
"other": "アプリを削除しますか?"
|
||||||
|
@@ -253,8 +253,8 @@
|
|||||||
"backgroundUpdateLimitsExplanation": "Успешность фоновой установки можно определить только после открытия Obtainium",
|
"backgroundUpdateLimitsExplanation": "Успешность фоновой установки можно определить только после открытия Obtainium",
|
||||||
"verifyLatestTag": "Проверять метку «latest»",
|
"verifyLatestTag": "Проверять метку «latest»",
|
||||||
"intermediateLinkRegex": "Фильтр для «промежуточной» ссылки для посещения",
|
"intermediateLinkRegex": "Фильтр для «промежуточной» ссылки для посещения",
|
||||||
"filterByLinkText": "Фильтрация ссылок по тексту ссылки",
|
"filterByLinkText": "Фильтровать ссылки по тексту ссылки",
|
||||||
"matchLinksOutsideATags": "Сопоставляйте ссылки вне тегов <a>",
|
"matchLinksOutsideATags": "Сопоставлять ссылки вне тегов <a>",
|
||||||
"intermediateLinkNotFound": "Промежуточная ссылка не найдена",
|
"intermediateLinkNotFound": "Промежуточная ссылка не найдена",
|
||||||
"intermediateLink": "Промежуточная ссылка",
|
"intermediateLink": "Промежуточная ссылка",
|
||||||
"exemptFromBackgroundUpdates": "Исключить из фоновых обновлений (если включено)",
|
"exemptFromBackgroundUpdates": "Исключить из фоновых обновлений (если включено)",
|
||||||
|
@@ -32,6 +32,7 @@ class FDroid extends AppSource {
|
|||||||
GeneratedFormSwitch(
|
GeneratedFormSwitch(
|
||||||
'trySelectingSuggestedVersionCode',
|
'trySelectingSuggestedVersionCode',
|
||||||
label: tr('trySelectingSuggestedVersionCode'),
|
label: tr('trySelectingSuggestedVersionCode'),
|
||||||
|
defaultValue: true,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
|
@@ -29,6 +29,13 @@ class FDroidRepo extends AppSource {
|
|||||||
defaultValue: false,
|
defaultValue: false,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
GeneratedFormSwitch(
|
||||||
|
'trySelectingSuggestedVersionCode',
|
||||||
|
label: tr('trySelectingSuggestedVersionCode'),
|
||||||
|
defaultValue: true,
|
||||||
|
),
|
||||||
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,6 +177,7 @@ class FDroidRepo extends AppSource {
|
|||||||
}
|
}
|
||||||
standardUrl = removeQueryParamsFromUrl(standardUrl);
|
standardUrl = removeQueryParamsFromUrl(standardUrl);
|
||||||
bool pickHighestVersionCode = additionalSettings['pickHighestVersionCode'];
|
bool pickHighestVersionCode = additionalSettings['pickHighestVersionCode'];
|
||||||
|
bool trySelectingSuggestedVersionCode = additionalSettings['trySelectingSuggestedVersionCode'];
|
||||||
if (appIdOrName == null) {
|
if (appIdOrName == null) {
|
||||||
throw NoReleasesError();
|
throw NoReleasesError();
|
||||||
}
|
}
|
||||||
@@ -207,38 +215,58 @@ class FDroidRepo extends AppSource {
|
|||||||
foundApps[0].querySelector('name')?.innerHtml ?? appId;
|
foundApps[0].querySelector('name')?.innerHtml ?? appId;
|
||||||
var appName = foundApps[0].querySelector('name')?.innerHtml ?? appId;
|
var appName = foundApps[0].querySelector('name')?.innerHtml ?? appId;
|
||||||
var releases = foundApps[0].querySelectorAll('package');
|
var releases = foundApps[0].querySelectorAll('package');
|
||||||
|
if (releases.isEmpty) {
|
||||||
|
throw NoReleasesError();
|
||||||
|
}
|
||||||
|
String? changeLog = foundApps[0].querySelector('changelog')?.innerHtml;
|
||||||
String? latestVersion = releases[0].querySelector('version')?.innerHtml;
|
String? latestVersion = releases[0].querySelector('version')?.innerHtml;
|
||||||
String? added = releases[0].querySelector('added')?.innerHtml;
|
|
||||||
DateTime? releaseDate = added != null ? DateTime.parse(added) : null;
|
|
||||||
if (latestVersion == null) {
|
if (latestVersion == null) {
|
||||||
throw NoVersionError();
|
throw NoVersionError();
|
||||||
}
|
}
|
||||||
var latestVersionReleases = releases
|
String? marketvercodeStr = foundApps[0].querySelector('marketvercode')?.innerHtml;
|
||||||
.where(
|
int? marketvercode = int.tryParse(marketvercodeStr ?? '');
|
||||||
(element) =>
|
List selectedReleases = [];
|
||||||
element.querySelector('version')?.innerHtml == latestVersion &&
|
if (trySelectingSuggestedVersionCode && marketvercode != null) {
|
||||||
element.querySelector('apkname') != null,
|
selectedReleases = releases.where((e) =>
|
||||||
)
|
int.tryParse(e.querySelector('versioncode')?.innerHtml ?? '') == marketvercode &&
|
||||||
.toList();
|
e.querySelector('apkname') != null
|
||||||
if (latestVersionReleases.length > 1 && pickHighestVersionCode) {
|
).toList();
|
||||||
latestVersionReleases.sort((e1, e2) {
|
|
||||||
return int.parse(
|
|
||||||
e2.querySelector('versioncode')!.innerHtml,
|
|
||||||
).compareTo(int.parse(e1.querySelector('versioncode')!.innerHtml));
|
|
||||||
});
|
|
||||||
latestVersionReleases = [latestVersionReleases[0]];
|
|
||||||
}
|
}
|
||||||
List<String> apkUrls = latestVersionReleases
|
String? appAuthorName = foundApps[0].querySelector('author')?.innerHtml;
|
||||||
|
if (appAuthorName != null) {
|
||||||
|
authorName = appAuthorName;
|
||||||
|
}
|
||||||
|
if (selectedReleases.isEmpty) {
|
||||||
|
selectedReleases = releases.where((e) =>
|
||||||
|
e.querySelector('version')?.innerHtml == latestVersion &&
|
||||||
|
e.querySelector('apkname') != null
|
||||||
|
).toList();
|
||||||
|
if (selectedReleases.length > 1 && pickHighestVersionCode) {
|
||||||
|
selectedReleases.sort((e1, e2) {
|
||||||
|
return int.parse(e2.querySelector('versioncode')!.innerHtml)
|
||||||
|
.compareTo(int.parse(e1.querySelector('versioncode')!.innerHtml));
|
||||||
|
});
|
||||||
|
selectedReleases = [selectedReleases[0]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String? selectedVersion = selectedReleases[0].querySelector('version')?.innerHtml;
|
||||||
|
if (selectedVersion == null) {
|
||||||
|
throw NoVersionError();
|
||||||
|
}
|
||||||
|
String? added = selectedReleases[0].querySelector('added')?.innerHtml;
|
||||||
|
DateTime? releaseDate = added != null ? DateTime.parse(added) : null;
|
||||||
|
List<String> apkUrls = selectedReleases
|
||||||
.map(
|
.map(
|
||||||
(e) =>
|
(e) =>
|
||||||
'${res.request!.url.toString().split('/').reversed.toList().sublist(1).reversed.join('/')}/${e.querySelector('apkname')!.innerHtml}',
|
'${res.request!.url.toString().split('/').reversed.toList().sublist(1).reversed.join('/')}/${e.querySelector('apkname')!.innerHtml}',
|
||||||
)
|
)
|
||||||
.toList();
|
.toList();
|
||||||
return APKDetails(
|
return APKDetails(
|
||||||
latestVersion,
|
selectedVersion,
|
||||||
getApkUrlsFromUrls(apkUrls),
|
getApkUrlsFromUrls(apkUrls),
|
||||||
AppNames(authorName, appName),
|
AppNames(authorName, appName),
|
||||||
releaseDate: releaseDate,
|
releaseDate: releaseDate,
|
||||||
|
changeLog: changeLog,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
throw getObtainiumHttpError(res);
|
throw getObtainiumHttpError(res);
|
||||||
|
22
pubspec.lock
22
pubspec.lock
@@ -232,10 +232,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: dynamic_color
|
name: dynamic_color
|
||||||
sha256: eae98052fa6e2826bdac3dd2e921c6ce2903be15c6b7f8b6d8a5d49b5086298d
|
sha256: "43a5a6679649a7731ab860334a5812f2067c2d9ce6452cf069c5e0c25336c17c"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.7.0"
|
version: "1.8.1"
|
||||||
easy_localization:
|
easy_localization:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -288,10 +288,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: file_picker
|
name: file_picker
|
||||||
sha256: e7e16c9d15c36330b94ca0e2ad8cb61f93cd5282d0158c09805aed13b5452f22
|
sha256: f2d9f173c2c14635cc0e9b14c143c49ef30b4934e8d1d274d6206fcb0086a06f
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "10.3.2"
|
version: "10.3.3"
|
||||||
fixnum:
|
fixnum:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -572,10 +572,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: leak_tracker
|
name: leak_tracker
|
||||||
sha256: "8dcda04c3fc16c14f48a7bb586d4be1f0d1572731b6d81d51772ef47c02081e0"
|
sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "11.0.1"
|
version: "11.0.2"
|
||||||
leak_tracker_flutter_testing:
|
leak_tracker_flutter_testing:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1059,10 +1059,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_android
|
name: url_launcher_android
|
||||||
sha256: "69ee86740f2847b9a4ba6cffa74ed12ce500bbe2b07f3dc1e643439da60637b7"
|
sha256: "07cffecb7d68cbc6437cd803d5f11a86fe06736735c3dfe46ff73bcb0f958eed"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.3.18"
|
version: "6.3.21"
|
||||||
url_launcher_ios:
|
url_launcher_ios:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1155,10 +1155,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: webview_flutter_android
|
name: webview_flutter_android
|
||||||
sha256: "9a25f6b4313978ba1c2cda03a242eea17848174912cfb4d2d8ee84a556f248e3"
|
sha256: "3c4eb4fcc252b40c2b5ce7be20d0481428b70f3ff589b0a8b8aaeb64c6bed701"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.10.1"
|
version: "4.10.2"
|
||||||
webview_flutter_platform_interface:
|
webview_flutter_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1209,4 +1209,4 @@ packages:
|
|||||||
version: "6.3.0"
|
version: "6.3.0"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=3.9.0 <4.0.0"
|
dart: ">=3.9.0 <4.0.0"
|
||||||
flutter: ">=3.29.0"
|
flutter: ">=3.35.0"
|
||||||
|
Reference in New Issue
Block a user