1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
//
// LockscreenData.swift
// Widget
//
// Created by Marino Faggiana on 13/10/22.
// Copyright © 2022 Marino Faggiana. All rights reserved.
//
// Author Marino Faggiana <marino.faggiana@nextcloud.com>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
import WidgetKit
import NextcloudKit
struct LockscreenData: TimelineEntry {
let date: Date
let isPlaceholder: Bool
let activity: String
let link: URL
let quotaRelative: Float
let quotaUsed: String
let quotaTotal: String
let error: Bool
}
func getLockscreenDataEntry(configuration: AccountIntent?, isPreview: Bool, family: WidgetFamily, completion: @escaping (_ entry: LockscreenData) -> Void) {
var account: tableAccount?
var quotaRelative: Float = 0
let options = NKRequestOptions(timeout: 15, queue: NKCommon.shared.backgroundQueue)
if isPreview {
return completion(LockscreenData(date: Date(), isPlaceholder: true, activity: "", link: URL(string: "https://")!, quotaRelative: 0, quotaUsed: "", quotaTotal: "", error: false))
}
let accountIdentifier: String = configuration?.accounts?.identifier ?? "active"
if accountIdentifier == "active" {
account = NCManageDatabase.shared.getActiveAccount()
} else {
account = NCManageDatabase.shared.getAccount(predicate: NSPredicate(format: "account == %@", accountIdentifier))
}
guard let account = account else {
return completion(LockscreenData(date: Date(), isPlaceholder: true, activity: "", link: URL(string: "https://")!, quotaRelative: 0, quotaUsed: "", quotaTotal: "", error: false))
}
let serverVersionMajor = NCManageDatabase.shared.getCapabilitiesServerInt(account: account.account, elements: NCElementsJSON.shared.capabilitiesVersionMajor)
if serverVersionMajor < NCGlobal.shared.nextcloudVersion25 {
completion(LockscreenData(date: Date(), isPlaceholder: false, activity: NSLocalizedString("_widget_available_nc25_", comment: ""), link: URL(string: "https://")!, quotaRelative: 0, quotaUsed: "", quotaTotal: "", error: true))
}
// NETWORKING
let password = CCUtility.getPassword(account.account)!
NKCommon.shared.setup(
account: account.account,
user: account.user,
userId: account.userId,
password: password,
urlBase: account.urlBase,
userAgent: CCUtility.getUserAgent(),
nextcloudVersion: 0,
delegate: NCNetworking.shared)
if #available(iOSApplicationExtension 16.0, *) {
if family == .accessoryCircular {
NextcloudKit.shared.getUserProfile(options: options) { _, userProfile, _, error in
if error == .success, let userProfile = userProfile, let account = NCManageDatabase.shared.setAccountUserProfile(userProfile) {
if account.quotaRelative > 0 {
quotaRelative = Float(account.quotaRelative) / 100
}
let quotaUsed: String = CCUtility.transformedSize(account.quotaUsed)
var quotaTotal: String = ""
switch account.quotaTotal {
case -1:
quotaTotal = ""
case -2:
quotaTotal = ""
case -3:
quotaTotal = ""
default:
quotaTotal = CCUtility.transformedSize(account.quotaTotal)
}
completion(LockscreenData(date: Date(), isPlaceholder: false, activity: "", link: URL(string: "https://")!, quotaRelative: quotaRelative, quotaUsed: quotaUsed, quotaTotal: quotaTotal, error: false))
} else {
completion(LockscreenData(date: Date(), isPlaceholder: false, activity: "", link: URL(string: "https://")!, quotaRelative: 0, quotaUsed: "", quotaTotal: "", error: true))
}
}
} else if family == .accessoryRectangular {
NextcloudKit.shared.getDashboardWidgetsApplication("activity", options: options) { _, results, _, error in
var activity: String = NSLocalizedString("_no_data_available_", comment: "")
var link = URL(string: "https://")!
if error == .success, let result = results?.first {
if let item = result.items?.first {
if let title = item.title { activity = title }
if let itemLink = item.link, let url = URL(string: itemLink) { link = url }
}
completion(LockscreenData(date: Date(), isPlaceholder: false, activity: activity, link: link, quotaRelative: 0, quotaUsed: "", quotaTotal: "", error: false))
} else {
completion(LockscreenData(date: Date(), isPlaceholder: false, activity: "", link: URL(string: "https://")!, quotaRelative: 0, quotaUsed: "", quotaTotal: "", error: true))
}
}
}
}
}
|