IntentHandler.swift 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. //
  2. // IntentHandler.swift
  3. // WidgetDashboardIntentHandler
  4. //
  5. // Created by Marino Faggiana on 08/10/22.
  6. // Copyright © 2022 Marino Faggiana. All rights reserved.
  7. //
  8. import Intents
  9. import RealmSwift
  10. class IntentHandler: INExtension, DashboardIntentHandling {
  11. // Application
  12. func provideApplicationsOptionsCollection(for intent: DashboardIntent, with completion: @escaping (INObjectCollection<Applications>?, Error?) -> Void) {
  13. var applications: [Applications] = []
  14. guard let account = NCManageDatabase.shared.getActiveAccount() else {
  15. return completion(nil, nil)
  16. }
  17. let results = NCManageDatabase.shared.getDashboardWidgetApplications(account: account.account)
  18. for result in results {
  19. let application = Applications(identifier: result.id, display: result.title)
  20. applications.append(application)
  21. }
  22. completion(INObjectCollection(items: applications), nil)
  23. }
  24. func defaultApplications(for intent: DashboardIntent) -> Applications? {
  25. guard let account = NCManageDatabase.shared.getActiveAccount() else {
  26. return nil
  27. }
  28. if let result = NCManageDatabase.shared.getDashboardWidgetApplications(account: account.account).first {
  29. return Applications(identifier: result.id, display: result.title)
  30. }
  31. return nil
  32. }
  33. // Account
  34. func provideAccountsOptionsCollection(for intent: DashboardIntent, with completion: @escaping (INObjectCollection<Accounts>?, Error?) -> Void) {
  35. var accounts: [Accounts] = []
  36. let results = NCManageDatabase.shared.getAllAccount()
  37. if results.isEmpty {
  38. return completion(nil, nil)
  39. } else if results.count == 1 {
  40. accounts.append(Accounts(identifier: "active", display: NSLocalizedString("_account_active_", comment: "")))
  41. return completion(INObjectCollection(items: accounts), nil)
  42. }
  43. for result in results {
  44. let display = (result.alias.isEmpty) ? result.account : result.alias
  45. let account = Accounts(identifier: result.account, display: display)
  46. accounts.append(account)
  47. }
  48. completion(INObjectCollection(items: accounts), nil)
  49. }
  50. func defaultAccounts(for intent: DashboardIntent) -> Accounts? {
  51. if NCManageDatabase.shared.getActiveAccount() == nil {
  52. return nil
  53. } else {
  54. return Accounts(identifier: "active", display: NSLocalizedString("_account_active_", comment: ""))
  55. }
  56. }
  57. }