diff --git a/Sources/YanDisk/Core/AppStore.swift b/Sources/YanDisk/Core/AppStore.swift index 155d6d8..622f748 100644 --- a/Sources/YanDisk/Core/AppStore.swift +++ b/Sources/YanDisk/Core/AppStore.swift @@ -19,7 +19,7 @@ final class AppStore { var title: String { switch self { case .disk: return "YanDisk" - case .files: return "Доступные мне" + case .files: return "Общий доступ" case .recents: return "Недавние" case .favorites: return "Избранное" case .screenshots: return "Скриншоты" @@ -251,18 +251,30 @@ final class AppStore { // MARK: - Shared with me (field `share`, is_owned == false) + /// Сначала показываем общие папки корня (быстро), затем углубляем скан в фоне. func loadPublicItems() async { guard let api else { return } isLoading = true defer { isLoading = false } do { - let shared = try await api.sharedWithMe() - publicItems = shared.sorted { a, b in - a.displayName.localizedCaseInsensitiveCompare(b.displayName) == .orderedAscending - } + let shallow = try await api.sharedWithMe(maxDepth: 0) + publicItems = Self.sorted(shallow) errorMessage = nil } catch { handleError(error) + return + } + // Глубокий скан — в фоне, чтобы не блокировать вкладку. + Task { [weak self] in + guard let full = try? await api.sharedWithMe(maxDepth: 3) else { return } + guard let self, self.isAuthorized else { return } + self.publicItems = Self.sorted(full) + } + } + + private static func sorted(_ items: [DiskResource]) -> [DiskResource] { + items.sorted { + $0.displayName.localizedCaseInsensitiveCompare($1.displayName) == .orderedAscending } } diff --git a/Sources/YanDisk/UI/MainSplitView.swift b/Sources/YanDisk/UI/MainSplitView.swift index a4c940f..a93df3b 100644 --- a/Sources/YanDisk/UI/MainSplitView.swift +++ b/Sources/YanDisk/UI/MainSplitView.swift @@ -171,7 +171,7 @@ struct MainSplitView: View { case .recents: return "Недавние" case .favorites: return "Избранное" case .screenshots: return "Скриншоты" - case .files: return "Доступные мне" + case .files: return "Общий доступ" default: if store.currentPath == "/" { return "YanDisk" } return store.currentPath