Skip to content

Commit 050cdfe

Browse files
Programistichtonyfreeman
authored andcommitted
[Core] Extended file manager element
1 parent 0dab844 commit 050cdfe

File tree

7 files changed

+55
-37
lines changed

7 files changed

+55
-37
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import Peripheral
2+
3+
public struct ExtendedElement: Equatable, Identifiable {
4+
public var id: String { path.string }
5+
6+
public let path: Path
7+
public let type: Element
8+
9+
public var name: String {
10+
type.name
11+
}
12+
}
13+
14+
extension ExtendedElement {
15+
init(element: Element, relativeTo path: Path) {
16+
self.path = path.appending(element.name)
17+
self.type = element
18+
}
19+
}

Flipper/Packages/Core/Sources/Model/RemoteFileManager.swift renamed to Flipper/Packages/Core/Sources/FileManager/RemoteFileManager.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@ public class RemoteFileManager: ObservableObject {
2323

2424
// MARK: Directory
2525

26-
public func list(at path: Path) async throws -> [Element] {
26+
public func list(at path: Path) async throws -> [ExtendedElement] {
2727
do {
28-
return try await storage.list(at: path)
28+
return try await storage
29+
.list(at: path)
30+
.map { .init(element: $0, relativeTo: path) }
2931
} catch {
3032
logger.error("list directory: \(error)")
3133
throw Error.unknown(.init(describing: error))

Flipper/Packages/Peripheral/Sources/RPC/Model/Storage.swift

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,10 @@ public struct StorageSpace: Equatable {
77
public var used: Int { total - free }
88
}
99

10-
public enum Element: Equatable, Identifiable {
10+
public enum Element: Equatable {
1111
case file(File)
1212
case directory(Directory)
1313

14-
public var id: String { name }
15-
1614
public var name: String {
1715
switch self {
1816
case .file(let file): return file.name

Flipper/iOS/UI/FileManager/Components/ElementRow.swift

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import Core
2-
import Peripheral
32

43
import SwiftUI
54

65
extension FileManagerView.FileManagerListing {
76
struct ElementRow: View {
8-
let element: Element
7+
let element: ExtendedElement
98
let type: DisplayType
109

1110
let onAction: () -> Void
@@ -40,10 +39,10 @@ extension FileManagerView.FileManagerListing {
4039

4140
fileprivate extension FileManagerView.FileManagerListing.ElementRow {
4241
struct Icon: View {
43-
let element: Element
42+
let element: ExtendedElement
4443

4544
private var image: Image {
46-
switch element {
45+
switch element.type {
4746
case .directory:
4847
return .init("Folder")
4948
case .file:
@@ -55,7 +54,7 @@ fileprivate extension FileManagerView.FileManagerListing.ElementRow {
5554
}
5655
}
5756

58-
init(for element: Element) {
57+
init(for element: ExtendedElement) {
5958
self.element = element
6059
}
6160

@@ -69,9 +68,9 @@ fileprivate extension FileManagerView.FileManagerListing.ElementRow {
6968
}
7069

7170
struct Title: View {
72-
let element: Element
71+
let element: ExtendedElement
7372

74-
init(for element: Element) {
73+
init(for element: ExtendedElement) {
7574
self.element = element
7675
}
7776

@@ -82,7 +81,7 @@ fileprivate extension FileManagerView.FileManagerListing.ElementRow {
8281
.foregroundColor(.primary)
8382
.lineLimit(1)
8483

85-
if case let .file(file) = element {
84+
if case let .file(file) = element.type {
8685
Text(file.size.hr)
8786
.font(.system(size: 10, weight: .medium))
8887
.foregroundColor(.black30)

Flipper/iOS/UI/FileManager/Components/FileManagerElements.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
1-
import Peripheral
1+
import Core
22

33
import SwiftUI
44

55
extension FileManagerView.FileManagerListing {
66
struct FileManagerElements: View {
7-
let elements: [Element]
7+
let elements: [ExtendedElement]
88
let displayType: DisplayType
99

10-
let onTap: (Element) -> Void
11-
let onDelete: (Element) -> Void
12-
let onAction: (Element) -> Void
10+
let onTap: (ExtendedElement) -> Void
11+
let onDelete: (ExtendedElement) -> Void
12+
let onAction: (ExtendedElement) -> Void
1313

1414
private let columns = [GridItem(.flexible()), GridItem(.flexible())]
1515

1616
var body: some View {
1717
Group {
1818
switch displayType {
1919
case .list:
20-
ForEach(elements, id: \.description) { element in
20+
ForEach(elements) { element in
2121
ElementRow(
2222
element: element,
2323
type: displayType,
@@ -36,7 +36,7 @@ extension FileManagerView.FileManagerListing {
3636
}
3737
case .grid:
3838
LazyVGrid(columns: columns, spacing: 12) {
39-
ForEach(elements, id: \.description) { element in
39+
ForEach(elements) { element in
4040
ElementRow(
4141
element: element,
4242
type: displayType,

Flipper/iOS/UI/FileManager/Components/SelectedElementSheet.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Peripheral
1+
import Core
22

33
import SwiftUI
44

@@ -7,24 +7,24 @@ extension FileManagerView.FileManagerListing {
77
@Environment(\.colorScheme) var colorScheme
88
@Environment(\.dismiss) private var dismiss
99

10-
let element: Element
10+
let element: ExtendedElement
1111

12-
let onExport: (Element) -> Void
13-
let onDelete: (Element) -> Void
12+
let onExport: (ExtendedElement) -> Void
13+
let onDelete: (ExtendedElement) -> Void
1414

1515
private var backgroundColor: Color {
1616
colorScheme == .light ? .white : .black88
1717
}
1818

1919
private var type: String {
20-
switch element {
20+
switch element.type {
2121
case .directory: "Folder"
2222
case .file: "File"
2323
}
2424
}
2525

2626
private var isDirectory: Bool {
27-
return if case .directory = element {
27+
return if case .directory = element.type {
2828
true
2929
} else {
3030
false

Flipper/iOS/UI/FileManager/FileManagerListing.swift

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ extension FileManagerView {
1212
@Environment(\.path) var navigationPath
1313
@Environment(\.dismiss) var dismiss
1414

15-
@State private var _elements: [Element] = []
15+
@State private var _elements: [ExtendedElement] = []
1616
@State private var isLoading = true
1717
@State private var error: String?
1818

1919
@State private var isFileImporterPresented = false
2020
@State private var showOptions = false
21-
@State private var selectedElement: Element?
21+
@State private var selectedElement: ExtendedElement?
2222

2323
@AppStorage(.fileManagerShowHiddenFiles)
2424
private var isHiddenFilesShow: Bool = false
@@ -37,7 +37,7 @@ extension FileManagerView {
3737
case grid
3838
}
3939

40-
var elements: [Element] {
40+
var elements: [ExtendedElement] {
4141
isHiddenFilesShow
4242
? _elements
4343
: _elements.filter { !$0.name.hasPrefix(".") }
@@ -104,9 +104,9 @@ extension FileManagerView {
104104
isHiddenFilesShow: isHiddenFilesShow
105105
)
106106
}
107-
.sheet(item: $selectedElement) { element in
107+
.sheet(item: $selectedElement) {
108108
SelectedElementSheet(
109-
element: element,
109+
element: $0,
110110
onExport: downloadFile,
111111
onDelete: deleteFile
112112
)
@@ -138,8 +138,8 @@ extension FileManagerView {
138138
}
139139
}
140140

141-
private func navigate(_ element: Element) {
142-
switch element {
141+
private func navigate(_ extended: ExtendedElement) {
142+
switch extended.type {
143143
case .directory(let directory):
144144
let nextPath = path.appending(directory.name)
145145
navigationPath.append(Destination.listing(nextPath))
@@ -165,11 +165,11 @@ extension FileManagerView {
165165
}
166166
}
167167

168-
private func downloadFile(_ element: Element) {
168+
private func downloadFile(_ extended: ExtendedElement) {
169169
isLoading = true
170170
defer { isLoading = false }
171171

172-
guard case let .file(file) = element else { return }
172+
guard case let .file(file) = extended.type else { return }
173173

174174
Task {
175175
do {
@@ -187,13 +187,13 @@ extension FileManagerView {
187187
}
188188
}
189189

190-
private func deleteFile(_ element: Element) {
190+
private func deleteFile(_ extended: ExtendedElement) {
191191
isLoading = true
192192
defer { isLoading = false }
193193

194194
Task {
195195
do {
196-
try await fileManager.delete(element, at: path)
196+
try await fileManager.delete(extended.type, at: path)
197197
await load()
198198
} catch {
199199
self.error = String(describing: error)

0 commit comments

Comments
 (0)