66//
77
88import Foundation
9+ import UIKit
910
1011final class WebPageRepositoryImpl: WebPageRepository {
1112 private let webPageService : WebPageService
@@ -25,22 +26,19 @@ final class WebPageRepositoryImpl: WebPageRepository {
2526 pages. reserveCapacity ( responses. count)
2627
2728 for response in responses {
28- if needsImageRestore ( response) , let restored = try ? await restoreWebPage ( response) {
29- pages. append ( restored)
29+ if await needsImageRestore ( response) {
30+ if let restored = try ? await restoreWebPage ( response) {
31+ pages. append ( restored)
32+ } else if let page = try ? responseWithoutImage ( response) . toDomain ( ) {
33+ pages. append ( page)
34+ }
3035 continue
3136 }
3237 if let page = try ? response. toDomain ( ) {
3338 pages. append ( page)
3439 }
3540 }
3641
37- // 쿼리가 비어있을 때 모든 웹페이지를 fetch 해오기 때문에 가능한 것
38- if query. trimmingCharacters ( in: . whitespacesAndNewlines) . isEmpty {
39- await metadataService. removeUnusedCachedImages (
40- keeping: responses. map ( \. imageURL)
41- )
42- }
43-
4442 return pages
4543 }
4644
@@ -62,13 +60,24 @@ final class WebPageRepositoryImpl: WebPageRepository {
6260}
6361
6462private extension WebPageRepositoryImpl {
65- func needsImageRestore( _ response: WebPageResponse ) -> Bool {
63+ func needsImageRestore( _ response: WebPageResponse ) async -> Bool {
6664 guard !response. imageURL. isEmpty,
6765 let url = URL ( string: response. imageURL) ,
6866 url. isFileURL else {
6967 return false
7068 }
71- return !FileManager. default. fileExists ( atPath: url. path)
69+
70+ return await Task . detached ( priority: . utility) {
71+ guard FileManager . default. fileExists ( atPath: url. path) else {
72+ return true
73+ }
74+
75+ guard let imageData = try ? Data ( contentsOf: url) else {
76+ return true
77+ }
78+
79+ return UIImage ( data: imageData) == nil
80+ } . value
7281 }
7382
7483 func restoreWebPage( _ response: WebPageResponse ) async throws -> WebPage ? {
@@ -91,4 +100,14 @@ private extension WebPageRepositoryImpl {
91100
92101 return try ? newResponse. toDomain ( )
93102 }
103+
104+ func responseWithoutImage( _ response: WebPageResponse ) -> WebPageResponse {
105+ WebPageResponse (
106+ id: response. id,
107+ title: response. title,
108+ url: response. url,
109+ displayURL: response. displayURL,
110+ imageURL: " "
111+ )
112+ }
94113}
0 commit comments