197 Commits

Author SHA1 Message Date
Torsten Grote
6822186b8b [db] only add added repo to list, if not already there 2026-04-13 13:41:05 -03:00
Torsten Grote
5d32a4d5d4 [db] More fixes to RepoAdder
as it was still possible to add the same repo twice
2026-04-09 11:28:48 -03:00
Torsten Grote
faf908466c Fix formatting after ktfmt update 2026-04-03 13:21:16 -03:00
Torsten Grote
8535a89bfc [db] add file to PackageVersion 2026-04-03 13:21:13 -03:00
Matthew Bogner
1c9570575f Support for dnsA/dnsAAAA data added to v2 index 2026-04-02 13:11:58 +00:00
Torsten Grote
34b3fa31f4 [db] fix diff bug where zero-whitespace gets added more than once
This bug only affects CJK languages and apart from DB growth, the symptom is that word filtering in app lists doesn't find affected apps because we look for a single whitespace between tokens
2026-03-26 14:38:56 -03:00
Torsten Grote
fa2ef709cf [db] Deprecate usage of localization cache for name and summary 2026-03-26 14:38:56 -03:00
Torsten Grote
42314c8377 [db] Add SearchQueryRewriter and use it in AppSearchItemsTest
This code comes from SearchManager, but making it available in the DB library makes sense since the queries are specific to the DB implementation such as zero-whitespace hack.
2026-03-26 14:38:55 -03:00
Torsten Grote
757ac543b3 [db] Add search test: AppSearchItemsTest
the test tries to ensure that queries in various languages provide results within some limited test data
2026-03-26 14:38:55 -03:00
Torsten Grote
c88b47a494 [db] Move migration tests into their own package
as it got kinda crowded in the database package
2026-03-26 14:38:55 -03:00
Torsten Grote
13a3b313db [db] add a method for repairing Fts table, if corrupted
this is a bit hacky, but there seems to be very little information about this specific bug which affected several installs and either degraded search result quality or broke search completely.

In absence of a better fix or even a way to reproduce the issue, we are resorting to this.
2026-03-26 14:38:53 -03:00
Torsten Grote
853382a8b2 [db] list of repos in RepoManager is null until they have loaded
Otherwise, we can't differentiate between not having repos. This difference is important when a DB migration delays initial loading of repos.
2026-03-26 14:38:52 -03:00
Torsten Grote
6d7b10be86 Some fixes for TimingDatabase logging 2026-03-26 14:38:48 -03:00
Peter Serwylo
ba87e2e8ba DB Performance fixes focussing on App Details screen.
Added indexes based on slow query logs and associated `EXPLAIN QUERY
PLAN` output.

Note: There are some composite primary keys with `repoId` +
`packageName` + ..., and we still ad an index on `packageName`.
This is because the order matters in composite keys. It might
be possible to restructure the primary key to be `packageName` +
`repoId` + ..., however this requires removing the table and
recreating it which is more complex then just adding an index on
`packageIndex` in addition to the primary key. There is also no
guarantee that things wont slow down when restructuring the primary key,
because there may be some cases where it is important that `repoId` is
first in that index.
2026-03-26 14:38:48 -03:00
Peter Serwylo
262d322dc5 Instrument db to monitor slow queries and log explain statements.
Only enabled in debug mode. When auditing performance, make sure
to tune the parameters to the open helper. By default it will log
and explain queries that take more than 2s.
2026-03-26 14:38:45 -03:00
Torsten Grote
69ac6a88a8 Improve readability of DbAppChecker and add tests 2026-03-06 17:39:32 -03:00
Torsten Grote
2d7e94c7a5 Migrate to AGP9
fixes multi-platform JVM builds
2026-03-06 17:39:31 -03:00
Torsten Grote
81a04d078e [db] Fix detection of new apps
Sometimes the added and the lastUpdated timestamp are some seconds apart, so we can't expect them to be equal for new apps. We simply treat everything as new that was added in the last 14 days.
2026-03-06 17:39:30 -03:00
Torsten Grote
cdf58c6ffb Auto-format all files with ktfmt 2026-02-26 17:12:13 -03:00
Torsten Grote
f6cb2dc235 [db] add method for retrieving anti-features
so the UI can use them for filtering app lists
2026-02-25 16:17:25 -03:00
Torsten Grote
738adc7a80 [db] only flag compatible updates in other repos if older than a week 2026-02-05 12:09:55 -03:00
Torsten Grote
a9f5e325fe Show issue for apps we had installed with different signer 2026-01-26 15:17:05 -03:00
Torsten Grote
c1efc6f6f1 Don't show issue for apps with incompatible signer installed by other stores
The other store is likely to provide updates and this is a common use case with Aurora or Google Play, so people get flagged false positives.
2026-01-26 14:33:20 -03:00
Torsten Grote
9f3a615b5a [db] add missing API surface 2026-01-05 17:24:10 -03:00
Torsten Grote
c0f90bf0b6 [db] don't progress report total bytes for entry.jar download
because we'll download another file afterwards and progress reporting would jump to 100% two times. Also entry.jar is really small, so downloading that is fast and doesn't benefit from detailed progress reporting anyway.
2026-01-05 17:24:10 -03:00
Torsten Grote
dea8a2e504 [db] track and clear repo update errors
Historically, we've just shown a giant Toast for repo update errors, now we track them in the DB, so we can properly expose them in the UI.
2026-01-05 17:24:10 -03:00
Torsten Grote
f81060859d [db] Migration to version 10
adds a couple of fields we wanted for some time:
* isPrimary for mirrors
* repo errors
* app labels for pre-approved installs
2026-01-05 17:24:10 -03:00
Torsten Grote
29e2d15386 [db] Update repositoriesState atomically in RepoManager
Otherwise, concurrency issues may cause a broken state such as the same repo being in the list two times.
2025-12-29 11:23:59 -03:00
Torsten Grote
41653a80a0 [db] add a way to get apps for a list of package names
this will be used to get the apps most downloaded
2025-12-29 11:23:59 -03:00
Torsten Grote
8b4e42935e [db] Add new DbAppChecker which finds updates and apps with issues
This is similar to DbUpdateChecker which only finds updates.
2025-12-29 11:23:59 -03:00
Torsten Grote
88f817e5ca [db] allow providing PackageInfo maps to avoid hammering PackageManager
The app may maintain PackageInfo for apps already, so there's no need to keep asking the system for it. We could instead just work with what we already have.

Also, we discovered that chunking the package names isn't needed for newer Android versions. This is only relevant for whom has more than 999 apps installed.
2025-12-29 11:23:59 -03:00
Torsten Grote
07b56f0516 Upgrade Dokka syntax to v2 2025-11-04 08:50:56 -03:00
Torsten Grote
5a04b315d5 Upgrade maven publishing plugin 2025-11-04 08:50:56 -03:00
Torsten Grote
1e4c9f39ed Enable Binary compatibility validation
which is still experimental, but allows us to sport API breakage in CI. It still doesn't produce anything for the database lib.
2025-11-04 08:50:55 -03:00
Torsten Grote
911b337db7 Untangle libraries slightly by creating a common core library 2025-11-04 08:50:55 -03:00
Torsten Grote
ba7731af6c Migrate build scripts from Groovy to Kotlin 2025-11-04 08:50:55 -03:00
Torsten Grote
cc2010ff63 [db] Increase concurrency delay for RepoAdderTest
still a hack, but synchronizing the coroutines doesn't seem trivial
2025-11-04 08:50:54 -03:00
Torsten Grote
800d5bfe85 [db] Fix bug where repos/mirrors could be added twice
This could happen when tapping a button quickly two times in the UI. While we had provisions to ensure proper states, these didn't work, because a parallel fetching job would mess with our state allowing the adding code to run more than once.
2025-11-04 08:50:54 -03:00
Torsten Grote
77d8127015 [db] Don't cancel index fetching after enabling archive
This can cause other exceptions (e.g. in json parsing) which prevent repo from getting added properly.

Also, when updating the archive for the first time, we can now re-use the downloaded index.
2025-11-04 08:50:54 -03:00
Torsten Grote
4ad356249a [db] Fix UI update when deleting repo 2025-11-04 08:50:54 -03:00
Torsten Grote
3d5acc401b [db] Update repo shareUri to use fdroid.link 2025-11-04 08:50:53 -03:00
Torsten Grote
5ab649f14d [db] optimize adding repos
We now hang on to the index file while streaming it for repo preview purposes. This avoids having to re-download that file and we can properly add the repo right away.

This then allows us to bring the user to the list of apps in that repository without it being initially empty.
2025-11-04 08:50:53 -03:00
Torsten Grote
3284745c81 [db] deprecate caching of localized app name and summary
This led to many hard to debug issues in the past. It is easier to always fetch fresh data and not cache it.

Previously, we needed the cache as a search index. Now, search uses all localizations, so the cache isn't needed anymore.
2025-11-04 08:50:52 -03:00
Torsten Grote
290cfcee34 [db] New AppOverviewItems AppDao methods 2025-11-04 08:50:52 -03:00
Torsten Grote
a45c9763e5 [db] retrieve categories to enable post-query filtering 2025-11-04 08:50:52 -03:00
Torsten Grote
dff226a935 [db] Add different search API
for more flexible search result sorting and faster search
2025-11-04 08:50:51 -03:00
Torsten Grote
b33800bf5c [db] Add more information to versions
such as versionName and added date.
Also allow passing in UpdateChecker for DbUpdateChecker
2025-11-04 08:50:51 -03:00
Torsten Grote
7c490a2903 [db] expose installedVersionName for UpdatableApp
so that we can show to what version the update version would get applied to
2025-11-04 08:50:51 -03:00
Torsten Grote
23dde0bc9b [db] Better support search for CJK languages
by inserting zero whitespace between their characters to help the existing sqlite FTS tokenizers to split them up.

We have considered splitting them up only at word boundaries, but after consulting native speakers decided to do splitting by chars instead.

Doing this is a hack, but due to the limitations of tokenizers currently available with sqlite, we saw no better solution. While the ICU tokenizer is available as well, it doesn't handle diacritics in other languages.

The zero whitespace is added to zh, ja and ko locales when saving their text to the database. It happens for app names, summaries and descriptions either when loading a full index or when applying diffs. Tests have been added for both cases.
2025-11-04 08:50:51 -03:00
Torsten Grote
0f3f2d6f80 [db] improve search
This now also searches in descriptions, author and package names.
The search also considers all languages now and is insensitive to diacritics in most languages.

The AppMetadataFts needed to be re-created for this to work. A migration and a test for this have been added.
2025-11-04 08:50:50 -03:00