Skip to content

Instantly share code, notes, and snippets.

@koke
Created March 8, 2022 12:25
Show Gist options
  • Save koke/b4bd32892a651713f16100cfd0ba35a6 to your computer and use it in GitHub Desktop.
Save koke/b4bd32892a651713f16100cfd0ba35a6 to your computer and use it in GitHub Desktop.
diff --git a/Hardware/Hardware/CardReader/StripeCardReader/StripeCardReaderService.swift b/Hardware/Hardware/CardReader/StripeCardReader/StripeCardReaderService.swift
index 88d5f9c4e..cf5a438c6 100644
--- a/Hardware/Hardware/CardReader/StripeCardReader/StripeCardReaderService.swift
+++ b/Hardware/Hardware/CardReader/StripeCardReader/StripeCardReaderService.swift
@@ -42,12 +42,12 @@ extension StripeCardReaderService: CardReaderService {
}
public var connectedReaders: AnyPublisher<[CardReader], Never> {
- connectedReadersSubject.eraseToAnyPublisher()
+ connectedReadersSubject.print("πŸžπŸ’³ connectedReaders").eraseToAnyPublisher()
}
/// The Publisher that emits reader events
public var readerEvents: AnyPublisher<CardReaderEvent, Never> {
- readerEventsSubject.eraseToAnyPublisher()
+ readerEventsSubject.print("πŸžπŸ’³ readerEvents").eraseToAnyPublisher()
}
public var softwareUpdateEvents: AnyPublisher<CardReaderSoftwareUpdateState, Never> {
@@ -211,14 +211,20 @@ extension StripeCardReaderService: CardReaderService {
// a single value or it will fail.
// This isn't enforced by the type system, but it is guaranteed as long as all the
// steps produce a Future.
- return createPaymentIntent(parameters)
- .flatMap { intent in
+ return waitForInsertedCardToBeRemoved()
+ .flatMap {
+ self.createPaymentIntent(parameters)
+ }.flatMap { intent in
self.collectPaymentMethod(intent: intent)
}.flatMap { intent in
self.processPayment(intent: intent)
}.flatMap { intent in
- self.waitForInsertedCardToBeRemoved(intent: intent)
- }.eraseToAnyPublisher()
+ self.waitForInsertedCardToBeRemoved()
+ .map { intent }
+ }
+ .map(PaymentIntent.init(intent:))
+ .print("πŸžπŸ’³ capturePayment")
+ .eraseToAnyPublisher()
}
public func cancelPaymentIntent() -> Future<Void, Error> {
@@ -406,7 +412,7 @@ private extension StripeCardReaderService {
}
}
- func waitForInsertedCardToBeRemoved(intent: PaymentIntent) -> Future<PaymentIntent, Error> {
+ func waitForInsertedCardToBeRemoved() -> Future<Void, Error> {
return Future() { [weak self] promise in
guard let self = self else {
return
@@ -414,7 +420,7 @@ private extension StripeCardReaderService {
// If there is no chip card inserted, it is ok to immediatedly return. The payment method may have been swipe or tap.
if !self.isChipCardInserted {
- return promise(.success(intent))
+ return promise(.success(()))
}
self.timerCancellable = Timer.publish(every: 1, tolerance: 0.1, on: .main, in: .default)
@@ -423,13 +429,13 @@ private extension StripeCardReaderService {
.sink(receiveValue: { _ in
if !self.isChipCardInserted {
self.timerCancellable?.cancel()
- return promise(.success(intent))
+ return promise(.success(()))
}
})
}
}
- func processPayment(intent: StripeTerminal.PaymentIntent) -> Future<PaymentIntent, Error> {
+ func processPayment(intent: StripeTerminal.PaymentIntent) -> Future<StripeTerminal.PaymentIntent, Error> {
return Future() { [weak self] promise in
Terminal.shared.processPayment(intent) { (intent, error) in
if let error = error {
@@ -438,7 +444,7 @@ private extension StripeCardReaderService {
}
if let intent = intent {
- promise(.success(PaymentIntent(intent: intent)))
+ promise(.success(intent))
self?.activePaymentIntent = nil
}
}
diff --git a/WooCommerce/WooCommerce.xcodeproj/xcshareddata/xcschemes/WooCommerce.xcscheme b/WooCommerce/WooCommerce.xcodeproj/xcshareddata/xcschemes/WooCommerce.xcscheme
index 76b727fdd..f9ac7b88d 100644
--- a/WooCommerce/WooCommerce.xcodeproj/xcshareddata/xcschemes/WooCommerce.xcscheme
+++ b/WooCommerce/WooCommerce.xcodeproj/xcshareddata/xcschemes/WooCommerce.xcscheme
@@ -125,7 +125,7 @@
</CommandLineArgument>
<CommandLineArgument
argument = "-stripe-verbose-logging"
- isEnabled = "NO">
+ isEnabled = "YES">
</CommandLineArgument>
<CommandLineArgument
argument = "-simulate-stripe-card-reader"
diff --git a/Yosemite/Yosemite/Base/Dispatcher.swift b/Yosemite/Yosemite/Base/Dispatcher.swift
index 0e4bd9a45..25a9a666b 100644
--- a/Yosemite/Yosemite/Base/Dispatcher.swift
+++ b/Yosemite/Yosemite/Base/Dispatcher.swift
@@ -73,6 +73,7 @@ public class Dispatcher {
guard let processor = processors[action.identifier] else {
return DDLogWarn("⚠️ No processor found for \(action.identifier)!")
}
+ DDLogDebug("πŸžπŸ’Œ \(type(of: action)).\(action)")
processor.onAction(action)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment