Grundcode AudiobookshelfClient
This commit is contained in:
64
LibraryView.swift
Normal file
64
LibraryView.swift
Normal file
@@ -0,0 +1,64 @@
|
||||
import SwiftUI
|
||||
|
||||
struct LibraryView: View {
|
||||
@ObservedObject var authManager: AuthManager
|
||||
@State private var books: [AudiobookItem] = []
|
||||
@State private var isLoading = true
|
||||
@State private var errorMessage = ""
|
||||
|
||||
var body: some View {
|
||||
NavigationView {
|
||||
Group {
|
||||
if isLoading {
|
||||
ProgressView("Lädt Bibliothek...")
|
||||
} else if !errorMessage.isEmpty {
|
||||
Text(errorMessage).foregroundColor(.red)
|
||||
} else {
|
||||
ScrollView {
|
||||
LazyVGrid(columns: [GridItem(.adaptive(minimum: 150))], spacing: 16) {
|
||||
ForEach(books) { book in
|
||||
BookCard(book: book, authManager: authManager)
|
||||
}
|
||||
}
|
||||
.padding()
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationTitle("Meine Bibliothek")
|
||||
.toolbar {
|
||||
Button("Logout") {
|
||||
authManager.logout()
|
||||
}
|
||||
}
|
||||
}
|
||||
.onAppear { loadBooks() }
|
||||
}
|
||||
|
||||
func loadBooks() {
|
||||
guard let serverURL = authManager.serverURL,
|
||||
let token = authManager.token else { return }
|
||||
|
||||
// Erst Libraries laden, dann Bücher
|
||||
let url = URL(string: "\(serverURL)/api/libraries")!
|
||||
var request = URLRequest(url: url)
|
||||
request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
|
||||
|
||||
URLSession.shared.dataTask(with: request) { data, _, error in
|
||||
guard let data = data else { return }
|
||||
if let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
|
||||
let libraries = json["libraries"] as? [[String: Any]],
|
||||
let firstLib = libraries.first,
|
||||
let libId = firstLib["id"] as? String {
|
||||
loadBooksFromLibrary(libId: libId, serverURL: serverURL, token: token)
|
||||
}
|
||||
}.resume()
|
||||
}
|
||||
|
||||
func loadBooksFromLibrary(libId: String, serverURL: String, token: String) {
|
||||
let url = URL(string: "\(serverURL)/api/libraries/\(libId)/items")!
|
||||
var request = URLRequest(url: url)
|
||||
request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
|
||||
|
||||
URLSession.shared.dataTask(with: request) { data, _, _ in
|
||||
guard let data = data else { return }
|
||||
if let json = try? JSON
|
||||
Reference in New Issue
Block a user