From fca20b88b6347e10663f89f1c445731bf9cac0d7 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Mon, 7 Oct 2019 14:20:46 +0200 Subject: [PATCH] Implement buying debuff potions --- .../Repositories/Implementations/UserRepository.swift | 8 +++++++- .../Modals/HRPGBuyItemModalViewController.swift | 9 +++++++++ .../Habitica API Client/User/UseSkillCall.swift | 9 ++++++--- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/HabitRPG/Repositories/Implementations/UserRepository.swift b/HabitRPG/Repositories/Implementations/UserRepository.swift index 65b9b1123..95ebbd166 100644 --- a/HabitRPG/Repositories/Implementations/UserRepository.swift +++ b/HabitRPG/Repositories/Implementations/UserRepository.swift @@ -70,7 +70,7 @@ class UserRepository: BaseRepository { } func useSkill(skill: SkillProtocol, targetId: String? = nil) -> Signal { - return UseSkillCall(skill: skill, target: targetId).objectSignal.on(value: {[weak self] skillResponse in + return UseSkillCall(key: skill.key ?? "", target: skill.target ?? "", targetID: targetId).objectSignal.on(value: {[weak self] skillResponse in if let response = skillResponse { self?.localRepository.save(userID: self?.currentUserId, skillResponse: response) } @@ -92,6 +92,12 @@ class UserRepository: BaseRepository { }) } + func useDebuffItem(key: String) -> Signal { + return UseSkillCall(key: key).objectSignal.flatMap(.latest) {[weak self] _ in + return self?.retrieveUser() ?? Signal.empty + } + } + func runCron(tasks: [TaskProtocol]) { var disposable: Disposable? getUser().take(first: 1).on(value: {[weak self]user in diff --git a/HabitRPG/TableViewController/Modals/HRPGBuyItemModalViewController.swift b/HabitRPG/TableViewController/Modals/HRPGBuyItemModalViewController.swift index 0f4413d71..7e34773e1 100644 --- a/HabitRPG/TableViewController/Modals/HRPGBuyItemModalViewController.swift +++ b/HabitRPG/TableViewController/Modals/HRPGBuyItemModalViewController.swift @@ -423,6 +423,15 @@ class HRPGBuyItemModalViewController: UIViewController, Themeable { HRPGBuyItemModalViewController.displayViewController(name: "InsufficientGoldViewController", parent: topViewController) } }) + } else if (purchaseType == "debuffPotion") { + userRepository.useDebuffItem(key: key).observeResult { (result) in + switch result { + case .success(_): + successBlock() + case .failure(_): + HRPGBuyItemModalViewController.displayViewController(name: "InsufficientGoldViewController", parent: topViewController) + } + } } else { inventoryRepository.buyObject(key: key, price: value, text: text).observeResult({ (result) in switch result { diff --git a/Habitica API Client/Habitica API Client/User/UseSkillCall.swift b/Habitica API Client/Habitica API Client/User/UseSkillCall.swift index f3141bd34..f67a8e43c 100644 --- a/Habitica API Client/Habitica API Client/User/UseSkillCall.swift +++ b/Habitica API Client/Habitica API Client/User/UseSkillCall.swift @@ -11,9 +11,12 @@ import Habitica_Models import ReactiveSwift public class UseSkillCall: ResponseObjectCall { - public init(skill: SkillProtocol, target: String? = nil, stubHolder: StubHolderProtocol? = StubHolder(responseCode: 200, stubFileName: "user.json")) { - var url = "user/class/cast/\(skill.key ?? "")?targetType=\(skill.target ?? "")" - if let targetId = target { + public init(key: String, target: String? = nil, targetID: String? = nil, stubHolder: StubHolderProtocol? = StubHolder(responseCode: 200, stubFileName: "user.json")) { + var url = "user/class/cast/\(key)" + if let target = target { + url += "?targetType=\(target)" + } + if let targetId = targetID { url += "&targetId=\(targetId)" } super.init(httpMethod: .POST, endpoint: url, stubHolder: stubHolder)