Compare commits

...

16 Commits

Author SHA1 Message Date
09056665c2 Merge pull request #644 from ImranR98/dev
Increment version, update modules
2023-07-01 18:02:52 -04:00
f4c3951f6d Increment version, update modules 2023-07-01 18:02:34 -04:00
00f42bb881 Merge pull request #640 from mehdeej/main
Update (Persian) fa.json
2023-07-01 17:59:22 -04:00
d8408a26c2 Merge pull request #638 from 1xFF/OBB-Support
add OBB support
2023-07-01 17:59:12 -04:00
ede54531c8 Update (Persian) fa.json 2023-06-29 14:35:09 +00:00
0fa0a4b19a fix race condition 2023-06-28 13:31:10 -07:00
af5ea3db0f add Permissions for android 10 and below 2023-06-28 03:48:13 -07:00
e75ca05aa4 Change recursion 2023-06-28 02:50:18 -07:00
3483190b78 Merge branch 'ImranR98:main' into OBB-Support 2023-06-24 21:50:37 -07:00
69656e65c3 Basic OBB support 2023-06-24 21:48:57 -07:00
e6c6841fac Merge pull request #630 from ImranR98/dev
HTML Source: treat whole link as version (also applies to APK filter regex)
2023-06-24 17:58:57 -04:00
16d63a4416 HTML Source: treat whole link as version (also applies to APK filter regex) 2023-06-24 17:58:00 -04:00
2eaf443359 Merge pull request #627 from ImranR98/dev
Fixed syntax errors in RU translation file
2023-06-23 18:01:48 -04:00
5979957d60 Fixed syntax errors in RU translation file 2023-06-23 18:01:34 -04:00
049eb5914c Merge pull request #626 from ImranR98/dev
App ID infer bugfix for GitHub
2023-06-23 16:31:25 -04:00
7577f3ac9b App ID infer bugfix for GitHub 2023-06-23 16:30:35 -04:00
9 changed files with 84 additions and 68 deletions

View File

