testpushpleaseignore / acquisition

GNU General Public License v3.0
25 stars 5 forks source link

Support for map tabs, unique tabs, and other nested tabs #46

Open gerwaric opened 8 months ago

gerwaric commented 8 months ago

Currently, Acquisition does not fetch items from map stash tabs or unique stash tabs, but as part of implementing OAuth and the new API, I think I've figured out how to handle these cases.

I'm working on this in my fork at https://github.com/gerwaric/acquisition, but I created an issue here because (a) I did not see an existing related issue, and (b) people may still be monitoring this repository for updates.

The issue is that these special stash tabs are implemented as nested tabs under the hood. To fetch maps from a map stash, for example, you first request the list of stash tabs. Then you see that one of them is a map stash tab. Then you have to request the full contents of the map stash tab to see its children. Then you have to make a separate request for each of these child tabs to fetch their contents. The procedure for fetching items from unique tabs is the same.

Because of how GGG has implemented their API, it's not possible to know anything about a stash tab's children until you request the full contents of the parent stash tab. However, the current design of acquisition is built around constructing a complete list of stash tabs at the start of an update. This means acquisition only requests the original parent map stash tab, but ignores its children that contain the actual maps.

The bad news is that this means rewriting significant portions of acquisition's internals to support the new API, including a new database format for the data files, as well as changes to the ItemLocation and ItemsModel classes to aggregate items from child stash tabs into their parents, so the user sees only the original parent stash tab. This means it may be a while before a public beta is ready, and there are likely to be a new set of bugs that will come with it.

TL;DR once I get OAuth and the new API fully working, acquisition should be able to fetch maps from map stash tabs, uniques from unique stash tabs, or items from any other kind of nested stash tab.