Skip to content

Commit

Permalink
a
Browse files Browse the repository at this point in the history
  • Loading branch information
cranci1 committed Jul 31, 2024
1 parent 8e3dc50 commit 7e2c9f4
Show file tree
Hide file tree
Showing 25 changed files with 81 additions and 63 deletions.
Binary file not shown.
40 changes: 17 additions & 23 deletions AnimeGen/APIs Requests/pic-re.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,11 @@ extension ViewController {
guard let self = self else { return }

guard let url = URL(string: "https://pic.re/image") else {
print("Invalid URL")
DispatchQueue.main.async {
self.stopLoadingIndicator()
}
self.handleLoadingError("Invalid URL")
return
}

let request = URLRequest(url: url)

self.fetchImage(with: request, startTime: startTime)
}
}
Expand All @@ -36,45 +32,32 @@ extension ViewController {
guard let self = self else { return }

if let error = error {
print("Error: \(error)")
DispatchQueue.main.async {
self.stopLoadingIndicator()
}
self.handleLoadingError("Error: \(error.localizedDescription)")
return
}

guard let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 else {
print("Invalid HTTP response")
DispatchQueue.main.async {
self.stopLoadingIndicator()
}
self.handleLoadingError("Invalid HTTP response")
return
}

guard let data = data,
let imageTagsString = httpResponse.allHeaderFields["image_tags"] as? String,
let imageUrlString = httpResponse.allHeaderFields["image_source"] as? String,
let newImage = UIImage(data: data) else {
print("Invalid image data or missing response headers")
DispatchQueue.main.async {
self.stopLoadingIndicator()
}
self.handleLoadingError("Invalid image data or missing response headers")
return
}

let tags = imageTagsString.components(separatedBy: ",")

DispatchQueue.main.async {
self.handleImageLoadingCompletion(with: newImage, tags: tags, imageUrlString: imageUrlString)

let endTime = DispatchTime.now()
let executionTime = endTime.uptimeNanoseconds - startTime.uptimeNanoseconds
print("Execution time: \(Double(executionTime) / 1_000_000_000) seconds")
self.handleImageLoadingCompletion(with: newImage, tags: tags, imageUrlString: imageUrlString, startTime: startTime)
}
}.resume()
}

private func handleImageLoadingCompletion(with newImage: UIImage, tags: [String], imageUrlString: String) {
private func handleImageLoadingCompletion(with newImage: UIImage, tags: [String], imageUrlString: String, startTime: DispatchTime) {
addImageToHistory(image: newImage, tags: tags)
currentImageURL = imageUrlString
updateUIWithTags(tags)
Expand All @@ -85,5 +68,16 @@ extension ViewController {
stopLoadingIndicator()
incrementCounter()
setTagsLines0()

let endTime = DispatchTime.now()
let executionTime = endTime.uptimeNanoseconds - startTime.uptimeNanoseconds
print("Execution time: \(Double(executionTime) / 1_000_000_000) seconds")
}

private func handleLoadingError(_ errorMessage: String) {
print(errorMessage)
DispatchQueue.main.async {
self.stopLoadingIndicator()
}
}
}
73 changes: 48 additions & 25 deletions AnimeGen/APIs Requests/waifu-im.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,11 @@ extension ViewController {
let isNSFW = UserDefaults.standard.bool(forKey: "explicitContents")
let apiEndpoint = "https://api.waifu.im/search"

guard var components = URLComponents(string: apiEndpoint) else {
print("Invalid URL")
stopLoadingIndicator()
return
}

components.queryItems = [
URLQueryItem(name: "is_nsfw", value: isNSFW ? "true" : "false")
]
var components = URLComponents(string: apiEndpoint)
components?.queryItems = [URLQueryItem(name: "is_nsfw", value: isNSFW ? "true" : "false")]

guard let url = components.url else {
print("Invalid URL components")
guard let url = components?.url else {
print("Invalid URL")
stopLoadingIndicator()
return
}
Expand Down Expand Up @@ -63,34 +56,64 @@ extension ViewController {
return
}

// Use Codable for JSON decoding
struct ImageInfo: Codable {
let url: String
let tags: [Tag]
}

struct Tag: Codable {
let name: String
}

struct Response: Codable {
let images: [ImageInfo]
}

do {
guard let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any],
let images = json["images"] as? [[String: Any]],
let imageInfo = images.first,
let imageUrlString = imageInfo["url"] as? String,
let imageTags = imageInfo["tags"] as? [[String: Any]] else {
print("Invalid image data or missing tags")
let response = try JSONDecoder().decode(Response.self, from: data)
guard let imageInfo = response.images.first else {
print("No images found")
DispatchQueue.main.async {
self.stopLoadingIndicator()
}
return
}

let tags = imageTags.compactMap { $0["name"] as? String }
let tags = imageInfo.tags.map { $0.name }

guard let imageUrl = URL(string: imageUrlString),
let imageData = try? Data(contentsOf: imageUrl),
let image = UIImage(data: imageData) else {
print("Invalid image data or missing tags")
guard let imageUrl = URL(string: imageInfo.url) else {
print("Invalid image URL")
DispatchQueue.main.async {
self.stopLoadingIndicator()
}
return
}

DispatchQueue.main.async {
self.handleImageLoadingCompletion(with: image, tags: tags, imageUrlString: imageUrlString)
}
// Fetch image data asynchronously
URLSession.shared.dataTask(with: imageUrl) { [weak self] (imageData, _, error) in
guard let self = self else { return }

if let error = error {
print("Error loading image data: \(error)")
DispatchQueue.main.async {
self.stopLoadingIndicator()
}
return
}

guard let imageData = imageData, let image = UIImage(data: imageData) else {
print("Invalid image data")
DispatchQueue.main.async {
self.stopLoadingIndicator()
}
return
}

DispatchQueue.main.async {
self.handleImageLoadingCompletion(with: image, tags: tags, imageUrlString: imageInfo.url)
}
}.resume()
} catch {
print("Error parsing JSON: \(error)")
DispatchQueue.main.async {
Expand Down
Binary file modified AnimeGen/Assets.xcassets/.DS_Store
Binary file not shown.
Binary file not shown.
Binary file modified AnimeGen/Assets.xcassets/Utils/LaunchBG.imageset/cherry.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 7e2c9f4

Please sign in to comment.