element-ios/Riot/Managers/RoomMessageLinkParser/RoomMessageURLParser.swift

57 lines
1.3 KiB
Swift

/*
Copyright 2019-2024 New Vector Ltd.
SPDX-License-Identifier: AGPL-3.0-only
Please see LICENSE in the repository root for full details.
*/
import Foundation
@objc enum RoomMessageURLType: Int {
case appleDataDetector
case http
case dummy
case unknown
}
/// URL parser for room messages.
@objcMembers
final class RoomMessageURLParser: NSObject {
// MARK: - Constants
private enum Scheme {
static let appleDataDetector = "x-apple-data-detectors"
static let http = "http"
static let https = "https"
}
private enum Constants {
static let dummyURL = "#"
}
// MARK: - Public
func parseURL(_ url: URL) -> RoomMessageURLType {
let roomMessageLink: RoomMessageURLType
if let scheme = url.scheme?.lowercased() {
switch scheme {
case Scheme.appleDataDetector:
roomMessageLink = .appleDataDetector
case Scheme.http, Scheme.https:
roomMessageLink = .http
default:
roomMessageLink = .unknown
}
} else if url.absoluteString == Constants.dummyURL {
roomMessageLink = .dummy
} else {
roomMessageLink = .unknown
}
return roomMessageLink
}
}