Skip to content

Possible Meet SubscriptionStoreView .subscriptionStatusTask bug #6

@simsherpa

Description

@simsherpa

Hello, I think I might have found a bug in the subscription check and assignment logic.

Here's what I found: The code will resolve to .success but set passStatus = .notSubscribed. That added debug print statement demonstrates that.

Sample Code:

.subscriptionStatusTask(for: passIDs.group) { taskStatus in
            self.status = await taskStatus.map { statuses in
                await ProductSubscription.shared.status(
                    for: statuses,
                    ids: passIDs
                )
            }
            switch self.status {
            case .failure(let error):
                passStatusModel.passStatus = .notSubscribed
            case .success(let status):
                passStatusModel.passStatus = status
                print("Status from subscriptionStatusTask = .success | passStatus actually set to \(passStatusModel.passStatus)")
            case .loading: break
            @unknown default
           }
       }

In my case I'm relying on these results to show/dismiss the subscription sheet -- so I modified Code as follows to correct this behavior:

switch self.status {
            case .failure(let error):
                passStatusModel.passStatus = .notSubscribed
                showSubscriptionView = true
            case .success(let status):
                passStatusModel.passStatus = status
                if passStatusModel.passStatus == .notSubscribed {
                    showSubscriptionView = true
                } else {
                    showSubscriptionView = false
                }
            case .loading: break
            @unknown default: break
            }
        }

Thoughts?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions