Skip to content

Commit

Permalink
squashed history
Browse files Browse the repository at this point in the history
  • Loading branch information
Torkus committed Mar 19, 2019
0 parents commit 8a4a2a9
Show file tree
Hide file tree
Showing 29 changed files with 7,572 additions and 0 deletions.
13 changes: 13 additions & 0 deletions .gitignore
@@ -0,0 +1,13 @@
*~
*.swp
/target
/classes
/checkouts
/state
pom.xml
pom.xml.asc
*.jar
*.class
/.lein-*
/.nrepl-port
.eastwood
18 changes: 18 additions & 0 deletions CHANGELOG.md
@@ -0,0 +1,18 @@
# Change Log
All notable changes to this project will be documented in this file. This change log follows the conventions of [keepachangelog.com](http://keepachangelog.com/).

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).

## [Unreleased]

## 0.1.0 - 2019-03-19
### Added
- initial release! squashed history
- a GUI and a very rough 'headless' mode
- two tabbed panes in the GUI, 'installed' and 'search'
- install, update and delete functionality for addons
- grouping newly installed addons if they unpack to multiple directories
- searching and installing from a complete list of curseforge addons
- a notice logger for operations that are happening
- logic to do the occasional large curseforge.com update and smaller incremental updates more regularly
685 changes: 685 additions & 0 deletions LICENCE.txt

Large diffs are not rendered by default.

79 changes: 79 additions & 0 deletions README.md
@@ -0,0 +1,79 @@
# wowman, a World of Warcraft Addon Manager

