Skip to content

Commit 00e51ec

Browse files
committed
Add logger.
1 parent 0fc8873 commit 00e51ec

4 files changed

Lines changed: 69 additions & 11 deletions

File tree

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
//
2+
// Extension + Logger.swift
3+
// CachedAsyncImage
4+
//
5+
// Created by Dmitry Kononchuk on 24.01.2024.
6+
// Copyright © 2024 Dmitry Kononchuk. All rights reserved.
7+
//
8+
9+
import OSLog
10+
11+
typealias Log = Logger
12+
13+
extension Logger {
14+
// MARK: - Public Properties
15+
16+
/// Log of failure.
17+
static let failure = Logger(subsystem: subsystem, category: "failure")
18+
19+
// MARK: - Private Properties
20+
21+
private static let subsystem = Bundle.module.bundleIdentifier ?? ""
22+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
//
2+
// Emoji.swift
3+
// CachedAsyncImage
4+
//
5+
// Created by Dmitry Kononchuk on 25.01.2024.
6+
// Copyright © 2024 Dmitry Kononchuk. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
final class Emoji {
12+
// MARK: - Public Enums
13+
14+
enum Code: String {
15+
case hammer = "1f528"
16+
}
17+
18+
// MARK: - Public Methods
19+
20+
static func getEmoji(from code: Code) -> String? {
21+
guard let number = Int(code.rawValue, radix: 16),
22+
let unicodeScalar = UnicodeScalar(number)
23+
else { return nil }
24+
25+
return String(unicodeScalar)
26+
}
27+
}

Sources/CachedAsyncImage/Services/ImageLoader.swift

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,12 @@ final class ImageLoader: ObservableObject {
5252
func fetchImage(from url: String) {
5353
if case .loading = state { return }
5454

55-
let url = URL(string: url)
56-
57-
if let url = url, let cachedImage = imageCache[url] {
55+
if let url = URL(string: url), let cachedImage = imageCache[url] {
5856
state = .loaded(cachedImage)
5957
return
6058
}
6159

62-
let (progress, data) = networkManager.fetchImage(from: url)
60+
let (progress, data) = networkManager.fetchImage(from: URL(string: url))
6361

6462
progress?
6563
.publisher(for: \.fractionCompleted)
@@ -71,15 +69,13 @@ final class ImageLoader: ObservableObject {
7169

7270
data
7371
.map { CPImage(data: $0) }
74-
.catch { error -> AnyPublisher<CPImage?, Never> in
72+
.catch { [weak self] error -> AnyPublisher<CPImage?, Never> in
7573
if let error = error as? NetworkError {
7674
Task { @MainActor [weak self] in
7775
self?.state = .failed(error.rawValue)
7876
}
7977

80-
#if DEBUG
81-
print("**** CachedAsyncImage error: \(error.rawValue)")
82-
#endif
78+
self?.log(error.rawValue, url: url)
8379
}
8480

8581
return Just(nil).eraseToAnyPublisher()
@@ -91,7 +87,7 @@ final class ImageLoader: ObservableObject {
9187
}
9288
},
9389
receiveOutput: { [weak self] in
94-
self?.cache(url: url, image: $0)
90+
self?.cache(url: URL(string: url), image: $0)
9591
}
9692
)
9793
.subscribe(on: Self.imageProcessing)
@@ -113,4 +109,15 @@ final class ImageLoader: ObservableObject {
113109
private func cancel() {
114110
cancellables.forEach { $0.cancel() }
115111
}
112+
113+
private func log(_ error: String, url: String) {
114+
guard let emoji = Emoji.getEmoji(from: .hammer) else { return }
115+
116+
let errorMessage = "Error: \(error)"
117+
let urlMessage = "URL: \(url)"
118+
119+
Log.failure.error(
120+
"\(emoji) CachedAsyncImage\n\(errorMessage)\n\(urlMessage)"
121+
)
122+
}
116123
}

Sources/CachedAsyncImage/Services/NetworkManager.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,10 @@ struct NetworkManager: NetworkProtocol {
4747
publisher: AnyPublisher<Data, Error>
4848
) {
4949
guard let url = url else {
50-
return (nil, Fail(error: NetworkError.badURL())
51-
.eraseToAnyPublisher())
50+
return (
51+
nil,
52+
Fail(error: NetworkError.badURL()).eraseToAnyPublisher()
53+
)
5254
}
5355

5456
let sharedPublisher = URLSession.shared

0 commit comments

Comments
 (0)