Merge pull request #105 from jellyfin/create-pull-request/patch
[ci] SwiftLint
This commit is contained in:
commit
470e42a376
|
@ -178,30 +178,30 @@ class EmailHelper: NSObject, MFMailComposeViewControllerDelegate {
|
||||||
private override init() {
|
private override init() {
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
func sendLogs(logURL: URL){
|
func sendLogs(logURL: URL) {
|
||||||
if !MFMailComposeViewController.canSendMail() {
|
if !MFMailComposeViewController.canSendMail() {
|
||||||
// Utilities.showErrorBanner(title: "No mail account found", subtitle: "Please setup a mail account")
|
// Utilities.showErrorBanner(title: "No mail account found", subtitle: "Please setup a mail account")
|
||||||
return //EXIT
|
return // EXIT
|
||||||
}
|
}
|
||||||
|
|
||||||
let picker = MFMailComposeViewController()
|
let picker = MFMailComposeViewController()
|
||||||
|
|
||||||
let fileManager = FileManager()
|
let fileManager = FileManager()
|
||||||
let data = fileManager.contents(atPath: logURL.path)
|
let data = fileManager.contents(atPath: logURL.path)
|
||||||
|
|
||||||
picker.setSubject("SwiftFin Shake Report")
|
picker.setSubject("SwiftFin Shake Report")
|
||||||
picker.setToRecipients(["Aiden Vigue <acvigue@me.com>"])
|
picker.setToRecipients(["Aiden Vigue <acvigue@me.com>"])
|
||||||
picker.addAttachmentData(data!, mimeType: "text/plain", fileName: logURL.lastPathComponent)
|
picker.addAttachmentData(data!, mimeType: "text/plain", fileName: logURL.lastPathComponent)
|
||||||
picker.mailComposeDelegate = self
|
picker.mailComposeDelegate = self
|
||||||
|
|
||||||
EmailHelper.getRootViewController()?.present(picker, animated: true, completion: nil)
|
EmailHelper.getRootViewController()?.present(picker, animated: true, completion: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
|
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
|
||||||
EmailHelper.getRootViewController()?.dismiss(animated: true, completion: nil)
|
EmailHelper.getRootViewController()?.dismiss(animated: true, completion: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
static func getRootViewController() -> UIViewController? {
|
static func getRootViewController() -> UIViewController? {
|
||||||
UIApplication.shared.windows.first?.rootViewController
|
UIApplication.shared.windows.first?.rootViewController
|
||||||
}
|
}
|
||||||
|
|
|
@ -883,10 +883,10 @@ extension PlayerViewController: GCKSessionManagerListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
func sessionManager(_ sessionManager: GCKSessionManager, didEnd session: GCKCastSession, withError error: Error?) {
|
func sessionManager(_ sessionManager: GCKSessionManager, didEnd session: GCKCastSession, withError error: Error?) {
|
||||||
if(error != nil) {
|
if error != nil {
|
||||||
LogManager.shared.log.error((error! as NSError).debugDescription)
|
LogManager.shared.log.error((error! as NSError).debugDescription)
|
||||||
}
|
}
|
||||||
|
|
||||||
playerDestination = .local
|
playerDestination = .local
|
||||||
videoContentView.isHidden = false
|
videoContentView.isHidden = false
|
||||||
remoteTimeUpdateTimer?.invalidate()
|
remoteTimeUpdateTimer?.invalidate()
|
||||||
|
|
|
@ -13,30 +13,30 @@ import Puppy
|
||||||
class LogManager {
|
class LogManager {
|
||||||
static let shared = LogManager()
|
static let shared = LogManager()
|
||||||
let log = Puppy()
|
let log = Puppy()
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
let console = ConsoleLogger("me.vigue.jellyfin.ConsoleLogger")
|
let console = ConsoleLogger("me.vigue.jellyfin.ConsoleLogger")
|
||||||
let fileURL = self.getDocumentsDirectory().appendingPathComponent("logs.txt")
|
let fileURL = self.getDocumentsDirectory().appendingPathComponent("logs.txt")
|
||||||
let FM = FileManager()
|
let FM = FileManager()
|
||||||
_ = try? FM.removeItem(at: fileURL)
|
_ = try? FM.removeItem(at: fileURL)
|
||||||
|
|
||||||
do {
|
do {
|
||||||
let file = try FileLogger("me.vigue.jellyfin", fileURL: fileURL)
|
let file = try FileLogger("me.vigue.jellyfin", fileURL: fileURL)
|
||||||
file.format = LogFormatter();
|
file.format = LogFormatter()
|
||||||
log.add(file, withLevel: .debug)
|
log.add(file, withLevel: .debug)
|
||||||
} catch(let err) {
|
} catch let err {
|
||||||
log.error("Couldn't initialize file logger.")
|
log.error("Couldn't initialize file logger.")
|
||||||
print(err);
|
print(err)
|
||||||
}
|
}
|
||||||
console.format = LogFormatter();
|
console.format = LogFormatter()
|
||||||
log.add(console, withLevel: .debug)
|
log.add(console, withLevel: .debug)
|
||||||
log.info("Logger initialized.")
|
log.info("Logger initialized.")
|
||||||
}
|
}
|
||||||
|
|
||||||
func logFileURL() -> URL {
|
func logFileURL() -> URL {
|
||||||
return self.getDocumentsDirectory().appendingPathComponent("logs.txt")
|
return self.getDocumentsDirectory().appendingPathComponent("logs.txt")
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDocumentsDirectory() -> URL {
|
func getDocumentsDirectory() -> URL {
|
||||||
// find all possible documents directories for this user
|
// find all possible documents directories for this user
|
||||||
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
|
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
|
||||||
|
@ -48,7 +48,7 @@ class LogManager {
|
||||||
|
|
||||||
class LogFormatter: LogFormattable {
|
class LogFormatter: LogFormattable {
|
||||||
func formatMessage(_ level: LogLevel, message: String, tag: String, function: String,
|
func formatMessage(_ level: LogLevel, message: String, tag: String, function: String,
|
||||||
file: String, line: UInt, swiftLogInfo: [String : String],
|
file: String, line: UInt, swiftLogInfo: [String: String],
|
||||||
label: String, date: Date, threadID: UInt64) -> String {
|
label: String, date: Date, threadID: UInt64) -> String {
|
||||||
let file = shortFileName(file).replacingOccurrences(of: ".swift", with: "")
|
let file = shortFileName(file).replacingOccurrences(of: ".swift", with: "")
|
||||||
return " [\(level.emoji) \(level)] \(file)#\(line):\(function) \(message)"
|
return " [\(level.emoji) \(level)] \(file)#\(line):\(function) \(message)"
|
||||||
|
|
|
@ -65,7 +65,7 @@ final class SessionManager {
|
||||||
header.append("Device=\"\(deviceName)\", ")
|
header.append("Device=\"\(deviceName)\", ")
|
||||||
|
|
||||||
if devID == nil {
|
if devID == nil {
|
||||||
LogManager.shared.log.info("Generating device ID...");
|
LogManager.shared.log.info("Generating device ID...")
|
||||||
#if os(tvOS)
|
#if os(tvOS)
|
||||||
header.append("DeviceId=\"tvOS_\(UIDevice.current.identifierForVendor!.uuidString)_\(String(Date().timeIntervalSince1970))\", ")
|
header.append("DeviceId=\"tvOS_\(UIDevice.current.identifierForVendor!.uuidString)_\(String(Date().timeIntervalSince1970))\", ")
|
||||||
deviceID = "tvOS_\(UIDevice.current.identifierForVendor!.uuidString)_\(String(Date().timeIntervalSince1970))"
|
deviceID = "tvOS_\(UIDevice.current.identifierForVendor!.uuidString)_\(String(Date().timeIntervalSince1970))"
|
||||||
|
@ -74,7 +74,7 @@ final class SessionManager {
|
||||||
deviceID = "iOS_\(UIDevice.current.identifierForVendor!.uuidString)_\(String(Date().timeIntervalSince1970))"
|
deviceID = "iOS_\(UIDevice.current.identifierForVendor!.uuidString)_\(String(Date().timeIntervalSince1970))"
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
LogManager.shared.log.info("Using stored device ID...");
|
LogManager.shared.log.info("Using stored device ID...")
|
||||||
header.append("DeviceId=\"\(devID!)\", ")
|
header.append("DeviceId=\"\(devID!)\", ")
|
||||||
deviceID = devID!
|
deviceID = devID!
|
||||||
}
|
}
|
||||||
|
@ -116,7 +116,6 @@ final class SessionManager {
|
||||||
|
|
||||||
func loginWithSavedSession(user: SignedInUser) {
|
func loginWithSavedSession(user: SignedInUser) {
|
||||||
let accessToken = getAuthToken(userID: user.user_id!)
|
let accessToken = getAuthToken(userID: user.user_id!)
|
||||||
|
|
||||||
|
|
||||||
self.user = user
|
self.user = user
|
||||||
generateAuthHeader(with: accessToken, deviceID: user.device_uuid)
|
generateAuthHeader(with: accessToken, deviceID: user.device_uuid)
|
||||||
|
|
|
@ -70,7 +70,7 @@ final class ConnectToServerViewModel: ViewModel {
|
||||||
.sink(receiveCompletion: { result in
|
.sink(receiveCompletion: { result in
|
||||||
switch result {
|
switch result {
|
||||||
case let .failure(error):
|
case let .failure(error):
|
||||||
let err = error as NSError;
|
let err = error as NSError
|
||||||
LogManager.shared.log.critical("Error connecting to server at \"\(self.uriSubject.value)\"", tag: "connectToServer")
|
LogManager.shared.log.critical("Error connecting to server at \"\(self.uriSubject.value)\"", tag: "connectToServer")
|
||||||
LogManager.shared.log.critical(err.debugDescription, tag: "login")
|
LogManager.shared.log.critical(err.debugDescription, tag: "login")
|
||||||
self.errorMessage = error.localizedDescription
|
self.errorMessage = error.localizedDescription
|
||||||
|
@ -86,7 +86,7 @@ final class ConnectToServerViewModel: ViewModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
func connectToServer(at url: URL) {
|
func connectToServer(at url: URL) {
|
||||||
uriSubject.send(url.absoluteString);
|
uriSubject.send(url.absoluteString)
|
||||||
self.connectToServer()
|
self.connectToServer()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,7 +123,7 @@ final class ConnectToServerViewModel: ViewModel {
|
||||||
LogManager.shared.log.critical("User provided invalid credentials, server returned a 401 error.", tag: "login")
|
LogManager.shared.log.critical("User provided invalid credentials, server returned a 401 error.", tag: "login")
|
||||||
self.errorMessage = "Invalid credentials"
|
self.errorMessage = "Invalid credentials"
|
||||||
case .error:
|
case .error:
|
||||||
let err = error as NSError;
|
let err = error as NSError
|
||||||
LogManager.shared.log.critical("Error logging in to server at \"\(self.uriSubject.value)\"", tag: "login")
|
LogManager.shared.log.critical("Error logging in to server at \"\(self.uriSubject.value)\"", tag: "login")
|
||||||
LogManager.shared.log.critical(err.debugDescription, tag: "login")
|
LogManager.shared.log.critical(err.debugDescription, tag: "login")
|
||||||
self.errorMessage = err.localizedDescription
|
self.errorMessage = err.localizedDescription
|
||||||
|
|
|
@ -68,10 +68,10 @@ final class LibraryViewModel: ViewModel {
|
||||||
genreIDs = filters.withGenres.compactMap(\.id)
|
genreIDs = filters.withGenres.compactMap(\.id)
|
||||||
}
|
}
|
||||||
let sortBy = filters.sortBy.map(\.rawValue)
|
let sortBy = filters.sortBy.map(\.rawValue)
|
||||||
let shouldBeRecursive: Bool = filters.filters.contains(.isFavorite) || personIDs != [] || studioIDs != [] || genreIDs != [];
|
let shouldBeRecursive: Bool = filters.filters.contains(.isFavorite) || personIDs != [] || studioIDs != [] || genreIDs != []
|
||||||
ItemsAPI.getItemsByUserId(userId: SessionManager.current.user.user_id!, startIndex: currentPage * 100, limit: 100, recursive: shouldBeRecursive,
|
ItemsAPI.getItemsByUserId(userId: SessionManager.current.user.user_id!, startIndex: currentPage * 100, limit: 100, recursive: shouldBeRecursive,
|
||||||
searchTerm: nil, sortOrder: filters.sortOrder, parentId: parentID,
|
searchTerm: nil, sortOrder: filters.sortOrder, parentId: parentID,
|
||||||
fields: [.primaryImageAspectRatio, .seriesPrimaryImage, .seasonUserData, .overview, .genres, .people], includeItemTypes: filters.filters.contains(.isFavorite) ? ["Movie","Series","Season","Episode"] : ["Movie", "Series"],
|
fields: [.primaryImageAspectRatio, .seriesPrimaryImage, .seasonUserData, .overview, .genres, .people], includeItemTypes: filters.filters.contains(.isFavorite) ? ["Movie", "Series", "Season", "Episode"] : ["Movie", "Series"],
|
||||||
filters: filters.filters, sortBy: sortBy, tags: filters.tags,
|
filters: filters.filters, sortBy: sortBy, tags: filters.tags,
|
||||||
enableUserData: true, personIds: personIDs, studioIds: studioIDs, genreIds: genreIDs, enableImages: true)
|
enableUserData: true, personIds: personIDs, studioIds: studioIDs, genreIds: genreIDs, enableImages: true)
|
||||||
.trackActivity(loading)
|
.trackActivity(loading)
|
||||||
|
@ -98,10 +98,10 @@ final class LibraryViewModel: ViewModel {
|
||||||
genreIDs = filters.withGenres.compactMap(\.id)
|
genreIDs = filters.withGenres.compactMap(\.id)
|
||||||
}
|
}
|
||||||
let sortBy = filters.sortBy.map(\.rawValue)
|
let sortBy = filters.sortBy.map(\.rawValue)
|
||||||
let shouldBeRecursive: Bool = filters.filters.contains(.isFavorite) || personIDs != [] || studioIDs != [] || genreIDs != [];
|
let shouldBeRecursive: Bool = filters.filters.contains(.isFavorite) || personIDs != [] || studioIDs != [] || genreIDs != []
|
||||||
ItemsAPI.getItemsByUserId(userId: SessionManager.current.user.user_id!, startIndex: currentPage * 100, limit: 100, recursive: shouldBeRecursive,
|
ItemsAPI.getItemsByUserId(userId: SessionManager.current.user.user_id!, startIndex: currentPage * 100, limit: 100, recursive: shouldBeRecursive,
|
||||||
searchTerm: nil, sortOrder: filters.sortOrder, parentId: parentID,
|
searchTerm: nil, sortOrder: filters.sortOrder, parentId: parentID,
|
||||||
fields: [.primaryImageAspectRatio, .seriesPrimaryImage, .seasonUserData, .overview, .genres, .people], includeItemTypes: filters.filters.contains(.isFavorite) ? ["Movie","Series","Season","Episode"] : ["Movie", "Series"],
|
fields: [.primaryImageAspectRatio, .seriesPrimaryImage, .seasonUserData, .overview, .genres, .people], includeItemTypes: filters.filters.contains(.isFavorite) ? ["Movie", "Series", "Season", "Episode"] : ["Movie", "Series"],
|
||||||
filters: filters.filters, sortBy: sortBy, tags: filters.tags,
|
filters: filters.filters, sortBy: sortBy, tags: filters.tags,
|
||||||
enableUserData: true, personIds: personIDs, studioIds: studioIDs, genreIds: genreIDs, enableImages: true)
|
enableUserData: true, personIds: personIDs, studioIds: studioIDs, genreIds: genreIDs, enableImages: true)
|
||||||
.sink(receiveCompletion: { [weak self] completion in
|
.sink(receiveCompletion: { [weak self] completion in
|
||||||
|
|
Loading…
Reference in New Issue