Skip to content

Commit

Permalink
Merge pull request #320 from ogri-la/4.8.0
Browse files Browse the repository at this point in the history
4.8.0
  • Loading branch information
torkus authored Dec 12, 2021
2 parents 32b6656 + 0304486 commit 0c43307
Show file tree
Hide file tree
Showing 57 changed files with 3,921 additions and 559 deletions.
37 changes: 37 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,43 @@ All notable changes to this project will be documented in this file. This change
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## 4.8.0 - 2021-12-12

### Added

* Gitlab support.
- similar to addons hosted on Github, Gitlab addons must be using releases with custom assets (not the default ones).
* multi-toc support.
- the presence of multiple .toc files determines if an update is necessary when switching game tracks.
- a warning is issued if the suffix of a `.toc` file doesn't match the `Interface Version` within it.
- for example, `SomeAddon-Classic.toc` is using a `20501` as it's interface version.
- this may lead to false positives for the few addons that are named `SomeAddon-Classic` and use multiple toc files.
- a warning is issued if there are multiple non-identical sets of toc data for the same game track.
- for example, an addon has `SomeAddon-Classic.toc` and `SomeAddon-Vanilla.toc` (both valid), but `-Vanilla.toc` data is not identical to `-Classic.toc`.
- in these cases the first in the group is used with '-Classic' having alphabetic priority over '-Vanilla', '-BCC' over '-TBC', etc.
* `release.json` support for Github and Gitlab.
- this file is generated by Bigwigs packager and includes extra information about files in a 'release'.
- a 'release' is a bundle of files, including the addon zip file, in Github and Gitlab attached to a revision tag.
- it is being used to find the supported game tracks for a release if they can't be guessed in any other fashion.

### Changed

* the 'source-id' column in the GUI has had it's max width removed.
- this is because Gitlab addons can have very long IDs.
* Github addons are no longer assumed to be for retail/mainline unless released prior to the release of Classic.
* Github addons will now do extra checks to determine game tracks for the latest release, on initial import and during the user-catalogue refresh.
- if absolutely no game tracks can be found we default to retail.
- this may be replaced in the future by actually downloading a release and inspecting it's contents
* http downloads will no longer be re-attempted on client (4xx) errors, server (5xx) and connection errors only.
- this fixes the multi-second pause before an error while updating addons that have gone away.

### Fixed

* a minor bug in translating an interface version (10100) to a game track ("classic").
- a bad value might have caused a stacktrace in the console
* stability improvements to the 'refresh user catalogue' feature.
- 404s, transient server errors and unhandled exceptions will no longer stop the update process.

## 4.7.0 - 2021-10-31

### Added
Expand Down
45 changes: 36 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

It supports Linux and macOS.

It supports addons hosted by Curseforge, wowinterface, Tukui and Github.
It supports addons hosted by Curseforge, wowinterface, Tukui, Github and Gitlab.

