IsThereAnyDeal / AugmentedSteam

Augments your Steam Experience
https://augmentedsteam.com
GNU General Public License v3.0
1.41k stars 86 forks source link

[Feature Request] Seamless ITAD integration #338

Closed enchained closed 4 years ago

enchained commented 5 years ago

For a long time I was thinking about quick adding and indication on Steam about ITAD - mark what's waitlisted, and add with default settings with a single click. I made a userscript that adds a button next to Steam's Add to wishlist, that either says that it's already waitlisted, or adds with default settings on click. I didn't publish it yet, cause it's still WIP and needs bugs fixing, quick removal feature, oauth prettifying etc. I was thinking about adding the indication and stuff to other Steam pages, like storefront or search, but was not sure how to get/store/update user data better, how to comply with continuous loading on scroll, etc. But now that there's Augmented Steam, my question is: Do you have any plans for more close ITAD integration? Cause I think it could fit pretty well and the extension already has very similar functions to adjust.

I see possible features as:

I think it would be extremely useful cause while the wishlist sync with ITAD is nice and all, if you remove the game from wishlist, it'll be removed from waitlist on next scheduled sync (correct me of I'm wrong and there is a one-way option). So since Steam just sends you notifications on ANY sale (sometimes with a big delay, sometimes I even get nothing), bi-directional sync doesn't make much sense if you just want to offload your wishlist a bit. To maintain just the priority games, wishlist for friends and events, etc. and leave all the good deals to ITAD. But usually you discover things on Steam itself and impulsively add them to wishlist and it just keeps bloating. My userscript made my life a bit easier in that regards, but I still have to open a specific game page to make sure I have it waitlisted on ITAD.

UPD: owned/collected part also suggested here: https://github.com/tfedor/AugmentedSteam/issues/335

MxtOUT commented 5 years ago

I don't think I quite get why you wouldn't want your wishlisted games in your waitlist

Revadike commented 5 years ago

I don't think I quite get why you wouldn't want your wishlisted games in your waitlist

Maybe because games in your steam wishlist you want exclusively for the steam platform. I know I want that.

MxtOUT commented 5 years ago

Since Steam has added this neat little menu for the "Ignore" option I suggest to create a similar menu for the wishlist.

If you disable the option that will be named something like "Automatically add wishlisted titles to waitlist", you'll be able to see this menu and decide between wishlist and/or wishlist. If this option stays enabled, it will sync all wishlist titles to the waitlist.

enchained commented 5 years ago

I don't think I quite get why you wouldn't want your wishlisted games in your waitlist

I'm not sure how you got to that conclusion. I want my wishlist games in my waitlist, I just don't want all my waitlist games duplicated in my wishlist. I don't want to get Steam emails on 10% off of everything. If I keep the sync up and remove something from the wishlist I would consider buying only on a big discount... it'll be removed from the waitlist on the next sync as well, right?

MxtOUT commented 5 years ago

I came to that conclusion because you wanted a separate waitlist button. If I understand you correctly, you thought that waitlisted games are imported to your wishlist. But that's not planned.

enchained commented 5 years ago

I came to that conclusion because you wanted a separate waitlist button. If I understand you correctly, you thought that waitlisted games are imported to your wishlist. But that's not planned.

No, I do not think that waitlisted games are imported to my wishlist. I'm not sure how else to explain this. I want to add games to ITAD waitlist from Steam pages. Right now Augmented Steam can't do that. But ITAD can do that (sort of) via the Steam wishlist sync. But it's two-way (hence the 'sync'), so if I use the Sync, and I want to keep the game in the waitlist, I can't just delete that game from Steam wishlist. But I don't like keeping hundreds or even thousands of titles in my Steam wishlist, it's getting cluttered and really hard to manage. This is where the separate waitlist button and indication could come to the rescue. Then I could just waitlist games without wishlisting them, and also see what I already waitlisted as tagged or highlighted on Steam. I just really want to make sure I don't miss any remotely good looking game from Steam storefront to quickly add to the waitlist with my default -70% off ITAD notification settings.

MxtOUT commented 4 years ago

Alright, I just merged the feature branch into the development branch, everything you've mentioned should be integrated except for the quick launch links (indications that you own the game elsewhere are there though)

enchained commented 4 years ago

Today was going through the PAX sale page, was waitlisting a lot of games via the dropdown, but then noticed that on the refresh of the game page "In waitlist" is not highlighted anymore, as if it weren't applied. At first, I thought it was because of games which didn't come out yet (although it would be useful to waitlist those too for the future), but then I repeatedly tried on games that are already selling and nothing seems to stick after the refresh. No relevant errors in console, couldn't figure out if the request to add actually happens on quick debug, no requests on network tab though.

TLDR waitlisting doesn't seem to work currently

@MxtOUT does it reproduce for you? If not, how can I debug it better?

Revadike commented 4 years ago

@enchained what dropdown option? image

Revadike commented 4 years ago

I guess you mean on the app store page itself. I too have this issue. Investigating...

Revadike commented 4 years ago

The request went through successfully and its response was {".meta":{"games":0,"recognizedGames":1}}. It also appears in the waitlist on the itad site. So, that does not seem to be the problem.

enchained commented 4 years ago

