From 34815b5f9009cc1bb553066c0d9f83236d426704 Mon Sep 17 00:00:00 2001 From: asoucar Date: Tue, 22 Apr 2025 14:17:40 -0400 Subject: [PATCH] Fix duplicate folder account id Prevent duplicate account id for placeholder folder Fixes: 9056 Bring back GH actions read permission to fix daily builds workflow Add instructions to propose ADRs Refactor: move :legacy:common.feature to app-common.feature Refactor: Removed :legacy:preferences from settings.gradle as this module is no longer used & empty Add link to security hashes in README Bump actions/setup-java from 4.7.0 to 4.7.1 Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4.7.0 to 4.7.1. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/3a4f6e1af504cf6a31855fa899c6aa5355ba6c12...c5195efecf7bdfc987ee8bae7a71cb8b11521c00) --- updated-dependencies: - dependency-name: actions/setup-java dependency-version: 4.7.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Bump github/codeql-action from 3.28.14 to 3.28.15 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.28.14 to 3.28.15. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/fc7e4a0fa01c3cca5fd6a1fddec5c0740c977aa2...45775bd8235c68ba998cffa5171334d58593da47) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 3.28.15 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Bump softprops/action-gh-release from 2.2.1 to 2.2.2 Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2.2.1 to 2.2.2. - [Release notes](https://github.com/softprops/action-gh-release/releases) - [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md) - [Commits](https://github.com/softprops/action-gh-release/compare/c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda...da05d552573ad5aba039eaac05058a918a7bf631) --- updated-dependencies: - dependency-name: softprops/action-gh-release dependency-version: 2.2.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Middle ground, placeholder and counter Fixes: #9056 (+1 squashed commit) Squashed commits: [ade7fcb18] Adjust fix for testing Fixes: #9056 Formatting --- .../domain/usecase/GetDisplayTreeFolder.kt | 8 ++++--- .../usecase/GetDisplayTreeFolderTest.kt | 24 +++++++++++-------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolder.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolder.kt index 8521110d517..0fa8648b52f 100644 --- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolder.kt +++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolder.kt @@ -11,6 +11,7 @@ import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayT import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolder internal class GetDisplayTreeFolder : UseCase.GetDisplayTreeFolder { + private var placeholderCounter = 0L override fun invoke(folders: List, maxDepth: Int): DisplayTreeFolder { val unifiedFolderTreeList = folders.filterIsInstance().map { @@ -49,7 +50,7 @@ internal class GetDisplayTreeFolder : UseCase.GetDisplayTreeFolder { } } - fun buildAccountFolderTree( + private fun buildAccountFolderTree( paths: List, DisplayAccountFolder>>, parentPath: String = "", ): List { @@ -87,10 +88,11 @@ internal class GetDisplayTreeFolder : UseCase.GetDisplayTreeFolder { } private fun createPlaceholderFolder(name: String): DisplayAccountFolder { + placeholderCounter += 1 return DisplayAccountFolder( - accountId = "accountId", + accountId = "placeholder", folder = Folder( - id = 0L, + id = placeholderCounter, name = name, type = FolderType.REGULAR, isLocalOnly = false, diff --git a/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolderTest.kt b/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolderTest.kt index ddbfa8c99f4..2aee38cefa7 100644 --- a/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolderTest.kt +++ b/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolderTest.kt @@ -199,9 +199,9 @@ class GetDisplayTreeFolderTest { children = persistentListOf( DisplayTreeFolder( displayFolder = DisplayAccountFolder( - accountId = "accountId", + accountId = "placeholder", folder = Folder( - id = 0, + id = 1L, name = "(Unnamed)/(Unnamed)", type = FolderType.REGULAR, isLocalOnly = false, @@ -238,8 +238,8 @@ class GetDisplayTreeFolderTest { ), DisplayTreeFolder( displayFolder = DisplayAccountFolder( - accountId = "accountId", - folder = Folder(id = 0, name = "valid1", type = FolderType.REGULAR, isLocalOnly = false), + accountId = "placeholder", + folder = Folder(id = 2, name = "valid1", type = FolderType.REGULAR, isLocalOnly = false), isInTopGroup = true, unreadMessageCount = 0, starredMessageCount = 0, @@ -250,9 +250,9 @@ class GetDisplayTreeFolderTest { children = persistentListOf( DisplayTreeFolder( displayFolder = DisplayAccountFolder( - accountId = "accountId", + accountId = "placeholder", folder = Folder( - id = 0, + id = 3L, name = "valid1/(Unnamed)", type = FolderType.REGULAR, isLocalOnly = false, @@ -321,7 +321,8 @@ class GetDisplayTreeFolderTest { children = persistentListOf( createDisplayTreeFolder( displayFolder = createDisplayAccountFolder( - folderId = 0L, + accountId = "placeholder", + folderId = 1L, folderName = "folderLevel1", unreadMessageCount = 0, starredMessageCount = 0, @@ -379,7 +380,8 @@ class GetDisplayTreeFolderTest { children = persistentListOf( createDisplayTreeFolder( displayFolder = createDisplayAccountFolder( - folderId = 0, + accountId = "placeholder", + folderId = 1, folderName = "level1", unreadMessageCount = 0, starredMessageCount = 0, @@ -390,7 +392,8 @@ class GetDisplayTreeFolderTest { children = persistentListOf( createDisplayTreeFolder( displayFolder = createDisplayAccountFolder( - folderId = 0, + accountId = "placeholder", + folderId = 2L, folderName = "level1/level2", unreadMessageCount = 0, starredMessageCount = 0, @@ -427,9 +430,10 @@ class GetDisplayTreeFolderTest { folderName: String, unreadMessageCount: Int, starredMessageCount: Int, + accountId: String = "accountId", ): DisplayAccountFolder { return DisplayAccountFolder( - accountId = "accountId", + accountId = accountId, folder = Folder( id = folderId, name = folderName,