mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-11-04 07:13:28 +01:00 
			
		
		
		
	Compare commits
	
		
			39 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					4caae51904 | ||
| 
						 | 
					83616b7a79 | ||
| 
						 | 
					52b2d0868c | ||
| 
						 | 
					94f629859e | ||
| 
						 | 
					773d3455ae | ||
| 
						 | 
					919ab16528 | ||
| 
						 | 
					268b89eaf6 | ||
| 
						 | 
					9c9a264e39 | ||
| 
						 | 
					e1e612455a | ||
| 
						 | 
					e191d75300 | ||
| 
						 | 
					fce2a2f15c | ||
| 
						 | 
					dd8acd9451 | ||
| 
						 | 
					2d5676f13d | ||
| 
						 | 
					dfbf9e925c | ||
| 
						 | 
					e44f77a68a | ||
| 
						 | 
					cc373c8d7f | ||
| 
						 | 
					2ad88bf3ca | ||
| 
						 | 
					b1f9375bb1 | ||
| 
						 | 
					0e14e17236 | ||
| 
						 | 
					fc541837ef | ||
| 
						 | 
					da0b1d0684 | ||
| 
						 | 
					3fd89e8567 | ||
| 
						 | 
					8cab348eed | ||
| 
						 | 
					6bd821985f | ||
| 
						 | 
					1f2efe435f | ||
| 
						 | 
					8276a809a5 | ||
| 
						 | 
					5fe1a8a370 | ||
| 
						 | 
					58710093ba | ||
| 
						 | 
					ac6f8c456d | ||
| 
						 | 
					905461c242 | ||
| 
						 | 
					e3fcf6e0b5 | ||
| 
						 | 
					903fad5158 | ||
| 
						 | 
					1de93e827a | ||
| 
						 | 
					a5040aa0c1 | ||
| 
						 | 
					9f7c4e23d5 | ||
| 
						 | 
					876f67aacb | ||
| 
						 | 
					9d5ce75e27 | ||
| 
						 | 
					c1c06b3f9c | ||
| 
						 | 
					5e0333c4c8 | 
							
								
								
									
										2
									
								
								.flutter
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								.flutter
									
									
									
									
									
								
							 Submodule .flutter updated: 2663184aa7...603104015d
									
								
							
							
								
								
									
										36
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										36
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							@@ -6,9 +6,6 @@ on:
 | 
				
			|||||||
      beta:
 | 
					      beta:
 | 
				
			||||||
        type: boolean
 | 
					        type: boolean
 | 
				
			||||||
        description: Is beta?
 | 
					        description: Is beta?
 | 
				
			||||||
      draft:
 | 
					 | 
				
			||||||
        type: boolean
 | 
					 | 
				
			||||||
        description: Is draft?
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  build:
 | 
					  build:
 | 
				
			||||||
