Signal-iOS/SignalServiceKit/Groups/GroupsV2AvatarDownloadOperation.swift
Jordan Rose b0de59f2e2 Remove required from every init that is not dynamically dispatched
This included:
- Removing unavailable inits wholesale if no longer `required`
- Marking a few classes `final` so they could continue using
  `Self(...)` rather than `OWSWhatever(...)`
2024-04-01 15:27:20 -07:00

51 lines
1.3 KiB
Swift

//
// Copyright 2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import Foundation
public class GroupsV2AvatarDownloadOperation: CDNDownloadOperation {
private let urlPath: String
private let maxDownloadSize: UInt?
public let promise: Promise<Data>
private let future: Future<Data>
public init(urlPath: String,
maxDownloadSize: UInt? = nil) {
self.urlPath = urlPath
self.maxDownloadSize = maxDownloadSize
let (promise, future) = Promise<Data>.pending()
self.promise = promise
self.future = future
super.init()
}
override public func run() {
firstly {
return try tryToDownload(urlPath: urlPath, maxDownloadSize: maxDownloadSize)
}.done(on: DispatchQueue.global()) { [weak self] (data: Data) in
guard let self = self else {
return
}
self.future.resolve(data)
self.reportSuccess()
}.catch(on: DispatchQueue.global()) { [weak self] error in
guard let self = self else {
return
}
return self.reportError(withUndefinedRetry: error)
}
}
override public func didFail(error: Error) {
Logger.error("Download exhausted retries: \(error)")
future.reject(error)
}
}