Yes, I've meant the game pages. Thanks for looking into it! Will continue to debug locally.

I set a breakpoint on store.js:1102 await Background.action("itad.addtowaitlist", this.appid); It triggers when I'm trying to add something, then there's a lot of async code, wrappers and polyfills - things I'm not good at understanding well.

After that the 1104 line gets called: waitlisted = !waitlisted; Before it's called, waitlisted is null, so that means something didn't go well, I just don't know where to look yet. Will be able to try on another machine later.

UPD: Forgot that extensions have a background script too. Tried while debugging that on another title and it worked fine. Maybe before was something with the cache or loading times? And sometimes nothing happens for a while when you click Waitlist button, small animation might be helpful to prevent double-clicks.

Will debug a bit more if things repeat again.

Revadike commented 4 years ago

You should check what happens after await Background.action("itad.addtowaitlist", this.appid) Does it sync the local waitlist with itad's remote waitlist? Or just add the game in question to the local waitlist? That's what I'd expect, but that doesn't seem to happen.

enchained commented 4 years ago

Tried again without debugging: game is not added on ITAD site - adding it via dropdown on Steam - game is now added on ITAD site - refreshing Steam - no highlight. So it's surely adding remotely (saw successful requests on debug), but not to the local db? After a few minutes of waiting and refreshes it's highlighted, I suppose it was when the auto sync from ITAD happened. Repeated with two more games with same results.

await Background.action("itad.addtowaitlist", this.appid)

This line always gets me these warnings in chrome, but probably irrelevant:

store.js:1031 A cookie associated with a cross-site resource at http://www.youtube.com/ was set without the `SameSite` attribute. A future release of Chrome will only deliver cookies with cross-site requests if they are set with `SameSite=None` and `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5088147346030592 and https://www.chromestatus.com/feature/5633521622188032.
addWaitlistDropdown @ store.js:1031
async function (async)
addWaitlistDropdown @ store.js:972
AppPageClass @ store.js:631
(anonymous) @ store.js:4097
async function (async)
(anonymous) @ store.js:4086
(anonymous) @ store.js:4152
store.js:1031 A cookie associated with a cross-site resource at http://youtube.com/ was set without the `SameSite` attribute. A future release of Chrome will only deliver cookies with cross-site requests if they are set with `SameSite=None` and `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5088147346030592 and https://www.chromestatus.com/feature/5633521622188032.
addWaitlistDropdown @ store.js:1031
async function (async)
addWaitlistDropdown @ store.js:972
AppPageClass @ store.js:631
(anonymous) @ store.js:4097
async function (async)
(anonymous) @ store.js:4086
(anonymous) @ store.js:4152
store.js:1031 A cookie associated with a cross-site resource at https://youtube.com/ was set without the `SameSite` attribute. A future release of Chrome will only deliver cookies with cross-site requests if they are set with `SameSite=None` and `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5088147346030592 and https://www.chromestatus.com/feature/5633521622188032.

Maybe return IndexedDB.put("waitlist", null, appids, Array.isArray(appids)); in the background.js fails on adding? I followed it to return IndexedDB.db.put(objectStoreName, null, key); on line 1062, but not sure how to make sure if it has been added there or not.

enchained commented 4 years ago

Noticed one other thing - games added this way do not use the default settings: I was notified about 0% price cuts a few times.

https://api.isthereanydeal.com/v01/waitlist/import/?access_token= {version: "02", data: [{gameid: ["steam", "app/919640"]}]}

Request does not have a price/cut field, and API docs say "for omitted fields user's default settings will be used", but that's under the Form Import, not Direct Import. I wonder if that's a bug or intended behavior.

Either way, it would be useful to either use ITAD global default, or being able to set another default for the Steam button specifically.

Also, I was thinking about the way to display both ITAD and Steam info on the pages with many games. As far as I remember we have tags to display the additional info while avoiding the highlight override. They work with search results, package and bundle pages, but there's no option to use ITAD-related tags for now, only highlights. And I don't see any tags on the main and sale pages (although it might be tricky to implement due to the lack of space (maybe an icon with one letter and a tooltip will suffice?)).

MxtOUT commented 4 years ago

@enchained I remember fixing this, here's the relevant commit, will ship with the next update 5d65e5cb204798a912f49c74c88b99eda49dde99 For the other concerns, please open separate issues

enchained commented 4 years ago

@enchained I remember fixing this, here's the relevant commit, will ship with the next update 5d65e5c

Linked commit contains only the fix for the removeFromWaitlist function. Maybe the same fix should be applied to the addToWaitlist function too? https://github.com/tfedor/AugmentedSteam/blob/develop/js/background/background.js#L351

I checked the background IndexedDB right after waitlisting this time, and it contained one plain key on index 0 - 730860, while all other keys were like "app/1000030". I guess that may be why it's not detected as waitlisted until it's overriden with sync.

tfedor commented 4 years ago

Should be fixed in v1.4.2

enchained commented 4 years ago

@MxtOUT For the other concerns, please open separate issues

I opened related issues about the things I described above: https://github.com/tfedor/AugmentedSteam/issues/819 https://github.com/tfedor/AugmentedSteam/issues/820

@tfedor Could you please look at the ITAD API question in https://github.com/tfedor/AugmentedSteam/issues/820?