mirror of
https://github.com/ichmagmaus111/ghostgram.git
synced 2026-08-23 06:17:17 +02:00
Update Ghostgram features
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
import SensitiveContentAnalysis
|
||||
import SwiftSignalKit
|
||||
|
||||
public enum ContentAnalysisError: Error {
|
||||
case generic(_ message: String)
|
||||
}
|
||||
|
||||
public enum ContentAnalysisMediaType {
|
||||
case image
|
||||
case video
|
||||
}
|
||||
|
||||
public func canAnalyzeMedia() -> Bool {
|
||||
if #available(iOS 17, *) {
|
||||
let analyzer = SCSensitivityAnalyzer()
|
||||
let policy = analyzer.analysisPolicy
|
||||
return policy != .disabled
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public func analyzeMediaSignal(_ url: URL, mediaType: ContentAnalysisMediaType = .image) -> Signal<Bool, Error> {
|
||||
return Signal { subscriber in
|
||||
analyzeMedia(url: url, mediaType: mediaType, completion: { result, error in
|
||||
if let result = result {
|
||||
subscriber.putNext(result)
|
||||
subscriber.putCompletion()
|
||||
} else if let error = error {
|
||||
subscriber.putError(error)
|
||||
} else {
|
||||
subscriber.putError(ContentAnalysisError.generic("Unknown response"))
|
||||
}
|
||||
})
|
||||
|
||||
return ActionDisposable {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func analyzeMedia(url: URL, mediaType: ContentAnalysisMediaType, completion: @escaping (Bool?, Error?) -> Void) {
|
||||
if #available(iOS 17, *) {
|
||||
let analyzer = SCSensitivityAnalyzer()
|
||||
switch mediaType {
|
||||
case .image:
|
||||
analyzer.analyzeImage(at: url) { analysisResult, analysisError in
|
||||
completion(analysisResult?.isSensitive, analysisError)
|
||||
}
|
||||
case .video:
|
||||
Task {
|
||||
do {
|
||||
let handler = analyzer.videoAnalysis(forFileAt: url)
|
||||
let response = try await handler.hasSensitiveContent()
|
||||
completion(response.isSensitive, nil)
|
||||
} catch {
|
||||
completion(nil, error)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
completion(false, nil)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user