forked from nextcloud/ios
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNCSession.swift
92 lines (81 loc) · 3.03 KB
/
NCSession.swift
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
//
// NCSession.swift
// Nextcloud
//
// Created by Marino Faggiana on 02/08/24.
// Copyright © 2024 Marino Faggiana. All rights reserved.
//
// Author Marino Faggiana <[email protected]>
//
// 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 Foundation
import UIKit
public class NCSession: NSObject {
static let shared = NCSession()
public class Session {
var account: String
var urlBase: String
var user: String
var userId: String
init(account: String, urlBase: String, user: String, userId: String) {
self.account = account
self.urlBase = urlBase
self.user = user
self.userId = userId
}
}
private var sessions: ThreadSafeArray<Session> = ThreadSafeArray()
override private init() {}
/// SESSION
///
public func appendSession(account: String, urlBase: String, user: String, userId: String) {
if sessions.filter({ $0.account == account }).first != nil {
return updateSession(account, userId: userId)
}
self.sessions.append(Session(account: account, urlBase: urlBase, user: user, userId: userId))
}
public func updateSession(_ account: String, userId: String? = nil) {
guard let session = sessions.filter({ $0.account == account }).first else { return }
if let userId {
session.userId = userId
}
}
public func removeSession(account: String) {
sessions.remove(where: { $0.account == account })
}
public func getSession(account: String?) -> Session {
if let session = sessions.filter({ $0.account == account }).first {
return session
}
return Session(account: "", urlBase: "", user: "", userId: "")
}
#if !EXTENSION
public func getSession(controller: UIViewController?) -> Session {
if let account = (controller as? NCMainTabBarController)?.account {
return getSession(account: account)
} else if let tableAccount = NCManageDatabase.shared.getActiveTableAccount() {
return getSession(account: tableAccount.account)
}
return Session(account: "", urlBase: "", user: "", userId: "")
}
#endif
/// UTILITY
///
public func getFileName(urlBase: String, user: String) -> String {
let url = (URL(string: urlBase)?.host) ?? "localhost"
let fileName = user + "@" + url + ".png"
return fileName
}
}