mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-07-17 07:06:43 +02:00
Compare commits
12 Commits
v0.14.14-b
...
v0.14.15-b
Author | SHA1 | Date | |
---|---|---|---|
8d4a09b007 | |||
6d8d2fa99d | |||
59ecd55530 | |||
77fcc89e37 | |||
7d63da4d9c | |||
8eea0bae99 | |||
f5dcd8f776 | |||
e1f2baeeda | |||
84d8ff8b0b | |||
9862c22fdb | |||
8c82f53dd2 | |||
5cf4c21ce3 |
@ -28,8 +28,8 @@
|
|||||||
"xIsTrackOnly": "{} ist nur zur Nachverfolgung",
|
"xIsTrackOnly": "{} ist nur zur Nachverfolgung",
|
||||||
"source": "Quelle",
|
"source": "Quelle",
|
||||||
"app": "App",
|
"app": "App",
|
||||||
"appsFromSourceAreTrackOnly": "Apps aus dieser Quelle sind 'Nur Nachverfolgen'.",
|
"appsFromSourceAreTrackOnly": "Apps aus dieser Quelle sind nur zum Nachverfolgen.",
|
||||||
"youPickedTrackOnly": "Sie haben die Option 'Nur Nachverfolgen' gewählt.",
|
"youPickedTrackOnly": "Sie haben die Option „Nur Nachverfolgen“ gewählt.",
|
||||||
"trackOnlyAppDescription": "Die App wird auf Updates überwacht, aber Obtainium wird sie nicht herunterladen oder installieren.",
|
"trackOnlyAppDescription": "Die App wird auf Updates überwacht, aber Obtainium wird sie nicht herunterladen oder installieren.",
|
||||||
"cancelled": "Abgebrochen",
|
"cancelled": "Abgebrochen",
|
||||||
"appAlreadyAdded": "App bereits hinzugefügt",
|
"appAlreadyAdded": "App bereits hinzugefügt",
|
||||||
@ -38,7 +38,7 @@
|
|||||||
"appSourceURL": "Quell-URL der App",
|
"appSourceURL": "Quell-URL der App",
|
||||||
"error": "Fehler",
|
"error": "Fehler",
|
||||||
"add": "Hinzufügen",
|
"add": "Hinzufügen",
|
||||||
"searchSomeSourcesLabel": "Suche (nur bestimmte Quellen)",
|
"searchSomeSourcesLabel": "Suche (nur für bestimmte Quellen)",
|
||||||
"search": "Suchen",
|
"search": "Suchen",
|
||||||
"additionalOptsFor": "Zusatzoptionen für {}",
|
"additionalOptsFor": "Zusatzoptionen für {}",
|
||||||
"supportedSources": "Unterstützte Quellen",
|
"supportedSources": "Unterstützte Quellen",
|
||||||
@ -70,7 +70,7 @@
|
|||||||
"yes": "Ja",
|
"yes": "Ja",
|
||||||
"markSelectedAppsUpdated": "Markiere ausgewählte Apps als aktuell",
|
"markSelectedAppsUpdated": "Markiere ausgewählte Apps als aktuell",
|
||||||
"pinToTop": "Oben anheften",
|
"pinToTop": "Oben anheften",
|
||||||
"unpinFromTop": "'Oben anheften' aufheben",
|
"unpinFromTop": "„Oben anheften“ aufheben",
|
||||||
"resetInstallStatusForSelectedAppsQuestion": "Installationsstatus für ausgewählte Apps zurücksetzen?",
|
"resetInstallStatusForSelectedAppsQuestion": "Installationsstatus für ausgewählte Apps zurücksetzen?",
|
||||||
"installStatusOfXWillBeResetExplanation": "Der Installationsstatus der ausgewählten Apps wird zurückgesetzt. Dies kann hilfreich sein, wenn die in Obtainium angezeigte App-Version aufgrund fehlgeschlagener Aktualisierungen oder anderer Probleme falsch ist.",
|
"installStatusOfXWillBeResetExplanation": "Der Installationsstatus der ausgewählten Apps wird zurückgesetzt. Dies kann hilfreich sein, wenn die in Obtainium angezeigte App-Version aufgrund fehlgeschlagener Aktualisierungen oder anderer Probleme falsch ist.",
|
||||||
"shareSelectedAppURLs": "Ausgewählte App-URLs teilen",
|
"shareSelectedAppURLs": "Ausgewählte App-URLs teilen",
|
||||||
@ -175,7 +175,7 @@
|
|||||||
"appId": "App ID",
|
"appId": "App ID",
|
||||||
"appWithIdOrNameNotFound": "Es wurde keine App mit dieser ID oder diesem Namen gefunden",
|
"appWithIdOrNameNotFound": "Es wurde keine App mit dieser ID oder diesem Namen gefunden",
|
||||||
"reposHaveMultipleApps": "Repos können mehrere Apps enthalten",
|
"reposHaveMultipleApps": "Repos können mehrere Apps enthalten",
|
||||||
"fdroidThirdPartyRepo": "F-Droid Third-Party Repo",
|
"fdroidThirdPartyRepo": "F-Droid Drittparteienrepo",
|
||||||
"steam": "Steam",
|
"steam": "Steam",
|
||||||
"steamMobile": "Steam Mobile",
|
"steamMobile": "Steam Mobile",
|
||||||
"steamChat": "Steam Chat",
|
"steamChat": "Steam Chat",
|
||||||
@ -244,17 +244,17 @@
|
|||||||
"xWasPossiblyUpdatedToY": "{} wurde möglicherweise aktualisiert auf {}.",
|
"xWasPossiblyUpdatedToY": "{} wurde möglicherweise aktualisiert auf {}.",
|
||||||
"backgroundUpdateReqsExplanation": "Die Hintergrundaktualisierung ist möglicherweise nicht für alle Apps möglich.",
|
"backgroundUpdateReqsExplanation": "Die Hintergrundaktualisierung ist möglicherweise nicht für alle Apps möglich.",
|
||||||
"backgroundUpdateLimitsExplanation": "Der Erfolg einer Hintergrundinstallation kann nur festgestellt werden, wenn Obtainium geöffnet wird.",
|
"backgroundUpdateLimitsExplanation": "Der Erfolg einer Hintergrundinstallation kann nur festgestellt werden, wenn Obtainium geöffnet wird.",
|
||||||
"verifyLatestTag": "Überprüfe das 'latest' Tag",
|
"verifyLatestTag": "Überprüfe das „latest“ Tag",
|
||||||
"exemptFromBackgroundUpdates": "Ausschluss von Hintergrundaktualisierungen (falls aktiviert)",
|
"exemptFromBackgroundUpdates": "Ausschluss von Hintergrundaktualisierungen (falls aktiviert)",
|
||||||
"bgUpdatesOnWiFiOnly": "Hintergrundaktualisierungen deaktivieren, wenn kein WLAN vorhanden ist",
|
"bgUpdatesOnWiFiOnly": "Hintergrundaktualisierungen deaktivieren, wenn kein WLAN vorhanden ist",
|
||||||
"autoSelectHighestVersionCode": "Auto-select highest versionCode APK",
|
"autoSelectHighestVersionCode": "Automatisch höchste APK-Code-Version auswählen",
|
||||||
"versionExtractionRegEx": "Version Extraction RegEx",
|
"versionExtractionRegEx": "Versions-Extraktion RegEx",
|
||||||
"matchGroupToUse": "Match Group to Use",
|
"matchGroupToUse": "Zu verwendende Gruppe abgleichen",
|
||||||
"highlightTouchTargets": "Highlight less obvious touch targets",
|
"highlightTouchTargets": "Weniger offensichtliche Ziele hervorheben",
|
||||||
"pickExportDir": "Pick Export Directory",
|
"pickExportDir": "Export-Verzeichnis wählen",
|
||||||
"autoExportOnChanges": "Auto-export on changes",
|
"autoExportOnChanges": "Automatischer Export bei Änderung",
|
||||||
"filterVersionsByRegEx": "Filter Versions by Regular Expression",
|
"filterVersionsByRegEx": "Versionen nach regulären Ausdrücken filtern",
|
||||||
"trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK",
|
"trySelectingSuggestedVersionCode": "Versuchen, die vorgeschlagene APK-Code-Version auszuwählen",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "App entfernen?",
|
"one": "App entfernen?",
|
||||||
"other": "Apps entfernen?"
|
"other": "Apps entfernen?"
|
||||||
|
@ -144,7 +144,7 @@
|
|||||||
"updatesAvailable": "アップデートが利用可能",
|
"updatesAvailable": "アップデートが利用可能",
|
||||||
"updatesAvailableNotifDescription": "Obtainiumが追跡している1つまたは複数のアプリのアップデートが利用可能であることをユーザーに通知する",
|
"updatesAvailableNotifDescription": "Obtainiumが追跡している1つまたは複数のアプリのアップデートが利用可能であることをユーザーに通知する",
|
||||||
"noNewUpdates": "新しいアップデートはありません",
|
"noNewUpdates": "新しいアップデートはありません",
|
||||||
"xHasAnUpdate": "{} のアップデートが利用可能です",
|
"xHasAnUpdate": "{} のアップデートが利用可能です。",
|
||||||
"appsUpdated": "アプリをアップデートしました",
|
"appsUpdated": "アプリをアップデートしました",
|
||||||
"appsUpdatedNotifDescription": "1つまたは複数のAppのアップデートがバックグラウンドで適用されたことをユーザーに通知する",
|
"appsUpdatedNotifDescription": "1つまたは複数のAppのアップデートがバックグラウンドで適用されたことをユーザーに通知する",
|
||||||
"xWasUpdatedToY": "{} が {} にアップデートされました",
|
"xWasUpdatedToY": "{} が {} にアップデートされました",
|
||||||
@ -241,21 +241,23 @@
|
|||||||
"customLinkFilterRegex": "正規表現によるカスタムリンクフィルター (デフォルト '.apk$')",
|
"customLinkFilterRegex": "正規表現によるカスタムリンクフィルター (デフォルト '.apk$')",
|
||||||
"appsPossiblyUpdated": "アプリのアップデートを試行",
|
"appsPossiblyUpdated": "アプリのアップデートを試行",
|
||||||
"appsPossiblyUpdatedNotifDescription": "1つまたは複数のアプリのアップデートがバックグラウンドで適用された可能性があることをユーザーに通知する",
|
"appsPossiblyUpdatedNotifDescription": "1つまたは複数のアプリのアップデートがバックグラウンドで適用された可能性があることをユーザーに通知する",
|
||||||
"xWasPossiblyUpdatedToY": "{} が {} にアップデートされた可能性があります",
|
"xWasPossiblyUpdatedToY": "{} が {} にアップデートされた可能性があります。",
|
||||||
"enableBackgroundUpdates": "バックグラウンドアップデートを有効化する",
|
"enableBackgroundUpdates": "バックグラウンドアップデートを有効化する",
|
||||||
"backgroundUpdateReqsExplanation": "バックグラウンドアップデートは、すべてのアプリで可能とは限りません。",
|
"backgroundUpdateReqsExplanation": "バックグラウンドアップデートは、すべてのアプリで可能とは限りません。",
|
||||||
"backgroundUpdateLimitsExplanation": "バックグラウンドアップデートが成功したかどうかは、Obtainiumを起動したときにしか判断できません。",
|
"backgroundUpdateLimitsExplanation": "バックグラウンドアップデートが成功したかどうかは、Obtainiumを起動したときにしか判断できません。",
|
||||||
"verifyLatestTag": "'latest'タグを確認する",
|
"verifyLatestTag": "'latest'タグを確認する",
|
||||||
|
"intermediateLinkRegex": "最初にアクセスする「中間」リンクをフィルタリングする",
|
||||||
|
"intermediateLinkNotFound": "中間リンクが見つかりませんでした",
|
||||||
"exemptFromBackgroundUpdates": "バックグラウンドアップデートを行わない (有効な場合)",
|
"exemptFromBackgroundUpdates": "バックグラウンドアップデートを行わない (有効な場合)",
|
||||||
"bgUpdatesOnWiFiOnly": "WiFiを使用していない場合,バックグラウンドアップデートを無効にする",
|
"bgUpdatesOnWiFiOnly": "WiFiを使用していない場合,バックグラウンドアップデートを無効にする",
|
||||||
"autoSelectHighestVersionCode": "Auto-select highest versionCode APK",
|
"autoSelectHighestVersionCode": "最も高いバージョンコードのAPKを自動で選択する",
|
||||||
"versionExtractionRegEx": "Version Extraction RegEx",
|
"versionExtractionRegEx": "バージョン抽出の正規表現",
|
||||||
"matchGroupToUse": "Match Group to Use",
|
"matchGroupToUse": "使用するマッチしたグループ",
|
||||||
"highlightTouchTargets": "Highlight less obvious touch targets",
|
"highlightTouchTargets": "目立たないタップ可能な対象をハイライトする",
|
||||||
"pickExportDir": "Pick Export Directory",
|
"pickExportDir": "エクスポートディレクトリを選択",
|
||||||
"autoExportOnChanges": "Auto-export on changes",
|
"autoExportOnChanges": "変更があった際に自動でエクスポートする",
|
||||||
"filterVersionsByRegEx": "Filter Versions by Regular Expression",
|
"filterVersionsByRegEx": "正規表現でバージョンをフィルタリングする",
|
||||||
"trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK",
|
"trySelectingSuggestedVersionCode": "提案されたバージョンコードのAPKを選択する",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "アプリを削除しますか?",
|
"one": "アプリを削除しますか?",
|
||||||
"other": "アプリを削除しますか?"
|
"other": "アプリを削除しますか?"
|
||||||
@ -297,15 +299,15 @@
|
|||||||
"other": "{n} 個のログをクリアしました (前 = {before}, 後 = {after})"
|
"other": "{n} 個のログをクリアしました (前 = {before}, 後 = {after})"
|
||||||
},
|
},
|
||||||
"xAndNMoreUpdatesAvailable": {
|
"xAndNMoreUpdatesAvailable": {
|
||||||
"one": "{} とさらに {} 個のアプリのアップデートが利用可能です",
|
"one": "{} とさらに {} 個のアプリのアップデートが利用可能です。",
|
||||||
"other": "{} とさらに {} 個のアプリのアップデートが利用可能です"
|
"other": "{} とさらに {} 個のアプリのアップデートが利用可能です。"
|
||||||
},
|
},
|
||||||
"xAndNMoreUpdatesInstalled": {
|
"xAndNMoreUpdatesInstalled": {
|
||||||
"one": "{} とさらに {} 個のアプリがアップデートされました",
|
"one": "{} とさらに {} 個のアプリがアップデートされました。",
|
||||||
"other": "{} とさらに {} 個のアプリがアップデートされました"
|
"other": "{} とさらに {} 個のアプリがアップデートされました。"
|
||||||
},
|
},
|
||||||
"xAndNMoreUpdatesPossiblyInstalled": {
|
"xAndNMoreUpdatesPossiblyInstalled": {
|
||||||
"one": "{} とさらに 1 個のアプリがアップデートされた可能性があります",
|
"one": "{} とさらに 1 個のアプリがアップデートされた可能性があります。",
|
||||||
"other": "{} とさらに {} 個のアプリがアップデートされた可能性があります"
|
"other": "{} とさらに {} 個のアプリがアップデートされた可能性があります。"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ import 'package:easy_localization/src/easy_localization_controller.dart';
|
|||||||
// ignore: implementation_imports
|
// ignore: implementation_imports
|
||||||
import 'package:easy_localization/src/localization.dart';
|
import 'package:easy_localization/src/localization.dart';
|
||||||
|
|
||||||
const String currentVersion = '0.14.14';
|
const String currentVersion = '0.14.15';
|
||||||
const String currentReleaseTag =
|
const String currentReleaseTag =
|
||||||
'v$currentVersion-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES
|
'v$currentVersion-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES
|
||||||
|
|
||||||
|
@ -430,8 +430,8 @@ class AppsProvider with ChangeNotifier {
|
|||||||
zipFile: File(filePath), destinationDir: Directory(destinationPath));
|
zipFile: File(filePath), destinationDir: Directory(destinationPath));
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> installXApkDir(
|
Future<void> installXApkDir(DownloadedXApkDir dir,
|
||||||
DownloadedXApkDir dir, BuildContext? context) async {
|
{bool needsBGWorkaround = false}) async {
|
||||||
// We don't know which APKs in an XAPK are supported by the user's device
|
// We don't know which APKs in an XAPK are supported by the user's device
|
||||||
// So we try installing all of them and assume success if at least one installed
|
// So we try installing all of them and assume success if at least one installed
|
||||||
// If 0 APKs installed, throw the first install error encountered
|
// If 0 APKs installed, throw the first install error encountered
|
||||||
@ -444,7 +444,8 @@ class AppsProvider with ChangeNotifier {
|
|||||||
if (file.path.toLowerCase().endsWith('.apk')) {
|
if (file.path.toLowerCase().endsWith('.apk')) {
|
||||||
try {
|
try {
|
||||||
somethingInstalled = somethingInstalled ||
|
somethingInstalled = somethingInstalled ||
|
||||||
await installApk(DownloadedApk(dir.appId, file), context);
|
await installApk(DownloadedApk(dir.appId, file),
|
||||||
|
needsBGWorkaround: needsBGWorkaround);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logs.add(
|
logs.add(
|
||||||
'Could not install APK from XAPK \'${file.path}\': ${e.toString()}');
|
'Could not install APK from XAPK \'${file.path}\': ${e.toString()}');
|
||||||
@ -464,7 +465,8 @@ class AppsProvider with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> installApk(DownloadedApk file, BuildContext? context) async {
|
Future<bool> installApk(DownloadedApk file,
|
||||||
|
{bool needsBGWorkaround = false}) async {
|
||||||
var newInfo =
|
var newInfo =
|
||||||
await pm.getPackageArchiveInfo(archiveFilePath: file.file.path);
|
await pm.getPackageArchiveInfo(archiveFilePath: file.file.path);
|
||||||
PackageInfo? appInfo = await getInstalledInfo(apps[file.appId]!.app.id);
|
PackageInfo? appInfo = await getInstalledInfo(apps[file.appId]!.app.id);
|
||||||
@ -473,16 +475,19 @@ class AppsProvider with ChangeNotifier {
|
|||||||
!(await canDowngradeApps())) {
|
!(await canDowngradeApps())) {
|
||||||
throw DowngradeError();
|
throw DowngradeError();
|
||||||
}
|
}
|
||||||
int? code;
|
if (needsBGWorkaround) {
|
||||||
if (context == null) {
|
// The below 'await' will never return if we are in a background process
|
||||||
// In background installs, 'installApk' never returns so don't wait for it
|
// To work around this, we should assume the install will be successful
|
||||||
// TODO: Find a fix to make this work synchronously without context
|
// So we update the app's installed version first as we will never get to the later code
|
||||||
AndroidPackageInstaller.installApk(apkFilePath: file.file.path);
|
// We can't conditionally get rid of the 'await' as this causes install fails (BG process times out) - see #896
|
||||||
code = 0; // Be optimistic (ver. det. will get most wrong ones anyways)
|
// TODO: When fixed, update this function and the calls to it accordingly
|
||||||
} else {
|
apps[file.appId]!.app.installedVersion =
|
||||||
code =
|
apps[file.appId]!.app.latestVersion;
|
||||||
await AndroidPackageInstaller.installApk(apkFilePath: file.file.path);
|
await saveApps([apps[file.appId]!.app],
|
||||||
|
attemptToCorrectInstallStatus: false);
|
||||||
}
|
}
|
||||||
|
int? code =
|
||||||
|
await AndroidPackageInstaller.installApk(apkFilePath: file.file.path);
|
||||||
bool installed = false;
|
bool installed = false;
|
||||||
if (code != null && code != 0 && code != 3) {
|
if (code != null && code != 0 && code != 3) {
|
||||||
throw InstallError(code);
|
throw InstallError(code);
|
||||||
@ -649,11 +654,17 @@ class AppsProvider with ChangeNotifier {
|
|||||||
notifyListeners();
|
notifyListeners();
|
||||||
try {
|
try {
|
||||||
if (downloadedFile != null) {
|
if (downloadedFile != null) {
|
||||||
// ignore: use_build_context_synchronously
|
if (willBeSilent && context == null) {
|
||||||
await installApk(downloadedFile, context);
|
installApk(downloadedFile, needsBGWorkaround: true);
|
||||||
} else {
|
} else {
|
||||||
// ignore: use_build_context_synchronously
|
await installApk(downloadedFile);
|
||||||
await installXApkDir(downloadedDir!, context);
|
}
|
||||||
|
} else {
|
||||||
|
if (willBeSilent && context == null) {
|
||||||
|
installXApkDir(downloadedDir!, needsBGWorkaround: true);
|
||||||
|
} else {
|
||||||
|
await installXApkDir(downloadedDir!);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (willBeSilent && context == null) {
|
if (willBeSilent && context == null) {
|
||||||
notificationsProvider?.notify(SilentUpdateAttemptNotification(
|
notificationsProvider?.notify(SilentUpdateAttemptNotification(
|
||||||
|
@ -198,10 +198,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: dynamic_color
|
name: dynamic_color
|
||||||
sha256: de4798a7069121aee12d5895315680258415de9b00e717723a1bd73d58f0126d
|
sha256: "96bff3df72e3d428bda2b874c7a521e8c86f592cae626ea594922fcc8d166e0c"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.6.6"
|
version: "1.6.7"
|
||||||
easy_localization:
|
easy_localization:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@ -887,10 +887,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: webview_flutter_android
|
name: webview_flutter_android
|
||||||
sha256: "9427774649fd3c8b7ff53523051395d13aed2ca355822b822e6493d79f5fc05a"
|
sha256: ddc167c6676f57c8b367d19fcbee267d6dc6adf81bd6c3cb87981d30746e0a6d
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.10.0"
|
version: "3.10.1"
|
||||||
webview_flutter_platform_interface:
|
webview_flutter_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
|||||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||||
# In Windows, build-name is used as the major, minor, and patch parts
|
# In Windows, build-name is used as the major, minor, and patch parts
|
||||||
# of the product and file versions while build-number is used as the build suffix.
|
# of the product and file versions while build-number is used as the build suffix.
|
||||||
version: 0.14.14+206 # When changing this, update the tag in main() accordingly
|
version: 0.14.15+207 # When changing this, update the tag in main() accordingly
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=3.0.0 <4.0.0'
|
sdk: '>=3.0.0 <4.0.0'
|
||||||
|
Reference in New Issue
Block a user