mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-20 13:23:59 +00:00
[ios] Improved handling of non-default mail clients
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
This commit is contained in:
committed by
Konstantin Pastbin
parent
090b7c21fc
commit
ae1c975627
@@ -42,65 +42,20 @@ final class MailComposer: NSObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static func sendEmailWith(subject: String, body: String, toRecipients recipients: [String], attachmentFileURL: URL? = nil) {
|
private static func sendEmailWith(subject: String, body: String, toRecipients recipients: [String], attachmentFileURL: URL? = nil) {
|
||||||
// If the attachment file path is provided, the default mail composer should be used.
|
// If the attachment file path is provided, the default mail composer should be used, if possible.
|
||||||
if let attachmentFileURL {
|
if let attachmentFileURL, MWMMailViewController.canSendMail(), let attachmentData = try? Data(contentsOf: attachmentFileURL) {
|
||||||
if MWMMailViewController.canSendMail(), let attachmentData = try? Data(contentsOf: attachmentFileURL) {
|
let mailViewController = MWMMailViewController()
|
||||||
let mailViewController = MWMMailViewController()
|
mailViewController.mailComposeDelegate = mailComposer
|
||||||
mailViewController.mailComposeDelegate = mailComposer
|
mailViewController.setSubject(subject)
|
||||||
mailViewController.setSubject(subject)
|
mailViewController.setMessageBody(body, isHTML:false)
|
||||||
mailViewController.setMessageBody(body, isHTML:false)
|
mailViewController.setToRecipients(recipients)
|
||||||
mailViewController.setToRecipients(recipients)
|
mailViewController.addAttachmentData(attachmentData, mimeType: "application/zip", fileName: attachmentFileURL.lastPathComponent)
|
||||||
mailViewController.addAttachmentData(attachmentData, mimeType: "application/zip", fileName: attachmentFileURL.lastPathComponent)
|
topViewController.present(mailViewController, animated: true, completion:nil)
|
||||||
topViewController.present(mailViewController, animated: true, completion:nil)
|
} else if !openDefaultMailApp(subject: subject, body: body, recipients: recipients) {
|
||||||
} else {
|
|
||||||
showMailComposingAlert(recipients: recipients)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Before iOS 14, try to open alternate email apps first, assuming that if users installed them, they're using them.
|
|
||||||
let os = ProcessInfo().operatingSystemVersion
|
|
||||||
if (os.majorVersion < 14 && (openGmail(subject: subject, body: body, recipients: recipients) ||
|
|
||||||
openOutlook(subject: subject, body: body, recipients: recipients))) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// From iOS 14, it is possible to change the default mail app, and mailto should open a default mail app.
|
|
||||||
if !openDefaultMailApp(subject: subject, body: body, recipients: recipients) {
|
|
||||||
showMailComposingAlert(recipients: recipients)
|
showMailComposingAlert(recipients: recipients)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static func openOutlook(subject: String, body: String, recipients: [String]) -> Bool {
|
|
||||||
var components = URLComponents(string: "ms-outlook://compose")!
|
|
||||||
components.queryItems = [
|
|
||||||
URLQueryItem(name: "to", value: recipients.joined(separator: ";")),
|
|
||||||
URLQueryItem(name: "subject", value: subject),
|
|
||||||
URLQueryItem(name: "body", value: body),
|
|
||||||
]
|
|
||||||
|
|
||||||
if let url = components.url, UIApplication.shared.canOpenURL(url) {
|
|
||||||
UIApplication.shared.open(url)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
private static func openGmail(subject: String, body: String, recipients: [String]) -> Bool {
|
|
||||||
var components = URLComponents(string: "googlegmail://co")!
|
|
||||||
components.queryItems = [
|
|
||||||
URLQueryItem(name: "to", value: recipients.joined(separator: ";")),
|
|
||||||
URLQueryItem(name: "subject", value: subject),
|
|
||||||
URLQueryItem(name: "body", value: body),
|
|
||||||
]
|
|
||||||
|
|
||||||
if let url = components.url, UIApplication.shared.canOpenURL(url) {
|
|
||||||
UIApplication.shared.open(url)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
private static func openDefaultMailApp(subject: String, body: String, recipients: [String]) -> Bool {
|
private static func openDefaultMailApp(subject: String, body: String, recipients: [String]) -> Bool {
|
||||||
var components = URLComponents(string: "mailto:\(recipients.joined(separator: ";"))")
|
var components = URLComponents(string: "mailto:\(recipients.joined(separator: ";"))")
|
||||||
components?.queryItems = [
|
components?.queryItems = [
|
||||||
|
|||||||
Reference in New Issue
Block a user