diff --git a/Sources/WordPressData/Objective-C/Media.m b/Sources/WordPressData/Objective-C/Media.m index 45fb6393000e..83aaf27ab8d8 100644 --- a/Sources/WordPressData/Objective-C/Media.m +++ b/Sources/WordPressData/Objective-C/Media.m @@ -35,29 +35,6 @@ @implementation Media #pragma mark - -+ (NSString *)stringFromMediaType:(MediaType)mediaType -{ - switch (mediaType) { - case MediaTypeImage: - return @"image"; - break; - case MediaTypeVideo: - return @"video"; - break; - case MediaTypePowerpoint: - return @"powerpoint"; - break; - case MediaTypeDocument: - return @"document"; - break; - case MediaTypeAudio: - return @"audio"; - break; - } -} - -#pragma mark - - - (NSString *)fileExtension { NSString *extension = [self.filename pathExtension]; @@ -72,60 +49,6 @@ - (NSString *)fileExtension return extension; } -#pragma mark - Media Types - -- (MediaType)mediaType -{ - if ([self.mediaTypeString isEqualToString:[Media stringFromMediaType:MediaTypeImage]]) { - return MediaTypeImage; - } else if ([self.mediaTypeString isEqualToString:[Media stringFromMediaType:MediaTypeVideo]]) { - return MediaTypeVideo; - } else if ([self.mediaTypeString isEqualToString:[Media stringFromMediaType:MediaTypePowerpoint]]) { - return MediaTypePowerpoint; - } else if ([self.mediaTypeString isEqualToString:[Media stringFromMediaType:MediaTypeDocument]]) { - return MediaTypeDocument; - } else if ([self.mediaTypeString isEqualToString:[Media stringFromMediaType:MediaTypeAudio]]) { - return MediaTypeAudio; - } - - return MediaTypeDocument; -} - -- (void)setMediaType:(MediaType)mediaType -{ - self.mediaTypeString = [[self class] stringFromMediaType:mediaType]; -} - -#pragma mark - Remote Status - -- (MediaRemoteStatus)remoteStatus -{ - return (MediaRemoteStatus)[[self remoteStatusNumber] intValue]; -} - -- (void)setRemoteStatus:(MediaRemoteStatus)aStatus -{ - [self setRemoteStatusNumber:@(aStatus)]; -} - -- (NSString *)remoteStatusText -{ - switch (self.remoteStatus) { - case MediaRemoteStatusPushing: - return NSLocalizedString(@"Uploading", @"Status for Media object that is being uploaded."); - case MediaRemoteStatusFailed: - return NSLocalizedString(@"Failed", @"Status for Media object that is failed upload or export."); - case MediaRemoteStatusSync: - return NSLocalizedString(@"Uploaded", @"Status for Media object that is uploaded and sync with server."); - case MediaRemoteStatusProcessing: - return NSLocalizedString(@"Pending", @"Status for Media object that is being processed locally."); - case MediaRemoteStatusLocal: - return NSLocalizedString(@"Local", @"Status for Media object that is only exists locally."); - case MediaRemoteStatusStub: - return NSLocalizedString(@"Stub", @"Status for Media object that is only has the mediaID locally."); - } -} - #pragma mark - Absolute URLs - (NSURL *)absoluteThumbnailLocalURL; diff --git a/Sources/WordPressData/Objective-C/include/Media.h b/Sources/WordPressData/Objective-C/include/Media.h index 32eb04bb3a02..b56d3362238e 100644 --- a/Sources/WordPressData/Objective-C/include/Media.h +++ b/Sources/WordPressData/Objective-C/include/Media.h @@ -4,23 +4,6 @@ NS_ASSUME_NONNULL_BEGIN -typedef NS_ENUM(NSUInteger, MediaRemoteStatus) { - MediaRemoteStatusSync, /* Post synced. */ - MediaRemoteStatusFailed, /* Upload failed. */ - MediaRemoteStatusLocal, /* Only local version. */ - MediaRemoteStatusPushing, /* Uploading post. */ - MediaRemoteStatusProcessing, /* Intermediate status before uploading. */ - MediaRemoteStatusStub, /* We only have the mediaID information from the server */ -}; - -typedef NS_ENUM(NSUInteger, MediaType) { - MediaTypeImage, - MediaTypeVideo, - MediaTypeDocument, - MediaTypePowerpoint, - MediaTypeAudio -}; - @interface Media : NSManagedObject // Managed properties @@ -60,9 +43,6 @@ typedef NS_ENUM(NSUInteger, MediaType) { // Helper properties -@property (nonatomic, assign) MediaType mediaType; -@property (nonatomic, assign) MediaRemoteStatus remoteStatus; - /** Local file URL for the Media's asset. e.g. an image, video, gif or other file. */ @@ -81,8 +61,6 @@ typedef NS_ENUM(NSUInteger, MediaType) { // Helper methods -+ (NSString *)stringFromMediaType:(MediaType)mediaType; - - (nullable NSString *)fileExtension; @end diff --git a/Sources/WordPressData/Swift/Media.swift b/Sources/WordPressData/Swift/Media.swift index ab15fbd16aec..40ed6bf34a31 100644 --- a/Sources/WordPressData/Swift/Media.swift +++ b/Sources/WordPressData/Swift/Media.swift @@ -1,6 +1,55 @@ import Foundation import UniformTypeIdentifiers +@objc +public enum MediaType: UInt { + case image + case video + case document + case powerpoint + case audio + + public var stringValue: String { + switch self { + case .image: + return "image" + case .video: + return "video" + case .powerpoint: + return "powerpoint" + case .document: + return "document" + case .audio: + return "audio" + } + } + + public init(string: String) { + switch string { + case "image": + self = .image + case "video": + self = .video + case "powerpoint": + self = .powerpoint + case "audio": + self = .audio + default: + self = .document + } + } +} + +@objc +public enum MediaRemoteStatus: UInt { + case sync + case failed + case local + case pushing + case processing + case stub +} + public extension Media { // MARK: - AutoUpload Failure Count @@ -43,6 +92,16 @@ public extension Media { // MARK: - Media Type + @objc + var mediaType: MediaType { + get { + mediaTypeString.flatMap(MediaType.init) ?? .document + } + set { + mediaTypeString = newValue.stringValue + } + } + /// Returns the MIME type, e.g. "image/png". @objc var mimeType: String? { guard let fileExtension = self.fileExtension(), @@ -75,6 +134,18 @@ public extension Media { type.map(MediaType.init) ?? .document } + // MARK: - Remote Status + + @objc + var remoteStatus: MediaRemoteStatus { + get { + (remoteStatusNumber?.uintValue).flatMap(MediaRemoteStatus.init(rawValue:)) ?? .local + } + set { + remoteStatusNumber = NSNumber(value: newValue.rawValue) + } + } + // MARK: - Media Link var link: String { diff --git a/WordPress/Classes/Services/MediaRepository.swift b/WordPress/Classes/Services/MediaRepository.swift index fcb734c01c87..13bfcea37784 100644 --- a/WordPress/Classes/Services/MediaRepository.swift +++ b/WordPress/Classes/Services/MediaRepository.swift @@ -114,7 +114,7 @@ private extension MediaRepository { extension MediaServiceRemote { func getMediaLibraryCount(forMediaTypes types: [MediaType]) async throws -> Int { - try await getMediaLibraryCount(forMediaTypes: types.map(Media.string(from:))) + try await getMediaLibraryCount(forMediaTypes: types.map(\.stringValue)) } func getMediaLibraryCount(forMediaTypes mediaTypes: [String]) async throws -> Int { diff --git a/WordPress/Classes/Services/MediaService.m b/WordPress/Classes/Services/MediaService.m index 398ff38c3e9c..ab933d51804e 100644 --- a/WordPress/Classes/Services/MediaService.m +++ b/WordPress/Classes/Services/MediaService.m @@ -458,15 +458,6 @@ - (void)syncMediaLibraryForBlog:(Blog *)blog }]; } -#pragma mark - Private helpers - -- (NSString *)mimeTypeForMediaType:(NSNumber *)mediaType -{ - MediaType filter = (MediaType)[mediaType intValue]; - NSString *mimeType = [Media stringFromMediaType:filter]; - return mimeType; -} - #pragma mark - Media helpers - (id)remoteForBlog:(Blog *)blog diff --git a/WordPress/Classes/ViewRelated/Media/SiteMedia/Controllers/SiteMediaCollectionViewController.swift b/WordPress/Classes/ViewRelated/Media/SiteMedia/Controllers/SiteMediaCollectionViewController.swift index 4fdc165262d8..34fda5dbca0f 100644 --- a/WordPress/Classes/ViewRelated/Media/SiteMedia/Controllers/SiteMediaCollectionViewController.swift +++ b/WordPress/Classes/ViewRelated/Media/SiteMedia/Controllers/SiteMediaCollectionViewController.swift @@ -364,7 +364,7 @@ final class SiteMediaCollectionViewController: UIViewController, NSFetchedResult private func makePredicate(searchTerm: String) -> NSPredicate { var predicates = [NSPredicate(format: "blog == %@", blog)] if let filter { - let mediaTypes = filter.map(Media.string(from:)) + let mediaTypes = filter.map(\.stringValue) predicates.append(NSPredicate(format: "mediaTypeString IN %@", mediaTypes)) } if !isShowingPendingUploads {