diff --git a/app/src/main/java/org/fdroid/fdroid/data/ContentProviderMigrator.java b/app/src/main/java/org/fdroid/fdroid/data/ContentProviderMigrator.java index dada626b5..9886ebfdf 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/ContentProviderMigrator.java +++ b/app/src/main/java/org/fdroid/fdroid/data/ContentProviderMigrator.java @@ -80,8 +80,8 @@ final class ContentProviderMigrator { } // add new repo if not existing if (repo == null) { // new repo to be added to new DB - InitialRepository newRepo = new InitialRepository(name, address, "", certificate, - 0, enabled, ++weight); + InitialRepository newRepo = new InitialRepository( + name, address, Arrays.asList(new String[]{}), "", certificate, 0, enabled, ++weight); long repoId = repoDao.insert(newRepo); repo = ObjectsCompat.requireNonNull(repoDao.getRepository(repoId)); } else { // old repo that may need an update for the new DB diff --git a/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java b/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java index 67bd207fd..a0d6ceb27 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java +++ b/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java @@ -75,9 +75,17 @@ public class DBHelper { boolean hasEnabledRepo = false; for (int i = 0; i < initialRepos.size(); i += REPO_XML_ITEM_COUNT) { boolean enabled = initialRepos.get(i + 4).equals("1"); + // split addresses into a list + List addresses = new ArrayList<>(); + for (String address : initialRepos.get(i + 1).split("\\s+")) { + if (!address.isEmpty()) { + addresses.add(address); + } + } InitialRepository repo = new InitialRepository( initialRepos.get(i), // name - initialRepos.get(i + 1), // address + addresses.get(0), // primary address (by convention: the first item) + addresses.subList(1, addresses.size()), // list of mirrors initialRepos.get(i + 2), // description initialRepos.get(i + 6), // certificate Integer.parseInt(initialRepos.get(i + 3)), // version diff --git a/app/src/main/res/values/default_repos.xml b/app/src/main/res/values/default_repos.xml index 3d64dccae..e146d8e91 100644 --- a/app/src/main/res/values/default_repos.xml +++ b/app/src/main/res/values/default_repos.xml @@ -6,7 +6,19 @@ F-Droid Archive - https://f-droid.org/archive + + https://f-droid.org/archive + http://fdroidorg6cooksyluodepej4erfctzk7rrjpjbbr6wx24jh3lqyfwyd.onion/fdroid/archive + http://ftpfaudev4triw2vxiwzf4334e3mynz7osqgtozhbc77fixncqzbyoyd.onion/fdroid/archive + https://fdroid.tetaneutral.net/fdroid/archive + https://ftp.agdsn.de/fdroid/archive + https://ftp.fau.de/fdroid/archive + https://ftp.lysator.liu.se/pub/fdroid/archive + https://mirror.cyberbits.eu/fdroid/archive + https://mirror.fcix.net/fdroid/archive + https://mirror.ossplanet.net/fdroid/archive + https://plug-mirror.rcac.purdue.edu/fdroid/archive + The archive repository of the F-Droid client. This contains older versions of applications from the main repository. @@ -25,7 +37,19 @@ F-Droid - https://f-droid.org/repo + + https://f-droid.org/repo + http://fdroidorg6cooksyluodepej4erfctzk7rrjpjbbr6wx24jh3lqyfwyd.onion/fdroid/repo + http://ftpfaudev4triw2vxiwzf4334e3mynz7osqgtozhbc77fixncqzbyoyd.onion/fdroid/repo + https://fdroid.tetaneutral.net/fdroid/repo + https://ftp.agdsn.de/fdroid/repo + https://ftp.fau.de/fdroid/repo + https://ftp.lysator.liu.se/pub/fdroid/repo + https://mirror.cyberbits.eu/fdroid/repo + https://mirror.fcix.net/fdroid/repo + https://mirror.ossplanet.net/fdroid/repo + https://plug-mirror.rcac.purdue.edu/fdroid/repo + The official F-Droid Free Software repository. Everything in this repository is always built from the source code. @@ -43,7 +67,11 @@ Guardian Project Archive - https://guardianproject.info/fdroid/archive + + https://guardianproject.info/fdroid/archive + https://s3.amazonaws.com/guardianproject/fdroid/archive + https://guardianproject.s3.amazonaws.com/fdroid/archive + The official repository of The Guardian Project apps for use with F-Droid client. This contains older versions of applications from the main repository. @@ -62,7 +90,11 @@ Guardian Project - https://guardianproject.info/fdroid/repo + + https://guardianproject.info/fdroid/repo + https://s3.amazonaws.com/guardianproject/fdroid/repo + https://guardianproject.s3.amazonaws.com/fdroid/repo + The official app repository of The Guardian Project. Applications in this repository are official binaries build by the original application developers and signed by the diff --git a/libs/database/src/dbTest/java/org/fdroid/database/RepositoryDaoTest.kt b/libs/database/src/dbTest/java/org/fdroid/database/RepositoryDaoTest.kt index 66338059c..0a818ff49 100644 --- a/libs/database/src/dbTest/java/org/fdroid/database/RepositoryDaoTest.kt +++ b/libs/database/src/dbTest/java/org/fdroid/database/RepositoryDaoTest.kt @@ -30,6 +30,7 @@ internal class RepositoryDaoTest : DbTest() { val repo = InitialRepository( name = getRandomString(), address = getRandomString(), + mirrors = listOf(getRandomString(), getRandomString(), getRandomString()), description = getRandomString(), certificate = getRandomString(), version = Random.nextLong(), @@ -47,10 +48,17 @@ internal class RepositoryDaoTest : DbTest() { assertEquals(repo.enabled, actualRepo.enabled) assertEquals(repo.weight, actualRepo.weight) assertEquals(-1, actualRepo.timestamp) - assertEquals(emptyList(), actualRepo.mirrors) + assertEquals(3, actualRepo.mirrors.size) assertEquals(emptyList(), actualRepo.userMirrors) assertEquals(emptyList(), actualRepo.disabledMirrors) - assertEquals(listOf(org.fdroid.download.Mirror(repo.address)), actualRepo.getMirrors()) + assertEquals( + listOf( + org.fdroid.download.Mirror(repo.address), + org.fdroid.download.Mirror(repo.mirrors[0]), + org.fdroid.download.Mirror(repo.mirrors[1]), + org.fdroid.download.Mirror(repo.mirrors[2]), + ).toSet(), actualRepo.getAllMirrors().toSet() + ) assertEquals(emptyList(), actualRepo.antiFeatures) assertEquals(emptyList(), actualRepo.categories) assertEquals(emptyList(), actualRepo.releaseChannels) diff --git a/libs/database/src/main/java/org/fdroid/database/Repository.kt b/libs/database/src/main/java/org/fdroid/database/Repository.kt index 2b6fa1e3d..0178a805b 100644 --- a/libs/database/src/main/java/org/fdroid/database/Repository.kt +++ b/libs/database/src/main/java/org/fdroid/database/Repository.kt @@ -375,9 +375,10 @@ internal data class RepositoryPreferences( /** * A reduced version of [Repository] used to pre-populate the [FDroidDatabase]. */ -public data class InitialRepository( +public data class InitialRepository @JvmOverloads constructor( val name: String, val address: String, + val mirrors: List = emptyList(), val description: String, val certificate: String, val version: Long, diff --git a/libs/database/src/main/java/org/fdroid/database/RepositoryDao.kt b/libs/database/src/main/java/org/fdroid/database/RepositoryDao.kt index 5b85cb51a..d5106a8c6 100644 --- a/libs/database/src/main/java/org/fdroid/database/RepositoryDao.kt +++ b/libs/database/src/main/java/org/fdroid/database/RepositoryDao.kt @@ -140,6 +140,7 @@ internal interface RepositoryDaoInt : RepositoryDao { enabled = initialRepo.enabled, ) insert(repositoryPreferences) + insertMirrors(initialRepo.mirrors.map { it -> Mirror(repoId, it, null) }) return repoId }