Skip to content

Commit 4bc7548

Browse files
Rebuild Cached Files After Rename, Git Status Label (#1866)
- Updates the rename method to get a new, cached, file instead of creating one unrelated to the rest of the tree. - Removes the temporary tab when closing a tab if the tab was the temporary tab. - Updates the git status label to use a dynamic color, so it appears white when the cell is selected.
1 parent 12a5dc9 commit 4bc7548

File tree

6 files changed

+34
-7
lines changed

6 files changed

+34
-7
lines changed

CodeEdit/Features/CEWorkspace/Models/CEWorkspaceFileManager.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import Combine
99
import Foundation
1010
import AppKit
11+
import OSLog
1112

1213
protocol CEWorkspaceFileManagerObserver: AnyObject {
1314
func fileManagerUpdated(updatedItems: Set<CEWorkspaceFile>)
@@ -38,6 +39,7 @@ protocol CEWorkspaceFileManagerObserver: AnyObject {
3839
/// ``CEWorkspaceFileManagerObserver`` protocol. Use the ``CEWorkspaceFileManager/addObserver(_:)``
3940
/// and ``CEWorkspaceFileManager/removeObserver(_:)`` to add or remove observers. Observers are kept as weak references.
4041
final class CEWorkspaceFileManager {
42+
let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "", category: "CEWorkspaceFileManager")
4143
private(set) var fileManager: FileManager
4244
private(set) var ignoredFilesAndFolders: Set<String>
4345
private(set) var flattenedFileItems: [String: CEWorkspaceFile]
@@ -220,7 +222,12 @@ final class CEWorkspaceFileManager {
220222
// TODO: Handle workspace root changing.
221223
continue
222224
case .itemCreated, .itemCloned, .itemRemoved, .itemRenamed:
223-
try? self.rebuildFiles(fromItem: parentItem)
225+
do {
226+
try self.rebuildFiles(fromItem: parentItem)
227+
} catch {
228+
// swiftlint:disable:next line_length
229+
self.logger.error("Failed to rebuild files for event: \(event.eventType.rawValue), path: \(event.path, privacy: .sensitive)")
230+
}
224231
files.insert(parentItem)
225232
}
226233
}

CodeEdit/Features/CEWorkspace/Models/DirectoryEventStream.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import Foundation
99

10-
enum FSEvent {
10+
enum FSEvent: String {
1111
case changeInDirectory
1212
case rootChanged
1313
case itemChangedOwner

CodeEdit/Features/Editor/Models/Editor.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,8 +271,9 @@ final class Editor: ObservableObject, Identifiable {
271271
/// Remove the given file from tabs.
272272
/// - Parameter file: The file to remove.
273273
func removeTab(_ file: CEWorkspaceFile) {
274-
tabs.removeAll { tab in
275-
tab.file == file
274+
tabs.removeAll(where: { tab in tab.file == file })
275+
if temporaryTab?.file == file {
276+
temporaryTab = nil
276277
}
277278
}
278279
}

CodeEdit/Features/NavigatorArea/OutlineView/StandardTableViewCell.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ class StandardTableViewCell: NSTableCellView {
8888
secondaryLabel.layer?.cornerRadius = 10.0
8989
secondaryLabel.font = .systemFont(ofSize: fontSize-2, weight: .bold)
9090
secondaryLabel.alignment = .center
91-
secondaryLabel.textColor = NSColor(Color.secondary)
91+
secondaryLabel.textColor = .secondaryLabelColor
9292
}
9393

9494
func createIcon() -> NSImageView {

CodeEdit/Features/NavigatorArea/ProjectNavigator/OutlineView/ProjectNavigatorViewController+OutlineTableViewCellDelegate.swift

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,22 @@ extension ProjectNavigatorViewController: OutlineTableViewCellDelegate {
1515
workspace?.editorManager?.editorLayout.closeAllTabs(of: file)
1616
}
1717
workspace?.workspaceFileManager?.move(file: file, to: destination)
18-
if !file.isFolder {
19-
workspace?.editorManager?.openTab(item: .init(url: destination))
18+
if let parent = file.parent {
19+
do {
20+
try workspace?.workspaceFileManager?.rebuildFiles(fromItem: parent)
21+
22+
// Grab the file connected to the rest of the cached file tree.
23+
guard let newFile = workspace?.workspaceFileManager?.getFile(
24+
destination.absoluteURL.path(percentEncoded: false)
25+
),
26+
!newFile.isFolder else {
27+
return
28+
}
29+
30+
workspace?.editorManager?.openTab(item: newFile)
31+
} catch {
32+
Self.logger.error("Failed to rebuild file item after moving: \(error)")
33+
}
2034
}
2135
}
2236

CodeEdit/Features/NavigatorArea/ProjectNavigator/OutlineView/ProjectNavigatorViewController.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,17 @@
77

88
import AppKit
99
import SwiftUI
10+
import OSLog
1011

1112
/// A `NSViewController` that handles the **ProjectNavigatorView** in the **NavigatorArea**.
1213
///
1314
/// Adds a ``outlineView`` inside a ``scrollView`` which shows the folder structure of the
1415
/// currently open project.
1516
final class ProjectNavigatorViewController: NSViewController {
17+
static let logger = Logger(
18+
subsystem: Bundle.main.bundleIdentifier ?? "",
19+
category: "ProjectNavigatorViewController"
20+
)
1621

1722
var scrollView: NSScrollView!
1823
var outlineView: NSOutlineView!

0 commit comments

Comments
 (0)