`wowman` is *open source*, *advertisement free* and *privacy respecting* software that interfaces with
[www.curseforge.com](https://www.curseforge.com/wow/addons) and the addon files in your World of Warcraft `Addons`
directory.

It works like this:

1. downloads a list of publicly available addons
2. matches your installed addons to those in this list
3. updates out of date addons

## Audience

This software targets World of Warcraft users using Linux.

It may work on other platforms but it is only tested and supported on Linux.

## Requirements

* Java 8+

## Usage

1. download the [jar](#todo) file
2. run with `java -jar wowman-x.x.x.jar`
3. select your `Addons` directory (`/path/to/WoW/_retail_/Interface/Addons`)
4. select the addons you wish to update and click the `update` button

## Releases, bugs, questions, feedback, contributing

Changes are recorded in the [CHANGELOG.md](CHANGELOG.md) file.

All bugs/questions/feedback should go in [Issues](https://github.com/ogri-la/wowman/issues).

All contributions should take the form of a pull request with unit tests. [The licence](LICENCE.txt) is quite strict and
all contributions will be subject to it.

## Notes

A sub-directory called `state` will be created in the current directory. All configuration and cached data lives there.

Addon zip files are downloaded to your WoW `Addons` directory.

A file called `.wowman.json` is created within newly installed addons. This map specific attributes between
www.curseforge.com and the unpacked addon, as well as across addons that unpack to multiple directories.

This software interacts with the following remote hosts:

* [https://www.curseforge.com](https://www.curseforge.com), to download detailed addon data
* [https://github.com/ogri-la](https://github.com/ogri-la), to download a list of summary addon information

These interactions use a HTTP user agent header unique to `wowman` so it may be identified easily by www.curseforge.com

## Recognition

Under no circumstances whatsoever does this software:

* deal with advertising or advertisers
* collect, monitor or report upon your usage of `wowman` or your data
* attempt to monitise you, the user, in any way

This software also tries very hard to:

* be plain and uncomplicated
* do the least surprising thing
* clean up after itself
* not cause a bother - for you *or* curseforge

I benefit so much from the hard work of those who write free and open source software, including addon developers,
that it's my privilege to offer this small piece back.

[![wowman version 0.1.0](screenshot-0.1.0-thumbnail.jpg)](screenshot-0.1.0.png?raw=true)

## License

Copyright © 2018-2019 Torkus

Distributed under the GNU Affero General Public Licence, version 3 [with additional permissions](LICENCE.txt#L665)
213 changes: 213 additions & 0 deletions TODO.md
@@ -0,0 +1,213 @@
# todo.md

this is my own scratchpad for keeping track of things. it gets truncated frequently.

see CHANGELOG.md for a more formal list of changes by release

## done

* gui, sizing columns
- done
* search, install addons from search pane
- done
* installed, auto-load curseforge addons
- done
* installed, bug, list not refreshing after installing/updating
- done
* search, update after install
- done
* installed, notification that gui is doing something
- done
* grids, sort contents by column headers
- done
* gui, 'update all' from File menu
- done, see 'Addons' menu
* bug, gui, stacktrace selecting an item
- done, select-item was receiving both a deref'ed and a derefable value for 'ui'
* make the distinction between addon types clearer
- done
* gui, hide message log until it's working
- done, logging has been improved
* cli, scrape command
- done
* cli, gui command
- done
* gui, changing wow directories auto saves settings
- done
* gui, update-all needs to go to background thread
- also needs to update gui as it progresses
- done
* cli, args override local config
- done
* cli, list command
- done
* cli, list-updates command
- done
* cli, update all addons
- done
* gui, feature, re-install addon
- done
* gui, installed pane, hide dependencies
- done.
- known non-primary addons are now hidden
* bug, gui, groups of addons where there is no primary will be entirely hidden, like dbm
- switch :installed-addon-list to groups with group-level metadata?
- done
* gui, feature, remove/delete addon
- uninstalling an addon finds all of it's direct dependencies and uninstalls them also
- done
* gui, truncate updated-date
- done
* switch from objects and object serialisation in scraper
- this is preventing easy comparison in tests
* scraper, partial scrapes
- it's possible to do a full scrape (330+ pages to download) and then supplement it with just those that have changed in the last N days (3-4 pages to download)
- implement a download process
- look online for latest 'full' list, there should always be one
- if it's less that 330+ days old then it should always be a net win to download the latest updates
- determine gap between list and now
- download updates
- update curseforge-updates.json
- on load, load curseforge, merge curseforge-updates
- done
* gui, search, 'install' blocks until installed
- done
* disable writing expanded-addons.json when not debug mode
- done
* gui, make log line simpler for notice window
- done
* ensure a writeable directory for cached files et al
- a 'state' or 'conf' type directory
- is writable
- done
* tests, are broken
- fixed
* make client useragent friendlier
- let curseforge identify this client
- include client version, url
- done
* gui, format interface version
- done
* run as a jar
- done!
* bug, changing addon directory doesn't update addons
- done
* bug, state directory not being created
- done
* download curseforge.json from github
- done
* bug, 'update all' doesn't remove the 'true' value in the 'update?' column and requires a refresh
- done
* set licence
- agpl?
- see metabase: https://www.metabase.com/license/
- done
* bug, failure to find a cfg.json file causes a stacktrace
- setting a directory causes an auto-save however
- done
* bug, failure to find a curseforge.json causes a stacktrace
- related to downloading curseforge.json from github
- done
* remove 'host' from terminal log line
- done
* bug, 'failed to match' error message regression
- 2019-03-09 08:38:39.186 rama WARN [wowman.core:419] - failed to match installed addon 'world-quest-tracker' to an addon online. try searching for and re-installing it from the search menu
- fixed, bad nesting
* bug, gui, 'refresh' action doesn't show which addons are being updated
- fixed, refresh button wasn't releasing lock
* bug, bad data is entering the table somehow
- more often now after fixing selected-items bug
- suspect race condition somewhere
- was an event dispatch thread issue with selection of rows happening outside of edt
- done

## todo, 0.1.0 release

---

! first steps for new users will be:
- select a wow directory
- see addons appear
- see them updated from curseforge
this process can't be broken

---

* list of available addons are regenerated weekly and updated daily
- updates are merged into curseforge.json
- done
- datestamp in file should be updated
- done
- order should be preserved for easy diffing
- done

* travis-ci integration

* upload .jar artifacts

* add curseforge scraping to CI

* upload generated/updated curseforge.json to github

* scrutinise all files

* 0.1.0 release

## todo

* send etag header to github to prevent downloading unmodified curseforge.json file
- need to capture the etag sent to us when we first request the file
- etag should be stored and sent on subsequent requests for file
- where to store? curseforge.etag ?
* bug, FileNotFoundException (PermissionDenied) attempting to unzip addon belonging to root
- nothing reporting in log, just stacktrace in terminal
* gui, min-widths for updated, installed, available, update? and version fields
- rest can be elastic
* gui, search box gets focused immediately
* clear cached files option
- clears all cache files
* clear zip files options
- clears all downloaded zip files
* cached files policy
- nothing older than a week?
* gui, search pane, indicate results are paginated
* gui, error after installing addon
- failed to find value <something> in column '-addon-id'
- 19-02-28 00:51:20 rama WARN [wowman.ui.gui:267] - failed to find value tidy-plates in column 'addon-id'
- 19-02-28 00:51:24 rama WARN [wowman.ui.gui:267] - failed to find value omni-cc in column 'addon-id'
* cache downloaded file based on addon AND addon version
- is this still a thing?
* cli, update specific addon
* cli, install specific addon
* cli, colours!
* cli, interactive interface when no specific action specified
- you have N addons installed. what do you want to do? (list, update, update-all, delete) etc

* gui, both panes, filter by categories
* gui, prompt when attempting to install many addons at once
- skip prompt on re-installation
* gui, pagination controls in search pane
* gui, feature, install addon from local zipfile
- *not* the 'reinstallation' feature, but literally selecting a zipfile from somewhere and installing it
* gui, search pane, clear search button
* gui, installed pane, highlight rows that need updating
* gui, search, highlight rows that are installed
* gui, scroll tabs with mouse
* gui, search, order by date only orders the *current page* of results
* capture 'total downloads' from curseforge
* addon 'detail' tab
- link to curseforge
- donation url
- other addons by author ?
- list the hidden/sub dependencies
* gui, optional fields in the search and installed panes

## elaboration required

* testing, capture metrics with an eye to improving performance and speed
* mount, reconsider the use of this library
- might make gui wrangling easier
* headless gui mode?
- ./wowman -a update-all # should: load the gui, call update-all, exit


5 changes: 5 additions & 0 deletions lint.sh
@@ -0,0 +1,5 @@
#!/bin/bash
set -e
#git diff-index --quiet HEAD -- || { echo "commit your changes first"; exit 1; }
lein cljfmt fix
lein eastwood
38 changes: 38 additions & 0 deletions project.clj
@@ -0,0 +1,38 @@
(defproject wowman "0.1.0"
:description "World Of Warcraft Addon Manager"
:url "http://github.com/ogri-la/wowman"
:license {:name "GNU Affero General Public License (AGPL)"
:url "https://www.gnu.org/licenses/agpl-3.0.en.html"}

:dependencies [[org.clojure/clojure "1.9.0"]
[org.clojure/core.async "0.4.474"]
[org.clojure/spec.alpha "0.2.176"]
[org.clojure/tools.cli "0.4.1"] ;; cli arg parsing
[org.clojure/tools.namespace "0.2.11"] ;; reload code
[org.clojure/data.codec "0.1.1"] ;; base64 encoding
[org.clojure/data.json "0.2.6"] ;; better json decoding
[orchestra "2018.12.06-2"] ;; improved clojure.spec instrumentation
;; see lein deps :tree
[metosin/spec-tools "0.9.0" :exclusions [com.fasterxml.jackson.core/jackson-core]] ;; more improvements to clojure.spec handling
[com.taoensso/timbre "4.10.0"] ;; logging
[enlive "1.1.6"] ;; html parsing
[clj-http "3.8.0"] ;; better http slurping
[cheshire "5.8.1"] ;; nicer json serialisation (indents)
[seesaw "1.5.0"] ;; swing
[me.raynes/fs "1.4.6"] ;; file system wrangling
[slugify "0.0.1"]
[clj-time "0.15.0"]

;; remember to update the LICENCE.txt

]

:profiles {:uberjar {:aot :all}}

:main wowman.main

:plugins [[lein-cljfmt "0.6.4"]
[jonase/eastwood "0.3.5"]]
:eastwood {:exclude-linters [:constant-test]}

)
Binary file added screenshot-0.1.0-thumbnail.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added screenshot-0.1.0.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 8a4a2a9

Please sign in to comment.