]> git.r.bdr.sh - rbdr/captura/blob - Captura/Intents/GetRemoteCaptures.swift
b0668014a8995ce0da40b30bb2a7ac40a3907bf2
[rbdr/captura] / Captura / Intents / GetRemoteCaptures.swift
1 /*
2 Copyright (C) 2024 Rubén Beltrán del Río
3
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see https://captura.tranquil.systems.
16 */
17 import AppIntents
18 import CoreData
19
20 struct GetRemoteCaptures: AppIntent {
21 static var title: LocalizedStringResource = "Get remote captures"
22
23 static var description =
24 IntentDescription("Return a list of remote captures")
25
26 @Parameter(title: "Count") var count: Int?
27
28 static var parameterSummary: some ParameterSummary {
29 Summary("Get \(\.$count) latest captures.")
30 }
31
32 func perform() async throws -> some IntentResult & ReturnsValue {
33 let viewContext = PersistenceController.shared.container.viewContext
34 let fetchRequest = NSFetchRequest<CapturaRemoteFile>(entityName: "CapturaRemoteFile")
35 fetchRequest.fetchLimit = min(10, max(1, count ?? 5))
36 fetchRequest.sortDescriptors = [NSSortDescriptor(key: "timestamp", ascending: false)]
37
38 let results = await viewContext.perform {
39 return try? viewContext.fetch(fetchRequest)
40 }
41
42 let finalResults = results?.compactMap { URL(string: $0.url ?? "") } ?? []
43 return .result(value: finalResults)
44 }
45 }