@@ -28,13 +25,6 @@ jobs:
 | 
				
			|||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
          flutter doctor -v
 | 
					          flutter doctor -v
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Import GPG key
 | 
					 | 
				
			||||||
        id: import_pgp_key
 | 
					 | 
				
			||||||
        uses: crazy-max/ghaction-import-gpg@v6
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          gpg_private_key: ${{ secrets.PGP_KEY_BASE64 }}
 | 
					 | 
				
			||||||
          passphrase: ${{ secrets.PGP_PASSPHRASE }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Check submodule
 | 
					      - name: Check submodule
 | 
				
			||||||
        id: check_submodule
 | 
					        id: check_submodule
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
@@ -57,24 +47,13 @@ jobs:
 | 
				
			|||||||
          for file in build/app/outputs/flutter-apk/app-*normal*.apk*; do mv "$file" "${file//-normal/}"; done
 | 
					          for file in build/app/outputs/flutter-apk/app-*normal*.apk*; do mv "$file" "${file//-normal/}"; done
 | 
				
			||||||
          flutter build apk --flavor fdroid -t lib/main_fdroid.dart && flutter build apk --split-per-abi --flavor fdroid -t lib/main_fdroid.dart
 | 
					          flutter build apk --flavor fdroid -t lib/main_fdroid.dart && flutter build apk --split-per-abi --flavor fdroid -t lib/main_fdroid.dart
 | 
				
			||||||
          rm ./build/app/outputs/flutter-apk/*.sha1
 | 
					          rm ./build/app/outputs/flutter-apk/*.sha1
 | 
				
			||||||
 | 
					          cp ./sign.sh ./build/app/outputs/flutter-apk/
 | 
				
			||||||
          ls -l ./build/app/outputs/flutter-apk/
 | 
					          ls -l ./build/app/outputs/flutter-apk/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Sign APKs
 | 
					      - name: Save Unsigned APKs as Action Artifacts
 | 
				
			||||||
        env:
 | 
					        uses: actions/upload-artifact@v4
 | 
				
			||||||
          KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }}
 | 
					        with:
 | 
				
			||||||
          KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
 | 
					          path: build/app/outputs/flutter-apk/*
 | 
				
			||||||
          PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }}
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          echo "${KEYSTORE_BASE64}" | base64 -d > apksign.keystore
 | 
					 | 
				
			||||||
          for apk in ./build/app/outputs/flutter-apk/*-release*.apk; do
 | 
					 | 
				
			||||||
            unsignedFn=${apk/-release/-unsigned}
 | 
					 | 
				
			||||||
            mv "$apk" "$unsignedFn"
 | 
					 | 
				
			||||||
            ${ANDROID_HOME}/build-tools/$(ls ${ANDROID_HOME}/build-tools/ | tail -1)/apksigner sign --ks apksign.keystore --ks-pass pass:"${KEYSTORE_PASSWORD}" --out "${apk}" "${unsignedFn}"
 | 
					 | 
				
			||||||
            sha256sum ${apk} | cut -d " " -f 1 > "$apk".sha256
 | 
					 | 
				
			||||||
            gpg --batch  --pinentry-mode loopback --passphrase "${PGP_PASSPHRASE}" --sign --detach-sig "$apk".sha256
 | 
					 | 
				
			||||||
          done
 | 
					 | 
				
			||||||
          rm apksign.keystore
 | 
					 | 
				
			||||||
          PGP_KEY_FINGERPRINT="${{ steps.import_pgp_key.outputs.fingerprint }}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Create Tag
 | 
					      - name: Create Tag
 | 
				
			||||||
        uses: mathieudutour/github-tag-action@v6.1
 | 
					        uses: mathieudutour/github-tag-action@v6.1
 | 
				
			||||||
@@ -83,12 +62,11 @@ jobs:
 | 
				
			|||||||
          custom_tag: "${{ steps.extract_version.outputs.tag }}"
 | 
					          custom_tag: "${{ steps.extract_version.outputs.tag }}"
 | 
				
			||||||
          tag_prefix: ""
 | 
					          tag_prefix: ""
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
      - name: Create Release And Upload APKs
 | 
					      - name: Create Draft Release
 | 
				
			||||||
        uses: ncipollo/release-action@v1
 | 
					        uses: ncipollo/release-action@v1
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          token: ${{ secrets.GH_ACCESS_TOKEN }}
 | 
					          token: ${{ secrets.GH_ACCESS_TOKEN }}
 | 
				
			||||||
          tag: "${{ steps.extract_version.outputs.tag }}"
 | 
					          tag: "${{ steps.extract_version.outputs.tag }}"
 | 
				
			||||||
          prerelease: "${{ steps.extract_version.outputs.beta }}"
 | 
					          prerelease: "${{ steps.extract_version.outputs.beta }}"
 | 
				
			||||||
          draft: "${{ inputs.draft }}"
 | 
					          draft: "true"
 | 
				
			||||||
          artifacts: ./build/app/outputs/flutter-apk/*-release*.apk*
 | 
					 | 
				
			||||||
          generateReleaseNotes: true
 | 
					          generateReleaseNotes: true
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,7 +30,6 @@ Currently supported App sources:
 | 
				
			|||||||
  - Jenkins Jobs
 | 
					  - Jenkins Jobs
 | 
				
			||||||
  - [APKMirror](https://apkmirror.com/) (Track-Only)
 | 
					  - [APKMirror](https://apkmirror.com/) (Track-Only)
 | 
				
			||||||
- Open Source - App-Specific:
 | 
					- Open Source - App-Specific:
 | 
				
			||||||
  - [Signal](https://signal.org/)
 | 
					 | 
				
			||||||
  - [VLC](https://videolan.org/)
 | 
					  - [VLC](https://videolan.org/)
 | 
				
			||||||
- Other - App-Specific:
 | 
					- Other - App-Specific:
 | 
				
			||||||
  - [WhatsApp](https://whatsapp.com)
 | 
					  - [WhatsApp](https://whatsapp.com)
 | 
				
			||||||
@@ -59,7 +58,13 @@ Or, contribute some configurations to the website by creating a PR at [this repo
 | 
				
			|||||||
    alt="Get it on F-Droid"
 | 
					    alt="Get it on F-Droid"
 | 
				
			||||||
    height="80">](https://f-droid.org/packages/dev.imranr.obtainium.fdroid/)
 | 
					    height="80">](https://f-droid.org/packages/dev.imranr.obtainium.fdroid/)
 | 
				
			||||||
     
 | 
					     
 | 
				
			||||||
[PGP Public Key](https://keyserver.ubuntu.com/pks/lookup?search=contact%40imranr.dev&fingerprint=on&op=index)
 | 
					Verification info:
 | 
				
			||||||
 | 
					- Package ID: `dev.imranr.obtainium`
 | 
				
			||||||
 | 
					- SHA-256 Hash of Signing Certificate: `B3:53:60:1F:6A:1D:5F:D6:60:3A:E2:F5:0B:E8:0C:F3:01:36:7B:86:B6:AB:8B:1F:66:24:3D:A9:6C:D5:73:62`
 | 
				
			||||||
 | 
					  - Note: The above signature is also valid for the F-Droid flavour of Obtainium, thanks to [reproducible builds](https://f-droid.org/docs/Reproducible_Builds/).
 | 
				
			||||||
 | 
					- [PGP Public Key](https://keyserver.ubuntu.com/pks/lookup?search=contact%40imranr.dev&fingerprint=on&op=index) (to verify APK hashes)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Limitations
 | 
					## Limitations
 | 
				
			||||||
- For some sources, data is gathered using Web scraping and can easily break due to changes in website design. In such cases, more reliable methods may be unavailable.
 | 
					- For some sources, data is gathered using Web scraping and can easily break due to changes in website design. In such cases, more reliable methods may be unavailable.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "appWithIdOrNameNotFound": "Nije pronađena aplikacija s tim ID-om ili imenom",
 | 
					    "appWithIdOrNameNotFound": "Nije pronađena aplikacija s tim ID-om ili imenom",
 | 
				
			||||||
    "reposHaveMultipleApps": "Repo-i mogu sadržavati više aplikacija",
 | 
					    "reposHaveMultipleApps": "Repo-i mogu sadržavati više aplikacija",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "F-Droid Repo treće strane",
 | 
					    "fdroidThirdPartyRepo": "F-Droid Repo treće strane",
 | 
				
			||||||
    "steamMobile": "Steam Mobile",
 | 
					 | 
				
			||||||
    "steamChat": "Razgovor na Steamu (chat)",
 | 
					 | 
				
			||||||
    "install": "Instaliraj",
 | 
					    "install": "Instaliraj",
 | 
				
			||||||
    "markInstalled": "Označi kao instalirano",
 | 
					    "markInstalled": "Označi kao instalirano",
 | 
				
			||||||
    "update": "Nadogradi",
 | 
					    "update": "Nadogradi",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "appWithIdOrNameNotFound": "Žádná aplikace s tímto ID nebo názvem nebyla nalezena",
 | 
					    "appWithIdOrNameNotFound": "Žádná aplikace s tímto ID nebo názvem nebyla nalezena",
 | 
				
			||||||
    "reposHaveMultipleApps": "Repozitáře mohou obsahovat více aplikací",
 | 
					    "reposHaveMultipleApps": "Repozitáře mohou obsahovat více aplikací",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "F-Droid repozitář třetí strany",
 | 
					    "fdroidThirdPartyRepo": "F-Droid repozitář třetí strany",
 | 
				
			||||||
    "steamMobile": "Steam Mobile",
 | 
					 | 
				
			||||||
    "steamChat": "Steam Chat",
 | 
					 | 
				
			||||||
    "install": "Nainstalujte",
 | 
					    "install": "Nainstalujte",
 | 
				
			||||||
    "markInstalled": "Označit jako nainstalovaný",
 | 
					    "markInstalled": "Označit jako nainstalovaný",
 | 
				
			||||||
    "update": "Aktualizovat",
 | 
					    "update": "Aktualizovat",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    "invalidURLForSource": "Ikke et gyldigt {} App-URL",
 | 
					    "invalidURLForSource": "Ikke et gyldigt {} app-URL",
 | 
				
			||||||
    "noReleaseFound": "Kunne ikke finde en passende udgivelse",
 | 
					    "noReleaseFound": "Kunne ikke finde en passende udgivelse",
 | 
				
			||||||
    "noVersionFound": "Kunne ikke afgøre udgivelsesversion",
 | 
					    "noVersionFound": "Kunne ikke afgøre udgivelsesversion",
 | 
				
			||||||
    "urlMatchesNoSource": "URL'en matcher ikke en kendt kilde",
 | 
					    "urlMatchesNoSource": "URL'en matcher ikke en kendt kilde",
 | 
				
			||||||
@@ -28,7 +28,7 @@
 | 
				
			|||||||
    "githubStarredRepos": "Stjernemarkeret GitHub-repos",
 | 
					    "githubStarredRepos": "Stjernemarkeret GitHub-repos",
 | 
				
			||||||
    "uname": "Brugernavn",
 | 
					    "uname": "Brugernavn",
 | 
				
			||||||
    "wrongArgNum": "Forkert antal argumenter angivet",
 | 
					    "wrongArgNum": "Forkert antal argumenter angivet",
 | 
				
			||||||
    "xIsTrackOnly": "{} kan kun følges",
 | 
					    "xIsTrackOnly": "{} er 'Følg Kun'",
 | 
				
			||||||
    "source": "Kilde",
 | 
					    "source": "Kilde",
 | 
				
			||||||
    "app": "App",
 | 
					    "app": "App",
 | 
				
			||||||
    "appsFromSourceAreTrackOnly": "Apps fra denne kilde er 'Følg Kun'.",
 | 
					    "appsFromSourceAreTrackOnly": "Apps fra denne kilde er 'Følg Kun'.",
 | 
				
			||||||
@@ -36,14 +36,14 @@
 | 
				
			|||||||
    "trackOnlyAppDescription": "Appen tjekkes for opdateringer, men Obtainium kan ikke hente eller installere den.",
 | 
					    "trackOnlyAppDescription": "Appen tjekkes for opdateringer, men Obtainium kan ikke hente eller installere den.",
 | 
				
			||||||
    "cancelled": "Annulleret",
 | 
					    "cancelled": "Annulleret",
 | 
				
			||||||
    "appAlreadyAdded": "Appen er allerede tilføjet",
 | 
					    "appAlreadyAdded": "Appen er allerede tilføjet",
 | 
				
			||||||
    "alreadyUpToDateQuestion": "Appen er allerede opdateret?",
 | 
					    "alreadyUpToDateQuestion": "Er appen allerede opdateret?",
 | 
				
			||||||
    "addApp": "Tilføj app",
 | 
					    "addApp": "Tilføj app",
 | 
				
			||||||
    "appSourceURL": "URL til app-kilde",
 | 
					    "appSourceURL": "URL til app-kilde",
 | 
				
			||||||
    "error": "Fejl",
 | 
					    "error": "Fejl",
 | 
				
			||||||
    "add": "Tilføj",
 | 
					    "add": "Tilføj",
 | 
				
			||||||
    "searchSomeSourcesLabel": "Søg (kun visse kilder)",
 | 
					    "searchSomeSourcesLabel": "Søg (kun visse kilder)",
 | 
				
			||||||
    "search": "Søg",
 | 
					    "search": "Søg",
 | 
				
			||||||
    "additionalOptsFor": "Yderligere indstillinger for {}",
 | 
					    "additionalOptsFor": "Flere indstillinger for {}",
 | 
				
			||||||
    "supportedSources": "Understøttede kilder",
 | 
					    "supportedSources": "Understøttede kilder",
 | 
				
			||||||
    "trackOnlyInBrackets": "(Følg Kun)",
 | 
					    "trackOnlyInBrackets": "(Følg Kun)",
 | 
				
			||||||
    "searchableInBrackets": "(Kan Søges)",
 | 
					    "searchableInBrackets": "(Kan Søges)",
 | 
				
			||||||
@@ -51,7 +51,7 @@
 | 
				
			|||||||
    "noApps": "Ingen apps",
 | 
					    "noApps": "Ingen apps",
 | 
				
			||||||
    "noAppsForFilter": "Ingen apps til filter",
 | 
					    "noAppsForFilter": "Ingen apps til filter",
 | 
				
			||||||
    "byX": "Af {}",
 | 
					    "byX": "Af {}",
 | 
				
			||||||
    "percentProgress": "Fremskridt: {}%",
 | 
					    "percentProgress": "Hentning: {}%",
 | 
				
			||||||
    "pleaseWait": "Vent venligst",
 | 
					    "pleaseWait": "Vent venligst",
 | 
				
			||||||
    "updateAvailable": "Opdatering tilgængelig",
 | 
					    "updateAvailable": "Opdatering tilgængelig",
 | 
				
			||||||
    "notInstalled": "Ikke installeret",
 | 
					    "notInstalled": "Ikke installeret",
 | 
				
			||||||
@@ -74,14 +74,14 @@
 | 
				
			|||||||
    "pinToTop": "Fastgør til toppen",
 | 
					    "pinToTop": "Fastgør til toppen",
 | 
				
			||||||
    "unpinFromTop": "Frigør fra toppen",
 | 
					    "unpinFromTop": "Frigør fra toppen",
 | 
				
			||||||
    "resetInstallStatusForSelectedAppsQuestion": "Nulstil installationsstatus for valgte apps?",
 | 
					    "resetInstallStatusForSelectedAppsQuestion": "Nulstil installationsstatus for valgte apps?",
 | 
				
			||||||
    "installStatusOfXWillBeResetExplanation": "Installationsstatus for alle valgte apps nulstilles.\n\nDette kan hjælpe, når den app-version, der vises i Obtainium, er forkert grundet mislykkede opdateringer eller andre problemer.",
 | 
					    "installStatusOfXWillBeResetExplanation": "Installationsstatus for alle valgte apps nulstilles.\n\nDette kan hjælpe, når en forkert app-version vises i Obtainium grundet mislykkede opdateringer eller andre problemer.",
 | 
				
			||||||
    "customLinkMessage": "Disse links virker på enheder med Obtainium installeret",
 | 
					    "customLinkMessage": "Disse links virker på enheder med Obtainium installeret",
 | 
				
			||||||
    "shareAppConfigLinks": "Del app-konfiguration som HTML-link",
 | 
					    "shareAppConfigLinks": "Del app-konfiguration som HTML-link",
 | 
				
			||||||
    "shareSelectedAppURLs": "Del valgte app-URL'er",
 | 
					    "shareSelectedAppURLs": "Del valgte app-URL'er",
 | 
				
			||||||
    "resetInstallStatus": "Nulstil installationsstatus",
 | 
					    "resetInstallStatus": "Nulstil installationsstatus",
 | 
				
			||||||
    "more": "Mere",
 | 
					    "more": "Mere",
 | 
				
			||||||
    "removeOutdatedFilter": "Fjern forældet app-filter",
 | 
					    "removeOutdatedFilter": "Fjern forældet app-filter",
 | 
				
			||||||
    "showOutdatedOnly": "Vis kun forældet apps",
 | 
					    "showOutdatedOnly": "Vis kun forældede apps",
 | 
				
			||||||
    "filter": "Filtrer",
 | 
					    "filter": "Filtrer",
 | 
				
			||||||
    "filterApps": "Filtrer Apps",
 | 
					    "filterApps": "Filtrer Apps",
 | 
				
			||||||
    "appName": "Appnavn",
 | 
					    "appName": "Appnavn",
 | 
				
			||||||
@@ -114,7 +114,7 @@
 | 
				
			|||||||
    "light": "Lys",
 | 
					    "light": "Lys",
 | 
				
			||||||
    "followSystem": "Følg system",
 | 
					    "followSystem": "Følg system",
 | 
				
			||||||
    "followSystemThemeExplanation": "Det er kun muligt at følge systemtemaet ved brug af tredjepartsapplikationer",
 | 
					    "followSystemThemeExplanation": "Det er kun muligt at følge systemtemaet ved brug af tredjepartsapplikationer",
 | 
				
			||||||
    "useBlackTheme": "Brug rent sort, mørkt tema",
 | 
					    "useBlackTheme": "Brug rent sort mørkt tema",
 | 
				
			||||||
    "appSortBy": "Sortér apps efter:",
 | 
					    "appSortBy": "Sortér apps efter:",
 | 
				
			||||||
    "authorName": "Udvikler/Navn",
 | 
					    "authorName": "Udvikler/Navn",
 | 
				
			||||||
    "nameAuthor": "Navn/Udvikler",
 | 
					    "nameAuthor": "Navn/Udvikler",
 | 
				
			||||||
@@ -125,8 +125,8 @@
 | 
				
			|||||||
    "bgUpdateCheckInterval": "Kontrolinterval for baggrundsopdatering",
 | 
					    "bgUpdateCheckInterval": "Kontrolinterval for baggrundsopdatering",
 | 
				
			||||||
    "neverManualOnly": "Aldrig - Kun manuelt",
 | 
					    "neverManualOnly": "Aldrig - Kun manuelt",
 | 
				
			||||||
    "appearance": "Udseende",
 | 
					    "appearance": "Udseende",
 | 
				
			||||||
    "showWebInAppView": "Vis kildewebsiden i appvisning",
 | 
					    "showWebInAppView": "Vis kildewebsiden i app-visning",
 | 
				
			||||||
    "pinUpdates": "Fastgør opdateringer til toppen af appvisning",
 | 
					    "pinUpdates": "Fastgør opdateringer øverst i app-visning",
 | 
				
			||||||
    "updates": "Opdateringer",
 | 
					    "updates": "Opdateringer",
 | 
				
			||||||
    "sourceSpecific": "Kildespecifik",
 | 
					    "sourceSpecific": "Kildespecifik",
 | 
				
			||||||
    "appSource": "App-kilde",
 | 
					    "appSource": "App-kilde",
 | 
				
			||||||
@@ -138,12 +138,12 @@
 | 
				
			|||||||
    "obtainiumExportHyphenatedLowercase": "obtainium-eksport",
 | 
					    "obtainiumExportHyphenatedLowercase": "obtainium-eksport",
 | 
				
			||||||
    "pickAnAPK": "Vælg en APK",
 | 
					    "pickAnAPK": "Vælg en APK",
 | 
				
			||||||
    "appHasMoreThanOnePackage": "{} har mere end én pakke:",
 | 
					    "appHasMoreThanOnePackage": "{} har mere end én pakke:",
 | 
				
			||||||
    "deviceSupportsXArch": "Din enhed understøtter {} CPU-arkitekturen.",
 | 
					    "deviceSupportsXArch": "Din enhed understøtter CPU-arkitekturen {}.",
 | 
				
			||||||
    "deviceSupportsFollowingArchs": "Din enhed understøtter følgende CPU-arkitekturer:",
 | 
					    "deviceSupportsFollowingArchs": "Din enhed understøtter følgende CPU-arkitekturer:",
 | 
				
			||||||
    "warning": "Advarsel",
 | 
					    "warning": "Advarsel",
 | 
				
			||||||
    "sourceIsXButPackageFromYPrompt": "App-kilden er '{}', men udgivelsespakken kommer fra '{}'. Fortsæt?",
 | 
					    "sourceIsXButPackageFromYPrompt": "App-kilden er '{}', men udgivelsespakken kommer fra '{}'. Fortsæt?",
 | 
				
			||||||
    "updatesAvailable": "Opdateringer tilgængelige",
 | 
					    "updatesAvailable": "Opdateringer tilgængelige",
 | 
				
			||||||
    "updatesAvailableNotifDescription": "Underretter brugeren om, at opdateringer er tilgængelige for en eller flere apps, der spores af Obtainium",
 | 
					    "updatesAvailableNotifDescription": "Underretter brugeren om tilgængelige opdateringer for en eller flere apps, som Obtainium følger",
 | 
				
			||||||
    "noNewUpdates": "Ingen nye opdateringer.",
 | 
					    "noNewUpdates": "Ingen nye opdateringer.",
 | 
				
			||||||
    "xHasAnUpdate": "{} har en opdatering.",
 | 
					    "xHasAnUpdate": "{} har en opdatering.",
 | 
				
			||||||
    "appsUpdated": "Apps opdateret",
 | 
					    "appsUpdated": "Apps opdateret",
 | 
				
			||||||
@@ -152,19 +152,19 @@
 | 
				
			|||||||
    "xWasUpdatedToY": "{} blev opdateret til {}.",
 | 
					    "xWasUpdatedToY": "{} blev opdateret til {}.",
 | 
				
			||||||
    "xWasNotUpdatedToY": "Kunne ikke opdatere {} til {}.",
 | 
					    "xWasNotUpdatedToY": "Kunne ikke opdatere {} til {}.",
 | 
				
			||||||
    "errorCheckingUpdates": "Fejl ved tjek for opdateringer",
 | 
					    "errorCheckingUpdates": "Fejl ved tjek for opdateringer",
 | 
				
			||||||
    "errorCheckingUpdatesNotifDescription": "En meddelelse, der vises, når opdateringstjek i baggrunden mislykkes",
 | 
					    "errorCheckingUpdatesNotifDescription": "En meddelelse, der vises, opdateringstjek i baggrunden mislykkes",
 | 
				
			||||||
    "appsRemoved": "Apps fjernet",
 | 
					    "appsRemoved": "Apps fjernet",
 | 
				
			||||||
    "appsRemovedNotifDescription": "Underretter brugeren om, at en eller flere apps blev fjernet grundet fejl under indlæsning af dem",
 | 
					    "appsRemovedNotifDescription": "Underretter brugeren om, at en eller flere apps blev fjernet grundet fejl under indlæsning af dem",
 | 
				
			||||||
    "xWasRemovedDueToErrorY": "{} blev fjernet grundet denne fejl: {}",
 | 
					    "xWasRemovedDueToErrorY": "{} blev fjernet grundet denne fejl: {}",
 | 
				
			||||||
    "completeAppInstallation": "Færdiggør app-installation",
 | 
					    "completeAppInstallation": "Færdiggør app-installation",
 | 
				
			||||||
    "obtainiumMustBeOpenToInstallApps": "Obtainium skal være åben for at installere apps",
 | 
					    "obtainiumMustBeOpenToInstallApps": "Obtainium skal være åben for at installere apps",
 | 
				
			||||||
    "completeAppInstallationNotifDescription": "Beder brugeren om at vende tilbage til Obtainium for at afslutte installationen af en app",
 | 
					    "completeAppInstallationNotifDescription": "Beder brugeren om at gå tilbage til Obtainium for at færdiggøre installation af en app",
 | 
				
			||||||
    "checkingForUpdates": "Tjekker for opdateringer",
 | 
					    "checkingForUpdates": "Tjekker for opdateringer",
 | 
				
			||||||
    "checkingForUpdatesNotifDescription": "Kortvarig meddelelse, der vises ved tjek for opdateringer",
 | 
					    "checkingForUpdatesNotifDescription": "Kortvarig meddelelse ved tjek for opdateringer",
 | 
				
			||||||
    "pleaseAllowInstallPerm": "Tillad venligst Obtainium at installere apps",
 | 
					    "pleaseAllowInstallPerm": "Tillad venligst Obtainium at installere apps",
 | 
				
			||||||
    "trackOnly": "Følg Kun",
 | 
					    "trackOnly": "Følg Kun",
 | 
				
			||||||
    "errorWithHttpStatusCode": "Fejl {}",
 | 
					    "errorWithHttpStatusCode": "Fejl {}",
 | 
				
			||||||
    "versionCorrectionDisabled": "Versionskorrigering deaktiveret (plugin ser ikke ud til at virke)",
 | 
					    "versionCorrectionDisabled": "Versionskorrektion deaktiveret (plugin ser ikke ud til at virke)",
 | 
				
			||||||
    "unknown": "Ukendt",
 | 
					    "unknown": "Ukendt",
 | 
				
			||||||
    "none": "Ingen",
 | 
					    "none": "Ingen",
 | 
				
			||||||
    "never": "Aldrig",
 | 
					    "never": "Aldrig",
 | 
				
			||||||
@@ -174,25 +174,23 @@
 | 
				
			|||||||
    "remove": "Fjern",
 | 
					    "remove": "Fjern",
 | 
				
			||||||
    "yesMarkUpdated": "Ja, markér som opdateret",
 | 
					    "yesMarkUpdated": "Ja, markér som opdateret",
 | 
				
			||||||
    "fdroid": "F-Droid Officiel",
 | 
					    "fdroid": "F-Droid Officiel",
 | 
				
			||||||
    "appIdOrName": "App-ID eller navn",
 | 
					    "appIdOrName": "App-ID eller -navn",
 | 
				
			||||||
    "appId": "App-ID",
 | 
					    "appId": "App-ID",
 | 
				
			||||||
    "appWithIdOrNameNotFound": "Ingen app med det ID eller navn blev fundet",
 | 
					    "appWithIdOrNameNotFound": "Ingen app med det ID eller navn blev fundet",
 | 
				
			||||||
    "reposHaveMultipleApps": "Repos kan indeholde flere apps",
 | 
					    "reposHaveMultipleApps": "Repos kan indeholde flere apps",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "F-Droid Tredjeparts-repo",
 | 
					    "fdroidThirdPartyRepo": "F-Droid Tredjeparts-repo",
 | 
				
			||||||
    "steamMobile": "Steam Mobil",
 | 
					 | 
				
			||||||
    "steamChat": "Steam Chat",
 | 
					 | 
				
			||||||
    "install": "Installer",
 | 
					    "install": "Installer",
 | 
				
			||||||
    "markInstalled": "Markér som installeret",
 | 
					    "markInstalled": "Markér som installeret",
 | 
				
			||||||
    "update": "Opdater",
 | 
					    "update": "Opdater",
 | 
				
			||||||
    "markUpdated": "Markér som opdateret",
 | 
					    "markUpdated": "Markér som opdateret",
 | 
				
			||||||
    "additionalOptions": "Yderligere indstillinger",
 | 
					    "additionalOptions": "Flere indstillinger",
 | 
				
			||||||
    "disableVersionDetection": "Deaktivér versionsregistrering",
 | 
					    "disableVersionDetection": "Deaktivér versionsregistrering",
 | 
				
			||||||
    "noVersionDetectionExplanation": "Denne indstilling bør kun bruges til apps, hvor versionsregistrering ikke virker korrekt.",
 | 
					    "noVersionDetectionExplanation": "Denne indstilling bør kun bruges til apps, hvor versionsregistrering ikke virker korrekt.",
 | 
				
			||||||
    "downloadingX": "Henter {}",
 | 
					    "downloadingX": "Henter {}",
 | 
				
			||||||
    "downloadX": "Hent {}",
 | 
					    "downloadX": "Hent {}",
 | 
				
			||||||
    "downloadedX": "Hentede {}",
 | 
					    "downloadedX": "Hentede {}",
 | 
				
			||||||
    "releaseAsset": "Udgivelsesressource",
 | 
					    "releaseAsset": "Udgivelsesressource",
 | 
				
			||||||
    "downloadNotifDescription": "Underretter brugeren om fremskridt i hentning af en app",
 | 
					    "downloadNotifDescription": "Underretter brugeren om status på hentning af en app",
 | 
				
			||||||
    "noAPKFound": "Ingen APK fundet",
 | 
					    "noAPKFound": "Ingen APK fundet",
 | 
				
			||||||
    "noVersionDetection": "Ingen versionsregistrering",
 | 
					    "noVersionDetection": "Ingen versionsregistrering",
 | 
				
			||||||
    "categorize": "Kategoriser",
 | 
					    "categorize": "Kategoriser",
 | 
				
			||||||
@@ -224,10 +222,10 @@
 | 
				
			|||||||
    "groupByCategory": "Gruppér efter kategori",
 | 
					    "groupByCategory": "Gruppér efter kategori",
 | 
				
			||||||
    "autoApkFilterByArch": "Forsøg at filtrere APK'er efter CPU-arkitektur, hvis muligt",
 | 
					    "autoApkFilterByArch": "Forsøg at filtrere APK'er efter CPU-arkitektur, hvis muligt",
 | 
				
			||||||
    "overrideSource": "Tilsidesæt kilde",
 | 
					    "overrideSource": "Tilsidesæt kilde",
 | 
				
			||||||
    "dontShowAgain": "Vis ikke denne igen",
 | 
					    "dontShowAgain": "Vis ikke igen",
 | 
				
			||||||
    "dontShowTrackOnlyWarnings": "Vis ikke 'Følg Kun'-advarsler",
 | 
					    "dontShowTrackOnlyWarnings": "Vis ikke 'Følg Kun'-advarsler",
 | 
				
			||||||
    "dontShowAPKOriginWarnings": "Vis ikke advarsler om APK-oprindelse",
 | 
					    "dontShowAPKOriginWarnings": "Vis ikke advarsler om APK-oprindelse",
 | 
				
			||||||
    "moveNonInstalledAppsToBottom": "Flyt ikke-installerede apps til bunden af appvisning",
 | 
					    "moveNonInstalledAppsToBottom": "Flyt ikke-installerede apps nederst i app-visning",
 | 
				
			||||||
    "gitlabPATLabel": "GitLab Personlig Adgangstoken",
 | 
					    "gitlabPATLabel": "GitLab Personlig Adgangstoken",
 | 
				
			||||||
    "about": "Om",
 | 
					    "about": "Om",
 | 
				
			||||||
    "requiresCredentialsInSettings": "{} kræver yderligere legitimation (i Indstillinger)",
 | 
					    "requiresCredentialsInSettings": "{} kræver yderligere legitimation (i Indstillinger)",
 | 
				
			||||||
@@ -240,44 +238,44 @@
 | 
				
			|||||||
    "reversePageTransitions": "Omvendte sideovergangsanimationer",
 | 
					    "reversePageTransitions": "Omvendte sideovergangsanimationer",
 | 
				
			||||||
    "minStarCount": "Minimum antal stjerner",
 | 
					    "minStarCount": "Minimum antal stjerner",
 | 
				
			||||||
    "addInfoBelow": "Tilføj denne info nedenfor.",
 | 
					    "addInfoBelow": "Tilføj denne info nedenfor.",
 | 
				
			||||||
    "addInfoInSettings": "Tilføj denne info i indstillingerne.",
 | 
					    "addInfoInSettings": "Tilføj denne info i Indstillinger.",
 | 
				
			||||||
    "githubSourceNote": "GitHubs hastighedsbegrænsning kan undgås med en API-nøgle.",
 | 
					    "githubSourceNote": "GitHub's hastighedsbegrænsning kan undgås med en API-nøgle.",
 | 
				
			||||||
    "sortByLastLinkSegment": "Sortér kun efter det sidste segment af linket",
 | 
					    "sortByLastLinkSegment": "Sortér kun efter det sidste segment af linket",
 | 
				
			||||||
    "filterReleaseNotesByRegEx": "Filtrer udgivelsesnoter efter regulært udtryk",
 | 
					    "filterReleaseNotesByRegEx": "Filtrer udgivelsesnoter efter regulært udtryk",
 | 
				
			||||||
    "customLinkFilterRegex": "Brugerdefineret APK-linkfilter efter regulært udtryk (standard '.apk$')",
 | 
					    "customLinkFilterRegex": "Brugerdefineret APK-linkfilter efter regulært udtryk (standard '.apk$')",
 | 
				
			||||||
    "appsPossiblyUpdated": "App-opdateringer forsøgt",
 | 
					    "appsPossiblyUpdated": "App-opdateringer forsøgt",
 | 
				
			||||||
    "appsPossiblyUpdatedNotifDescription": "Underretter brugeren om, at opdateringer til en eller flere apps potentielt blev udført i baggrunden",
 | 
					    "appsPossiblyUpdatedNotifDescription": "Underretter brugeren om, at opdateringer til en eller flere apps muligvis blev udført i baggrunden",
 | 
				
			||||||
    "xWasPossiblyUpdatedToY": "{} er muligvis blevet opdateret til {}.",
 | 
					    "xWasPossiblyUpdatedToY": "{} er muligvis blevet opdateret til {}.",
 | 
				
			||||||
    "enableBackgroundUpdates": "Aktivér baggrundsopdateringer",
 | 
					    "enableBackgroundUpdates": "Aktivér baggrundsopdateringer",
 | 
				
			||||||
    "backgroundUpdateReqsExplanation": "Baggrundsopdateringer er muligvis ikke mulige for alle apps.",
 | 
					    "backgroundUpdateReqsExplanation": "Baggrundsopdateringer er måske ikke mulige for alle apps.",
 | 
				
			||||||
    "backgroundUpdateLimitsExplanation": "Om en baggrundsinstallation er vellykket, kan kun afgøres, når Obtainium åbnes.",
 | 
					    "backgroundUpdateLimitsExplanation": "En vellykket baggrundsinstallation kan kun afgøres, når Obtainium åbnes.",
 | 
				
			||||||
    "verifyLatestTag": "Verificer 'seneste'-tagget",
 | 
					    "verifyLatestTag": "Verificer 'seneste'-tagget",
 | 
				
			||||||
    "intermediateLinkRegex": "Filtrer efter et 'mellemliggende' link at besøge",
 | 
					    "intermediateLinkRegex": "Filtrer efter et 'mellemliggende' link at besøge",
 | 
				
			||||||
    "filterByLinkText": "Filtrer links efter linktekst",
 | 
					    "filterByLinkText": "Filtrer links efter linktekst",
 | 
				
			||||||
    "intermediateLinkNotFound": "Mellemliggende link ikke fundet",
 | 
					    "intermediateLinkNotFound": "Mellemliggende link ikke fundet",
 | 
				
			||||||
    "intermediateLink": "Mellemliggende link",
 | 
					    "intermediateLink": "Mellemliggende link",
 | 
				
			||||||
    "exemptFromBackgroundUpdates": "Undtag fra baggrundsopdateringer (hvis aktiveret)",
 | 
					    "exemptFromBackgroundUpdates": "Undtag fra baggrundsopdateringer (hvis aktiveret)",
 | 
				
			||||||
    "bgUpdatesOnWiFiOnly": "Deaktivér baggrundsopdateringer, når du ikke er på WiFi",
 | 
					    "bgUpdatesOnWiFiOnly": "Deaktiver baggrundsopdateringer, når du ikke er på Wi-Fi",
 | 
				
			||||||
    "bgUpdatesWhileChargingOnly": "Deaktiver baggrundsopdateringer, når der ikke oplades",
 | 
					    "bgUpdatesWhileChargingOnly": "Deaktiver baggrundsopdateringer, når du ikke oplader",
 | 
				
			||||||
    "autoSelectHighestVersionCode": "Auto-vælg højeste versionKode af APK",
 | 
					    "autoSelectHighestVersionCode": "Auto-vælg højeste versionKode af APK",
 | 
				
			||||||
    "versionExtractionRegEx": "RegEx for versionsstrengsudtrækning",
 | 
					    "versionExtractionRegEx": "RegEx for versionsstrengsudtrækning",
 | 
				
			||||||
    "trimVersionString": "Trim versionsstrengen med RegEx",
 | 
					    "trimVersionString": "Trim versionsstreng med RegEx",
 | 
				
			||||||
    "matchGroupToUseForX": "Matchgruppe til brug for \"{}\"",
 | 
					    "matchGroupToUseForX": "Match-gruppe til brug for \"{}\"",
 | 
				
			||||||
    "matchGroupToUse": "Match gruppe til brug til RegEx for versionsstrengsudtrækning",
 | 
					    "matchGroupToUse": "RegEx-matchgruppe til brug for versionsstrengsudtrækning",
 | 
				
			||||||
    "highlightTouchTargets": "Fremhæv mindre åbenlyse berøringsmål",
 | 
					    "highlightTouchTargets": "Fremhæv mindre åbenlyse berøringsmål",
 | 
				
			||||||
    "pickExportDir": "Vælg eksportmappe",
 | 
					    "pickExportDir": "Vælg eksportmappe",
 | 
				
			||||||
    "autoExportOnChanges": "Auto-eksport ved ændringer",
 | 
					    "autoExportOnChanges": "Auto-eksportér ved ændringer",
 | 
				
			||||||
    "includeSettings": "Inkluder indstillinger",
 | 
					    "includeSettings": "Inkluder indstillinger",
 | 
				
			||||||
    "filterVersionsByRegEx": "Filtrer versioner efter regulært udtryk",
 | 
					    "filterVersionsByRegEx": "Filtrer versioner efter regulært udtryk",
 | 
				
			||||||
    "trySelectingSuggestedVersionCode": "Forsøg at vælge den foreslåede versionKode af APK",
 | 
					    "trySelectingSuggestedVersionCode": "Forsøg at vælge den foreslåede versionKode af APK",
 | 
				
			||||||
    "dontSortReleasesList": "Behold udgivelsesordre fra API",
 | 
					    "dontSortReleasesList": "Behold udgivelsesrækkefølge fra API",
 | 
				
			||||||
    "reverseSort": "Omvendt sortering",
 | 
					    "reverseSort": "Omvendt sortering",
 | 
				
			||||||
    "takeFirstLink": "Tag første link",
 | 
					    "takeFirstLink": "Tag første link",
 | 
				
			||||||
    "skipSort": "Spring sortering over",
 | 
					    "skipSort": "Spring sortering over",
 | 
				
			||||||
    "debugMenu": "Fejlfindingsmenu",
 | 
					    "debugMenu": "Fejlfindingsmenu",
 | 
				
			||||||
    "bgTaskStarted": "Baggrundsopgave startet - tjek logfiler.",
 | 
					    "bgTaskStarted": "Baggrundsopgave startet - tjek logfiler.",
 | 
				
			||||||
    "runBgCheckNow": "Kør baggrundsopdateringstjek nu",
 | 
					    "runBgCheckNow": "Kør baggrundsopdateringstjek nu",
 | 
				
			||||||
    "versionExtractWholePage": "Anvend RegEx for versionsstrengsudtrækning for hele siden",
 | 
					    "versionExtractWholePage": "Anvend RegEx til versionsstrengsudtrækning på hele siden",
 | 
				
			||||||
    "installing": "Installerer",
 | 
					    "installing": "Installerer",
 | 
				
			||||||
    "skipUpdateNotifications": "Spring opdateringsmeddelelser over",
 | 
					    "skipUpdateNotifications": "Spring opdateringsmeddelelser over",
 | 
				
			||||||
    "updatesAvailableNotifChannel": "Opdateringer tilgængelige",
 | 
					    "updatesAvailableNotifChannel": "Opdateringer tilgængelige",
 | 
				
			||||||
@@ -288,7 +286,7 @@
 | 
				
			|||||||
    "downloadingXNotifChannel": "Henter {}",
 | 
					    "downloadingXNotifChannel": "Henter {}",
 | 
				
			||||||
    "completeAppInstallationNotifChannel": "Færdiggør app-installation",
 | 
					    "completeAppInstallationNotifChannel": "Færdiggør app-installation",
 | 
				
			||||||
    "checkingForUpdatesNotifChannel": "Tjekker for opdateringer",
 | 
					    "checkingForUpdatesNotifChannel": "Tjekker for opdateringer",
 | 
				
			||||||
    "onlyCheckInstalledOrTrackOnlyApps": "Tjek kun installeret og 'Følg Kun'-apps for opdateringer",
 | 
					    "onlyCheckInstalledOrTrackOnlyApps": "Tjek kun installerede og 'Følg Kun'-apps for opdateringer",
 | 
				
			||||||
    "supportFixedAPKURL": "Understøt fikserede APK-URL'er",
 | 
					    "supportFixedAPKURL": "Understøt fikserede APK-URL'er",
 | 
				
			||||||
    "selectX": "Vælg {}",
 | 
					    "selectX": "Vælg {}",
 | 
				
			||||||
    "parallelDownloads": "Tillad samtidige overførsler",
 | 
					    "parallelDownloads": "Tillad samtidige overførsler",
 | 
				
			||||||
@@ -298,8 +296,8 @@
 | 
				
			|||||||
    "shizukuOldAndroidWithADB": "Shizuku kører på Android <8.1 med ADB. Opdater Android eller brug Sui i stedet",
 | 
					    "shizukuOldAndroidWithADB": "Shizuku kører på Android <8.1 med ADB. Opdater Android eller brug Sui i stedet",
 | 
				
			||||||
    "shizukuPretendToBeGooglePlay": "Indstil Google Play som installationskilde (hvis Shizuku bruges)",
 | 
					    "shizukuPretendToBeGooglePlay": "Indstil Google Play som installationskilde (hvis Shizuku bruges)",
 | 
				
			||||||
    "useSystemFont": "Brug systemskrifttype",
 | 
					    "useSystemFont": "Brug systemskrifttype",
 | 
				
			||||||
    "useVersionCodeAsOSVersion": "Brug app versionKode som OS-registreret version",
 | 
					    "useVersionCodeAsOSVersion": "Brug app-versionKode som OS-registreret version",
 | 
				
			||||||
    "requestHeader": "Anmod overskrift",
 | 
					    "requestHeader": "Anmodningsheader",
 | 
				
			||||||
    "useLatestAssetDateAsReleaseDate": "Brug seneste ressourceupload som udgivelsesdato",
 | 
					    "useLatestAssetDateAsReleaseDate": "Brug seneste ressourceupload som udgivelsesdato",
 | 
				
			||||||
    "defaultPseudoVersioningMethod": "Standard pseudo-versioneringsmetode",
 | 
					    "defaultPseudoVersioningMethod": "Standard pseudo-versioneringsmetode",
 | 
				
			||||||
    "partialAPKHash": "Delvis APK-hash",
 | 
					    "partialAPKHash": "Delvis APK-hash",
 | 
				
			||||||
@@ -313,12 +311,12 @@
 | 
				
			|||||||
    "selfHostedNote": "Rullemenuen \"{}\" kan bruges til at nå selvhostede/brugerdefinerede instanser af enhver kilde.",
 | 
					    "selfHostedNote": "Rullemenuen \"{}\" kan bruges til at nå selvhostede/brugerdefinerede instanser af enhver kilde.",
 | 
				
			||||||
    "badDownload": "APK'en kunne ikke analyseres (inkompatibel eller delvis hentning)",
 | 
					    "badDownload": "APK'en kunne ikke analyseres (inkompatibel eller delvis hentning)",
 | 
				
			||||||
    "beforeNewInstallsShareToAppVerifier": "Del nye apps med AppVerifier (hvis tilgængelig)",
 | 
					    "beforeNewInstallsShareToAppVerifier": "Del nye apps med AppVerifier (hvis tilgængelig)",
 | 
				
			||||||
    "appVerifierInstructionToast": "Del til AppVerifier, og vend tilbage hertil, når du er klar.",
 | 
					    "appVerifierInstructionToast": "Del til AppVerifier, og vend tilbage, når du er klar.",
 | 
				
			||||||
    "wiki": "Hjælp/Wiki",
 | 
					    "wiki": "Hjælp/Wiki",
 | 
				
			||||||
    "crowdsourcedConfigsLabel": "Crowdsourcede app-konfigurationer (brug på egen risiko)",
 | 
					    "crowdsourcedConfigsLabel": "Crowdsourcede app-konfigurationer (brug på egen risiko)",
 | 
				
			||||||
    "crowdsourcedConfigsShort": "Crowdsourcede app-konfigurationer",
 | 
					    "crowdsourcedConfigsShort": "Crowdsourcede app-konfigurationer",
 | 
				
			||||||
    "allowInsecure": "Tillad usikre HTTP-anmodninger",
 | 
					    "allowInsecure": "Tillad usikre HTTP-anmodninger",
 | 
				
			||||||
    "stayOneVersionBehind": "Vær en version bagud i forhold til den nyeste",
 | 
					    "stayOneVersionBehind": "Forbliv én version bagud den seneste",
 | 
				
			||||||
    "removeAppQuestion": {
 | 
					    "removeAppQuestion": {
 | 
				
			||||||
        "one": "Fjern app?",
 | 
					        "one": "Fjern app?",
 | 
				
			||||||
        "other": "Fjern apps?"
 | 
					        "other": "Fjern apps?"
 | 
				
			||||||
@@ -357,7 +355,7 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "clearedNLogsBeforeXAfterY": {
 | 
					    "clearedNLogsBeforeXAfterY": {
 | 
				
			||||||
        "one": "Ryddet {n} log (før = {before}, efter = {after})",
 | 
					        "one": "Ryddet {n} log (før = {before}, efter = {after})",
 | 
				
			||||||
        "other": "Ryddet {n} logs (før = {before}, efter = {after})"
 | 
					        "other": "Ryddede {n} logs (før = {before}, efter = {after})"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "xAndNMoreUpdatesAvailable": {
 | 
					    "xAndNMoreUpdatesAvailable": {
 | 
				
			||||||
        "one": "{} og 1 anden app har opdateringer.",
 | 
					        "one": "{} og 1 anden app har opdateringer.",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "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-Drittanbieter-Repo",
 | 
					    "fdroidThirdPartyRepo": "F-Droid-Drittanbieter-Repo",
 | 
				
			||||||
    "steamMobile": "Steam Mobile",
 | 
					 | 
				
			||||||
    "steamChat": "Steam-Chat",
 | 
					 | 
				
			||||||
    "install": "Installieren",
 | 
					    "install": "Installieren",
 | 
				
			||||||
    "markInstalled": "Als installiert markieren",
 | 
					    "markInstalled": "Als installiert markieren",
 | 
				
			||||||
    "update": "Aktualisieren",
 | 
					    "update": "Aktualisieren",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "appWithIdOrNameNotFound": "Neniu apo estas trovita kun tiu identigilo aŭ nomo",
 | 
					    "appWithIdOrNameNotFound": "Neniu apo estas trovita kun tiu identigilo aŭ nomo",
 | 
				
			||||||
    "reposHaveMultipleApps": "Deponejoj povas enhavi plurajn apojn",
 | 
					    "reposHaveMultipleApps": "Deponejoj povas enhavi plurajn apojn",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "Tria deponejo de F-Droid",
 | 
					    "fdroidThirdPartyRepo": "Tria deponejo de F-Droid",
 | 
				
			||||||
    "steamMobile": "Telefona Steam",
 | 
					 | 
				
			||||||
    "steamChat": "Steam Babilejo",
 | 
					 | 
				
			||||||
    "install": "Instali",
 | 
					    "install": "Instali",
 | 
				
			||||||
    "markInstalled": "Marki kiel instalita",
 | 
					    "markInstalled": "Marki kiel instalita",
 | 
				
			||||||
    "update": "Ĝisdatigi",
 | 
					    "update": "Ĝisdatigi",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "appWithIdOrNameNotFound": "No App was found with that ID or Name",
 | 
					    "appWithIdOrNameNotFound": "No App was found with that ID or Name",
 | 
				
			||||||
    "reposHaveMultipleApps": "Repos may contain multiple Apps",
 | 
					    "reposHaveMultipleApps": "Repos may contain multiple Apps",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "F-Droid Third-Party Repo",
 | 
					    "fdroidThirdPartyRepo": "F-Droid Third-Party Repo",
 | 
				
			||||||
    "steamMobile": "Steam Mobile",
 | 
					 | 
				
			||||||
    "steamChat": "Steam Chat",
 | 
					 | 
				
			||||||
    "install": "Install",
 | 
					    "install": "Install",
 | 
				
			||||||
    "markInstalled": "Mark Installed",
 | 
					    "markInstalled": "Mark Installed",
 | 
				
			||||||
    "update": "Update",
 | 
					    "update": "Update",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "appWithIdOrNameNotFound": "No se han encontrado aplicaciones con ese ID o nombre",
 | 
					    "appWithIdOrNameNotFound": "No se han encontrado aplicaciones con ese ID o nombre",
 | 
				
			||||||
    "reposHaveMultipleApps": "Los repositorios pueden contener varias aplicaciones",
 | 
					    "reposHaveMultipleApps": "Los repositorios pueden contener varias aplicaciones",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "Repositorio de terceros F-Droid",
 | 
					    "fdroidThirdPartyRepo": "Repositorio de terceros F-Droid",
 | 
				
			||||||
    "steamMobile": "Steam para móviles",
 | 
					 | 
				
			||||||
    "steamChat": "Chat de Steam",
 | 
					 | 
				
			||||||
    "install": "Instalar",
 | 
					    "install": "Instalar",
 | 
				
			||||||
    "markInstalled": "Marcar como instalada",
 | 
					    "markInstalled": "Marcar como instalada",
 | 
				
			||||||
    "update": "Actualizar",
 | 
					    "update": "Actualizar",
 | 
				
			||||||
@@ -260,10 +258,10 @@
 | 
				
			|||||||
    "bgUpdatesOnWiFiOnly": "Deshabilitar las actualizaciones en segundo plano sin WiFi",
 | 
					    "bgUpdatesOnWiFiOnly": "Deshabilitar las actualizaciones en segundo plano sin WiFi",
 | 
				
			||||||
    "bgUpdatesWhileChargingOnly": "Desactiva las actualizaciones en segundo plano cuando no estés cargando",
 | 
					    "bgUpdatesWhileChargingOnly": "Desactiva las actualizaciones en segundo plano cuando no estés cargando",
 | 
				
			||||||
    "autoSelectHighestVersionCode": "Auto selección del paquete APK con versión más reciente",
 | 
					    "autoSelectHighestVersionCode": "Auto selección del paquete APK con versión más reciente",
 | 
				
			||||||
    "versionExtractionRegEx": "Versión de extracción regex",
 | 
					    "versionExtractionRegEx": "Versión de extracción RegEx",
 | 
				
			||||||
    "trimVersionString": "Recortar cadena de versión con RegEx",
 | 
					    "trimVersionString": "Recortar cadena de versión con RegEx",
 | 
				
			||||||
    "matchGroupToUseForX": "Grupo de coincidencia a utilizar para \"{}\"",
 | 
					    "matchGroupToUseForX": "Grupo de coincidencia a utilizar para \"{}\"",
 | 
				
			||||||
    "matchGroupToUse": "Grupo a usar para versión de extracción regex",
 | 
					    "matchGroupToUse": "Grupo a usar para versión de extracción RegEx",
 | 
				
			||||||
    "highlightTouchTargets": "Resaltar objetivos menos obvios",
 | 
					    "highlightTouchTargets": "Resaltar objetivos menos obvios",
 | 
				
			||||||
    "pickExportDir": "Directorio para exportar",
 | 
					    "pickExportDir": "Directorio para exportar",
 | 
				
			||||||
    "autoExportOnChanges": "Auto exportar cuando haya cambios",
 | 
					    "autoExportOnChanges": "Auto exportar cuando haya cambios",
 | 
				
			||||||
@@ -277,7 +275,7 @@
 | 
				
			|||||||
    "debugMenu": "Menu Depurar",
 | 
					    "debugMenu": "Menu Depurar",
 | 
				
			||||||
    "bgTaskStarted": "Iniciada tarea en segundo plano; revise los registros.",
 | 
					    "bgTaskStarted": "Iniciada tarea en segundo plano; revise los registros.",
 | 
				
			||||||
    "runBgCheckNow": "Ejecutar verficiación de actualizaciones en segundo plano",
 | 
					    "runBgCheckNow": "Ejecutar verficiación de actualizaciones en segundo plano",
 | 
				
			||||||
    "versionExtractWholePage": "Aplicar la versión de extracción regex a la página entera",
 | 
					    "versionExtractWholePage": "Aplicar la versión de extracción RegEx a la página entera",
 | 
				
			||||||
    "installing": "Instalando",
 | 
					    "installing": "Instalando",
 | 
				
			||||||
    "skipUpdateNotifications": "No notificar sobre actualizaciones",
 | 
					    "skipUpdateNotifications": "No notificar sobre actualizaciones",
 | 
				
			||||||
    "updatesAvailableNotifChannel": "Actualizaciones disponibles",
 | 
					    "updatesAvailableNotifChannel": "Actualizaciones disponibles",
 | 
				
			||||||
@@ -312,10 +310,10 @@
 | 
				
			|||||||
    "note": "Nota",
 | 
					    "note": "Nota",
 | 
				
			||||||
    "selfHostedNote": "El desplegable «{}» puede usarse para acceder a instancias autoalojadas/personalizadas de cualquier fuente.",
 | 
					    "selfHostedNote": "El desplegable «{}» puede usarse para acceder a instancias autoalojadas/personalizadas de cualquier fuente.",
 | 
				
			||||||
    "badDownload": "No se ha podido analizar el APK (incompatible o descarga parcial)",
 | 
					    "badDownload": "No se ha podido analizar el APK (incompatible o descarga parcial)",
 | 
				
			||||||
    "beforeNewInstallsShareToAppVerifier": "Compartir aplicaciones nuevas con AppVerifier (si está disponible)",
 | 
					    "beforeNewInstallsShareToAppVerifier": "Compartir aplicaciones nuevas con AppVerifier (si está instalado)",
 | 
				
			||||||
    "appVerifierInstructionToast": "Comparta con AppVerifier y vuelva aquí cuando esté listo.",
 | 
					    "appVerifierInstructionToast": "Compartir con AppVerifier y vuelver aquí cuando esté listo.",
 | 
				
			||||||
    "wiki": "Ayuda/Wiki",
 | 
					    "wiki": "Ayuda/Wiki",
 | 
				
			||||||
    "crowdsourcedConfigsLabel": "Crowdsourced App Configurations (uso bajo su propia responsabilidad)",
 | 
					    "crowdsourcedConfigsLabel": "Crowdsourced App Configurations (use bajo su responsabilidad)",
 | 
				
			||||||
    "crowdsourcedConfigsShort": "Configuración de aplicaciones por crowdsourcing",
 | 
					    "crowdsourcedConfigsShort": "Configuración de aplicaciones por crowdsourcing",
 | 
				
			||||||
    "allowInsecure": "Permitir peticiones HTTP inseguras",
 | 
					    "allowInsecure": "Permitir peticiones HTTP inseguras",
 | 
				
			||||||
    "stayOneVersionBehind": "Mantenerse una versión por detrás de la última",
 | 
					    "stayOneVersionBehind": "Mantenerse una versión por detrás de la última",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "appWithIdOrNameNotFound": "هیچ برنامه ای با آن شناسه یا نام یافت نشد",
 | 
					    "appWithIdOrNameNotFound": "هیچ برنامه ای با آن شناسه یا نام یافت نشد",
 | 
				
			||||||
    "reposHaveMultipleApps": "مخازن ممکن است شامل چندین برنامه باشد",
 | 
					    "reposHaveMultipleApps": "مخازن ممکن است شامل چندین برنامه باشد",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "مخازن شخص ثالث F-Droid",
 | 
					    "fdroidThirdPartyRepo": "مخازن شخص ثالث F-Droid",
 | 
				
			||||||
    "steamMobile": "استیم موبایل",
 | 
					 | 
				
			||||||
    "steamChat": "چت استیم",
 | 
					 | 
				
			||||||
    "install": "نصب",
 | 
					    "install": "نصب",
 | 
				
			||||||
    "markInstalled": "علامت گذاری به عنوان نصب شده",
 | 
					    "markInstalled": "علامت گذاری به عنوان نصب شده",
 | 
				
			||||||
    "update": "به روز رسانی",
 | 
					    "update": "به روز رسانی",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "appWithIdOrNameNotFound": "Aucune application n'a été trouvée avec cet identifiant ou ce nom",
 | 
					    "appWithIdOrNameNotFound": "Aucune application n'a été trouvée avec cet identifiant ou ce nom",
 | 
				
			||||||
    "reposHaveMultipleApps": "Les dépôts peuvent contenir plusieurs applications",
 | 
					    "reposHaveMultipleApps": "Les dépôts peuvent contenir plusieurs applications",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "Dépôt tiers F-Droid",
 | 
					    "fdroidThirdPartyRepo": "Dépôt tiers F-Droid",
 | 
				
			||||||
    "steamMobile": "Application mobile Steam",
 | 
					 | 
				
			||||||
    "steamChat": "Steam Chat",
 | 
					 | 
				
			||||||
    "install": "Installer",
 | 
					    "install": "Installer",
 | 
				
			||||||
    "markInstalled": "Marquer comme étant installé",
 | 
					    "markInstalled": "Marquer comme étant installé",
 | 
				
			||||||
    "update": "Mettre à jour",
 | 
					    "update": "Mettre à jour",
 | 
				
			||||||
@@ -315,8 +313,8 @@
 | 
				
			|||||||
    "beforeNewInstallsShareToAppVerifier": "Partager les nouvelles applications avec AppVerifier (si disponible)",
 | 
					    "beforeNewInstallsShareToAppVerifier": "Partager les nouvelles applications avec AppVerifier (si disponible)",
 | 
				
			||||||
    "appVerifierInstructionToast": "Partagez avec AppVerifier, puis revenez ici lorsque tout est prêt.",
 | 
					    "appVerifierInstructionToast": "Partagez avec AppVerifier, puis revenez ici lorsque tout est prêt.",
 | 
				
			||||||
    "wiki": "Aide/Wiki",
 | 
					    "wiki": "Aide/Wiki",
 | 
				
			||||||
    "crowdsourcedConfigsLabel": "Configurations d'applications par la communauté (à utiliser à vos risques et périls)",
 | 
					    "crowdsourcedConfigsLabel": "Configuration d'applis communautaire (à utiliser à vos risques et périls)",
 | 
				
			||||||
    "crowdsourcedConfigsShort": "Configurations d'applications par la communauté",
 | 
					    "crowdsourcedConfigsShort": "Applis communautaires",
 | 
				
			||||||
    "allowInsecure": "Autoriser les requêtes HTTP non sécurisées",
 | 
					    "allowInsecure": "Autoriser les requêtes HTTP non sécurisées",
 | 
				
			||||||
    "stayOneVersionBehind": "Rester à une version de la dernière",
 | 
					    "stayOneVersionBehind": "Rester à une version de la dernière",
 | 
				
			||||||
    "removeAppQuestion": {
 | 
					    "removeAppQuestion": {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "appWithIdOrNameNotFound": "Nem található alkalmazás ezzel az azonosítóval vagy névvel",
 | 
					    "appWithIdOrNameNotFound": "Nem található alkalmazás ezzel az azonosítóval vagy névvel",
 | 
				
			||||||
    "reposHaveMultipleApps": "A tárolók több alkalmazást is tartalmazhatnak",
 | 
					    "reposHaveMultipleApps": "A tárolók több alkalmazást is tartalmazhatnak",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "F-Droid harmadik féltől származó tároló",
 | 
					    "fdroidThirdPartyRepo": "F-Droid harmadik féltől származó tároló",
 | 
				
			||||||
    "steamMobile": "Steam Mobil",
 | 
					 | 
				
			||||||
    "steamChat": "Steam Chat",
 | 
					 | 
				
			||||||
    "install": "Telepítés",
 | 
					    "install": "Telepítés",
 | 
				
			||||||
    "markInstalled": "Telepítettnek jelölés",
 | 
					    "markInstalled": "Telepítettnek jelölés",
 | 
				
			||||||
    "update": "Frissítés",
 | 
					    "update": "Frissítés",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "appWithIdOrNameNotFound": "Tidak ada aplikasi yang ditemukan dengan ID atau nama tersebut",
 | 
					    "appWithIdOrNameNotFound": "Tidak ada aplikasi yang ditemukan dengan ID atau nama tersebut",
 | 
				
			||||||
    "reposHaveMultipleApps": "Repositori dapat berisi beberapa aplikasi",
 | 
					    "reposHaveMultipleApps": "Repositori dapat berisi beberapa aplikasi",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "Repositori pihak ketiga F-Droid",
 | 
					    "fdroidThirdPartyRepo": "Repositori pihak ketiga F-Droid",
 | 
				
			||||||
    "steamMobile": "Steam Mobile",
 | 
					 | 
				
			||||||
    "steamChat": "Obrolan Steam",
 | 
					 | 
				
			||||||
    "install": "Pasang",
 | 
					    "install": "Pasang",
 | 
				
			||||||
    "markInstalled": "Tandai terpasang",
 | 
					    "markInstalled": "Tandai terpasang",
 | 
				
			||||||
    "update": "perbarui",
 | 
					    "update": "perbarui",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "appWithIdOrNameNotFound": "Non è stata trovata alcuna app con quell'ID o nome",
 | 
					    "appWithIdOrNameNotFound": "Non è stata trovata alcuna app con quell'ID o nome",
 | 
				
			||||||
    "reposHaveMultipleApps": "I repository possono contenere più app",
 | 
					    "reposHaveMultipleApps": "I repository possono contenere più app",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "Repository F-Droid di terze parti",
 | 
					    "fdroidThirdPartyRepo": "Repository F-Droid di terze parti",
 | 
				
			||||||
    "steamMobile": "Mobile a vapore",
 | 
					 | 
				
			||||||
    "steamChat": "Chat di vapore",
 | 
					 | 
				
			||||||
    "install": "Installa",
 | 
					    "install": "Installa",
 | 
				
			||||||
    "markInstalled": "Contrassegna come installata",
 | 
					    "markInstalled": "Contrassegna come installata",
 | 
				
			||||||
    "update": "Aggiorna",
 | 
					    "update": "Aggiorna",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "appWithIdOrNameNotFound": "そのIDや名前を持つアプリは見つかりませんでした",
 | 
					    "appWithIdOrNameNotFound": "そのIDや名前を持つアプリは見つかりませんでした",
 | 
				
			||||||
    "reposHaveMultipleApps": "リポジトリには複数のアプリが含まれることがあります",
 | 
					    "reposHaveMultipleApps": "リポジトリには複数のアプリが含まれることがあります",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "F-Droid サードパーティリポジトリ",
 | 
					    "fdroidThirdPartyRepo": "F-Droid サードパーティリポジトリ",
 | 
				
			||||||
    "steamMobile": "Steamモバイル",
 | 
					 | 
				
			||||||
    "steamChat": "Steamチャット",
 | 
					 | 
				
			||||||
    "install": "インストール",
 | 
					    "install": "インストール",
 | 
				
			||||||
    "markInstalled": "インストール済みとしてマークする",
 | 
					    "markInstalled": "インストール済みとしてマークする",
 | 
				
			||||||
    "update": "アップデート",
 | 
					    "update": "アップデート",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "appWithIdOrNameNotFound": "Er is geen app gevonden met dat ID of die naam",
 | 
					    "appWithIdOrNameNotFound": "Er is geen app gevonden met dat ID of die naam",
 | 
				
			||||||
    "reposHaveMultipleApps": "Repositories kunnen meerdere apps bevatten",
 | 
					    "reposHaveMultipleApps": "Repositories kunnen meerdere apps bevatten",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "F-Droid Repository voor derden",
 | 
					    "fdroidThirdPartyRepo": "F-Droid Repository voor derden",
 | 
				
			||||||
    "steamMobile": "Steam Mobile",
 | 
					 | 
				
			||||||
    "steamChat": "Steam Chat",
 | 
					 | 
				
			||||||
    "install": "Installeren",
 | 
					    "install": "Installeren",
 | 
				
			||||||
    "markInstalled": "Als geïnstalleerd markeren",
 | 
					    "markInstalled": "Als geïnstalleerd markeren",
 | 
				
			||||||
    "update": "Bijwerken",
 | 
					    "update": "Bijwerken",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@
 | 
				
			|||||||
    "cantInstallOlderVersion": "Nie można zainstalować starszej wersji aplikacji",
 | 
					    "cantInstallOlderVersion": "Nie można zainstalować starszej wersji aplikacji",
 | 
				
			||||||
    "appIdMismatch": "Pobrane ID pakietu nie pasuje do istniejącego ID aplikacji",
 | 
					    "appIdMismatch": "Pobrane ID pakietu nie pasuje do istniejącego ID aplikacji",
 | 
				
			||||||
    "functionNotImplemented": "Ta klasa nie zaimplementowała tej funkcji",
 | 
					    "functionNotImplemented": "Ta klasa nie zaimplementowała tej funkcji",
 | 
				
			||||||
    "placeholder": "Zbiornik",
 | 
					    "placeholder": "Placeholder",
 | 
				
			||||||
    "someErrors": "Wystąpiły pewne błędy",
 | 
					    "someErrors": "Wystąpiły pewne błędy",
 | 
				
			||||||
    "unexpectedError": "Nieoczekiwany błąd",
 | 
					    "unexpectedError": "Nieoczekiwany błąd",
 | 
				
			||||||
    "ok": "Okej",
 | 
					    "ok": "Okej",
 | 
				
			||||||
@@ -22,9 +22,9 @@
 | 
				
			|||||||
    "requiredInBrackets": "(Wymagane)",
 | 
					    "requiredInBrackets": "(Wymagane)",
 | 
				
			||||||
    "dropdownNoOptsError": "BŁĄD: LISTA ROZWIJANA MUSI MIEĆ CO NAJMNIEJ JEDNĄ OPCJĘ",
 | 
					    "dropdownNoOptsError": "BŁĄD: LISTA ROZWIJANA MUSI MIEĆ CO NAJMNIEJ JEDNĄ OPCJĘ",
 | 
				
			||||||
    "colour": "Kolor",
 | 
					    "colour": "Kolor",
 | 
				
			||||||
    "standard": "Standard",
 | 
					    "standard": "Domyślny",
 | 
				
			||||||
    "custom": "Niestandardowe",
 | 
					    "custom": "Własny",
 | 
				
			||||||
    "useMaterialYou": "Używaj materiałów",
 | 
					    "useMaterialYou": "Material You",
 | 
				
			||||||
    "githubStarredRepos": "Repozytoria GitHub oznaczone gwiazdką",
 | 
					    "githubStarredRepos": "Repozytoria GitHub oznaczone gwiazdką",
 | 
				
			||||||
    "uname": "Nazwa użytkownika",
 | 
					    "uname": "Nazwa użytkownika",
 | 
				
			||||||
    "wrongArgNum": "Nieprawidłowa liczba podanych argumentów",
 | 
					    "wrongArgNum": "Nieprawidłowa liczba podanych argumentów",
 | 
				
			||||||
@@ -55,7 +55,7 @@
 | 
				
			|||||||
    "pleaseWait": "Proszę czekać",
 | 
					    "pleaseWait": "Proszę czekać",
 | 
				
			||||||
    "updateAvailable": "Dostępna aktualizacja",
 | 
					    "updateAvailable": "Dostępna aktualizacja",
 | 
				
			||||||
    "notInstalled": "Nie zainstalowano",
 | 
					    "notInstalled": "Nie zainstalowano",
 | 
				
			||||||
    "pseudoVersion": "pseudowersja",
 | 
					    "pseudoVersion": "pseudo-wersja",
 | 
				
			||||||
    "selectAll": "Zaznacz wszystkie",
 | 
					    "selectAll": "Zaznacz wszystkie",
 | 
				
			||||||
    "deselectX": "Odznacz {}",
 | 
					    "deselectX": "Odznacz {}",
 | 
				
			||||||
    "xWillBeRemovedButRemainInstalled": "{} zostanie usunięty z Obtainium, ale pozostanie zainstalowany na urządzeniu.",
 | 
					    "xWillBeRemovedButRemainInstalled": "{} zostanie usunięty z Obtainium, ale pozostanie zainstalowany na urządzeniu.",
 | 
				
			||||||
@@ -76,7 +76,7 @@
 | 
				
			|||||||
    "resetInstallStatusForSelectedAppsQuestion": "Zresetować status instalacji dla wybranych aplikacji?",
 | 
					    "resetInstallStatusForSelectedAppsQuestion": "Zresetować status instalacji dla wybranych aplikacji?",
 | 
				
			||||||
    "installStatusOfXWillBeResetExplanation": "Stan instalacji wybranych aplikacji zostanie zresetowany.\n\nMoże być to pomocne, gdy wersja aplikacji wyświetlana w Obtainium jest nieprawidłowa z powodu nieudanych aktualizacji lub innych problemów.",
 | 
					    "installStatusOfXWillBeResetExplanation": "Stan instalacji wybranych aplikacji zostanie zresetowany.\n\nMoże być to pomocne, gdy wersja aplikacji wyświetlana w Obtainium jest nieprawidłowa z powodu nieudanych aktualizacji lub innych problemów.",
 | 
				
			||||||
    "customLinkMessage": "Te linki działają na urządzeniach z zainstalowanym Obtainium",
 | 
					    "customLinkMessage": "Te linki działają na urządzeniach z zainstalowanym Obtainium",
 | 
				
			||||||
    "shareAppConfigLinks": "Udostępnij konfigurację aplikacji jako link HTML",
 | 
					    "shareAppConfigLinks": "Udostępnij konfigurację aplikacji w formie linku",
 | 
				
			||||||
    "shareSelectedAppURLs": "Udostępnij wybrane adresy URL aplikacji",
 | 
					    "shareSelectedAppURLs": "Udostępnij wybrane adresy URL aplikacji",
 | 
				
			||||||
    "resetInstallStatus": "Zresetuj stan instalacji",
 | 
					    "resetInstallStatus": "Zresetuj stan instalacji",
 | 
				
			||||||
    "more": "Więcej",
 | 
					    "more": "Więcej",
 | 
				
			||||||
@@ -150,7 +150,7 @@
 | 
				
			|||||||
    "appsNotUpdated": "Nie udało się zaktualizować aplikacji",
 | 
					    "appsNotUpdated": "Nie udało się zaktualizować aplikacji",
 | 
				
			||||||
    "appsUpdatedNotifDescription": "Informuje, gdy co najmniej jedna aplikacja została zaktualizowana w tle",
 | 
					    "appsUpdatedNotifDescription": "Informuje, gdy co najmniej jedna aplikacja została zaktualizowana w tle",
 | 
				
			||||||
    "xWasUpdatedToY": "{} zaktualizowano do {}.",
 | 
					    "xWasUpdatedToY": "{} zaktualizowano do {}.",
 | 
				
			||||||
    "xWasNotUpdatedToY": "Nie udało się zaktualizować {} do {}.",
 | 
					    "xWasNotUpdatedToY": "Błąd aktualizacji {} do {}.",
 | 
				
			||||||
    "errorCheckingUpdates": "Błąd sprawdzania aktualizacji",
 | 
					    "errorCheckingUpdates": "Błąd sprawdzania aktualizacji",
 | 
				
			||||||
    "errorCheckingUpdatesNotifDescription": "Jest wyświetlane, gdy sprawdzanie aktualizacji w tle nie powiedzie się",
 | 
					    "errorCheckingUpdatesNotifDescription": "Jest wyświetlane, gdy sprawdzanie aktualizacji w tle nie powiedzie się",
 | 
				
			||||||
    "appsRemoved": "Usunięte aplikacje",
 | 
					    "appsRemoved": "Usunięte aplikacje",
 | 
				
			||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "appWithIdOrNameNotFound": "Nie znaleziono aplikacji o tym identyfikatorze lub nazwie",
 | 
					    "appWithIdOrNameNotFound": "Nie znaleziono aplikacji o tym identyfikatorze lub nazwie",
 | 
				
			||||||
    "reposHaveMultipleApps": "Repozytoria mogą zawierać wiele aplikacji",
 | 
					    "reposHaveMultipleApps": "Repozytoria mogą zawierać wiele aplikacji",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "Zewnętrzne repo F-Droid",
 | 
					    "fdroidThirdPartyRepo": "Zewnętrzne repo F-Droid",
 | 
				
			||||||
    "steamMobile": "Mobilny Steam",
 | 
					 | 
				
			||||||
    "steamChat": "Czat Steam",
 | 
					 | 
				
			||||||
    "install": "Instaluj",
 | 
					    "install": "Instaluj",
 | 
				
			||||||
    "markInstalled": "Oznacz jako zainstalowane",
 | 
					    "markInstalled": "Oznacz jako zainstalowane",
 | 
				
			||||||
    "update": "Zaktualizuj",
 | 
					    "update": "Zaktualizuj",
 | 
				
			||||||
@@ -191,7 +189,7 @@
 | 
				
			|||||||
    "downloadingX": "Pobieranie {}",
 | 
					    "downloadingX": "Pobieranie {}",
 | 
				
			||||||
    "downloadX": "Pobierz {}",
 | 
					    "downloadX": "Pobierz {}",
 | 
				
			||||||
    "downloadedX": "Pobrano {}",
 | 
					    "downloadedX": "Pobrano {}",
 | 
				
			||||||
    "releaseAsset": "Release Asset",
 | 
					    "releaseAsset": "Wydany pakiet",
 | 
				
			||||||
    "downloadNotifDescription": "Informuje o postępach w pobieraniu aplikacji",
 | 
					    "downloadNotifDescription": "Informuje o postępach w pobieraniu aplikacji",
 | 
				
			||||||
    "noAPKFound": "Nie znaleziono pakietu APK",
 | 
					    "noAPKFound": "Nie znaleziono pakietu APK",
 | 
				
			||||||
    "noVersionDetection": "Bez wykrywania wersji",
 | 
					    "noVersionDetection": "Bez wykrywania wersji",
 | 
				
			||||||
@@ -213,12 +211,12 @@
 | 
				
			|||||||
    "uninstallFromDevice": "Odinstaluj z urządzenia",
 | 
					    "uninstallFromDevice": "Odinstaluj z urządzenia",
 | 
				
			||||||
    "onlyWorksWithNonVersionDetectApps": "Działa tylko w przypadku aplikacji z wyłączonym wykrywaniem wersji.",
 | 
					    "onlyWorksWithNonVersionDetectApps": "Działa tylko w przypadku aplikacji z wyłączonym wykrywaniem wersji.",
 | 
				
			||||||
    "releaseDateAsVersion": "Użyj daty wydania jako wersji",
 | 
					    "releaseDateAsVersion": "Użyj daty wydania jako wersji",
 | 
				
			||||||
    "releaseTitleAsVersion": "Użyj tytułu wydania jako ciągu znaków wersji",
 | 
					    "releaseTitleAsVersion": "Używaj nazwy wydania jako ciągu wersji",
 | 
				
			||||||
    "releaseDateAsVersionExplanation": "Opcja ta powinna być używana tylko w przypadku aplikacji, w których wykrywanie wersji nie działa poprawnie, ale dostępna jest data wydania.",
 | 
					    "releaseDateAsVersionExplanation": "Opcja ta powinna być używana tylko w przypadku aplikacji, w których wykrywanie wersji nie działa poprawnie, ale dostępna jest data wydania.",
 | 
				
			||||||
    "changes": "Zmiany",
 | 
					    "changes": "Zmiany",
 | 
				
			||||||
    "releaseDate": "Data wydania",
 | 
					    "releaseDate": "Data wydania",
 | 
				
			||||||
    "importFromURLsInFile": "Importuj z adresów URL w pliku (typu OPML)",
 | 
					    "importFromURLsInFile": "Importuj z adresów URL w pliku (typu OPML)",
 | 
				
			||||||
    "versionDetectionExplanation": "Uzgodnij ciąg wersji z wersją wykrytą w systemie operacyjnym",
 | 
					    "versionDetectionExplanation": "Uzgodnij ciąg wersji z wersją wykrytą przez system operacyjny",
 | 
				
			||||||
    "versionDetection": "Wykrywanie wersji",
 | 
					    "versionDetection": "Wykrywanie wersji",
 | 
				
			||||||
    "standardVersionDetection": "Standardowe wykrywanie wersji",
 | 
					    "standardVersionDetection": "Standardowe wykrywanie wersji",
 | 
				
			||||||
    "groupByCategory": "Grupuj według kategorii",
 | 
					    "groupByCategory": "Grupuj według kategorii",
 | 
				
			||||||
@@ -252,16 +250,16 @@
 | 
				
			|||||||
    "backgroundUpdateReqsExplanation": "Aktualizacje w tle mogą nie być możliwe dla wszystkich aplikacji.",
 | 
					    "backgroundUpdateReqsExplanation": "Aktualizacje w tle mogą nie być możliwe dla wszystkich aplikacji.",
 | 
				
			||||||
    "backgroundUpdateLimitsExplanation": "Powodzenie instalacji w tle można określić dopiero po otwarciu Obtainium.",
 | 
					    "backgroundUpdateLimitsExplanation": "Powodzenie instalacji w tle można określić dopiero po otwarciu Obtainium.",
 | 
				
			||||||
    "verifyLatestTag": "Zweryfikuj najnowszy tag",
 | 
					    "verifyLatestTag": "Zweryfikuj najnowszy tag",
 | 
				
			||||||
    "intermediateLinkRegex": "Filtruj link \"pośredni\" do odwiedzenia",
 | 
					    "intermediateLinkRegex": "Filtr linków \"pośrednich\" do odwiedzenia w pierwszej kolejności",
 | 
				
			||||||
    "filterByLinkText": "Filtruj linki według tekstu linku",
 | 
					    "filterByLinkText": "Filtruj linki według tekstu linku",
 | 
				
			||||||
    "intermediateLinkNotFound": "Nie znaleziono linku pośredniego",
 | 
					    "intermediateLinkNotFound": "Nie znaleziono linku pośredniego",
 | 
				
			||||||
    "intermediateLink": "Łącze pośrednie",
 | 
					    "intermediateLink": "Link pośredni",
 | 
				
			||||||
    "exemptFromBackgroundUpdates": "Wyklucz z uaktualnień w tle (jeśli są włączone)",
 | 
					    "exemptFromBackgroundUpdates": "Wyklucz z uaktualnień w tle (jeśli są włączone)",
 | 
				
			||||||
    "bgUpdatesOnWiFiOnly": "Wyłącz aktualizacje w tle, gdy nie ma połączenia z Wi-Fi",
 | 
					    "bgUpdatesOnWiFiOnly": "Wyłącz aktualizacje w tle, gdy nie ma połączenia z Wi-Fi",
 | 
				
			||||||
    "bgUpdatesWhileChargingOnly": "Wyłącz aktualizacje w tle, gdy urządzenie nie jest ładowane",
 | 
					    "bgUpdatesWhileChargingOnly": "Wyłącz aktualizacje w tle, gdy urządzenie nie jest ładowane",
 | 
				
			||||||
    "autoSelectHighestVersionCode": "Automatycznie wybierz najwyższy kod wersji APK",
 | 
					    "autoSelectHighestVersionCode": "Automatycznie wybierz najwyższy kod wersji APK",
 | 
				
			||||||
    "versionExtractionRegEx": "Wyrażenie regularne wyodrębniające wersję",
 | 
					    "versionExtractionRegEx": "Wyrażenie regularne wyodrębniające wersję",
 | 
				
			||||||
    "trimVersionString": "Przycinanie łańcucha wersji za pomocą RegEx",
 | 
					    "trimVersionString": "Przytnij ciąg wersji za pomocą RegEx",
 | 
				
			||||||
    "matchGroupToUseForX": "Dopasuj grupę do użycia dla \"{}\"",
 | 
					    "matchGroupToUseForX": "Dopasuj grupę do użycia dla \"{}\"",
 | 
				
			||||||
    "matchGroupToUse": "Dopasuj grupę do użycia dla wyrażenia regularnego wyodrębniania wersji",
 | 
					    "matchGroupToUse": "Dopasuj grupę do użycia dla wyrażenia regularnego wyodrębniania wersji",
 | 
				
			||||||
    "highlightTouchTargets": "Wyróżnij mniej oczywiste elementy dotykowe",
 | 
					    "highlightTouchTargets": "Wyróżnij mniej oczywiste elementy dotykowe",
 | 
				
			||||||
@@ -272,7 +270,7 @@
 | 
				
			|||||||
    "trySelectingSuggestedVersionCode": "Spróbuj wybierać sugerowany kod wersji APK",
 | 
					    "trySelectingSuggestedVersionCode": "Spróbuj wybierać sugerowany kod wersji APK",
 | 
				
			||||||
    "dontSortReleasesList": "Utrzymaj kolejność wydań z interfejsu API",
 | 
					    "dontSortReleasesList": "Utrzymaj kolejność wydań z interfejsu API",
 | 
				
			||||||
    "reverseSort": "Odwrotne sortowanie",
 | 
					    "reverseSort": "Odwrotne sortowanie",
 | 
				
			||||||
    "takeFirstLink": "Weź pierwszy link",
 | 
					    "takeFirstLink": "Wykorzystaj pierwszy link",
 | 
				
			||||||
    "skipSort": "Pomiń sortowanie",
 | 
					    "skipSort": "Pomiń sortowanie",
 | 
				
			||||||
    "debugMenu": "Menu debugowania",
 | 
					    "debugMenu": "Menu debugowania",
 | 
				
			||||||
    "bgTaskStarted": "Uruchomiono zadanie w tle - sprawdź logi.",
 | 
					    "bgTaskStarted": "Uruchomiono zadanie w tle - sprawdź logi.",
 | 
				
			||||||
@@ -285,40 +283,40 @@
 | 
				
			|||||||
    "appsPossiblyUpdatedNotifChannel": "Informuj o próbach aktualizacji",
 | 
					    "appsPossiblyUpdatedNotifChannel": "Informuj o próbach aktualizacji",
 | 
				
			||||||
    "errorCheckingUpdatesNotifChannel": "Błędy sprawdzania aktualizacji",
 | 
					    "errorCheckingUpdatesNotifChannel": "Błędy sprawdzania aktualizacji",
 | 
				
			||||||
    "appsRemovedNotifChannel": "Usunięte aplikacje",
 | 
					    "appsRemovedNotifChannel": "Usunięte aplikacje",
 | 
				
			||||||
    "downloadingXNotifChannel": "Pobieranie aplikacji",
 | 
					    "downloadingXNotifChannel": "Pobieranie {}",
 | 
				
			||||||
    "completeAppInstallationNotifChannel": "Ukończenie instalacji aplikacji",
 | 
					    "completeAppInstallationNotifChannel": "Ukończenie instalacji aplikacji",
 | 
				
			||||||
    "checkingForUpdatesNotifChannel": "Sprawdzanie dostępności aktualizacji",
 | 
					    "checkingForUpdatesNotifChannel": "Sprawdzanie dostępności aktualizacji",
 | 
				
			||||||
    "onlyCheckInstalledOrTrackOnlyApps": "Sprawdzaj tylko zainstalowane i obserwowane aplikacje pod kątem aktualizacji",
 | 
					    "onlyCheckInstalledOrTrackOnlyApps": "Sprawdzaj tylko zainstalowane i obserwowane aplikacje pod kątem aktualizacji",
 | 
				
			||||||
    "supportFixedAPKURL": "Obsługuj stałe adresy URL APK",
 | 
					    "supportFixedAPKURL": "Obsługuj stałe adresy URL APK",
 | 
				
			||||||
    "selectX": "Wybierz {}",
 | 
					    "selectX": "Wybierz {}",
 | 
				
			||||||
    "parallelDownloads": "Zezwól na pobieranie równoległe",
 | 
					    "parallelDownloads": "Zezwalaj na równoległe pobierania",
 | 
				
			||||||
    "useShizuku": "Użyj Shizuku lub Sui, aby zainstalować",
 | 
					    "useShizuku": "Użyj Shizuku lub Sui, aby zainstalować",
 | 
				
			||||||
    "shizukuBinderNotFound": "Shizuku is not running",
 | 
					    "shizukuBinderNotFound": "Usługa Shizuku nie działa",
 | 
				
			||||||
    "shizukuOld": "Stara wersja Shizuku (<11) - zaktualizuj ją",
 | 
					    "shizukuOld": "Stara wersja Shizuku (<11) - zaktualizuj ją",
 | 
				
			||||||
    "shizukuOldAndroidWithADB": "Shizuku działa na Androidzie < 8.1 z ADB - zaktualizuj Androida lub użyj zamiast tego Sui",
 | 
					    "shizukuOldAndroidWithADB": "Shizuku przez ADB działa na Androidzie 8.1+. Zaktualizuj Androida lub użyj zamiast tego Sui",
 | 
				
			||||||
    "shizukuPretendToBeGooglePlay": "Ustaw Google Play jako źródło instalacji (jeśli używana jest aplikacja Shizuku).",
 | 
					    "shizukuPretendToBeGooglePlay": "Ustaw Google Play jako źródło instalacji (jeśli używana jest aplikacja Shizuku)",
 | 
				
			||||||
    "useSystemFont": "Użyj czcionki systemowej",
 | 
					    "useSystemFont": "Czcionka systemowa",
 | 
				
			||||||
    "useVersionCodeAsOSVersion": "Użyj kodu wersji aplikacji jako wersji wykrytej przez system operacyjny",
 | 
					    "useVersionCodeAsOSVersion": "Użyj versionCode aplikacji jako wersji wykrytej przez system operacyjny",
 | 
				
			||||||
    "requestHeader": "Nagłówek żądania",
 | 
					    "requestHeader": "Nagłówek żądania",
 | 
				
			||||||
    "useLatestAssetDateAsReleaseDate": "Użyj najnowszego przesłanego zasobu jako daty wydania",
 | 
					    "useLatestAssetDateAsReleaseDate": "Użyj najnowszego przesłanego zasobu jako daty wydania",
 | 
				
			||||||
    "defaultPseudoVersioningMethod": "Domyślna metoda pseudowersji",
 | 
					    "defaultPseudoVersioningMethod": "Domyślna metoda pseudo-wersji",
 | 
				
			||||||
    "partialAPKHash": "Częściowy skrót APK",
 | 
					    "partialAPKHash": "Częściowy Hash pliku apk",
 | 
				
			||||||
    "APKLinkHash": "Skrót łącza APK",
 | 
					    "APKLinkHash": "Link Hash pliku apk",
 | 
				
			||||||
    "directAPKLink": "Bezpośredni link APK",
 | 
					    "directAPKLink": "Bezpośredni link do pliku apk",
 | 
				
			||||||
    "pseudoVersionInUse": "Pseudowersja jest w użyciu",
 | 
					    "pseudoVersionInUse": "Pseudo-wersja jest w użyciu",
 | 
				
			||||||
    "installed": "Zainstalowano",
 | 
					    "installed": "Zainstalowano",
 | 
				
			||||||
    "latest": "Najnowszy",
 | 
					    "latest": "Najnowsza",
 | 
				
			||||||
    "invertRegEx": "Odwróć wyrażenie regularne",
 | 
					    "invertRegEx": "Odwróć wyrażenie regularne",
 | 
				
			||||||
    "note": "Uwaga",
 | 
					    "note": "Uwaga",
 | 
				
			||||||
    "selfHostedNote": "Lista rozwijana \"{}\" może być używana do uzyskiwania dostępu do samodzielnie hostowanych / niestandardowych instancji dowolnego źródła.",
 | 
					    "selfHostedNote": "Wybierz \"{}\", aby uzyskać dostęp do samodzielnie hostowanych lub niestandardowych instancji dowolnego źródła.",
 | 
				
			||||||
    "badDownload": "Nie można przeanalizować pliku APK (niekompatybilny lub częściowo pobrany).",
 | 
					    "badDownload": "Nie można przeanalizować pliku apk (jest niekompatybilny lub częściowo pobrany)",
 | 
				
			||||||
    "beforeNewInstallsShareToAppVerifier": "Udostępnianie nowych aplikacji za pomocą AppVerifier (jeśli dostępne)",
 | 
					    "beforeNewInstallsShareToAppVerifier": "Udostępnij nowe aplikacje za pomocą weryfikatora aplikacji (jeśli jest dostępny)",
 | 
				
			||||||
    "appVerifierInstructionToast": "Udostępnij w AppVerifier, a następnie wróć tutaj, gdy będziesz gotowy.",
 | 
					    "appVerifierInstructionToast": "Udostępnij do weryfikatora aplikacji, a następnie wróć tutaj.",
 | 
				
			||||||
    "wiki": "Pomoc/Wiki",
 | 
					    "wiki": "Pomoc/Wiki",
 | 
				
			||||||
    "crowdsourcedConfigsLabel": "Konfiguracje aplikacji pochodzące z crowdsourcingu (korzystanie na własne ryzyko)",
 | 
					    "crowdsourcedConfigsLabel": "Baza konfiguracji",
 | 
				
			||||||
    "crowdsourcedConfigsShort": "Konfiguracje aplikacji pochodzące z crowdsourcingu",
 | 
					    "crowdsourcedConfigsShort": "Baza konfiguracji",
 | 
				
			||||||
    "allowInsecure": "Zezwalaj na niezabezpieczone żądania HTTP",
 | 
					    "allowInsecure": "Zezwalaj na niezabezpieczone żądania HTTP",
 | 
				
			||||||
    "stayOneVersionBehind": "Pozostań jedną wersję za najnowszą",
 | 
					    "stayOneVersionBehind": "Pozostań jedną wersję w tyle za najnowszą",
 | 
				
			||||||
    "removeAppQuestion": {
 | 
					    "removeAppQuestion": {
 | 
				
			||||||
        "one": "Usunąć aplikację?",
 | 
					        "one": "Usunąć aplikację?",
 | 
				
			||||||
        "few": "Usunąć aplikacje?",
 | 
					        "few": "Usunąć aplikacje?",
 | 
				
			||||||
@@ -392,8 +390,10 @@
 | 
				
			|||||||
        "other": "{} i {} inne apki zostały zaktualizowane."
 | 
					        "other": "{} i {} inne apki zostały zaktualizowane."
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "xAndNMoreUpdatesFailed": {
 | 
					    "xAndNMoreUpdatesFailed": {
 | 
				
			||||||
        "one": "Nie udało się zaktualizować {} i 1 innej aplikacji.",
 | 
					        "one": "Błąd aktualizacji {} i 1 innej apki.",
 | 
				
			||||||
        "other": "Nie udało się zaktualizować {} i {} więcej aplikacji."
 | 
					        "few": "Błąd aktualizacji {} i {} innych apek.",
 | 
				
			||||||
 | 
					        "many": "Błąd aktualizacji {} i {} innych apek.",
 | 
				
			||||||
 | 
					        "other": "Błąd aktualizacji {} i {} innych apek."
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "xAndNMoreUpdatesPossiblyInstalled": {
 | 
					    "xAndNMoreUpdatesPossiblyInstalled": {
 | 
				
			||||||
        "one": "{} i 1 inna apka mogły zostać zaktualizowane.",
 | 
					        "one": "{} i 1 inna apka mogły zostać zaktualizowane.",
 | 
				
			||||||
@@ -402,7 +402,9 @@
 | 
				
			|||||||
        "other": "{} i {} inne apki mogły zostać zaktualizowane."
 | 
					        "other": "{} i {} inne apki mogły zostać zaktualizowane."
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "apk": {
 | 
					    "apk": {
 | 
				
			||||||
        "one": "{} APK",
 | 
					        "one": "{} apk",
 | 
				
			||||||
        "other": "{} APK"
 | 
					        "few": "{} apki",
 | 
				
			||||||
 | 
					        "many": "{} apek",
 | 
				
			||||||
 | 
					        "other": "{} apki"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "appWithIdOrNameNotFound": "Nenhum aplicativo foi encontrado com esse ID ou nome",
 | 
					    "appWithIdOrNameNotFound": "Nenhum aplicativo foi encontrado com esse ID ou nome",
 | 
				
			||||||
    "reposHaveMultipleApps": "Repositórios podem conter múltiplos aplicativos",
 | 
					    "reposHaveMultipleApps": "Repositórios podem conter múltiplos aplicativos",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "Repositórios de terceiros F-Droid",
 | 
					    "fdroidThirdPartyRepo": "Repositórios de terceiros F-Droid",
 | 
				
			||||||
    "steamMobile": "Steam para celular",
 | 
					 | 
				
			||||||
    "steamChat": "Chat do Steam",
 | 
					 | 
				
			||||||
    "install": "Instalar",
 | 
					    "install": "Instalar",
 | 
				
			||||||
    "markInstalled": "Marcar instalado",
 | 
					    "markInstalled": "Marcar instalado",
 | 
				
			||||||
    "update": "Atualizar",
 | 
					    "update": "Atualizar",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "appWithIdOrNameNotFound": "Приложение с таким ID или названием не было найдено",
 | 
					    "appWithIdOrNameNotFound": "Приложение с таким ID или названием не было найдено",
 | 
				
			||||||
    "reposHaveMultipleApps": "В хранилище несколько приложений",
 | 
					    "reposHaveMultipleApps": "В хранилище несколько приложений",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "Сторонние репозитории F-Droid",
 | 
					    "fdroidThirdPartyRepo": "Сторонние репозитории F-Droid",
 | 
				
			||||||
    "steamMobile": "Приложение Steam",
 | 
					 | 
				
			||||||
    "steamChat": "Steam Chat",
 | 
					 | 
				
			||||||
    "install": "Установить",
 | 
					    "install": "Установить",
 | 
				
			||||||
    "markInstalled": "Пометить как установленное",
 | 
					    "markInstalled": "Пометить как установленное",
 | 
				
			||||||
    "update": "Обновить",
 | 
					    "update": "Обновить",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,8 @@ const neverAutoTranslate = {
 | 
				
			|||||||
    root: ['*'],
 | 
					    root: ['*'],
 | 
				
			||||||
    obtainiumExportHyphenatedLowercase: ['*'],
 | 
					    obtainiumExportHyphenatedLowercase: ['*'],
 | 
				
			||||||
    theme: ['de'],
 | 
					    theme: ['de'],
 | 
				
			||||||
    appId: ['de']
 | 
					    appId: ['de'],
 | 
				
			||||||
 | 
					    placeholder: ['pl']
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const translateText = async (text, targetLang, authKey) => {
 | 
					const translateText = async (text, targetLang, authKey) => {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "appWithIdOrNameNotFound": "Ingen App funnen med det namnet eller ID",
 | 
					    "appWithIdOrNameNotFound": "Ingen App funnen med det namnet eller ID",
 | 
				
			||||||
    "reposHaveMultipleApps": "Förråd kan innehålla flera ApparR",
 | 
					    "reposHaveMultipleApps": "Förråd kan innehålla flera ApparR",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "F-Droid Tredjeparts Förråd",
 | 
					    "fdroidThirdPartyRepo": "F-Droid Tredjeparts Förråd",
 | 
				
			||||||
    "steamMobile": "Steam Mobile",
 | 
					 | 
				
			||||||
    "steamChat": "Steam Chat",
 | 
					 | 
				
			||||||
    "install": "Installera",
 | 
					    "install": "Installera",
 | 
				
			||||||
    "markInstalled": "Märk Installerad",
 | 
					    "markInstalled": "Märk Installerad",
 | 
				
			||||||
    "update": "Uppdatera",
 | 
					    "update": "Uppdatera",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "appWithIdOrNameNotFound": "Bu kimlik veya ada sahip bir uygulama bulunamadı",
 | 
					    "appWithIdOrNameNotFound": "Bu kimlik veya ada sahip bir uygulama bulunamadı",
 | 
				
			||||||
    "reposHaveMultipleApps": "Depolar birden fazla uygulama içerebilir",
 | 
					    "reposHaveMultipleApps": "Depolar birden fazla uygulama içerebilir",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "F-Droid Üçüncü Parti Depo",
 | 
					    "fdroidThirdPartyRepo": "F-Droid Üçüncü Parti Depo",
 | 
				
			||||||
    "steamMobile": "Steam Mobil",
 | 
					 | 
				
			||||||
    "steamChat": "Steam Sohbet",
 | 
					 | 
				
			||||||
    "install": "Yükle",
 | 
					    "install": "Yükle",
 | 
				
			||||||
    "markInstalled": "Yüklendi olarak İşaretle",
 | 
					    "markInstalled": "Yüklendi olarak İşaretle",
 | 
				
			||||||
    "update": "Güncelle",
 | 
					    "update": "Güncelle",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "appWithIdOrNameNotFound": "Застосунок з таким ідентифікатором або назвою не знайдено",
 | 
					    "appWithIdOrNameNotFound": "Застосунок з таким ідентифікатором або назвою не знайдено",
 | 
				
			||||||
    "reposHaveMultipleApps": "Сховища можуть містити кілька застосунків",
 | 
					    "reposHaveMultipleApps": "Сховища можуть містити кілька застосунків",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "F-Droid Стороннє сховище",
 | 
					    "fdroidThirdPartyRepo": "F-Droid Стороннє сховище",
 | 
				
			||||||
    "steamMobile": "Мобільний Steam",
 | 
					 | 
				
			||||||
    "steamChat": "Чат Steam",
 | 
					 | 
				
			||||||
    "install": "Встановити",
 | 
					    "install": "Встановити",
 | 
				
			||||||
    "markInstalled": "Позначити як встановлене",
 | 
					    "markInstalled": "Позначити як встановлене",
 | 
				
			||||||
    "update": "Оновити",
 | 
					    "update": "Оновити",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "appWithIdOrNameNotFound": "Không tìm thấy ứng dụng nào có ID hoặc tên đó",
 | 
					    "appWithIdOrNameNotFound": "Không tìm thấy ứng dụng nào có ID hoặc tên đó",
 | 
				
			||||||
    "reposHaveMultipleApps": "Kho có thể chứa nhiều Ứng dụng",
 | 
					    "reposHaveMultipleApps": "Kho có thể chứa nhiều Ứng dụng",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "Kho lưu trữ bên thứ ba F-Droid",
 | 
					    "fdroidThirdPartyRepo": "Kho lưu trữ bên thứ ba F-Droid",
 | 
				
			||||||
    "steamMobile": "Điện thoại di động hơi nước",
 | 
					 | 
				
			||||||
    "steamChat": "Trò chuyện hơi nước",
 | 
					 | 
				
			||||||
    "install": "Cài đặt",
 | 
					    "install": "Cài đặt",
 | 
				
			||||||
    "markInstalled": "Đánh dấu là đã cài đặt",
 | 
					    "markInstalled": "Đánh dấu là đã cài đặt",
 | 
				
			||||||
    "update": "Cập nhật",
 | 
					    "update": "Cập nhật",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "appWithIdOrNameNotFound": "找不到具有該 ID 或名稱的應用程式",
 | 
					    "appWithIdOrNameNotFound": "找不到具有該 ID 或名稱的應用程式",
 | 
				
			||||||
    "reposHaveMultipleApps": "倉庫可能包含多個應用程式",
 | 
					    "reposHaveMultipleApps": "倉庫可能包含多個應用程式",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "F-Droid 第三方倉庫",
 | 
					    "fdroidThirdPartyRepo": "F-Droid 第三方倉庫",
 | 
				
			||||||
    "steamMobile": "Steam 行動版",
 | 
					 | 
				
			||||||
    "steamChat": "Steam 聊天",
 | 
					 | 
				
			||||||
    "install": "安裝",
 | 
					    "install": "安裝",
 | 
				
			||||||
    "markInstalled": "標記為已安裝",
 | 
					    "markInstalled": "標記為已安裝",
 | 
				
			||||||
    "update": "更新",
 | 
					    "update": "更新",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,8 +179,6 @@
 | 
				
			|||||||
    "appWithIdOrNameNotFound": "未找到符合此 ID 或名称的应用",
 | 
					    "appWithIdOrNameNotFound": "未找到符合此 ID 或名称的应用",
 | 
				
			||||||
    "reposHaveMultipleApps": "存储库中可能包含多个应用",
 | 
					    "reposHaveMultipleApps": "存储库中可能包含多个应用",
 | 
				
			||||||
    "fdroidThirdPartyRepo": "F-Droid 第三方存储库",
 | 
					    "fdroidThirdPartyRepo": "F-Droid 第三方存储库",
 | 
				
			||||||
    "steamMobile": "Steam Mobile",
 | 
					 | 
				
			||||||
    "steamChat": "Steam Chat",
 | 
					 | 
				
			||||||
    "install": "安装",
 | 
					    "install": "安装",
 | 
				
			||||||
    "markInstalled": "标记为已安装",
 | 
					    "markInstalled": "标记为已安装",
 | 
				
			||||||
    "update": "更新",
 | 
					    "update": "更新",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -164,9 +164,15 @@ class APKPure extends AppSource {
 | 
				
			|||||||
    String host = Uri.parse(standardUrl).host;
 | 
					    String host = Uri.parse(standardUrl).host;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var res0 = await sourceRequest('$standardUrl/versions', additionalSettings);
 | 
					    var res0 = await sourceRequest('$standardUrl/versions', additionalSettings);
 | 
				
			||||||
 | 
					    var decodedStandardUrl = standardUrl;
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					      decodedStandardUrl = Uri.decodeFull(decodedStandardUrl);
 | 
				
			||||||
 | 
					    } catch (e) {
 | 
				
			||||||
 | 
					      //
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    var versionLinks = await grabLinksCommon(res0, {
 | 
					    var versionLinks = await grabLinksCommon(res0, {
 | 
				
			||||||
      'skipSort': true,
 | 
					      'skipSort': true,
 | 
				
			||||||
      'customLinkFilterRegex': '${Uri.decodeFull(standardUrl)}/download/[^/]+\$'
 | 
					      'customLinkFilterRegex': '$decodedStandardUrl/download/[^/]+\$'
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var supportedArchs = (await DeviceInfoPlugin().androidInfo).supportedAbis;
 | 
					    var supportedArchs = (await DeviceInfoPlugin().androidInfo).supportedAbis;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,7 +45,7 @@ class FDroid extends AppSource {
 | 
				
			|||||||
    RegExpMatch? match = standardUrlRegExB.firstMatch(url);
 | 
					    RegExpMatch? match = standardUrlRegExB.firstMatch(url);
 | 
				
			||||||
    if (match != null) {
 | 
					    if (match != null) {
 | 
				
			||||||
      url =
 | 
					      url =
 | 
				
			||||||
          'https://${Uri.parse(match.group(0)!).host}/packages/${Uri.parse(url).pathSegments.last}';
 | 
					          'https://${Uri.parse(match.group(0)!).host}/packages/${Uri.parse(url).pathSegments.where((s) => s.trim().isNotEmpty).last}';
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    RegExp standardUrlRegExA = RegExp(
 | 
					    RegExp standardUrlRegExA = RegExp(
 | 
				
			||||||
        '^https?://(www\\.)?${getSourceRegex(hosts)}/+packages/+[^/]+',
 | 
					        '^https?://(www\\.)?${getSourceRegex(hosts)}/+packages/+[^/]+',
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@ String ensureAbsoluteUrl(String ambiguousUrl, Uri referenceAbsoluteUrl) {
 | 
				
			|||||||
      .where((element) => element.trim().isNotEmpty)
 | 
					      .where((element) => element.trim().isNotEmpty)
 | 
				
			||||||
      .toList();
 | 
					      .toList();
 | 
				
			||||||
  String absoluteUrl;
 | 
					  String absoluteUrl;
 | 
				
			||||||
  if (ambiguousUrl.startsWith('/') || currPathSegments.isEmpty) {
 | 
					  if (ambiguousUrl.startsWith('/')) {
 | 
				
			||||||
    absoluteUrl = '${referenceAbsoluteUrl.origin}$ambiguousUrl';
 | 
					    absoluteUrl = '${referenceAbsoluteUrl.origin}$ambiguousUrl';
 | 
				
			||||||
  } else if (currPathSegments.isEmpty) {
 | 
					  } else if (currPathSegments.isEmpty) {
 | 
				
			||||||
    absoluteUrl = '${referenceAbsoluteUrl.origin}/$ambiguousUrl';
 | 
					    absoluteUrl = '${referenceAbsoluteUrl.origin}/$ambiguousUrl';
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,37 +0,0 @@
 | 
				
			|||||||
import 'dart:convert';
 | 
					 | 
				
			||||||
import 'package:http/http.dart';
 | 
					 | 
				
			||||||
import 'package:obtainium/custom_errors.dart';
 | 
					 | 
				
			||||||
import 'package:obtainium/providers/source_provider.dart';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class Signal extends AppSource {
 | 
					 | 
				
			||||||
  Signal() {
 | 
					 | 
				
			||||||
    hosts = ['signal.org'];
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @override
 | 
					 | 
				
			||||||
  String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
 | 
					 | 
				
			||||||
    return 'https://${hosts[0]}';
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @override
 | 
					 | 
				
			||||||
  Future<APKDetails> getLatestAPKDetails(
 | 
					 | 
				
			||||||
    String standardUrl,
 | 
					 | 
				
			||||||
    Map<String, dynamic> additionalSettings,
 | 
					 | 
				
			||||||
  ) async {
 | 
					 | 
				
			||||||
    Response res = await sourceRequest(
 | 
					 | 
				
			||||||
        'https://updates.${hosts[0]}/android/latest.json', additionalSettings);
 | 
					 | 
				
			||||||
    if (res.statusCode == 200) {
 | 
					 | 
				
			||||||
      var json = jsonDecode(res.body);
 | 
					 | 
				
			||||||
      String? apkUrl = json['url'];
 | 
					 | 
				
			||||||
      List<String> apkUrls = apkUrl == null ? [] : [apkUrl];
 | 
					 | 
				
			||||||
      String? version = json['versionName'];
 | 
					 | 
				
			||||||
      if (version == null) {
 | 
					 | 
				
			||||||
        throw NoVersionError();
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      return APKDetails(
 | 
					 | 
				
			||||||
          version, getApkUrlsFromUrls(apkUrls), AppNames(name, 'Signal'));
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
      throw getObtainiumHttpError(res);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,63 +0,0 @@
 | 
				
			|||||||
import 'package:easy_localization/easy_localization.dart';
 | 
					 | 
				
			||||||
import 'package:html/parser.dart';
 | 
					 | 
				
			||||||
import 'package:http/http.dart';
 | 
					 | 
				
			||||||
import 'package:obtainium/components/generated_form.dart';
 | 
					 | 
				
			||||||
import 'package:obtainium/custom_errors.dart';
 | 
					 | 
				
			||||||
import 'package:obtainium/providers/source_provider.dart';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class SteamMobile extends AppSource {
 | 
					 | 
				
			||||||
  SteamMobile() {
 | 
					 | 
				
			||||||
    hosts = ['store.steampowered.com'];
 | 
					 | 
				
			||||||
    name = 'Steam';
 | 
					 | 
				
			||||||
    additionalSourceAppSpecificSettingFormItems = [
 | 
					 | 
				
			||||||
      [
 | 
					 | 
				
			||||||
        GeneratedFormDropdown('app', apks.entries.toList(),
 | 
					 | 
				
			||||||
            label: tr('app'), defaultValue: apks.entries.toList()[0].key)
 | 
					 | 
				
			||||||
      ]
 | 
					 | 
				
			||||||
    ];
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  final apks = {'steam': tr('steamMobile'), 'steam-chat-app': tr('steamChat')};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @override
 | 
					 | 
				
			||||||
  String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
 | 
					 | 
				
			||||||
    return 'https://${hosts[0]}';
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @override
 | 
					 | 
				
			||||||
  Future<APKDetails> getLatestAPKDetails(
 | 
					 | 
				
			||||||
    String standardUrl,
 | 
					 | 
				
			||||||
    Map<String, dynamic> additionalSettings,
 | 
					 | 
				
			||||||
  ) async {
 | 
					 | 
				
			||||||
    Response res =
 | 
					 | 
				
			||||||
        await sourceRequest('https://${hosts[0]}/mobile', additionalSettings);
 | 
					 | 
				
			||||||
    if (res.statusCode == 200) {
 | 
					 | 
				
			||||||
      var apkNamePrefix = additionalSettings['app'] as String?;
 | 
					 | 
				
			||||||
      if (apkNamePrefix == null) {
 | 
					 | 
				
			||||||
        throw NoReleasesError();
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      String apkInURLRegexPattern =
 | 
					 | 
				
			||||||
          '/$apkNamePrefix-([0-9]+\\.)*[0-9]+\\.apk\$';
 | 
					 | 
				
			||||||
      var links = parse(res.body)
 | 
					 | 
				
			||||||
          .querySelectorAll('a')
 | 
					 | 
				
			||||||
          .map((e) => e.attributes['href'] ?? '')
 | 
					 | 
				
			||||||
          .where((e) => RegExp('https://.*$apkInURLRegexPattern').hasMatch(e))
 | 
					 | 
				
			||||||
          .toList();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      if (links.isEmpty) {
 | 
					 | 
				
			||||||
        throw NoReleasesError();
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      var versionMatch = RegExp(apkInURLRegexPattern).firstMatch(links[0]);
 | 
					 | 
				
			||||||
      if (versionMatch == null) {
 | 
					 | 
				
			||||||
        throw NoVersionError();
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      var version = links[0].substring(
 | 
					 | 
				
			||||||
          versionMatch.start + apkNamePrefix.length + 2, versionMatch.end - 4);
 | 
					 | 
				
			||||||
      var apkUrls = [links[0]];
 | 
					 | 
				
			||||||
      return APKDetails(version, getApkUrlsFromUrls(apkUrls),
 | 
					 | 
				
			||||||
          AppNames(name, apks[apkNamePrefix]!));
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
      throw getObtainiumHttpError(res);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -42,19 +42,16 @@ class Uptodown extends AppSource {
 | 
				
			|||||||
    String? version = html.querySelector('div.version')?.innerHtml;
 | 
					    String? version = html.querySelector('div.version')?.innerHtml;
 | 
				
			||||||
    String? name = html.querySelector('#detail-app-name')?.innerHtml.trim();
 | 
					    String? name = html.querySelector('#detail-app-name')?.innerHtml.trim();
 | 
				
			||||||
    String? author = html.querySelector('#author-link')?.innerHtml.trim();
 | 
					    String? author = html.querySelector('#author-link')?.innerHtml.trim();
 | 
				
			||||||
    var detailElements = html.querySelectorAll('#technical-information td');
 | 
					    var detailElements = html
 | 
				
			||||||
    String? appId = (detailElements.elementAtOrNull(2))?.innerHtml.trim();
 | 
					        .querySelectorAll('#technical-information td')
 | 
				
			||||||
    String? dateStr = (detailElements.elementAtOrNull(29))?.innerHtml.trim();
 | 
					        .map((e) => e.innerHtml.trim())
 | 
				
			||||||
 | 
					        .where((e) => !e.startsWith('<'))
 | 
				
			||||||
 | 
					        .toList();
 | 
				
			||||||
 | 
					    String? appId = detailElements.elementAtOrNull(0);
 | 
				
			||||||
 | 
					    String? dateStr = detailElements.elementAtOrNull(6);
 | 
				
			||||||
    String? fileId =
 | 
					    String? fileId =
 | 
				
			||||||
        html.querySelector('#detail-app-name')?.attributes['data-file-id'];
 | 
					        html.querySelector('#detail-app-name')?.attributes['data-file-id'];
 | 
				
			||||||
    String? extension = html
 | 
					    String? extension = detailElements.elementAtOrNull(7)?.toLowerCase();
 | 
				
			||||||
        .querySelectorAll('td')
 | 
					 | 
				
			||||||
        .where((e) => e.text.toLowerCase().trim() == 'file type')
 | 
					 | 
				
			||||||
        .firstOrNull
 | 
					 | 
				
			||||||
        ?.nextElementSibling
 | 
					 | 
				
			||||||
        ?.text
 | 
					 | 
				
			||||||
        .toLowerCase()
 | 
					 | 
				
			||||||
        .trim();
 | 
					 | 
				
			||||||
    return Map.fromEntries([
 | 
					    return Map.fromEntries([
 | 
				
			||||||
      MapEntry('version', version),
 | 
					      MapEntry('version', version),
 | 
				
			||||||
      MapEntry('appId', appId),
 | 
					      MapEntry('appId', appId),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -538,6 +538,38 @@ class AddAppPageState extends State<AddAppPage> {
 | 
				
			|||||||
                      });
 | 
					                      });
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                  }),
 | 
					                  }),
 | 
				
			||||||
 | 
					            if (pickedSource != null && pickedSource!.enforceTrackOnly)
 | 
				
			||||||
 | 
					              GeneratedForm(
 | 
				
			||||||
 | 
					                  key: Key(
 | 
				
			||||||
 | 
					                      '${pickedSource.runtimeType.toString()}-${pickedSource?.hostChanged.toString()}-${pickedSource?.hostIdenticalDespiteAnyChange.toString()}-appId'),
 | 
				
			||||||
 | 
					                  items: [
 | 
				
			||||||
 | 
					                    [
 | 
				
			||||||
 | 
					                      GeneratedFormTextField('appId',
 | 
				
			||||||
 | 
					                          label: '${tr('appId')} - ${tr('custom')}',
 | 
				
			||||||
 | 
					                          required: false,
 | 
				
			||||||
 | 
					                          additionalValidators: [
 | 
				
			||||||
 | 
					                            (value) {
 | 
				
			||||||
 | 
					                              if (value == null || value.isEmpty) {
 | 
				
			||||||
 | 
					                                return null;
 | 
				
			||||||
 | 
					                              }
 | 
				
			||||||
 | 
					                              final isValid = RegExp(
 | 
				
			||||||
 | 
					                                      r'^([A-Za-z]{1}[A-Za-z\d_]*\.)+[A-Za-z][A-Za-z\d_]*$')
 | 
				
			||||||
 | 
					                                  .hasMatch(value);
 | 
				
			||||||
 | 
					                              if (!isValid) {
 | 
				
			||||||
 | 
					                                return tr('invalidInput');
 | 
				
			||||||
 | 
					                              }
 | 
				
			||||||
 | 
					                              return null;
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                          ]),
 | 
				
			||||||
 | 
					                    ]
 | 
				
			||||||
 | 
					                  ],
 | 
				
			||||||
 | 
					                  onValueChanges: (values, valid, isBuilding) {
 | 
				
			||||||
 | 
					                    if (!isBuilding) {
 | 
				
			||||||
 | 
					                      setState(() {
 | 
				
			||||||
 | 
					                        additionalSettings['appId'] = values['appId'];
 | 
				
			||||||
 | 
					                      });
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                  }),
 | 
				
			||||||
          ],
 | 
					          ],
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -700,6 +700,8 @@ class AppsProvider with ChangeNotifier {
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    PackageInfo? appInfo = await getInstalledInfo(apps[file.appId]!.app.id);
 | 
					    PackageInfo? appInfo = await getInstalledInfo(apps[file.appId]!.app.id);
 | 
				
			||||||
 | 
					    logs.add(
 | 
				
			||||||
 | 
					        'Installing "${newInfo.packageName}" version "${newInfo.versionName}" versionCode "${newInfo.versionCode}"${appInfo != null ? ' (from existing version "${appInfo.versionName}" versionCode "${appInfo.versionCode}")' : ''}');
 | 
				
			||||||
    if (appInfo != null &&
 | 
					    if (appInfo != null &&
 | 
				
			||||||
        newInfo.versionCode! < appInfo.versionCode! &&
 | 
					        newInfo.versionCode! < appInfo.versionCode! &&
 | 
				
			||||||
        !(await canDowngradeApps())) {
 | 
					        !(await canDowngradeApps())) {
 | 
				
			||||||
@@ -743,6 +745,10 @@ class AppsProvider with ChangeNotifier {
 | 
				
			|||||||
    return installed;
 | 
					    return installed;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Future<String> getStorageRootPath() async {
 | 
				
			||||||
 | 
					    return '/${(await getExternalStorageDirectory())!.uri.pathSegments.sublist(0, 3).join('/')}';
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Future<void> moveObbFile(File file, String appId) async {
 | 
					  Future<void> moveObbFile(File file, String appId) async {
 | 
				
			||||||
    if (!file.path.toLowerCase().endsWith('.obb')) return;
 | 
					    if (!file.path.toLowerCase().endsWith('.obb')) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -751,7 +757,7 @@ class AppsProvider with ChangeNotifier {
 | 
				
			|||||||
      await Permission.storage.request();
 | 
					      await Permission.storage.request();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    String obbDirPath = "/storage/emulated/0/Android/obb/$appId";
 | 
					    String obbDirPath = "${await getStorageRootPath()}/Android/obb/$appId";
 | 
				
			||||||
    Directory(obbDirPath).createSync(recursive: true);
 | 
					    Directory(obbDirPath).createSync(recursive: true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    String obbFileName = file.path.split("/").last;
 | 
					    String obbFileName = file.path.split("/").last;
 | 
				
			||||||
@@ -1045,10 +1051,11 @@ class AppsProvider with ChangeNotifier {
 | 
				
			|||||||
    Future<void> downloadFn(MapEntry<String, String> fileUrl, App app) async {
 | 
					    Future<void> downloadFn(MapEntry<String, String> fileUrl, App app) async {
 | 
				
			||||||
      try {
 | 
					      try {
 | 
				
			||||||
        var exportDir = await settingsProvider.getExportDir();
 | 
					        var exportDir = await settingsProvider.getExportDir();
 | 
				
			||||||
        String downloadPath = '/storage/emulated/0/Download';
 | 
					        String downloadPath = '${await getStorageRootPath()}/Download';
 | 
				
			||||||
        bool downloadsAccessible = false;
 | 
					        bool downloadsAccessible = false;
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
          downloadsAccessible = Directory(downloadPath).existsSync();
 | 
					          Directory(downloadPath).listSync();
 | 
				
			||||||
 | 
					          downloadsAccessible = true;
 | 
				
			||||||
        } catch (e) {
 | 
					        } catch (e) {
 | 
				
			||||||
          //
 | 
					          //
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,10 +23,8 @@ import 'package:obtainium/app_sources/izzyondroid.dart';
 | 
				
			|||||||
import 'package:obtainium/app_sources/html.dart';
 | 
					import 'package:obtainium/app_sources/html.dart';
 | 
				
			||||||
import 'package:obtainium/app_sources/jenkins.dart';
 | 
					import 'package:obtainium/app_sources/jenkins.dart';
 | 
				
			||||||
import 'package:obtainium/app_sources/neutroncode.dart';
 | 
					import 'package:obtainium/app_sources/neutroncode.dart';
 | 
				
			||||||
import 'package:obtainium/app_sources/signal.dart';
 | 
					 | 
				
			||||||
import 'package:obtainium/app_sources/sourceforge.dart';
 | 
					import 'package:obtainium/app_sources/sourceforge.dart';
 | 
				
			||||||
import 'package:obtainium/app_sources/sourcehut.dart';
 | 
					import 'package:obtainium/app_sources/sourcehut.dart';
 | 
				
			||||||
import 'package:obtainium/app_sources/steammobile.dart';
 | 
					 | 
				
			||||||
import 'package:obtainium/app_sources/telegramapp.dart';
 | 
					import 'package:obtainium/app_sources/telegramapp.dart';
 | 
				
			||||||
import 'package:obtainium/app_sources/tencent.dart';
 | 
					import 'package:obtainium/app_sources/tencent.dart';
 | 
				
			||||||
import 'package:obtainium/app_sources/uptodown.dart';
 | 
					import 'package:obtainium/app_sources/uptodown.dart';
 | 
				
			||||||
@@ -183,7 +181,7 @@ appJSONCompatibilityModifiers(Map<String, dynamic> json) {
 | 
				
			|||||||
      }).toList();
 | 
					      }).toList();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // Steam source apps should be converted to HTML (#1244)
 | 
					    // Steam source apps should be converted to HTML (#1244)
 | 
				
			||||||
    var legacySteamSourceApps = SteamMobile().apks.keys;
 | 
					    var legacySteamSourceApps = ['steam', 'steam-chat-app'];
 | 
				
			||||||
    if (legacySteamSourceApps.contains(additionalSettings['app'] ?? '')) {
 | 
					    if (legacySteamSourceApps.contains(additionalSettings['app'] ?? '')) {
 | 
				
			||||||
      json['url'] = '${json['url']}/mobile';
 | 
					      json['url'] = '${json['url']}/mobile';
 | 
				
			||||||
      var replacementAdditionalSettings = getDefaultValuesFromFormItems(
 | 
					      var replacementAdditionalSettings = getDefaultValuesFromFormItems(
 | 
				
			||||||
@@ -200,6 +198,22 @@ appJSONCompatibilityModifiers(Map<String, dynamic> json) {
 | 
				
			|||||||
      replacementAdditionalSettings['matchGroupToUse'] = '\$1';
 | 
					      replacementAdditionalSettings['matchGroupToUse'] = '\$1';
 | 
				
			||||||
      additionalSettings = replacementAdditionalSettings;
 | 
					      additionalSettings = replacementAdditionalSettings;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    // Signal apps from before it was removed should be converted to HTML (#1928)
 | 
				
			||||||
 | 
					    if (json['url'] == 'https://signal.org' &&
 | 
				
			||||||
 | 
					        json['id'] == 'org.thoughtcrime.securesms' &&
 | 
				
			||||||
 | 
					        json['author'] == 'Signal' &&
 | 
				
			||||||
 | 
					        json['name'] == 'Signal' &&
 | 
				
			||||||
 | 
					        json['overrideSource'] == null &&
 | 
				
			||||||
 | 
					        additionalSettings['trackOnly'] == false &&
 | 
				
			||||||
 | 
					        additionalSettings['versionExtractionRegEx'] == '' &&
 | 
				
			||||||
 | 
					        json['lastUpdateCheck'] != null) {
 | 
				
			||||||
 | 
					      json['url'] = 'https://updates.signal.org/android/latest.json';
 | 
				
			||||||
 | 
					      var replacementAdditionalSettings = getDefaultValuesFromFormItems(
 | 
				
			||||||
 | 
					          HTML().combinedAppSpecificSettingFormItems);
 | 
				
			||||||
 | 
					      replacementAdditionalSettings['versionExtractionRegEx'] =
 | 
				
			||||||
 | 
					          '\\d+.\\d+.\\d+';
 | 
				
			||||||
 | 
					      additionalSettings = replacementAdditionalSettings;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  json['additionalSettings'] = jsonEncode(additionalSettings);
 | 
					  json['additionalSettings'] = jsonEncode(additionalSettings);
 | 
				
			||||||
  // F-Droid no longer needs cloudflare exception since override can be used - migrate apps appropriately
 | 
					  // F-Droid no longer needs cloudflare exception since override can be used - migrate apps appropriately
 | 
				
			||||||
@@ -571,7 +585,7 @@ abstract class AppSource {
 | 
				
			|||||||
      GeneratedFormSwitch('skipUpdateNotifications',
 | 
					      GeneratedFormSwitch('skipUpdateNotifications',
 | 
				
			||||||
          label: tr('skipUpdateNotifications'))
 | 
					          label: tr('skipUpdateNotifications'))
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    [GeneratedFormTextField('about', label: tr('about'), required: false)]
 | 
					    [GeneratedFormTextField('about', label: tr('about'), required: false)],
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Previous 2 variables combined into one at runtime for convenient usage
 | 
					  // Previous 2 variables combined into one at runtime for convenient usage
 | 
				
			||||||
@@ -794,7 +808,6 @@ class SourceProvider {
 | 
				
			|||||||
        Tencent(),
 | 
					        Tencent(),
 | 
				
			||||||
        Jenkins(),
 | 
					        Jenkins(),
 | 
				
			||||||
        APKMirror(),
 | 
					        APKMirror(),
 | 
				
			||||||
        Signal(),
 | 
					 | 
				
			||||||
        VLC(),
 | 
					        VLC(),
 | 
				
			||||||
        WhatsApp(),
 | 
					        WhatsApp(),
 | 
				
			||||||
        TelegramApp(),
 | 
					        TelegramApp(),
 | 
				
			||||||
@@ -922,6 +935,9 @@ class SourceProvider {
 | 
				
			|||||||
    name = name.isNotEmpty ? name : apk.names.name;
 | 
					    name = name.isNotEmpty ? name : apk.names.name;
 | 
				
			||||||
    App finalApp = App(
 | 
					    App finalApp = App(
 | 
				
			||||||
        currentApp?.id ??
 | 
					        currentApp?.id ??
 | 
				
			||||||
 | 
					            ((additionalSettings['appId'] != null)
 | 
				
			||||||
 | 
					                ? additionalSettings['appId']
 | 
				
			||||||
 | 
					                : null) ??
 | 
				
			||||||
            (!trackOnly &&
 | 
					            (!trackOnly &&
 | 
				
			||||||
                    (!source.appIdInferIsOptional ||
 | 
					                    (!source.appIdInferIsOptional ||
 | 
				
			||||||
                        (source.appIdInferIsOptional && inferAppIdIfOptional))
 | 
					                        (source.appIdInferIsOptional && inferAppIdIfOptional))
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										72
									
								
								pubspec.lock
									
									
									
									
									
								
							
							
						
						
									
										72
									
								
								pubspec.lock
									
									
									
									
									
								
							@@ -111,10 +111,10 @@ packages:
 | 
				
			|||||||
    dependency: "direct main"
 | 
					    dependency: "direct main"
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: battery_plus
 | 
					      name: battery_plus
 | 
				
			||||||
      sha256: "4b6dc87ffa72f8d1e63ae17c8700ee374a462e521f0152e2c76cfff484610764"
 | 
					      sha256: "220c8f1961efb01d6870493b5ac5a80afaeaffc8757f7a11ed3025a8570d29e7"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "6.1.0"
 | 
					    version: "6.2.0"
 | 
				
			||||||
  battery_plus_platform_interface:
 | 
					  battery_plus_platform_interface:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -151,10 +151,10 @@ packages:
 | 
				
			|||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: cli_util
 | 
					      name: cli_util
 | 
				
			||||||
      sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19
 | 
					      sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "0.4.1"
 | 
					    version: "0.4.2"
 | 
				
			||||||
  clock:
 | 
					  clock:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -207,10 +207,10 @@ packages:
 | 
				
			|||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: csslib
 | 
					      name: csslib
 | 
				
			||||||
      sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb"
 | 
					      sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "1.0.0"
 | 
					    version: "1.0.2"
 | 
				
			||||||
  cupertino_icons:
 | 
					  cupertino_icons:
 | 
				
			||||||
    dependency: "direct main"
 | 
					    dependency: "direct main"
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -231,10 +231,10 @@ packages:
 | 
				
			|||||||
    dependency: "direct main"
 | 
					    dependency: "direct main"
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: device_info_plus
 | 
					      name: device_info_plus
 | 
				
			||||||
      sha256: c4af09051b4f0508f6c1dc0a5c085bf014d5c9a4a0678ce1799c2b4d716387a0
 | 
					      sha256: f545ffbadee826f26f2e1a0f0cbd667ae9a6011cc0f77c0f8f00a969655e6e95
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "11.1.0"
 | 
					    version: "11.1.1"
 | 
				
			||||||
  device_info_plus_platform_interface:
 | 
					  device_info_plus_platform_interface:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -420,26 +420,26 @@ packages:
 | 
				
			|||||||
    dependency: "direct main"
 | 
					    dependency: "direct main"
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: flutter_local_notifications
 | 
					      name: flutter_local_notifications
 | 
				
			||||||
      sha256: "49eeef364fddb71515bc78d5a8c51435a68bccd6e4d68e25a942c5e47761ae71"
 | 
					      sha256: "725145682706fb0e5a30f93e5cb64f3df7ed7743de749bd555b22bf75ee718c0"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "17.2.3"
 | 
					    version: "18.0.0"
 | 
				
			||||||
  flutter_local_notifications_linux:
 | 
					  flutter_local_notifications_linux:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: flutter_local_notifications_linux
 | 
					      name: flutter_local_notifications_linux
 | 
				
			||||||
      sha256: c49bd06165cad9beeb79090b18cd1eb0296f4bf4b23b84426e37dd7c027fc3af
 | 
					      sha256: "8f685642876742c941b29c32030f6f4f6dacd0e4eaecb3efbb187d6a3812ca01"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "4.0.1"
 | 
					    version: "5.0.0"
 | 
				
			||||||
  flutter_local_notifications_platform_interface:
 | 
					  flutter_local_notifications_platform_interface:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: flutter_local_notifications_platform_interface
 | 
					      name: flutter_local_notifications_platform_interface
 | 
				
			||||||
      sha256: "85f8d07fe708c1bdcf45037f2c0109753b26ae077e9d9e899d55971711a4ea66"
 | 
					      sha256: "6c5b83c86bf819cdb177a9247a3722067dd8cc6313827ce7c77a4b238a26fd52"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "7.2.0"
 | 
					    version: "8.0.0"
 | 
				
			||||||
  flutter_localizations:
 | 
					  flutter_localizations:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description: flutter
 | 
					    description: flutter
 | 
				
			||||||
@@ -449,10 +449,10 @@ packages:
 | 
				
			|||||||
    dependency: "direct main"
 | 
					    dependency: "direct main"
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: flutter_markdown
 | 
					      name: flutter_markdown
 | 
				
			||||||
      sha256: bd9c475d9aae256369edacafc29d1e74c81f78a10cdcdacbbbc9e3c43d009e4a
 | 
					      sha256: f0e599ba89c9946c8e051780f0ec99aba4ba15895e0380a7ab68f420046fc44e
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "0.7.4"
 | 
					    version: "0.7.4+1"
 | 
				
			||||||
  flutter_plugin_android_lifecycle:
 | 
					  flutter_plugin_android_lifecycle:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -515,10 +515,10 @@ packages:
 | 
				
			|||||||
    dependency: "direct main"
 | 
					    dependency: "direct main"
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: html
 | 
					      name: html
 | 
				
			||||||
      sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a"
 | 
					      sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "0.15.4"
 | 
					    version: "0.15.5"
 | 
				
			||||||
  http:
 | 
					  http:
 | 
				
			||||||
    dependency: "direct main"
 | 
					    dependency: "direct main"
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -659,10 +659,10 @@ packages:
 | 
				
			|||||||
    dependency: "direct main"
 | 
					    dependency: "direct main"
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: path_provider
 | 
					      name: path_provider
 | 
				
			||||||
      sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
 | 
					      sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "2.1.4"
 | 
					    version: "2.1.5"
 | 
				
			||||||
  path_provider_android:
 | 
					  path_provider_android:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -819,10 +819,10 @@ packages:
 | 
				
			|||||||
    dependency: "direct main"
 | 
					    dependency: "direct main"
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: share_plus
 | 
					      name: share_plus
 | 
				
			||||||
      sha256: "334fcdf0ef9c0df0e3b428faebcac9568f35c747d59831474b2fc56e156d244e"
 | 
					      sha256: "9c9bafd4060728d7cdb2464c341743adbd79d327cb067ec7afb64583540b47c8"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "10.1.0"
 | 
					    version: "10.1.2"
 | 
				
			||||||
  share_plus_platform_interface:
 | 
					  share_plus_platform_interface:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -835,10 +835,10 @@ packages:
 | 
				
			|||||||
    dependency: "direct main"
 | 
					    dependency: "direct main"
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: shared_preferences
 | 
					      name: shared_preferences
 | 
				
			||||||
      sha256: "746e5369a43170c25816cc472ee016d3a66bc13fcf430c0bc41ad7b4b2922051"
 | 
					      sha256: "95f9997ca1fb9799d494d0cb2a780fd7be075818d59f00c43832ed112b158a82"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "2.3.2"
 | 
					    version: "2.3.3"
 | 
				
			||||||
  shared_preferences_android:
 | 
					  shared_preferences_android:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -929,10 +929,10 @@ packages:
 | 
				
			|||||||
    dependency: "direct main"
 | 
					    dependency: "direct main"
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: sqflite
 | 
					      name: sqflite
 | 
				
			||||||
      sha256: "79a297dc3cc137e758c6a4baf83342b039e5a6d2436fcdf3f96a00adaaf2ad62"
 | 
					      sha256: "2d7299468485dca85efeeadf5d38986909c5eb0cd71fd3db2c2f000e6c9454bb"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "2.4.0"
 | 
					    version: "2.4.1"
 | 
				
			||||||
  sqflite_android:
 | 
					  sqflite_android:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -953,10 +953,10 @@ packages:
 | 
				
			|||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: sqflite_darwin
 | 
					      name: sqflite_darwin
 | 
				
			||||||
      sha256: "769733dddf94622d5541c73e4ddc6aa7b252d865285914b6fcd54a63c4b4f027"
 | 
					      sha256: "96a698e2bc82bd770a4d6aab00b42396a7c63d9e33513a56945cbccb594c2474"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "2.4.1-1"
 | 
					    version: "2.4.1"
 | 
				
			||||||
  sqflite_platform_interface:
 | 
					  sqflite_platform_interface:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -1049,10 +1049,10 @@ packages:
 | 
				
			|||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: url_launcher_android
 | 
					      name: url_launcher_android
 | 
				
			||||||
      sha256: "8fc3bae0b68c02c47c5c86fa8bfa74471d42687b0eded01b78de87872db745e2"
 | 
					      sha256: "6fc2f56536ee873eeb867ad176ae15f304ccccc357848b351f6f0d8d4a40d193"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "6.3.12"
 | 
					    version: "6.3.14"
 | 
				
			||||||
  url_launcher_ios:
 | 
					  url_launcher_ios:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -1145,10 +1145,10 @@ packages:
 | 
				
			|||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: webview_flutter_android
 | 
					      name: webview_flutter_android
 | 
				
			||||||
      sha256: "74693a212d990b32e0b7055d27db973a18abf31c53942063948cdfaaef9787ba"
 | 
					      sha256: dec83a8da0a2dcd8a25418534cc59348dbc2855fa1dd0cc929c62b6029fde392
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "4.0.0"
 | 
					    version: "4.0.1"
 | 
				
			||||||
  webview_flutter_platform_interface:
 | 
					  webview_flutter_platform_interface:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -1161,18 +1161,18 @@ packages:
 | 
				
			|||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: webview_flutter_wkwebview
 | 
					      name: webview_flutter_wkwebview
 | 
				
			||||||
      sha256: d4034901d96357beb1b6717ebf7d583c88e40cfc6eb85fe76dd1bf0979a9f251
 | 
					      sha256: f14ee08021772fed913da8daebcfdeb46be457081e521e93e9918fe6cd1ce9e8
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "3.16.0"
 | 
					    version: "3.16.1"
 | 
				
			||||||
  win32:
 | 
					  win32:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: win32
 | 
					      name: win32
 | 
				
			||||||
      sha256: "2735daae5150e8b1dfeb3eb0544b4d3af0061e9e82cef063adcd583bdae4306a"
 | 
					      sha256: "84ba388638ed7a8cb3445a320c8273136ab2631cd5f2c57888335504ddab1bc2"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "5.7.0"
 | 
					    version: "5.8.0"
 | 
				
			||||||
  win32_registry:
 | 
					  win32_registry:
 | 
				
			||||||
    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: 1.1.28+2285
 | 
					version: 1.1.30+2287
 | 
				
			||||||
 | 
					
 | 
				
			||||||
environment:
 | 
					environment:
 | 
				
			||||||
  sdk: '>=3.0.0 <4.0.0'
 | 
					  sdk: '>=3.0.0 <4.0.0'
 | 
				
			||||||
@@ -38,7 +38,7 @@ dependencies:
 | 
				
			|||||||
  cupertino_icons: ^1.0.5
 | 
					  cupertino_icons: ^1.0.5
 | 
				
			||||||
  path_provider: ^2.0.11
 | 
					  path_provider: ^2.0.11
 | 
				
			||||||
  flutter_fgbg: ^0.6.0
 | 
					  flutter_fgbg: ^0.6.0
 | 
				
			||||||
  flutter_local_notifications: ^17.0.0
 | 
					  flutter_local_notifications: ^18.0.0
 | 
				
			||||||
  provider: ^6.0.3
 | 
					  provider: ^6.0.3
 | 
				
			||||||
  http: ^1.0.0
 | 
					  http: ^1.0.0
 | 
				
			||||||
  webview_flutter: ^4.0.0
 | 
					  webview_flutter: ^4.0.0
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										38
									
								
								sign.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										38
									
								
								sign.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					set -e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Script to sign unsigned APKs
 | 
				
			||||||
 | 
					# Assumptions:
 | 
				
			||||||
 | 
					# 1. Your PGP key is already imported on the locally running agent
 | 
				
			||||||
 | 
					# 2. An Android SDK is located at $ANDROID_HOME (or ~/Android/Sdk as fallback)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					usage() {
 | 
				
			||||||
 | 
					  echo "sign.sh <PATH_TO_KEYSTORE> <PATH_TO_BUILD_DIR>"
 | 
				
			||||||
 | 
					  exit 1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -z "$1" ] || [ -z "$2" ] || [ ! -f "$1" ] || [ ! -d "$2" ]; then
 | 
				
			||||||
 | 
					  usage
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					KEYSTORE_LOCATION="$1"
 | 
				
			||||||
 | 
					BUILD_DIR="$2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					read -s -p "Enter your keystore password: " KEYSTORE_PASSWORD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -z "$ANDROID_HOME" ]; then
 | 
				
			||||||
 | 
					  ANDROID_HOME=~/Android/Sdk
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					if [ ! -d "$ANDROID_HOME" ]; then
 | 
				
			||||||
 | 
					  echo "Could not find Android SDK!" >&2
 | 
				
			||||||
 | 
					  exit 1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for apk in "$BUILD_DIR"/*-release*.apk; do
 | 
				
			||||||
 | 
					  unsignedApk=${apk/-release/-unsigned}
 | 
				
			||||||
 | 
					  mv "$apk" "$unsignedApk"
 | 
				
			||||||
 | 
					  ${ANDROID_HOME}/build-tools/$(ls ${ANDROID_HOME}/build-tools/ | tail -1)/apksigner sign --ks "$KEYSTORE_LOCATION" --ks-pass pass:"${KEYSTORE_PASSWORD}" --out "${apk}" "${unsignedApk}"
 | 
				
			||||||
 | 
					  sha256sum ${apk} | cut -d " " -f 1 >"$apk".sha256
 | 
				
			||||||
 | 
					  gpg --batch --sign --detach-sig "$apk".sha256
 | 
				
			||||||
 | 
					  rm "$unsignedApk"
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
		Reference in New Issue
	
	Block a user