ClipboardPlugin.swift 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import Foundation
  2. import Capacitor
  3. @objc(ClipboardPlugin)
  4. public class ClipboardPlugin: CAPPlugin, CAPBridgedPlugin {
  5. public let identifier = "ClipboardPlugin"
  6. public let jsName = "Clipboard"
  7. public let pluginMethods: [CAPPluginMethod] = [
  8. CAPPluginMethod(name: "read", returnType: CAPPluginReturnPromise),
  9. CAPPluginMethod(name: "write", returnType: CAPPluginReturnPromise)
  10. ]
  11. private let implementation = Clipboard()
  12. @objc func read(_ call: CAPPluginCall) {
  13. let result = implementation.read()
  14. if !result.isEmpty {
  15. call.resolve(result)
  16. } else {
  17. call.reject("There is no data on the clipboard")
  18. }
  19. }
  20. @objc func write(_ call: CAPPluginCall) {
  21. var result: Result<Void, Error>
  22. if let string = call.options["string"] as? String {
  23. result = implementation.write(content: string, ofType: Clipboard.ContentType.string)
  24. } else if let urlString = call.options["url"] as? String {
  25. result = implementation.write(content: urlString, ofType: Clipboard.ContentType.url)
  26. } else if let imageBase64 = call.options["image"] as? String {
  27. result = implementation.write(content: imageBase64, ofType: Clipboard.ContentType.image)
  28. } else {
  29. call.reject("No content provided")
  30. return
  31. }
  32. switch result {
  33. case .success:
  34. call.resolve()
  35. case .failure(let err):
  36. CAPLog.print(err.localizedDescription)
  37. call.reject(err.localizedDescription)
  38. }
  39. }
  40. }