Skip to content

Commit

Permalink
nekos.moe fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
cranci1 committed Jun 15, 2024
1 parent 1d5ad6e commit 03d9179
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 62 deletions.
Binary file not shown.
137 changes: 77 additions & 60 deletions AnimeGen/APIs Requests/nekosmoe.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,87 +11,104 @@ extension ViewController {

func loadImageFromNekosMoe() {
startLoadingIndicator()

let isNSFW = UserDefaults.standard.bool(forKey: "explicitContents")

let apiEndpoint = "https://nekos.moe/api/v1/random/image"

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

components.queryItems = [URLQueryItem(name: "nsfw", value: isNSFW.description.lowercased())]

guard let url = components.url else {
print("Invalid URL")
stopLoadingIndicator()

var urlComponents = URLComponents(string: apiEndpoint)
urlComponents?.queryItems = [URLQueryItem(name: "nsfw", value: isNSFW.description.lowercased())]

guard let url = urlComponents?.url else {
handleError("Invalid URL")
return
}

var request = URLRequest(url: url)
request.httpMethod = "GET"

let task = URLSession.shared.dataTask(with: request) { (data, response, error) in

let request = URLRequest(url: url)

let task = URLSession.shared.dataTask(with: request) { data, response, error in
DispatchQueue.main.async {
guard error == nil,
let httpResponse = response as? HTTPURLResponse,
httpResponse.statusCode == 200,
let jsonData = data,
let jsonResponse = try? JSONSerialization.jsonObject(with: jsonData) as? [String: Any],
let images = jsonResponse["images"] as? [[String: Any]],
let firstImage = images.first,
let imageId = firstImage["id"] as? String,
let tagsArray = firstImage["tags"] as? [String] else {
print("Failed to get valid response.")
self.stopLoadingIndicator()
return
if let error = error {
self.handleError("Request error: \(error.localizedDescription)")
return
}

self.updateUIWithTags(tagsArray)
self.loadImage(with: imageId, tags: tagsArray)

guard let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200,
let jsonData = data else {
self.handleError("Invalid response or data.")
return
}

self.handleImageData(jsonData)
}
}

task.resume()
}

private func handleError(_ message: String) {
print(message)
stopLoadingIndicator()
}

private func handleImageData(_ jsonData: Data) {
do {
guard let jsonResponse = try JSONSerialization.jsonObject(with: jsonData) as? [String: Any],
let images = jsonResponse["images"] as? [[String: Any]],
let firstImage = images.first,
let imageId = firstImage["id"] as? String,
let tagsArray = firstImage["tags"] as? [String] else {
handleError("Failed to parse JSON response.")
return
}

updateUIWithTags(tagsArray)
loadImage(with: imageId, tags: tagsArray)
} catch {
handleError("JSON parsing error: \(error.localizedDescription)")
}
}

private func loadImage(with imageId: String, tags: [String]?) {
var components = URLComponents(string: "https://nekos.moe/thumbnail/\(imageId)")
var urlComponents = URLComponents(string: "https://nekos.moe/thumbnail/\(imageId)")
if let tags = tags {
components?.queryItems = [URLQueryItem(name: "tags", value: tags.joined(separator: ","))]
urlComponents?.queryItems = [URLQueryItem(name: "tags", value: tags.joined(separator: ","))]
}

guard let url = components?.url else {
print("Invalid URL")
stopLoadingIndicator()

guard let url = urlComponents?.url else {
handleError("Invalid URL")
return
}

let imageRequest = URLRequest(url: url)

let imageTask = URLSession.shared.dataTask(with: imageRequest) { (imageData, _, imageError) in
let imageTask = URLSession.shared.dataTask(with: imageRequest) { data, _, error in
DispatchQueue.main.async {
if let imageError = imageError {
print("Image loading error: \(imageError)")
} else if let imageData = imageData, let newImage = UIImage(data: imageData) {
self.imageView.image = newImage
self.addToHistory(image: newImage)
self.animateImageChange(with: newImage)
if let tags = tags {
self.addImageToHistory(image: newImage, tags: tags)
}
self.incrementCounter()
self.tagsLabel.isHidden = false
self.setTagsLines0()
} else {
print("Failed to load image data.")
if let error = error {
self.handleError("Image loading error: \(error.localizedDescription)")
return
}

guard let data = data, let image = UIImage(data: data) else {
self.handleError("Failed to load image data.")
return
}
self.stopLoadingIndicator()

self.handleImageLoadingCompletion(image, tags: tags)
}
}

imageTask.resume()
}

private func handleImageLoadingCompletion(_ image: UIImage, tags: [String]?) {
self.imageView.image = image
self.addToHistory(image: image)
self.animateImageChange(with: image)
if let tags = tags {
self.addImageToHistory(image: image, tags: tags)
}
self.incrementCounter()
self.tagsLabel.isHidden = false
self.setTagsLines0()
self.stopLoadingIndicator()
}
}
2 changes: 1 addition & 1 deletion AnimeGen/Extension/Activity.swift
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ extension ViewController {
return mutableAttributedString
}

func incrementCounter() {
@objc func incrementCounter() {
counter += 1
updateTimeLabel()
}
Expand Down
2 changes: 1 addition & 1 deletion AnimeGen/Main.storyboard
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@
<constraint firstAttribute="height" constant="35" id="YWu-D4-VsU"/>
<constraint firstAttribute="width" constant="110" id="puP-Le-4w6"/>
</constraints>
<color key="tintColor" systemColor="labelColor"/>
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="gray" title="pic.re" cornerStyle="medium"/>
<connections>
Expand Down

0 comments on commit 03d9179

Please sign in to comment.