mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-09 08:09:39 +07:00
[recent files] IJPL-177560 Show recently opened files if recently opened unpinned files list has the only entry in it
GitOrigin-RevId: aa0e51c3ef0add0116ebaa5166dc437e682e99b2
This commit is contained in:
committed by
intellij-monorepo-bot
parent
837375790e
commit
5dfdcd581f
@@ -35,7 +35,7 @@ class FrontendRecentFilesModel(private val project: Project) {
|
||||
private val recentlyOpenedPinnedFilesState = MutableStateFlow(RecentFilesState())
|
||||
|
||||
fun getRecentFiles(fileKind: RecentFileKind): List<SwitcherVirtualFile> {
|
||||
val capturedModelState = chooseState(fileKind).value.entries
|
||||
val capturedModelState = chooseStateToReadFrom(fileKind).value.entries
|
||||
val filteredModel = capturedModelState.filter { fileModel ->
|
||||
val file = fileModel.virtualFile ?: return@filter true
|
||||
val excluder = RecentFilesExcluder.EP_NAME.findFirstSafe { ext ->
|
||||
@@ -60,7 +60,7 @@ class FrontendRecentFilesModel(private val project: Project) {
|
||||
|
||||
fun applyFrontendChanges(filesKind: RecentFileKind, files: List<VirtualFile>, isAdded: Boolean) {
|
||||
modelUpdateScope.launch {
|
||||
val frontendStateToUpdate = chooseState(filesKind)
|
||||
val frontendStateToUpdate = chooseStateToWriteTo(filesKind)
|
||||
val fileModels = files.map { convertVirtualFileToViewModel(it, project) }
|
||||
|
||||
frontendStateToUpdate.update { oldList ->
|
||||
@@ -95,7 +95,7 @@ class FrontendRecentFilesModel(private val project: Project) {
|
||||
}
|
||||
|
||||
private suspend fun applyChangesFromBackendToModel(change: RecentFilesEvent, targetFilesKind: RecentFileKind) {
|
||||
val targetModel = chooseState(targetFilesKind)
|
||||
val targetModel = chooseStateToWriteTo(targetFilesKind)
|
||||
when (change) {
|
||||
is RecentFilesEvent.ItemsAdded -> {
|
||||
val toAdd = change.batch.map(::convertSwitcherDtoToViewModel)
|
||||
@@ -132,13 +132,13 @@ class FrontendRecentFilesModel(private val project: Project) {
|
||||
}
|
||||
is RecentFilesEvent.UncertainChangeOccurred -> {
|
||||
LOG.debug("Updating all items in $targetFilesKind frontend model because of undetermined backend IDE state change")
|
||||
val targetState = chooseState(targetFilesKind).value.entries.mapNotNull { it.virtualFile }
|
||||
val targetState = chooseStateToWriteTo(targetFilesKind).value.entries.mapNotNull { it.virtualFile }
|
||||
FileSwitcherApi.getInstance().updateRecentFilesBackendState(createFilesUpdateRequest(targetFilesKind, targetState, project))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun chooseState(filesKind: RecentFileKind): MutableStateFlow<RecentFilesState> {
|
||||
private fun chooseStateToWriteTo(filesKind: RecentFileKind): MutableStateFlow<RecentFilesState> {
|
||||
return when (filesKind) {
|
||||
RecentFileKind.RECENTLY_EDITED -> recentlyEditedFilesState
|
||||
RecentFileKind.RECENTLY_OPENED -> recentlyOpenedFilesState
|
||||
@@ -146,6 +146,20 @@ class FrontendRecentFilesModel(private val project: Project) {
|
||||
}
|
||||
}
|
||||
|
||||
private fun chooseStateToReadFrom(filesKind: RecentFileKind): MutableStateFlow<RecentFilesState> {
|
||||
return when (filesKind) {
|
||||
RecentFileKind.RECENTLY_EDITED -> recentlyEditedFilesState
|
||||
RecentFileKind.RECENTLY_OPENED -> recentlyOpenedFilesState
|
||||
RecentFileKind.RECENTLY_OPENED_UNPINNED -> {
|
||||
// If there is only one opened file, users will benefit more from the entire _recently opened_ files list
|
||||
if (recentlyOpenedPinnedFilesState.value.entries.size > 1)
|
||||
recentlyOpenedPinnedFilesState
|
||||
else
|
||||
recentlyOpenedFilesState
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun convertSwitcherDtoToViewModel(rpcDto: SwitcherRpcDto): SwitcherVirtualFile {
|
||||
return when (rpcDto) {
|
||||
is SwitcherRpcDto.File -> SwitcherVirtualFile(rpcDto)
|
||||
|
||||
Reference in New Issue
Block a user