mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-07-18 23:39:41 +02:00
Compare commits
21 Commits
v0.13.22-b
...
v0.13.23-b
Author | SHA1 | Date | |
---|---|---|---|
|
2a5118a2cf | ||
|
347c56da55 | ||
|
8073723e1f | ||
|
c8e90a755d | ||
|
aeb0a5d8ea | ||
|
09fe7f3ecd | ||
|
a549411589 | ||
|
f426b5e118 | ||
|
12a8ef5e31 | ||
|
8210279a4c | ||
|
999d13b80d | ||
|
0573c0b270 | ||
|
5a36a7980c | ||
|
6bf9b5297f | ||
|
fdc6b0ff00 | ||
|
73c20a53d2 | ||
|
16ae8d8e4d | ||
|
3f8cfae64e | ||
|
6861a71efb | ||
|
2a603f410f | ||
|
6d22788f92 |
@@ -244,6 +244,8 @@
|
|||||||
"addInfoInSettings": "Add this info in the Settings.",
|
"addInfoInSettings": "Add this info in the Settings.",
|
||||||
"githubSourceNote": "GitHub rate limiting can be avoided using an API key.",
|
"githubSourceNote": "GitHub rate limiting can be avoided using an API key.",
|
||||||
"gitlabSourceNote": "GitLab APK extraction may not work without an API key.",
|
"gitlabSourceNote": "GitLab APK extraction may not work without an API key.",
|
||||||
|
"sortByFileNamesNotLinks": "Sort by file names instead of full links",
|
||||||
|
"filterReleaseNotesByRegEx": "Filter Release Notes by Regular Expression",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Želite li ukloniti aplikaciju?",
|
"one": "Želite li ukloniti aplikaciju?",
|
||||||
"other": "Želite li ukloniti aplikacije?"
|
"other": "Želite li ukloniti aplikacije?"
|
||||||
|
@@ -240,10 +240,12 @@
|
|||||||
"disablePageTransitions": "Animationen für Seitenübergänge deaktivieren",
|
"disablePageTransitions": "Animationen für Seitenübergänge deaktivieren",
|
||||||
"reversePageTransitions": "Umgekehrte Animationen für Seitenübergänge",
|
"reversePageTransitions": "Umgekehrte Animationen für Seitenübergänge",
|
||||||
"minStarCount": "Minimale Anzahl von Sternen",
|
"minStarCount": "Minimale Anzahl von Sternen",
|
||||||
"addInfoBelow": "Add this info below.",
|
"addInfoBelow": "Fügen Sie diese Informationen unten hinzu.",
|
||||||
"addInfoInSettings": "Add this info in the Settings.",
|
"addInfoInSettings": "Fügen Sie diese Info in den Einstellungen hinzu.",
|
||||||
"githubSourceNote": "GitHub rate limiting can be avoided using an API key.",
|
"githubSourceNote": "Die GitHub-Ratenbegrenzung kann mit einem API-Schlüssel umgangen werden.",
|
||||||
"gitlabSourceNote": "GitLab APK extraction may not work without an API key.",
|
"gitlabSourceNote": "GitLab APK-Extraktion funktioniert möglicherweise nicht ohne API-Schlüssel",
|
||||||
|
"sortByFileNamesNotLinks": "Sort by file names instead of full links",
|
||||||
|
"filterReleaseNotesByRegEx": "Filter Release Notes by Regular Expression",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "App entfernen?",
|
"one": "App entfernen?",
|
||||||
"other": "Apps entfernen?"
|
"other": "Apps entfernen?"
|
||||||
|
@@ -244,6 +244,8 @@
|
|||||||
"addInfoInSettings": "Add this info in the Settings.",
|
"addInfoInSettings": "Add this info in the Settings.",
|
||||||
"githubSourceNote": "GitHub rate limiting can be avoided using an API key.",
|
"githubSourceNote": "GitHub rate limiting can be avoided using an API key.",
|
||||||
"gitlabSourceNote": "GitLab APK extraction may not work without an API key.",
|
"gitlabSourceNote": "GitLab APK extraction may not work without an API key.",
|
||||||
|
"sortByFileNamesNotLinks": "Sort by file names instead of full links",
|
||||||
|
"filterReleaseNotesByRegEx": "Filter Release Notes by Regular Expression",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Remove App?",
|
"one": "Remove App?",
|
||||||
"other": "Remove Apps?"
|
"other": "Remove Apps?"
|
||||||
|
@@ -244,6 +244,8 @@
|
|||||||
"addInfoInSettings": "Add this info in the Settings.",
|
"addInfoInSettings": "Add this info in the Settings.",
|
||||||
"githubSourceNote": "GitHub rate limiting can be avoided using an API key.",
|
"githubSourceNote": "GitHub rate limiting can be avoided using an API key.",
|
||||||
"gitlabSourceNote": "GitLab APK extraction may not work without an API key.",
|
"gitlabSourceNote": "GitLab APK extraction may not work without an API key.",
|
||||||
|
"sortByFileNamesNotLinks": "Sort by file names instead of full links",
|
||||||
|
"filterReleaseNotesByRegEx": "Filter Release Notes by Regular Expression",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "¿Eliminar Aplicación?",
|
"one": "¿Eliminar Aplicación?",
|
||||||
"other": "¿Eliminar Aplicaciones?"
|
"other": "¿Eliminar Aplicaciones?"
|
||||||
|
@@ -244,6 +244,8 @@
|
|||||||
"addInfoInSettings": "Add this info in the Settings.",
|
"addInfoInSettings": "Add this info in the Settings.",
|
||||||
"githubSourceNote": "GitHub rate limiting can be avoided using an API key.",
|
"githubSourceNote": "GitHub rate limiting can be avoided using an API key.",
|
||||||
"gitlabSourceNote": "GitLab APK extraction may not work without an API key.",
|
"gitlabSourceNote": "GitLab APK extraction may not work without an API key.",
|
||||||
|
"sortByFileNamesNotLinks": "Sort by file names instead of full links",
|
||||||
|
"filterReleaseNotesByRegEx": "Filter Release Notes by Regular Expression",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "برنامه حذف شود؟",
|
"one": "برنامه حذف شود؟",
|
||||||
"other": "برنامه ها حذف شوند؟"
|
"other": "برنامه ها حذف شوند؟"
|
||||||
|
@@ -45,7 +45,7 @@
|
|||||||
"addApp": "Ajouter une application",
|
"addApp": "Ajouter une application",
|
||||||
"appSourceURL": "URL de la source de l'application",
|
"appSourceURL": "URL de la source de l'application",
|
||||||
"error": "Erreur",
|
"error": "Erreur",
|
||||||
"add": "Ajoutée",
|
"add": "Ajouter",
|
||||||
"searchSomeSourcesLabel": "Rechercher (certaines sources uniquement)",
|
"searchSomeSourcesLabel": "Rechercher (certaines sources uniquement)",
|
||||||
"search": "Rechercher",
|
"search": "Rechercher",
|
||||||
"additionalOptsFor": "Options supplémentaires pour {}",
|
"additionalOptsFor": "Options supplémentaires pour {}",
|
||||||
@@ -244,6 +244,8 @@
|
|||||||
"addInfoInSettings": "Add this info in the Settings.",
|
"addInfoInSettings": "Add this info in the Settings.",
|
||||||
"githubSourceNote": "GitHub rate limiting can be avoided using an API key.",
|
"githubSourceNote": "GitHub rate limiting can be avoided using an API key.",
|
||||||
"gitlabSourceNote": "GitLab APK extraction may not work without an API key.",
|
"gitlabSourceNote": "GitLab APK extraction may not work without an API key.",
|
||||||
|
"sortByFileNamesNotLinks": "Sort by file names instead of full links",
|
||||||
|
"filterReleaseNotesByRegEx": "Filter Release Notes by Regular Expression",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Supprimer l'application ?",
|
"one": "Supprimer l'application ?",
|
||||||
"other": "Supprimer les applications ?"
|
"other": "Supprimer les applications ?"
|
||||||
|
@@ -17,7 +17,7 @@
|
|||||||
"bgUpdateTaskFinished": "A háttérfrissítés ellenőrzési feladat befejeződött",
|
"bgUpdateTaskFinished": "A háttérfrissítés ellenőrzési feladat befejeződött",
|
||||||
"firstRun": "Ez az Obtainium első futása",
|
"firstRun": "Ez az Obtainium első futása",
|
||||||
"settingUpdateCheckIntervalTo": "A frissítési intervallum beállítása erre: {}",
|
"settingUpdateCheckIntervalTo": "A frissítési intervallum beállítása erre: {}",
|
||||||
"githubPATLabel": "GitHub személyes hozzáférési token (megnöveli a díjkorlátot)",
|
"githubPATLabel": "GitHub Personal Access Token (megnöveli a díjkorlátot)",
|
||||||
"githubPATHint": "A PAT-nak a következő formátumban kell lennie: felhasználónév:token",
|
"githubPATHint": "A PAT-nak a következő formátumban kell lennie: felhasználónév:token",
|
||||||
"githubPATFormat": "felhasználónév:token",
|
"githubPATFormat": "felhasználónév:token",
|
||||||
"includePrereleases": "Tartalmazza az előzetes kiadásokat",
|
"includePrereleases": "Tartalmazza az előzetes kiadásokat",
|
||||||
@@ -228,7 +228,7 @@
|
|||||||
"dontShowTrackOnlyWarnings": "Ne jelenítsen meg 'Csak nyomon követés' figyelmeztetést",
|
"dontShowTrackOnlyWarnings": "Ne jelenítsen meg 'Csak nyomon követés' figyelmeztetést",
|
||||||
"dontShowAPKOriginWarnings": "Ne jelenítsen meg az APK eredetére vonatkozó figyelmeztetéseket",
|
"dontShowAPKOriginWarnings": "Ne jelenítsen meg az APK eredetére vonatkozó figyelmeztetéseket",
|
||||||
"moveNonInstalledAppsToBottom": "Helyezze át a nem telepített appokat az App nézet aljára",
|
"moveNonInstalledAppsToBottom": "Helyezze át a nem telepített appokat az App nézet aljára",
|
||||||
"gitlabPATLabel": "GitLab Personal Access Token\n(Engedélyezi a Keresést and Better APK Discovery)",
|
"gitlabPATLabel": "GitLab Personal Access Token\n(Engedélyezi a Keresést és jobb APK felfedezés)",
|
||||||
"about": "Rólunk",
|
"about": "Rólunk",
|
||||||
"requiresCredentialsInSettings": "Ehhez további hitelesítő adatokra van szükség (a Beállításokban)",
|
"requiresCredentialsInSettings": "Ehhez további hitelesítő adatokra van szükség (a Beállításokban)",
|
||||||
"checkOnStart": "Egyszer az indításkor",
|
"checkOnStart": "Egyszer az indításkor",
|
||||||
@@ -239,10 +239,12 @@
|
|||||||
"disablePageTransitions": "Lap áttűnési animációk tiltása",
|
"disablePageTransitions": "Lap áttűnési animációk tiltása",
|
||||||
"reversePageTransitions": "Fordított lap áttűnési animációk",
|
"reversePageTransitions": "Fordított lap áttűnési animációk",
|
||||||
"minStarCount": "Minimális csillag szám",
|
"minStarCount": "Minimális csillag szám",
|
||||||
"addInfoBelow": "Add this info below.",
|
"addInfoBelow": "Adja hozzá ezt az infót alább.",
|
||||||
"addInfoInSettings": "Add this info in the Settings.",
|
"addInfoInSettings": "Adja hozzá ezt az infót a Beállításokban.",
|
||||||
"githubSourceNote": "GitHub rate limiting can be avoided using an API key.",
|
"githubSourceNote": "A GitHub értékelési korlátozása elkerülhető API-kulcs használatával.",
|
||||||
"gitlabSourceNote": "GitLab APK extraction may not work without an API key.",
|
"gitlabSourceNote": "Előfordulhat, hogy a GitLab APK kibontása nem működik API-kulcs nélkül.",
|
||||||
|
"sortByFileNamesNotLinks": "Sort by file names instead of full links",
|
||||||
|
"filterReleaseNotesByRegEx": "Filter Release Notes by Regular Expression",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Eltávolítja az alkalmazást?",
|
"one": "Eltávolítja az alkalmazást?",
|
||||||
"other": "Eltávolítja az alkalmazást?"
|
"other": "Eltávolítja az alkalmazást?"
|
||||||
|
@@ -244,6 +244,8 @@
|
|||||||
"addInfoInSettings": "Add this info in the Settings.",
|
"addInfoInSettings": "Add this info in the Settings.",
|
||||||
"githubSourceNote": "GitHub rate limiting can be avoided using an API key.",
|
"githubSourceNote": "GitHub rate limiting can be avoided using an API key.",
|
||||||
"gitlabSourceNote": "GitLab APK extraction may not work without an API key.",
|
"gitlabSourceNote": "GitLab APK extraction may not work without an API key.",
|
||||||
|
"sortByFileNamesNotLinks": "Sort by file names instead of full links",
|
||||||
|
"filterReleaseNotesByRegEx": "Filter Release Notes by Regular Expression",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Rimuovere l'app?",
|
"one": "Rimuovere l'app?",
|
||||||
"other": "Rimuovere le app?"
|
"other": "Rimuovere le app?"
|
||||||
|
@@ -239,11 +239,13 @@
|
|||||||
"checkUpdateOnDetailPage": "アプリの詳細ページを開く際にアップデートを確認する",
|
"checkUpdateOnDetailPage": "アプリの詳細ページを開く際にアップデートを確認する",
|
||||||
"disablePageTransitions": "ページ遷移アニメーションを無効化する",
|
"disablePageTransitions": "ページ遷移アニメーションを無効化する",
|
||||||
"reversePageTransitions": "ページ遷移アニメーションを反転する",
|
"reversePageTransitions": "ページ遷移アニメーションを反転する",
|
||||||
"minStarCount": "Minimum Star Count",
|
"minStarCount": "最小スター数",
|
||||||
"addInfoBelow": "Add this info below.",
|
"addInfoBelow": "下部でこの情報を追加してください。",
|
||||||
"addInfoInSettings": "Add this info in the Settings.",
|
"addInfoInSettings": "設定でこの情報を追加してください。",
|
||||||
"githubSourceNote": "GitHub rate limiting can be avoided using an API key.",
|
"githubSourceNote": "GitHubのレート制限はAPIキーを使うことで回避できます。",
|
||||||
"gitlabSourceNote": "GitLab APK extraction may not work without an API key.",
|
"gitlabSourceNote": "GitLabのAPK抽出はAPIキーがないと動作しない場合があります。",
|
||||||
|
"sortByFileNamesNotLinks": "Sort by file names instead of full links",
|
||||||
|
"filterReleaseNotesByRegEx": "Filter Release Notes by Regular Expression",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "アプリを削除しますか?",
|
"one": "アプリを削除しますか?",
|
||||||
"other": "アプリを削除しますか?"
|
"other": "アプリを削除しますか?"
|
||||||
|
@@ -244,10 +244,12 @@
|
|||||||
"disablePageTransitions": "Wyłącz animacje przejścia między stronami",
|
"disablePageTransitions": "Wyłącz animacje przejścia między stronami",
|
||||||
"reversePageTransitions": "Odwróć animacje przejścia pomiędzy stronami",
|
"reversePageTransitions": "Odwróć animacje przejścia pomiędzy stronami",
|
||||||
"minStarCount": "Minimalna ilość gwiazdek",
|
"minStarCount": "Minimalna ilość gwiazdek",
|
||||||
"addInfoBelow": "Add this info below.",
|
"addInfoBelow": "Dodaj tę informację poniżej.",
|
||||||
"addInfoInSettings": "Add this info in the Settings.",
|
"addInfoInSettings": "Dodaj tę informację w Ustawieniach.",
|
||||||
"githubSourceNote": "GitHub rate limiting can be avoided using an API key.",
|
"githubSourceNote": "Limit żądań GitHub można ominąć za pomocą klucza API.",
|
||||||
"gitlabSourceNote": "GitLab APK extraction may not work without an API key.",
|
"gitlabSourceNote": "Pozyskiwanie pliku APK z GitLab może nie działać bez klucza API.",
|
||||||
|
"sortByFileNamesNotLinks": "Sort by file names instead of full links",
|
||||||
|
"filterReleaseNotesByRegEx": "Filter Release Notes by Regular Expression",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Usunąć aplikację?",
|
"one": "Usunąć aplikację?",
|
||||||
"other": "Usunąć aplikacje?"
|
"other": "Usunąć aplikacje?"
|
||||||
|
@@ -240,10 +240,12 @@
|
|||||||
"disablePageTransitions": "Отключить анимацию перехода между страницами",
|
"disablePageTransitions": "Отключить анимацию перехода между страницами",
|
||||||
"reversePageTransitions": "Реверс анимации перехода между страницами",
|
"reversePageTransitions": "Реверс анимации перехода между страницами",
|
||||||
"minStarCount": "Минимальное количество звёзд",
|
"minStarCount": "Минимальное количество звёзд",
|
||||||
"addInfoBelow": "Add this info below.",
|
"addInfoBelow": "Добавьте эту информацию ниже.",
|
||||||
"addInfoInSettings": "Add this info in the Settings.",
|
"addInfoInSettings": "Добавьте эту информацию в Настройки.",
|
||||||
"githubSourceNote": "GitHub rate limiting can be avoided using an API key.",
|
"githubSourceNote": "Лимит запросов GitHub можно обойти, используя ключ API.",
|
||||||
"gitlabSourceNote": "GitLab APK extraction may not work without an API key.",
|
"gitlabSourceNote": "Извлечение APK из GitLab может не работать без ключа API.",
|
||||||
|
"sortByFileNamesNotLinks": "Sort by file names instead of full links",
|
||||||
|
"filterReleaseNotesByRegEx": "Filter Release Notes by Regular Expression",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Удалить приложение?",
|
"one": "Удалить приложение?",
|
||||||
"other": "Удалить приложения?"
|
"other": "Удалить приложения?"
|
||||||
|
@@ -107,7 +107,7 @@
|
|||||||
"searchX": "搜索 {}",
|
"searchX": "搜索 {}",
|
||||||
"noResults": "无结果",
|
"noResults": "无结果",
|
||||||
"importX": "导入 {}",
|
"importX": "导入 {}",
|
||||||
"importedAppsIdDisclaimer": "导入的应用可能错误地显示为“未安装”。\n请通过 Obtainium 重新安装这些应用来解决此问题。",
|
"importedAppsIdDisclaimer": "导入的应用可能会错误地显示为“未安装”状态。\n请通过 Obtainium 重新安装这些应用来解决此问题。",
|
||||||
"importErrors": "导入错误",
|
"importErrors": "导入错误",
|
||||||
"importedXOfYApps": "已导入 {} 中的 {} 个应用。",
|
"importedXOfYApps": "已导入 {} 中的 {} 个应用。",
|
||||||
"followingURLsHadErrors": "下列 URL 存在错误:",
|
"followingURLsHadErrors": "下列 URL 存在错误:",
|
||||||
@@ -229,7 +229,7 @@
|
|||||||
"dontShowTrackOnlyWarnings": "不显示“仅追踪”模式警告",
|
"dontShowTrackOnlyWarnings": "不显示“仅追踪”模式警告",
|
||||||
"dontShowAPKOriginWarnings": "不显示 APK 文件来源警告",
|
"dontShowAPKOriginWarnings": "不显示 APK 文件来源警告",
|
||||||
"moveNonInstalledAppsToBottom": "将未安装应用置底",
|
"moveNonInstalledAppsToBottom": "将未安装应用置底",
|
||||||
"gitlabPATLabel": "GitLab 个人访问令牌\n(用于搜索应用 and Better APK Discovery)",
|
"gitlabPATLabel": "GitLab 个人访问令牌\n(启用搜索功能并增强 APK 发现)",
|
||||||
"about": "相关文档",
|
"about": "相关文档",
|
||||||
"requiresCredentialsInSettings": "此功能需要额外的凭据(在“设置”中添加)",
|
"requiresCredentialsInSettings": "此功能需要额外的凭据(在“设置”中添加)",
|
||||||
"checkOnStart": "启动时进行一次检查",
|
"checkOnStart": "启动时进行一次检查",
|
||||||
@@ -240,10 +240,12 @@
|
|||||||
"disablePageTransitions": "禁用页面过渡动画效果",
|
"disablePageTransitions": "禁用页面过渡动画效果",
|
||||||
"reversePageTransitions": "反转页面过渡动画效果",
|
"reversePageTransitions": "反转页面过渡动画效果",
|
||||||
"minStarCount": "最小星标数",
|
"minStarCount": "最小星标数",
|
||||||
"addInfoBelow": "Add this info below.",
|
"addInfoBelow": "在下方添加此凭据。",
|
||||||
"addInfoInSettings": "Add this info in the Settings.",
|
"addInfoInSettings": "在“设置”中添加此凭据。",
|
||||||
"githubSourceNote": "GitHub rate limiting can be avoided using an API key.",
|
"githubSourceNote": "使用访问令牌可避免触发 GitHub 的 API 请求限制。",
|
||||||
"gitlabSourceNote": "GitLab APK extraction may not work without an API key.",
|
"gitlabSourceNote": "未使用访问令牌时可能无法从 GitLab 获取 APK 文件。",
|
||||||
|
"sortByFileNamesNotLinks": "Sort by file names instead of full links",
|
||||||
|
"filterReleaseNotesByRegEx": "Filter Release Notes by Regular Expression",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "是否删除应用?",
|
"one": "是否删除应用?",
|
||||||
"other": "是否删除应用?"
|
"other": "是否删除应用?"
|
||||||
|
@@ -1,6 +1,4 @@
|
|||||||
import 'package:easy_localization/easy_localization.dart';
|
|
||||||
import 'package:obtainium/app_sources/github.dart';
|
import 'package:obtainium/app_sources/github.dart';
|
||||||
import 'package:obtainium/components/generated_form.dart';
|
|
||||||
import 'package:obtainium/custom_errors.dart';
|
import 'package:obtainium/custom_errors.dart';
|
||||||
import 'package:obtainium/providers/source_provider.dart';
|
import 'package:obtainium/providers/source_provider.dart';
|
||||||
|
|
||||||
@@ -9,26 +7,8 @@ class Codeberg extends AppSource {
|
|||||||
Codeberg() {
|
Codeberg() {
|
||||||
host = 'codeberg.org';
|
host = 'codeberg.org';
|
||||||
|
|
||||||
additionalSourceAppSpecificSettingFormItems = [
|
additionalSourceAppSpecificSettingFormItems =
|
||||||
[
|
gh.additionalSourceAppSpecificSettingFormItems;
|
||||||
GeneratedFormSwitch('includePrereleases',
|
|
||||||
label: tr('includePrereleases'), defaultValue: false)
|
|
||||||
],
|
|
||||||
[
|
|
||||||
GeneratedFormSwitch('fallbackToOlderReleases',
|
|
||||||
label: tr('fallbackToOlderReleases'), defaultValue: true)
|
|
||||||
],
|
|
||||||
[
|
|
||||||
GeneratedFormTextField('filterReleaseTitlesByRegEx',
|
|
||||||
label: tr('filterReleaseTitlesByRegEx'),
|
|
||||||
required: false,
|
|
||||||
additionalValidators: [
|
|
||||||
(value) {
|
|
||||||
return regExValidator(value);
|
|
||||||
}
|
|
||||||
])
|
|
||||||
]
|
|
||||||
];
|
|
||||||
|
|
||||||
canSearch = true;
|
canSearch = true;
|
||||||
searchQuerySettingFormItems = gh.searchQuerySettingFormItems;
|
searchQuerySettingFormItems = gh.searchQuerySettingFormItems;
|
||||||
|
@@ -75,6 +75,16 @@ class GitHub extends AppSource {
|
|||||||
return regExValidator(value);
|
return regExValidator(value);
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
],
|
||||||
|
[
|
||||||
|
GeneratedFormTextField('filterReleaseNotesByRegEx',
|
||||||
|
label: tr('filterReleaseNotesByRegEx'),
|
||||||
|
required: false,
|
||||||
|
additionalValidators: [
|
||||||
|
(value) {
|
||||||
|
return regExValidator(value);
|
||||||
|
}
|
||||||
|
])
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -196,6 +206,12 @@ class GitHub extends AppSource {
|
|||||||
true
|
true
|
||||||
? additionalSettings['filterReleaseTitlesByRegEx']
|
? additionalSettings['filterReleaseTitlesByRegEx']
|
||||||
: null;
|
: null;
|
||||||
|
String? regexNotesFilter =
|
||||||
|
(additionalSettings['filterReleaseNotesByRegEx'] as String?)
|
||||||
|
?.isNotEmpty ==
|
||||||
|
true
|
||||||
|
? additionalSettings['filterReleaseNotesByRegEx']
|
||||||
|
: null;
|
||||||
Response res = await sourceRequest(requestUrl);
|
Response res = await sourceRequest(requestUrl);
|
||||||
if (res.statusCode == 200) {
|
if (res.statusCode == 200) {
|
||||||
var releases = jsonDecode(res.body) as List<dynamic>;
|
var releases = jsonDecode(res.body) as List<dynamic>;
|
||||||
@@ -264,6 +280,11 @@ class GitHub extends AppSource {
|
|||||||
!RegExp(regexFilter).hasMatch(nameToFilter.trim())) {
|
!RegExp(regexFilter).hasMatch(nameToFilter.trim())) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (regexNotesFilter != null &&
|
||||||
|
!RegExp(regexNotesFilter)
|
||||||
|
.hasMatch(((releases[i]['body'] as String?) ?? '').trim())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
var apkUrls = getReleaseAPKUrls(releases[i]);
|
var apkUrls = getReleaseAPKUrls(releases[i]);
|
||||||
if (apkUrls.isEmpty && additionalSettings['trackOnly'] != true) {
|
if (apkUrls.isEmpty && additionalSettings['trackOnly'] != true) {
|
||||||
continue;
|
continue;
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:html/parser.dart';
|
import 'package:html/parser.dart';
|
||||||
import 'package:http/http.dart';
|
import 'package:http/http.dart';
|
||||||
|
import 'package:obtainium/components/generated_form.dart';
|
||||||
import 'package:obtainium/custom_errors.dart';
|
import 'package:obtainium/custom_errors.dart';
|
||||||
import 'package:obtainium/providers/source_provider.dart';
|
import 'package:obtainium/providers/source_provider.dart';
|
||||||
|
|
||||||
@@ -85,6 +86,15 @@ bool _isNumeric(String s) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class HTML extends AppSource {
|
class HTML extends AppSource {
|
||||||
|
HTML() {
|
||||||
|
additionalSourceAppSpecificSettingFormItems = [
|
||||||
|
[
|
||||||
|
GeneratedFormSwitch('sortByFileNamesNotLinks',
|
||||||
|
label: tr('sortByFileNamesNotLinks'))
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
// TODO: implement requestHeaders choice, hardcoded for now
|
// TODO: implement requestHeaders choice, hardcoded for now
|
||||||
Map<String, String>? get requestHeaders => {
|
Map<String, String>? get requestHeaders => {
|
||||||
@@ -111,7 +121,9 @@ 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((a, b) => compareAlphaNumeric(a, b));
|
links.sort((a, b) => additionalSettings['sortByFileNamesNotLinks'] == true
|
||||||
|
? compareAlphaNumeric(a.split('/').last, b.split('/').last)
|
||||||
|
: compareAlphaNumeric(a, b));
|
||||||
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();
|
||||||
|
@@ -38,16 +38,14 @@ class VLC extends AppSource {
|
|||||||
}
|
}
|
||||||
String? targetUrl = 'https://$dwUrlBase/$version/';
|
String? targetUrl = 'https://$dwUrlBase/$version/';
|
||||||
Response res2 = await sourceRequest(targetUrl);
|
Response res2 = await sourceRequest(targetUrl);
|
||||||
String mirrorDwBase =
|
|
||||||
'https://plug-mirror.rcac.purdue.edu/vlc/vlc-android/$version/';
|
|
||||||
List<String> apkUrls = [];
|
List<String> apkUrls = [];
|
||||||
if (res2.statusCode == 200) {
|
if (res2.statusCode == 200) {
|
||||||
apkUrls = parse(res2.body)
|
apkUrls = parse(res2.body)
|
||||||
.querySelectorAll('a')
|
.querySelectorAll('a')
|
||||||
.map((e) => e.attributes['href'])
|
.map((e) => e.attributes['href']?.split('/').last)
|
||||||
.where((h) =>
|
.where((h) =>
|
||||||
h != null && h.isNotEmpty && h.toLowerCase().endsWith('.apk'))
|
h != null && h.isNotEmpty && h.toLowerCase().endsWith('.apk'))
|
||||||
.map((e) => mirrorDwBase + e!)
|
.map((e) => targetUrl + e!)
|
||||||
.toList();
|
.toList();
|
||||||
} else {
|
} else {
|
||||||
throw getObtainiumHttpError(res2);
|
throw getObtainiumHttpError(res2);
|
||||||
@@ -59,4 +57,20 @@ class VLC extends AppSource {
|
|||||||
throw getObtainiumHttpError(res);
|
throw getObtainiumHttpError(res);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<String> apkUrlPrefetchModifier(
|
||||||
|
String apkUrl, String standardUrl) async {
|
||||||
|
Response res = await sourceRequest(apkUrl);
|
||||||
|
if (res.statusCode == 200) {
|
||||||
|
String? apkUrl =
|
||||||
|
parse(res.body).querySelector('#alt_link')?.attributes['href'];
|
||||||
|
if (apkUrl == null) {
|
||||||
|
throw NoAPKError();
|
||||||
|
}
|
||||||
|
return apkUrl;
|
||||||
|
} else {
|
||||||
|
throw getObtainiumHttpError(res);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -11,7 +11,8 @@ class GeneratedFormModal extends StatefulWidget {
|
|||||||
this.initValid = false,
|
this.initValid = false,
|
||||||
this.message = '',
|
this.message = '',
|
||||||
this.additionalWidgets = const [],
|
this.additionalWidgets = const [],
|
||||||
this.singleNullReturnButton});
|
this.singleNullReturnButton,
|
||||||
|
this.primaryActionColour});
|
||||||
|
|
||||||
final String title;
|
final String title;
|
||||||
final String message;
|
final String message;
|
||||||
@@ -19,6 +20,7 @@ class GeneratedFormModal extends StatefulWidget {
|
|||||||
final bool initValid;
|
final bool initValid;
|
||||||
final List<Widget> additionalWidgets;
|
final List<Widget> additionalWidgets;
|
||||||
final String? singleNullReturnButton;
|
final String? singleNullReturnButton;
|
||||||
|
final Color? primaryActionColour;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<GeneratedFormModal> createState() => _GeneratedFormModalState();
|
State<GeneratedFormModal> createState() => _GeneratedFormModalState();
|
||||||
@@ -71,6 +73,10 @@ class _GeneratedFormModalState extends State<GeneratedFormModal> {
|
|||||||
: widget.singleNullReturnButton!)),
|
: widget.singleNullReturnButton!)),
|
||||||
widget.singleNullReturnButton == null
|
widget.singleNullReturnButton == null
|
||||||
? TextButton(
|
? TextButton(
|
||||||
|
style: widget.primaryActionColour == null
|
||||||
|
? null
|
||||||
|
: TextButton.styleFrom(
|
||||||
|
foregroundColor: widget.primaryActionColour),
|
||||||
onPressed: !valid
|
onPressed: !valid
|
||||||
? null
|
? null
|
||||||
: () {
|
: () {
|
||||||
|
@@ -22,7 +22,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.22';
|
const String currentVersion = '0.13.23';
|
||||||
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
|
||||||
|
|
||||||
|
@@ -403,10 +403,13 @@ class _SettingsPageState extends State<SettingsPage> {
|
|||||||
Switch(
|
Switch(
|
||||||
value:
|
value:
|
||||||
settingsProvider.reversePageTransitions,
|
settingsProvider.reversePageTransitions,
|
||||||
onChanged: (value) {
|
onChanged: settingsProvider
|
||||||
settingsProvider.reversePageTransitions =
|
.disablePageTransitions
|
||||||
value;
|
? null
|
||||||
})
|
: (value) {
|
||||||
|
settingsProvider
|
||||||
|
.reversePageTransitions = value;
|
||||||
|
})
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
height32,
|
height32,
|
||||||
|
@@ -892,6 +892,7 @@ class AppsProvider with ChangeNotifier {
|
|||||||
context: context,
|
context: context,
|
||||||
builder: (BuildContext ctx) {
|
builder: (BuildContext ctx) {
|
||||||
return GeneratedFormModal(
|
return GeneratedFormModal(
|
||||||
|
primaryActionColour: Theme.of(context).colorScheme.error,
|
||||||
title: plural('removeAppQuestion', apps.length),
|
title: plural('removeAppQuestion', apps.length),
|
||||||
items: !showUninstallOption
|
items: !showUninstallOption
|
||||||
? []
|
? []
|
||||||
|
@@ -431,14 +431,14 @@ abstract class AppSource {
|
|||||||
Map<String, dynamic> additionalSettings,
|
Map<String, dynamic> additionalSettings,
|
||||||
SettingsProvider settingsProvider) async {
|
SettingsProvider settingsProvider) async {
|
||||||
Map<String, String> results = {};
|
Map<String, String> results = {};
|
||||||
sourceConfigSettingFormItems.forEach((e) {
|
for (var e in sourceConfigSettingFormItems) {
|
||||||
var val = hostChanged
|
var val = hostChanged
|
||||||
? additionalSettings[e.key]
|
? additionalSettings[e.key]
|
||||||
: settingsProvider.getSettingString(e.key);
|
: settingsProvider.getSettingString(e.key);
|
||||||
if (val != null) {
|
if (val != null) {
|
||||||
results[e.key] = val;
|
results[e.key] = val;
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
40
pubspec.lock
40
pubspec.lock
@@ -5,18 +5,18 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: android_alarm_manager_plus
|
name: android_alarm_manager_plus
|
||||||
sha256: "80f963d47cb7ab0818144c7b0668aea4c038f9cb8626626e89a4ea77375defb7"
|
sha256: c20d91a9096596f66274bf8172321c278f9cba8091638f80205fe66d31587fa5
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.1"
|
version: "3.0.2"
|
||||||
android_intent_plus:
|
android_intent_plus:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: android_intent_plus
|
name: android_intent_plus
|
||||||
sha256: "2c87d8330ba5deef5fe20e77f4d178190b3b24531dce08368030ab4be40a9d4e"
|
sha256: f72ae20bb37108694f442e7ae6acbd28b453ca62ce86842f6787b784355abfe6
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.0.1"
|
version: "4.0.2"
|
||||||
android_package_installer:
|
android_package_installer:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -158,10 +158,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: device_info_plus
|
name: device_info_plus
|
||||||
sha256: "2c35b6d1682b028e42d07b3aee4b98fa62996c10bc12cb651ec856a80d6a761b"
|
sha256: "86add5ef97215562d2e090535b0a16f197902b10c369c558a100e74ea06e8659"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "9.0.2"
|
version: "9.0.3"
|
||||||
device_info_plus_platform_interface:
|
device_info_plus_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -490,42 +490,42 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path_provider_android
|
name: path_provider_android
|
||||||
sha256: "2cec049d282c7f13c594b4a73976b0b4f2d7a1838a6dd5aaf7bd9719196bee86"
|
sha256: "5d44fc3314d969b84816b569070d7ace0f1dea04bd94a83f74c4829615d22ad8"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.27"
|
version: "2.1.0"
|
||||||
path_provider_foundation:
|
path_provider_foundation:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path_provider_foundation
|
name: path_provider_foundation
|
||||||
sha256: "916731ccbdce44d545414dd9961f26ba5fbaa74bcbb55237d8e65a623a8c7297"
|
sha256: "1b744d3d774e5a879bb76d6cd1ecee2ba2c6960c03b1020cd35212f6aa267ac5"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.4"
|
version: "2.3.0"
|
||||||
path_provider_linux:
|
path_provider_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path_provider_linux
|
name: path_provider_linux
|
||||||
sha256: ffbb8cc9ed2c9ec0e4b7a541e56fd79b138e8f47d2fb86815f15358a349b3b57
|
sha256: ba2b77f0c52a33db09fc8caf85b12df691bf28d983e84cf87ff6d693cfa007b3
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.11"
|
version: "2.2.0"
|
||||||
path_provider_platform_interface:
|
path_provider_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path_provider_platform_interface
|
name: path_provider_platform_interface
|
||||||
sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec"
|
sha256: bced5679c7df11190e1ddc35f3222c858f328fff85c3942e46e7f5589bf9eb84
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.6"
|
version: "2.1.0"
|
||||||
path_provider_windows:
|
path_provider_windows:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path_provider_windows
|
name: path_provider_windows
|
||||||
sha256: "1cb68ba4cd3a795033de62ba1b7b4564dace301f952de6bfb3cd91b202b6ee96"
|
sha256: ee0e0d164516b90ae1f970bdf29f726f1aa730d7cfc449ecc74c495378b705da
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.7"
|
version: "2.2.0"
|
||||||
permission_handler:
|
permission_handler:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -610,18 +610,18 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: share_plus
|
name: share_plus
|
||||||
sha256: ed3fcea4f789ed95913328e629c0c53e69e80e08b6c24542f1b3576046c614e8
|
sha256: "6cec740fa0943a826951223e76218df002804adb588235a8910dc3d6b0654e11"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "7.0.2"
|
version: "7.1.0"
|
||||||
share_plus_platform_interface:
|
share_plus_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: share_plus_platform_interface
|
name: share_plus_platform_interface
|
||||||
sha256: "0c6e61471bd71b04a138b8b588fa388e66d8b005e6f2deda63371c5c505a0981"
|
sha256: "357412af4178d8e11d14f41723f80f12caea54cf0d5cd29af9dcdab85d58aea7"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.2.1"
|
version: "3.3.0"
|
||||||
shared_preferences:
|
shared_preferences:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
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.13.22+186 # When changing this, update the tag in main() accordingly
|
version: 0.13.23+187 # 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'
|
||||||
|
Reference in New Issue
Block a user