[![strongbox version 4.7.0](./screenshots/screenshot-4.7.0-installed-skinny-thumbnail.jpg)](./screenshots/screenshot-4.7.0-installed-skinny.png?raw=true)
[![strongbox version 4.7.0](./screenshots/screenshot-4.7.0-installed-thumbnail.jpg)](./screenshots/screenshot-4.7.0-installed.png?raw=true)
Expand All @@ -22,14 +22,14 @@ Arch Linux users can install `strongbox` from the [AUR](https://aur.archlinux.or

For other Linux users:

1. download: [./releases/strongbox](https://github.com/ogri-la/strongbox/releases/download/4.7.0/strongbox)
1. download: [./releases/strongbox](https://github.com/ogri-la/strongbox/releases/download/4.8.0/strongbox)
2. make executable: `chmod +x strongbox`
3. run: `./strongbox`

If you're on macOS or having a problem with the binary or just prefer Java `.jar` files (requires Java 11+):

1. download: [./releases/strongbox-4.7.0-standalone.jar](https://github.com/ogri-la/strongbox/releases/download/4.7.0/strongbox-4.7.0-standalone.jar)
2. run: `java -jar strongbox-4.7.0-standalone.jar`
1. download: [./releases/strongbox-4.8.0-standalone.jar](https://github.com/ogri-la/strongbox/releases/download/4.8.0/strongbox-4.8.0-standalone.jar)
2. run: `java -jar strongbox-4.8.0-standalone.jar`

## Usage

Expand Down Expand Up @@ -59,13 +59,16 @@ Afterwards, use the `Update all` button to update all addons with new versions a
- wowinterface
- tukui
- github (using *releases*)
- gitlab (using *releases*)
* [import and export lists of addons](#import-and-export-lists-of-addons)
* [safeguards against bad addons](#safeguards-against-bad-addons)
* [warnings when addons install other bundled addons](#warnings-when-addons-install-other-bundled-addons)
* [ignore addons to prevent accidental changes](#ignore-addons-to-prevent-accidental-changes)
* [mutual dependency tracking](#mutual-dependency-tracking)
* [installing a previous release of an addon](#installing-a-previous-release-of-an-addon)
* [pinning an addon to a specific release](#pinning-an-addon-to-a-specific-release)
* [multi-toc support](#multi-toc-support)
* [release.json support](#releasejson-support)

## Recognition

Expand Down Expand Up @@ -98,13 +101,14 @@ This software interacts with the following remote hosts:
* [api.github.com](https://developer.github.com/v3/repos/releases)
- to download repository and release data for addons hosted on Github
- to download the latest `strongbox` release data
* [gitlab.com](https://gitlab.com)
* [github.com/ogri-la/strongbox-catalogue](https://github.com/ogri-la/strongbox-catalogue), to download addon catalogues

These hosts *may* redirect requests to other hosts.

These interactions use a HTTP user agent header unique to `strongbox` so that it may be identified easily:

"strongbox/4.0 (https://github.com/ogri-la/strongbox)"
"strongbox/4.x (https://github.com/ogri-la/strongbox)"

Running strongbox with `--debug` will generate a file called "debug.log" that I may ask you to upload if you report a
bug. *Some* of the details it contains are:
Expand Down Expand Up @@ -210,11 +214,12 @@ Strongbox supports installing addons from the following addon hosts:
* [curseforge](https://www.curseforge.com/wow/addons)
* [wowinterface](https://wowinterface.com/addons.php)
* [tukui](https://www.tukui.org)
* [github](https://www.github.com), using *releases*
* [github](https://www.github.com)
* [gitlab][https://gitlab.com)

Click the `search` tab and begin typing. Select the addon you wish to install and click the `install selected` button.

Addons hosted on Github must meet [certain requirements](./github-addons.md) before they can be installed.
Addons hosted on Github and Gitlab must be using releases with custom assets before they can be installed.

#### Github API authentication

Expand All @@ -240,9 +245,9 @@ Click `File` and then select `Export list of addons`.

This allows for simple backups of the *current addon directory* and the sharing of lists of addons.

Github addons installed in *any* addon directory can be exported as a single list.
Addons installed using `File -> Import addon` in *any* addon directory can be exported as a single list.

Click `File` and then select `Export Github addon list`.
Click `File` and then select `Export the user-catalogue`.

### safeguards against bad addons

Expand Down Expand Up @@ -297,6 +302,7 @@ Strongbox currently supports installing previous releases for:

* Curseforge
* Github
* Gitlab

### pinning an addon to a specific release

Expand All @@ -307,6 +313,27 @@ Right-click an addon and select `Pin release`.
Pinned addons won't be marked as having updates available and other addons won't be able to overwrite the files of a
pinned addon.

### multi-toc support

Introduced [in May 2021](https://github.com/Stanzilla/WoWUIBugs/issues/68#issuecomment-889431675), the WoW game client
supports searching for multiple `.toc` files based on a suffix (or lack of one).

For example, `SomeAddon-Classic.toc` will be preferred in the classic game client over `SomeAddon.toc`.

Strongbox also searches for and reads the toc data from the most appropriate file.

Multiple toc files also help determine if an update is required or not.

### release.json support

The `release.json` file is generated by [BigWigsMods/packager](https://github.com/BigWigsMods/packager) and includes
extra information about files in a Github/Gitlab 'release'.

No documentation or specification seems to exist for it but there are [plenty of examples](https://github.com/layday/github-wow-addon-catalogue/blob/main/addons.csv).

Because another HTTP request is required to download the file it is only consulted for the latest release and only if
the game tracks for a release can't be otherwise guessed.

## Misc

Original Swing GUI was last available in version 3.x using: `./strongbox --ui gui1`
Expand Down
174 changes: 86 additions & 88 deletions TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,90 +6,103 @@ see CHANGELOG.md for a more formal list of changes by release

## done

* gui, synthetic 'version' column
- combines 'installed' and 'available' columns
- because most of the time the two columns are the same
- displays the available version if it exists
- style the version value if update available?
- done
* gitlab as addon host
- https://gitlab.com/search?search=wow+addon
- returned to bucket 2019-12-04, notes:
- gitlab doesn't handle releases like github does
- https://stackoverflow.com/questions/29520905/how-to-create-releases-in-gitlab
- there are very few gitlab addons (88)
- where did this number come from?
- api is quite slow
- update: as of Oct 2020 gitlab sucks a little bit less and, like github, you can attach binaries to releases
- https://gitlab.com/explore/projects?tag=World+of+Warcraft
- https://gitlab.com/shrugal/PersoLootRoll
- any others ...?

* multi-toc support
- https://github.com/Stanzilla/WoWUIBugs/issues/68#issuecomment-830351390
- https://gitlab.com/woblight/strategos
- has no otherwise identifying game track in it's name, toc file or releases
- but it does support all three versions of wow

* gui, toggleable columns as a menuitem
- ensure a 'reset' to defaults option
- don't change current set of columns until next major release
* add release.json support for github/gitlab addons
- https://github.com/layday/instawow/discussions/72
- done

* gui, any new/synthetic columns?
- human friendly update column with "updated x years/months/days/hours/minutes" ago
- https://stackoverflow.com/questions/32511405/how-would-time-ago-function-implementation-look-like-in-clojure
- number of releases?
- nah, for wowinterface and tukui this will be '1' most of the time
- 'browse local files'
* refresh catalogue is not so healthy
- errors during refresh should appear in the log next to the appropriate addon
-done
- 404s shouldn't be retried. the addon is gone
- done
- pinned/unpinned
- perhaps also remove the (pinned) from the available column and make it an icon next in the uber button
- tags
- done
- done

* gui, can I make column widths dynamic?
- I'd like the 'version' columns to fit exactly, always.
- sorry, not going to happen. we have min, max and pref widths as always.
- done
## todo

* gui, switch to tree-table-view for installed addons that are grouping other addons
- at least investigate how difficult this might be.
- done
## todo bucket (no particular order)

* bug, explicitly ignoring an addon gives it a dummy updated-date
- if an updated-date doesn't exist we shouldn't require that it does exist ...
- done. it was being polyfilled when it should have been ignored.

* bug, I can reinstall and install a specific release for an explicitly ignored addon
- but not an implicitly ignored addon. weird.
- investigated and it's part of a larger problem:
- the context menu isn't being refreshed properly between actions
- this is because the state in the :selected-addon-list is different to that in the :installed-addon-list
- that was just modified by the action.
- selecting and deselecting a thing will update this state so it works
- but right-clicking immediately after performing such an action results in a weird state
- this can be overcome by clearing the selected items between actions
- clearing :selected-addon-list is not enough however, the gui table needs to have it's selection changed as well
- done
* http, add with-backoff support to download-file
- just had a wowinterface addon timeout

* bug, tukui is dead again and the jobs are just hanging
- I thought I put a timeout on this?
- put a timeout on http connections and requests???
- can jobs be given a timeout as well?
- see tukui--stall-crash
- looks like the timeout was working, but after timing out it raises a java.net.ConnectException
- I have handling for a SocketTimeoutException which is different
- done
* replace multi-error messages with a single multi-line error message

* bug, a timeout from curseforge during scraping at page 171 prevent pages 171-182 from being scraped
- we should be kinder when scraping.
- add a delay between requests
- done
- we should be more robust when scraping.
- add retries with exponential backoff
- done
* user catalogue pane
- context menu
- refresh selected
- remove selected
- button bar
- refresh all button
- menu
- 'refresh all' switches to user catalogue pane
- push user catalogue in app state
- so we can see updates happening to catalogue entries as they happen
- write catalogue *once* after all items in operation updated
- rather than once per update

* revisit the 'File -> Export Github addon list'
- is this the user catalogue?
- it is.
- rename
- done
* user catalogue, refresh happens in parallel

* update image thumbnails
- they're getting a bit stale
- done
* a more permanent store than just cached files
- I want to store release data permanently
- multiple pages
- release.json

* http, exponential backoff for failing http requests
- done
* github, can we support addons that have no detectable game tracks, no toc files, no release.json, nothing but downloadable assets?
- https://github.com/RealUI/RealUI
- we could download it, unpack it and inspect it then?

## todo
* github, can we support addons that are splitting their game track releases over separate releases?
- like Aptechka
- https://github.com/rgd87/Aptechka/releases
- fucking /sigh!

* add support for 'Interface-Retail', 'Interface-Classic', 'Interface-BCC'
- how much of a thing is this?
- is it more of a templating thing?
- https://github.com/Myrroddin/MrBigglesworthDeath/blob/master/MrBigglesworthDeath.toc

## todo bucket (no particular order)
* github, gitlab, are we paginating release calls?

* disable support for curseforge
- https://mailchi.mp/overwolf/whats-new-with-overwolf-curseforge-november3

* github, like gitlab, use presence of multiple toc files to determine game track support

* complex export pane
- choose format
- json, csv, edn
- choose to keep ignored or not
- choose fields to keep
- warning if not enough fields for import

* bug, gui, 'updated' column is using dummy date in certain cases
- I thought I fixed this?

* gitlab, add optional API authentication like github

* column profiles
- 'skinny', 'fat', 'default'

* offer to clean up .nfo files when removing a directory

* http, curseforge, don't pause between requests if resource was cached

* bug, stacktrace on double refresh

Expand All @@ -105,25 +118,6 @@ see CHANGELOG.md for a more formal list of changes by release
* gui, try replacing the auto fit columns with something like this:
- https://stackoverflow.com/questions/14650787/javafx-column-in-tableview-auto-fit-size#answer-49134109

* multi-toc support
- https://github.com/Stanzilla/WoWUIBugs/issues/68#issuecomment-830351390

* add release.json support for github/gitlab addons

* gitlab as addon host
- https://gitlab.com/search?search=wow+addon
- returned to bucket 2019-12-04, notes:
- gitlab doesn't handle releases like github does
- https://stackoverflow.com/questions/29520905/how-to-create-releases-in-gitlab
- there are very few gitlab addons (88)
- where did this number come from?
- api is quite slow
- update: as of Oct 2020 gitlab sucks a little bit less and, like github, you can attach binaries to releases
- https://gitlab.com/explore/projects?tag=World+of+Warcraft
- https://gitlab.com/shrugal/PersoLootRoll
- any others ...?


* gui, toggleable highlighers as a menuitem
- highlight unmatched
- highlight updates
Expand Down Expand Up @@ -301,6 +295,10 @@ see CHANGELOG.md for a more formal list of changes by release
* remove the (pinned) and (installed) labels from from the 'available' column
* drop support catalogue v1
- a prerequisite for v5 then would be introducing a new catalogue
* readme, the ~your machine's `hostname`~ bit.
* readme, the "Original Swing GUI was last available in version 3.x using" bit
* rename 'retail' to 'mainline'
- pretty big change ;) but probably for the best.

## catalogue v3 / capture more addon data

Expand Down
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<groupId>ogri-la</groupId>
<artifactId>strongbox</artifactId>
<packaging>jar</packaging>
<version>4.7.0</version>
<version>4.8.0</version>
<name>strongbox</name>
<description>World Of Warcraft Addon Manager</description>
<url>https://github.com/ogri-la/strongbox</url>
Expand All @@ -18,7 +18,7 @@
<url>https://github.com/ogri-la/strongbox</url>
<connection>scm:git:git://github.com/ogri-la/strongbox.git</connection>
<developerConnection>scm:git:ssh://git@github.com/ogri-la/strongbox.git</developerConnection>
<tag>84f8fdfe86731715e5b62b24e1c03cb97fea56a3</tag>
<tag>6edf6d2501c059d66e63da3c9d4d0997027a7b11</tag>
</scm>
<build>
<sourceDirectory>src</sourceDirectory>
Expand Down
Loading

0 comments on commit 0c43307

Please sign in to comment.