Add support for Reddit galleries
This commit is contained in:
parent
2a86bcb36e
commit
46226f963e
|
@ -52,6 +52,8 @@
|
||||||
5133BB4D2460CA0B0001E3D0 /* RedditMe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5133BB4C2460CA0B0001E3D0 /* RedditMe.swift */; };
|
5133BB4D2460CA0B0001E3D0 /* RedditMe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5133BB4C2460CA0B0001E3D0 /* RedditMe.swift */; };
|
||||||
5133BB4F2460EC230001E3D0 /* RedditMedia.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5133BB4E2460EC230001E3D0 /* RedditMedia.swift */; };
|
5133BB4F2460EC230001E3D0 /* RedditMedia.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5133BB4E2460EC230001E3D0 /* RedditMedia.swift */; };
|
||||||
5133BB512460EE730001E3D0 /* RedditMediaEmbed.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5133BB502460EE730001E3D0 /* RedditMediaEmbed.swift */; };
|
5133BB512460EE730001E3D0 /* RedditMediaEmbed.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5133BB502460EE730001E3D0 /* RedditMediaEmbed.swift */; };
|
||||||
|
5138B4CA24CF85050018089B /* RedditMediaMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5138B4C924CF85050018089B /* RedditMediaMetadata.swift */; };
|
||||||
|
5138B4CC24CF877A0018089B /* RedditGalleryData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5138B4CB24CF877A0018089B /* RedditGalleryData.swift */; };
|
||||||
5139A6382459822D004D960C /* CloudKitArticleStatusUpdate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5139A6372459822D004D960C /* CloudKitArticleStatusUpdate.swift */; };
|
5139A6382459822D004D960C /* CloudKitArticleStatusUpdate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5139A6372459822D004D960C /* CloudKitArticleStatusUpdate.swift */; };
|
||||||
5141000A2464DAA6001DA326 /* RedditSort.swift in Sources */ = {isa = PBXBuildFile; fileRef = 514100092464DAA6001DA326 /* RedditSort.swift */; };
|
5141000A2464DAA6001DA326 /* RedditSort.swift in Sources */ = {isa = PBXBuildFile; fileRef = 514100092464DAA6001DA326 /* RedditSort.swift */; };
|
||||||
5144EA49227B497600D19003 /* FeedbinAPICaller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5144EA48227B497600D19003 /* FeedbinAPICaller.swift */; };
|
5144EA49227B497600D19003 /* FeedbinAPICaller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5144EA48227B497600D19003 /* FeedbinAPICaller.swift */; };
|
||||||
|
@ -316,6 +318,8 @@
|
||||||
5133BB4C2460CA0B0001E3D0 /* RedditMe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RedditMe.swift; sourceTree = "<group>"; };
|
5133BB4C2460CA0B0001E3D0 /* RedditMe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RedditMe.swift; sourceTree = "<group>"; };
|
||||||
5133BB4E2460EC230001E3D0 /* RedditMedia.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RedditMedia.swift; sourceTree = "<group>"; };
|
5133BB4E2460EC230001E3D0 /* RedditMedia.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RedditMedia.swift; sourceTree = "<group>"; };
|
||||||
5133BB502460EE730001E3D0 /* RedditMediaEmbed.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RedditMediaEmbed.swift; sourceTree = "<group>"; };
|
5133BB502460EE730001E3D0 /* RedditMediaEmbed.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RedditMediaEmbed.swift; sourceTree = "<group>"; };
|
||||||
|
5138B4C924CF85050018089B /* RedditMediaMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RedditMediaMetadata.swift; sourceTree = "<group>"; };
|
||||||
|
5138B4CB24CF877A0018089B /* RedditGalleryData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RedditGalleryData.swift; sourceTree = "<group>"; };
|
||||||
5139A6372459822D004D960C /* CloudKitArticleStatusUpdate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CloudKitArticleStatusUpdate.swift; sourceTree = "<group>"; };
|
5139A6372459822D004D960C /* CloudKitArticleStatusUpdate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CloudKitArticleStatusUpdate.swift; sourceTree = "<group>"; };
|
||||||
514100092464DAA6001DA326 /* RedditSort.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RedditSort.swift; sourceTree = "<group>"; };
|
514100092464DAA6001DA326 /* RedditSort.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RedditSort.swift; sourceTree = "<group>"; };
|
||||||
5144EA48227B497600D19003 /* FeedbinAPICaller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedbinAPICaller.swift; sourceTree = "<group>"; };
|
5144EA48227B497600D19003 /* FeedbinAPICaller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedbinAPICaller.swift; sourceTree = "<group>"; };
|
||||||
|
@ -649,11 +653,13 @@
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
5193CD53245E3F7A0092735E /* RedditFeedProvider.swift */,
|
5193CD53245E3F7A0092735E /* RedditFeedProvider.swift */,
|
||||||
|
5138B4CB24CF877A0018089B /* RedditGalleryData.swift */,
|
||||||
5133BB48246078910001E3D0 /* RedditLink.swift */,
|
5133BB48246078910001E3D0 /* RedditLink.swift */,
|
||||||
5133BB46245FD8140001E3D0 /* RedditLinkListing.swift */,
|
5133BB46245FD8140001E3D0 /* RedditLinkListing.swift */,
|
||||||
5133BB4C2460CA0B0001E3D0 /* RedditMe.swift */,
|
5133BB4C2460CA0B0001E3D0 /* RedditMe.swift */,
|
||||||
5133BB4E2460EC230001E3D0 /* RedditMedia.swift */,
|
5133BB4E2460EC230001E3D0 /* RedditMedia.swift */,
|
||||||
5133BB502460EE730001E3D0 /* RedditMediaEmbed.swift */,
|
5133BB502460EE730001E3D0 /* RedditMediaEmbed.swift */,
|
||||||
|
5138B4C924CF85050018089B /* RedditMediaMetadata.swift */,
|
||||||
5100E4CC246243990010A63D /* RedditPreview.swift */,
|
5100E4CC246243990010A63D /* RedditPreview.swift */,
|
||||||
514100092464DAA6001DA326 /* RedditSort.swift */,
|
514100092464DAA6001DA326 /* RedditSort.swift */,
|
||||||
5133BB4A2460BDF30001E3D0 /* RedditSubreddit.swift */,
|
5133BB4A2460BDF30001E3D0 /* RedditSubreddit.swift */,
|
||||||
|
@ -1187,6 +1193,7 @@
|
||||||
51F6C591245DB302001E41CA /* CloudKitReceiveStatusOperation.swift in Sources */,
|
51F6C591245DB302001E41CA /* CloudKitReceiveStatusOperation.swift in Sources */,
|
||||||
9E672394236F7CA0000BE141 /* FeedlyRefreshAccessTokenOperation.swift in Sources */,
|
9E672394236F7CA0000BE141 /* FeedlyRefreshAccessTokenOperation.swift in Sources */,
|
||||||
1748B4A724CADA17008F9850 /* AccountSyncError.swift in Sources */,
|
1748B4A724CADA17008F9850 /* AccountSyncError.swift in Sources */,
|
||||||
|
5138B4CA24CF85050018089B /* RedditMediaMetadata.swift in Sources */,
|
||||||
514BF5202391B0DB00902FE8 /* SingleArticleFetcher.swift in Sources */,
|
514BF5202391B0DB00902FE8 /* SingleArticleFetcher.swift in Sources */,
|
||||||
9EC688EC232C583300A8D0A2 /* FeedlyAccountDelegate+OAuth.swift in Sources */,
|
9EC688EC232C583300A8D0A2 /* FeedlyAccountDelegate+OAuth.swift in Sources */,
|
||||||
8469F81C1F6DD15E0084783E /* Account.swift in Sources */,
|
8469F81C1F6DD15E0084783E /* Account.swift in Sources */,
|
||||||
|
@ -1256,6 +1263,7 @@
|
||||||
9EF1B10323584B4C000A486A /* FeedlySyncStreamContentsOperation.swift in Sources */,
|
9EF1B10323584B4C000A486A /* FeedlySyncStreamContentsOperation.swift in Sources */,
|
||||||
5154367B228EEB28005E1CDF /* FeedbinImportResult.swift in Sources */,
|
5154367B228EEB28005E1CDF /* FeedbinImportResult.swift in Sources */,
|
||||||
84B2D4D02238CD8A00498ADA /* WebFeedMetadata.swift in Sources */,
|
84B2D4D02238CD8A00498ADA /* WebFeedMetadata.swift in Sources */,
|
||||||
|
5138B4CC24CF877A0018089B /* RedditGalleryData.swift in Sources */,
|
||||||
9E84DC472359A23200D6E809 /* FeedlyIngestUnreadArticleIdsOperation.swift in Sources */,
|
9E84DC472359A23200D6E809 /* FeedlyIngestUnreadArticleIdsOperation.swift in Sources */,
|
||||||
9EAEC624233315F60085D7C9 /* FeedlyEntry.swift in Sources */,
|
9EAEC624233315F60085D7C9 /* FeedlyEntry.swift in Sources */,
|
||||||
9EEAE073235D01AE00E3FEE4 /* FeedlyGetStreamIdsService.swift in Sources */,
|
9EEAE073235D01AE00E3FEE4 /* FeedlyGetStreamIdsService.swift in Sources */,
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
//
|
||||||
|
// RedditGalleryData.swift
|
||||||
|
// Account
|
||||||
|
//
|
||||||
|
// Created by Maurice Parker on 7/27/20.
|
||||||
|
// Copyright © 2020 Ranchero Software, LLC. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
struct RedditGalleryData: Codable {
|
||||||
|
|
||||||
|
let items: [RedditGalleryDataItem]?
|
||||||
|
|
||||||
|
enum CodingKeys: String, CodingKey {
|
||||||
|
case items = "items"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
struct RedditGalleryDataItem: Codable {
|
||||||
|
|
||||||
|
let mediaID: String?
|
||||||
|
|
||||||
|
enum CodingKeys: String, CodingKey {
|
||||||
|
case mediaID = "media_id"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -37,6 +37,8 @@ final class RedditLinkData: Codable {
|
||||||
let mediaEmbed: RedditMediaEmbed?
|
let mediaEmbed: RedditMediaEmbed?
|
||||||
let preview: RedditPreview?
|
let preview: RedditPreview?
|
||||||
let crossPostParents: [RedditLinkData]?
|
let crossPostParents: [RedditLinkData]?
|
||||||
|
let galleryData: RedditGalleryData?
|
||||||
|
let mediaMetadata: [String: RedditMediaMetadata]?
|
||||||
|
|
||||||
enum CodingKeys: String, CodingKey {
|
enum CodingKeys: String, CodingKey {
|
||||||
case title = "title"
|
case title = "title"
|
||||||
|
@ -54,6 +56,8 @@ final class RedditLinkData: Codable {
|
||||||
case mediaEmbed = "media_embed"
|
case mediaEmbed = "media_embed"
|
||||||
case preview = "preview"
|
case preview = "preview"
|
||||||
case crossPostParents = "crosspost_parent_list"
|
case crossPostParents = "crosspost_parent_list"
|
||||||
|
case galleryData = "gallery_data"
|
||||||
|
case mediaMetadata = "media_metadata"
|
||||||
}
|
}
|
||||||
|
|
||||||
var createdDate: Date? {
|
var createdDate: Date? {
|
||||||
|
@ -139,6 +143,21 @@ final class RedditLinkData: Codable {
|
||||||
return html
|
return html
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let galleryDataItems = galleryData?.items, let mediaMetadata = mediaMetadata {
|
||||||
|
var html = ""
|
||||||
|
for item in galleryDataItems {
|
||||||
|
if let mediaID = item.mediaID, let itemMetadata = mediaMetadata[mediaID], let imageURL = itemMetadata.image?.url {
|
||||||
|
html += "<img src=\"\(imageURL)\" "
|
||||||
|
if let width = itemMetadata.image?.width, let height = itemMetadata.image?.height {
|
||||||
|
html += "width=\"\(width)\" height=\"\(height)\" "
|
||||||
|
}
|
||||||
|
html += ">"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
html += linkURL(url, linkOutOnly: false)
|
||||||
|
return html
|
||||||
|
}
|
||||||
|
|
||||||
return linkURL(url)
|
return linkURL(url)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
//
|
||||||
|
// RedditMediaMetadata.swift
|
||||||
|
// Account
|
||||||
|
//
|
||||||
|
// Created by Maurice Parker on 7/27/20.
|
||||||
|
// Copyright © 2020 Ranchero Software, LLC. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
struct RedditMediaMetadata: Codable {
|
||||||
|
|
||||||
|
let image: RedditMediaMetadataS?
|
||||||
|
|
||||||
|
enum CodingKeys: String, CodingKey {
|
||||||
|
case image = "s"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
struct RedditMediaMetadataS: Codable {
|
||||||
|
|
||||||
|
let url: String?
|
||||||
|
let height: Int?
|
||||||
|
let width: Int?
|
||||||
|
|
||||||
|
enum CodingKeys: String, CodingKey {
|
||||||
|
case url = "u"
|
||||||
|
case height = "y"
|
||||||
|
case width = "x"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue