mirror of
https://github.com/firebase/firebase-ios-sdk
synced 2026-11-10 22:45:59 +05:45
* Restores ML Pods after M77. * Fix Package.swift * Refactor model info to be in-memory. * Add improved model download functionality w/ single set of download handlers per task. * Rename model download to better match URLSessionTask. * Rename model download to better match URLSessionTask. * Update unit test to read/write to user defaults. * Minor updates to model downloader and tests. * Use caches directory for model storage on tvOS. * Change modelInfo to be privately settable.
58 lines
1.9 KiB
Swift
58 lines
1.9 KiB
Swift
// Copyright 2020 Google LLC
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
import Foundation
|
|
|
|
/// Manager for common file operations.
|
|
enum ModelFileManager {
|
|
/// Root directory of model file storage on device.
|
|
static var modelsDirectory: URL {
|
|
// TODO: Reconsider force unwrapping.
|
|
#if os(tvOS)
|
|
return FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first!
|
|
#else
|
|
return FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first!
|
|
#endif
|
|
}
|
|
|
|
/// Check if file is available at URL.
|
|
static func isFileReachable(at fileURL: URL) -> Bool {
|
|
do {
|
|
let isReachable = try fileURL.checkResourceIsReachable()
|
|
return isReachable
|
|
} catch {
|
|
print(error.localizedDescription)
|
|
/// File unreachable.
|
|
return false
|
|
}
|
|
}
|
|
|
|
/// Move file at a location to another location.
|
|
static func moveFile(at sourceURL: URL, to destinationURL: URL) throws {
|
|
if isFileReachable(at: destinationURL) {
|
|
do {
|
|
try FileManager.default.removeItem(at: destinationURL)
|
|
} catch {
|
|
throw DownloadedModelError
|
|
.fileIOError(description: "Could not replace existing model file.")
|
|
}
|
|
}
|
|
do {
|
|
try FileManager.default.moveItem(at: sourceURL, to: destinationURL)
|
|
} catch {
|
|
throw DownloadedModelError.fileIOError(description: "Unable to save model file.")
|
|
}
|
|
}
|
|
}
|