From 5b78933de774fcf9291ba40e74dd928925699b0c Mon Sep 17 00:00:00 2001 From: Shav Kinderlehrer Date: Fri, 22 Dec 2023 17:14:21 -0500 Subject: Start implementing dashboard view + async image loader --- Jel/Views/Dashboard/DashBoardView.swift | 36 ------------------- Jel/Views/Dashboard/DashboardView.swift | 37 +++++++++++++++++++ Jel/Views/Dashboard/Library/LibraryIconView.swift | 22 ++++++++++-- Jel/Views/Dashboard/Library/LibraryView.swift | 44 +++++++++++++++++++++++ 4 files changed, 100 insertions(+), 39 deletions(-) delete mode 100644 Jel/Views/Dashboard/DashBoardView.swift create mode 100644 Jel/Views/Dashboard/DashboardView.swift create mode 100644 Jel/Views/Dashboard/Library/LibraryView.swift (limited to 'Jel/Views/Dashboard') diff --git a/Jel/Views/Dashboard/DashBoardView.swift b/Jel/Views/Dashboard/DashBoardView.swift deleted file mode 100644 index ea2003c..0000000 --- a/Jel/Views/Dashboard/DashBoardView.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// DashBoardView.swift -// Jel -// -// Created by zerocool on 12/12/23. -// - -import SwiftUI - -struct DashBoardView: View { - @State var showingSettingsSheet: Bool = false - - var body: some View { - NavigationStack { - VStack { - - } - .toolbar { - ToolbarItem { - Button { - showingSettingsSheet.toggle() - } label: { - Label("Settings", systemImage: "gear") - } - } - } - .sheet(isPresented: $showingSettingsSheet) { - SettingsView(showingSettingsView: $showingSettingsSheet) - } - } - } -} - -#Preview { - DashBoardView() -} diff --git a/Jel/Views/Dashboard/DashboardView.swift b/Jel/Views/Dashboard/DashboardView.swift new file mode 100644 index 0000000..2658180 --- /dev/null +++ b/Jel/Views/Dashboard/DashboardView.swift @@ -0,0 +1,37 @@ +// +// DashboardView.swift +// Jel +// +// Created by zerocool on 12/12/23. +// + +import SwiftUI +import JellyfinKit + +struct DashboardView: View { + @State var showingSettingsSheet: Bool = false + + var body: some View { + NavigationStack { + VStack { + LibraryView() + } + .toolbar { + ToolbarItem { + Button { + showingSettingsSheet.toggle() + } label: { + Label("Settings", systemImage: "gear") + } + } + } + .sheet(isPresented: $showingSettingsSheet) { + SettingsView(showingSettingsView: $showingSettingsSheet) + } + } + } +} + +#Preview { + DashboardView() +} diff --git a/Jel/Views/Dashboard/Library/LibraryIconView.swift b/Jel/Views/Dashboard/Library/LibraryIconView.swift index 4f6c711..c4dbde0 100644 --- a/Jel/Views/Dashboard/Library/LibraryIconView.swift +++ b/Jel/Views/Dashboard/Library/LibraryIconView.swift @@ -6,13 +6,29 @@ // import SwiftUI +import JellyfinKit +import BlurHashKit struct LibraryIconView: View { - var body: some View { - Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) + @EnvironmentObject var jellyfinClient: JellyfinClientController + + @State var library: BaseItemDto + @State var loadingImage: Bool = true + + @State var loadedImageBinaryData: Data? + + var body: some View { + VStack { + AsyncImageView(imageId: library.id ?? "", + blurhash: library.imageBlurHashes?.primary?[library.imageTags?["Primary"] ?? ""] ?? "", + imageType: "Primary") + + Text(library.name ?? "Unknown") + .font(.subheadline) } + } } #Preview { - LibraryIconView() + LibraryIconView(library: BaseItemDto()) } diff --git a/Jel/Views/Dashboard/Library/LibraryView.swift b/Jel/Views/Dashboard/Library/LibraryView.swift new file mode 100644 index 0000000..39ca6ba --- /dev/null +++ b/Jel/Views/Dashboard/Library/LibraryView.swift @@ -0,0 +1,44 @@ +// +// LibraryView.swift +// Jel +// +// Created by zerocool on 12/15/23. +// + +import SwiftUI +import JellyfinKit + +struct LibraryView: View { + @EnvironmentObject var jellyfinClient: JellyfinClientController + + @StateObject var authState: AuthStateController = AuthStateController.shared + + @State var libraries: [BaseItemDto] = [] + var body: some View { + ScrollView(.horizontal, showsIndicators: false) { + LazyHStack { + ForEach(libraries) {library in + if library.collectionType == "movies" || library.collectionType == "tvshows" { + LibraryIconView(library: library) + } + } + } + } + .onAppear { + Task { + do { + let request = Paths.getUserViews(userID: authState.userId ?? "") + if let results = try await jellyfinClient.send(request).value.items { + libraries = results + } + } catch { + print(error) + } + } + } + } +} + +//#Preview { +// LibraryView() +//} -- cgit v1.2.3