@ -228,12 +228,12 @@
"dontShowAgain": "دوباره این را نشان نده", "dontShowAgain": "دوباره این را نشان نده",
"dontShowTrackOnlyWarnings": "هشدار 'فقط ردیابی' را نشان ندهید", "dontShowTrackOnlyWarnings": "هشدار 'فقط ردیابی' را نشان ندهید",
"dontShowAPKOriginWarnings": "هشدارهای منبع APK را نشان ندهید", "dontShowAPKOriginWarnings": "هشدارهای منبع APK را نشان ندهید",
"moveNonInstalledAppsToBottom": "Move Non-Installed Apps to Bottom of Apps View", "moveNonInstalledAppsToBottom": "برنامه های نصب نشده را به نمای پایین برنامه ها منتقل کنید",
"gitlabPATLabel": "GitLab Personal Access Token (Enables Search)", "gitlabPATLabel": "رمز دسترسی شخصی GitLab (جستجو را فعال می کند)",
"about": "About", "about": "درباره",
"requiresCredentialsInSettings": "This needs additional credentials (in Settings)", "requiresCredentialsInSettings": "این به اعتبارنامه های اضافی نیاز دارد (در تنظیمات)",
"checkOnStart": "Check Once on Start", "checkOnStart": "بررسی در شروع",
"tryInferAppIdFromCode": "Try inferring App ID from source code", "tryInferAppIdFromCode": "شناسه برنامه را از کد منبع استنباط کنید",
"removeAppQuestion": { "removeAppQuestion": {
"one": "برنامه حذف شود؟", "one": "برنامه حذف شود؟",
"other": "برنامه ها حذف شوند؟" "other": "برنامه ها حذف شوند؟"

View File

@ -24,7 +24,7 @@
"fallbackToOlderReleases": "Откатиться к более старым версиям", "fallbackToOlderReleases": "Откатиться к более старым версиям",
"filterReleaseTitlesByRegEx": "Фильтровать заголовки релизов с помощью регулярного выражения", "filterReleaseTitlesByRegEx": "Фильтровать заголовки релизов с помощью регулярного выражения",
"invalidRegEx": "Неверное регулярное выражение", "invalidRegEx": "Неверное регулярное выражение",
"noDescription": "Нет описания" "noDescription": "Нет описания",
"cancel": "Отмена", "cancel": "Отмена",
"continue": "Продолжить", "continue": "Продолжить",
"requiredInBrackets": "(Обязательно)", "requiredInBrackets": "(Обязательно)",
@ -68,7 +68,7 @@
"removeSelectedAppsQuestion": "Удалить выбранные приложения?", "removeSelectedAppsQuestion": "Удалить выбранные приложения?",
"removeSelectedApps": "Удалить выбранные приложения", "removeSelectedApps": "Удалить выбранные приложения",
"updateX": "Обновить {}", "updateX": "Обновить {}",
"installX": "Установить {}" "installX": "Установить {}",
"markXTrackOnlyAsUpdated": "Отметить {}\n(Только для отслеживания)\nкак обновленное", "markXTrackOnlyAsUpdated": "Отметить {}\n(Только для отслеживания)\nкак обновленное",
"changeX": "Изменить {}", "changeX": "Изменить {}",
"installUpdateApps": "Установить/Обновить приложения", "installUpdateApps": "Установить/Обновить приложения",
@ -90,7 +90,7 @@
"filterActive": "Фильтр *", "filterActive": "Фильтр *",
"filterApps": "Фильтровать приложения", "filterApps": "Фильтровать приложения",
"appName": "Название приложения", "appName": "Название приложения",
"author": "Автор" "author": "Автор",
"upToDateApps": "Приложения со свежими обновлениями", "upToDateApps": "Приложения со свежими обновлениями",
"nonInstalledApps": "Неустановленные приложения", "nonInstalledApps": "Неустановленные приложения",
"importExport": "Импорт/экспорт", "importExport": "Импорт/экспорт",
@ -207,7 +207,7 @@
"categoryDeleteWarning": "Все приложения в удаленных категориях будут помечены как без категории.", "categoryDeleteWarning": "Все приложения в удаленных категориях будут помечены как без категории.",
"addCategory": "Добавить категорию", "addCategory": "Добавить категорию",
"label": "Метка", "label": "Метка",
"language": "Язык" "language": "Язык",
"copiedToClipboard": "Скопировано в буфер обмена", "copiedToClipboard": "Скопировано в буфер обмена",
"storagePermissionDenied": "Отказано в доступе к хранилищу", "storagePermissionDenied": "Отказано в доступе к хранилищу",
"selectedCategorizeWarning": "Это заменит все текущие настройки категорий для выбранных приложений.", "selectedCategorizeWarning": "Это заменит все текущие настройки категорий для выбранных приложений.",

View File

@ -102,15 +102,18 @@ class GitHub extends AppSource {
.split('\n') .split('\n')
.map((e) => e.trim()); .map((e) => e.trim());
var appId = trimmedLines var appId = trimmedLines
.where((l) => l.startsWith('applicationId "')) .where((l) =>
.first l.startsWith('applicationId "') ||
.split('"')[1]; l.startsWith('applicationId \''))
.first;
appId = appId
.split(appId.startsWith('applicationId "') ? '"' : '\'')[1];
if (appId.startsWith('\${') && appId.endsWith('}')) { if (appId.startsWith('\${') && appId.endsWith('}')) {
appId = trimmedLines appId = trimmedLines
.where((l) => l.startsWith( .where((l) => l.startsWith(
'def ${appId.substring(2, appId.length - 1)}')) 'def ${appId.substring(2, appId.length - 1)}'))
.first .first;
.split('"')[1]; appId = appId.split(appId.contains('"') ? '"' : '\'')[1];
} }
if (appId.isNotEmpty) { if (appId.isNotEmpty) {
return appId; return appId;

View File

@ -111,8 +111,7 @@ class HTML extends AppSource {
.where((element) => .where((element) =>
Uri.parse(element).path.toLowerCase().endsWith('.apk')) Uri.parse(element).path.toLowerCase().endsWith('.apk'))
.toList(); .toList();
links.sort( links.sort((a, b) => compareAlphaNumeric(a, b));
(a, b) => compareAlphaNumeric(a.split('/').last, b.split('/').last));
if (additionalSettings['apkFilterRegEx'] != null) { if (additionalSettings['apkFilterRegEx'] != null) {
var reg = RegExp(additionalSettings['apkFilterRegEx']); var reg = RegExp(additionalSettings['apkFilterRegEx']);
links = links.where((element) => reg.hasMatch(element)).toList(); links = links.where((element) => reg.hasMatch(element)).toList();
@ -121,12 +120,11 @@ class HTML extends AppSource {
throw NoReleasesError(); throw NoReleasesError();
} }
var rel = links.last; var rel = links.last;
var apkName = rel.split('/').last; var version = rel.hashCode.toString();
var version = apkName.substring(0, apkName.length - 4);
List<String> apkUrls = List<String> apkUrls =
[rel].map((e) => ensureAbsoluteUrl(e, uri)).toList(); [rel].map((e) => ensureAbsoluteUrl(e, uri)).toList();
return APKDetails( return APKDetails(version, apkUrls.map((e) => MapEntry(e, e)).toList(),
version, getApkUrlsFromUrls(apkUrls), AppNames(uri.host, tr('app'))); AppNames(uri.host, tr('app')));
} else { } else {
throw getObtainiumHttpError(res); throw getObtainiumHttpError(res);
} }

View File

@ -21,7 +21,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.13.9'; const String currentVersion = '0.13.13';
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

View File

@ -1,5 +1,3 @@
import 'dart:ui';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';

View File

@ -344,12 +344,14 @@ class AppsProvider with ChangeNotifier {
{bool silent = false}) async { {bool silent = false}) async {
try { try {
var somethingInstalled = false; var somethingInstalled = false;
for (var apk in dir.extracted for (var file in dir.extracted.listSync(recursive: true, followLinks: false).whereType<File>()) {
.listSync() if (file.path.toLowerCase().endsWith('.apk')) {
.where((f) => f is File && f.path.toLowerCase().endsWith('.apk'))) {
somethingInstalled = somethingInstalled || somethingInstalled = somethingInstalled ||
await installApk(DownloadedApk(dir.appId, apk as File), await installApk(DownloadedApk(dir.appId, file), silent: silent);
silent: silent); }
else if (file.path.toLowerCase().endsWith('.obb')) {
await moveObbFile(file, dir.appId);
}
} }
if (somethingInstalled) { if (somethingInstalled) {
dir.file.delete(recursive: true); dir.file.delete(recursive: true);
@ -388,6 +390,21 @@ class AppsProvider with ChangeNotifier {
return installed; return installed;
} }
Future<void> moveObbFile(File file, String appId) async {
if(!file.path.toLowerCase().endsWith('.obb')) return;
// TODO: Does not support Android 11+
if ((await DeviceInfoPlugin().androidInfo).version.sdkInt <= 29) {
await Permission.storage.request();
}
String obbDirPath = "/storage/emulated/0/Android/obb/$appId";
Directory(obbDirPath).createSync(recursive: true);
String obbFileName = file.path.split("/").last;
await file.copy("$obbDirPath/$obbFileName");
}
void uninstallApp(String appId) async { void uninstallApp(String appId) async {
var intent = AndroidIntent( var intent = AndroidIntent(
action: 'android.intent.action.DELETE', action: 'android.intent.action.DELETE',

View File

@ -251,10 +251,10 @@ packages:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: flutter_lints name: flutter_lints
sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c sha256: "2118df84ef0c3ca93f96123a616ae8540879991b8b57af2f81b76a7ada49b2a4"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.1" version: "2.0.2"
flutter_local_notifications: flutter_local_notifications:
dependency: "direct main" dependency: "direct main"
description: description:
@ -288,10 +288,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_markdown name: flutter_markdown
sha256: dc6d5258653f6857135b32896ccda7f7af0c54dcec832495ad6835154c6c77c0 sha256: "9e0202b5339cd88ac0f109abae8502681bfab0b13a8e02a0e7158124610b5d98"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.6.15" version: "0.6.15+1"
flutter_plugin_android_lifecycle: flutter_plugin_android_lifecycle:
dependency: transitive dependency: transitive
description: description:
@ -330,10 +330,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: http name: http
sha256: "4c3f04bfb64d3efd508d06b41b825542f08122d30bda4933fb95c069d22a4fa3" sha256: "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.0" version: "1.1.0"
http_parser: http_parser:
dependency: transitive dependency: transitive
description: description:
@ -514,42 +514,42 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: permission_handler name: permission_handler
sha256: "1b6b3e73f0bcbc856548bbdfb1c33084a401c4f143e220629a9055233d76c331" sha256: "37fcc3c3182ac0bf8856f3e973e11c7bef5556d69f1a0d8fb908f51019c2912d"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "10.3.0" version: "10.4.1"
permission_handler_android: permission_handler_android:
dependency: transitive dependency: transitive
description: description:
name: permission_handler_android name: permission_handler_android
sha256: "8f6a95ccbca13766882f95d32684d7c9bfe6c45650c32bedba948ef1c6a4ddf7" sha256: "3b61f3da3b1c83bc3fb6a2b431e8dab01d0e5b45f6a3d9c7609770ec88b2a89e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "10.2.3" version: "10.3.0"
permission_handler_apple: permission_handler_apple:
dependency: transitive dependency: transitive
description: description:
name: permission_handler_apple name: permission_handler_apple
sha256: "08dcb6ce628ac0b257e429944b4c652c2a4e6af725bdf12b498daa2c6b2b1edb" sha256: "0d1f8007b17573ff1fbeae0f04b6c8e83e1d2f6c4fe8e8226d4d2456aa8ecffe"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "9.1.0" version: "9.1.2"
permission_handler_platform_interface: permission_handler_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: permission_handler_platform_interface name: permission_handler_platform_interface
sha256: de20a5c3269229c1ae2e5a6b822f6cb59578b23e8255c93fbeebfc82116e6b11 sha256: "79b36d93a41a4aecfd0d635d77552f327cb84227c718ce5e68b5f7b85546fe7e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.10.0" version: "3.11.0+1"
permission_handler_windows: permission_handler_windows:
dependency: transitive dependency: transitive
description: description:
name: permission_handler_windows name: permission_handler_windows
sha256: f67cab14b4328574938ecea2db3475dad7af7ead6afab6338772c5f88963e38b sha256: cc074aace208760f1eee6aa4fae766b45d947df85bc831cde77009cdb4720098
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.1.2" version: "0.1.3"
petitparser: petitparser:
dependency: transitive dependency: transitive
description: description:
@ -618,58 +618,58 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: shared_preferences name: shared_preferences
sha256: "396f85b8afc6865182610c0a2fc470853d56499f75f7499e2a73a9f0539d23d0" sha256: "0344316c947ffeb3a529eac929e1978fcd37c26be4e8468628bac399365a3ca1"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.2" version: "2.2.0"
shared_preferences_android: shared_preferences_android:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_android name: shared_preferences_android
sha256: "6478c6bbbecfe9aced34c483171e90d7c078f5883558b30ec3163cf18402c749" sha256: fe8401ec5b6dcd739a0fe9588802069e608c3fdbfd3c3c93e546cf2f90438076
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.4" version: "2.2.0"
shared_preferences_foundation: shared_preferences_foundation:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_foundation name: shared_preferences_foundation
sha256: e014107bb79d6d3297196f4f2d0db54b5d1f85b8ea8ff63b8e8b391a02700feb sha256: "0dc5c49ad8a05ed358b991b60c7b0ba1a14e16dae58af9b420d6b9e82dc024ab"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.2" version: "2.3.0"
shared_preferences_linux: shared_preferences_linux:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_linux name: shared_preferences_linux
sha256: "9d387433ca65717bbf1be88f4d5bb18f10508917a8fa2fb02e0fd0d7479a9afa" sha256: "71d6806d1449b0a9d4e85e0c7a917771e672a3d5dc61149cc9fac871115018e1"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.0" version: "2.3.0"
shared_preferences_platform_interface: shared_preferences_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_platform_interface name: shared_preferences_platform_interface
sha256: fb5cf25c0235df2d0640ac1b1174f6466bd311f621574997ac59018a6664548d sha256: "23b052f17a25b90ff2b61aad4cc962154da76fb62848a9ce088efe30d7c50ab1"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.0" version: "2.3.0"
shared_preferences_web: shared_preferences_web:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_web name: shared_preferences_web
sha256: "74083203a8eae241e0de4a0d597dbedab3b8fef5563f33cf3c12d7e93c655ca5" sha256: "7347b194fb0bbeb4058e6a4e87ee70350b6b2b90f8ac5f8bd5b3a01548f6d33a"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.0" version: "2.2.0"
shared_preferences_windows: shared_preferences_windows:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_windows name: shared_preferences_windows
sha256: "5e588e2efef56916a3b229c3bfe81e6a525665a454519ca51dbcc4236a274173" sha256: f95e6a43162bce43c9c3405f3eb6f39e5b5d11f65fab19196cf8225e2777624d
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.0" version: "2.3.0"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
@ -855,10 +855,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: webview_flutter_android name: webview_flutter_android
sha256: "532135f6f6b8030cd039f30eab23f340d650350e29f38e9b37d2eaad028f1018" sha256: "69787707339e7588aad256386475c18223cc0da87d9812343bc27c33c01eeab4"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.8.0" version: "3.8.1"
webview_flutter_platform_interface: webview_flutter_platform_interface:
dependency: transitive dependency: transitive
description: description:
@ -871,18 +871,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: webview_flutter_wkwebview name: webview_flutter_wkwebview
sha256: ecc9e9ea15216afc5ba3b1f14aa19414ceba526e57b19cebd970bfa91a0f4058 sha256: "7b203961d6830f3e5ed1df4c4f0493fea8388a46c4d43716167c4a8ba8ecbe83"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.5.0" version: "3.6.0"
win32: win32:
dependency: transitive dependency: transitive
description: description:
name: win32 name: win32
sha256: "1414f27dd781737e51afa9711f2ac2ace6ab4498ee98e20863fa5505aa00c58c" sha256: dfdf0136e0aa7a1b474ea133e67cb0154a0acd2599c4f3ada3b49d38d38793ee
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.0.4" version: "5.0.5"
win32_registry: win32_registry:
dependency: transitive dependency: transitive
description: description:
@ -917,4 +917,4 @@ packages:
version: "3.1.2" version: "3.1.2"
sdks: sdks:
dart: ">=3.0.0 <4.0.0" dart: ">=3.0.0 <4.0.0"
flutter: ">=3.4.0-17.0.pre" flutter: ">=3.10.0"

View File

@ -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.13.9+173 # When changing this, update the tag in main() accordingly version: 0.13.13+177 # When changing this, update the tag in main() accordingly
environment: environment:
sdk: '>=2.18.2 <3.0.0' sdk: '>=2.18.2 <3.0.0'