We have deprecated this repo in favor of ajour/catalog.
This project generates a multiple JSON files which is used in Ajour. The files are updated every 6 hours(0:00/6:00/12:00/18:00 UTC).
License: MIT License
We have deprecated this repo in favor of ajour/catalog.
This project generates a multiple JSON files which is used in Ajour. The files are updated every 6 hours(0:00/6:00/12:00/18:00 UTC).
We should add TBC support, which is a new flavor.
Flavor should be called: wow_burning_crusade
(we have wow_retail
, and wow_classic
now)
{id: 161, name: "The Burning Crusade"}
)wow_burning_crusade
flavored addons.I would like to show gameVersion
in the Catalog in Ajour. The gameVersion
indicate which version of Wow the addon supports. So it's a little more fine grained than flavor
which just says "this addon is made for retail" - gameVersion
is then saying which PATCH for a given flavor it supports.
This is how it looks in My Addons:
How do you get it?
So for Tukui it's easy. In their dataset its called patch
.
{
"id": "3",
"name": "AddOnSkins",
"small_desc": "Skins for AddOns",
"author": "Azilroka",
"version": "4.46",
"screenshot_url": "https://www.tukui.org/addons/Azilroka/1503198132/screenshot.png",
"url": "https://www.tukui.org/addons.php?download=3",
"category": "Skins",
"downloads": "1446305",
"lastupdate": "2020-10-19 02:30:26",
"patch": "9.0.1",
"web_url": "https://www.tukui.org/addons.php?id=3",
"last_download": "2020-10-20 19:50:03",
"changelog": "https://www.tukui.org/addons.php?id=3&changelog",
"donate_url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=TENQSTDX5SEWE"
}
For Curse its a little more advanced. Heres a single addon: https://paste.rs/FfS.json
This is also the array we use to get flavors from:
Here's the logic:
We want to select the gameVersion
from the object with fileType = 1
(means stable) and the highest projectFileId
.
So from the above posted it would be:
{
"gameVersion": "9.0.1",
"projectFileId": 3079473,
"fileType": 1,
"gameVersionFlavor": "wow_retail"
},
{
"gameVersion": "1.13.5",
"projectFileId": 3077317,
"fileType": 1,
"gameVersionFlavor": "wow_classic"
}
How do we want it in our json file? Well good question because we (I..) should properly have foreseen this future where we want a "flavor" object with information rather than just an array with the flavors. I don't really wanna break compatibility and on the other hand, I don't really wanna make a v2 of the file. Any good ideas? I think my suggestion would be to create a object with { flavor, gameVersion }
and keep what we have and then eventually deprecate and remove the old flavor array... but im open for suggestions.
When installing from GitHub, Ajour may install the wrong version, e.g. of this repo:
https://github.com/raethkcj/RatingBuster
It has a release.json that should tell Ajour what to install, but it still installs the wrong version by default for Classic TBC at least.
We should add townlong yak as a source to the catalog. The source is the following: https://hub.wowup.io/addons/author/foxlit.
Each addon from the json looks like:
{
"id": 35,
"repository": "https://www.townlong-yak.com/addons/venture-plan",
"repository_name": "Venture Plan",
"source": "TownlongYak",
"description": "<p>Interface improvements for Adventure Campaign missions.</p>",
"homepage": "https://www.townlong-yak.com",
"image_url": "https://www.townlong-yak.com/addons/static/icon.png",
"owner_image_url": "https://www.townlong-yak.com/addons/static/icon.png",
"owner_name": "foxlit",
"total_download_count": 0,
"funding_links": [],
"releases": [{
"body": "<p>Adventurer selection UI changes and hotfixed ability data.</p>",
"download_count": 0,
"download_url": "https://www.townlong-yak.com/addons/ul/384693caa4df85b04535152df04e616b2da971d2a/install.zip",
"external_id": "18e7e5f7a855399ee93c0671291fff2b",
"game_version": "90002",
"id": 1397,
"name": "venture-plan-4.08",
"prerelease": false,
"published_at": "2021-02-01T00:05:40.187Z",
"tag_name": "venture-plan-4.08",
"url": "https://www.townlong-yak.com/addons/ul/d86ed82501fbb3c4b748c44f5a38aa9f5032d134f/install.zip",
"game_type": "retail"
}]
}
We should transform it to the following:
{
"id":35,
"websiteUrl":"https://www.townlong-yak.com/addons/venture-plan",
"dateReleased":"2021-02-01T00:05:40.187Z",
"name":"Venture Plan",
"summary":"<p>Interface improvements for Adventure Campaign missions.</p>",
"numberOfDownloads":0,
"categories":[],
"flavors":["wow_retail"],
"gameVersions":[{"flavor":"wow_retail","gameVersion":"90002"}],
"source":"townlong-yak"
}
@tarkah do we need the download_url
here from the release actually?
@petergp would you be up for helping the initial mapping here?
In Ajour we have a concept of flavors
. There are currently two flavors: classic
and retail
. A specific addon is created for one of the two flavors, but the bigger addons has a version to each flavor.
In the Catalog view of Ajour we will have two install buttons on each addon: [ classic ]
[ retail ]
. Then when we press either of the buttons we know which addon to request from the API.
So, in order to show those two buttons we need to know what flavor a addon has. For the curse
I have done the mapping:
Each addon will now have:
"flavors": [
"wow_classic",
"wow_retail"
]
So in the above case this specific addon exists in two version, one for each flavor. For the curse api it was simple because it was nested together with some other info, but for tukui api its a bit different. They have two endpoints, one for each flavor:
retail: https://www.tukui.org/api.php?addons=all
classic: https://www.tukui.org/api.php?classic-addons=all
retail_response[0]:
{
"id": "3",
"name": "AddOnSkins",
"small_desc": "Skins for AddOns",
"author": "Azilroka",
"version": "4.44",
"screenshot_url": "https://www.tukui.org/addons/Azilroka/1503198132/screenshot.png",
"url": "https://www.tukui.org/addons.php?download=3",
"category": "Skins",
"downloads": "1370208",
"lastupdate": "2020-07-13 01:36:31",
"patch": "8.3",
"web_url": "https://www.tukui.org/addons.php?id=3",
"last_download": "2020-10-03 18:41:31",
"changelog": "https://www.tukui.org/addons.php?id=3&changelog",
"donate_url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=TENQSTDX5SEWE"
}
classic_response[0].
{
"id": "3",
"name": "AddOnSkins",
"small_desc": "Skins for Blizzard UI & AddOns",
"author": "Azilroka",
"version": "4.44",
"screenshot_url": "https://www.tukui.org/addons/Azilroka/1565734166/screenshot.png",
"url": "https://www.tukui.org/classic-addons.php?download=3",
"category": "Skins",
"downloads": "149659",
"lastupdate": "2020-07-13 01:38:12",
"patch": "1.13.5",
"web_url": "https://www.tukui.org/classic-addons.php?id=3",
"last_download": "2020-10-03 18:25:03",
"donate_url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=TENQSTDX5SEWE"
}
So in above example we found a addon which is avaiable for both flavors, so in that case we should map that to:
{
"id": 3,
"name": "AddOnSkins",
"summary": "Skins for AddOns",
"numberOfDownloads": 1370201,
"categories": ["Skins"],
"source": "tukui",
"flavors": ["wow_retail", "wow_classic"],
}
Newest Tukui crashes the application with this: https://pastebin.pl/view/raw/26a67149
I used yesterdays version as a temporary fix.
Not sure what issue is right now as I haven't looked though and compared but we should properly fix this before next release, @petergp.
I'll try to debug in a little bit.
tukui_old.json.zip
tukui_crash.json.zip
So it seems like the two MAIN addons (Tuk and Elv) is actually not in API call. There are four version of them:
Both classic versions is in the call we use. So we are missing Tukui Retail and Elvui Retail. These are actually the two "main" addons where all the others are addons to these.
We can get them from these two sites:
Elvui Retail: https://www.tukui.org/api.php?ui=elvui
Tukui Retail: https://www.tukui.org/api.php?ui=tukui
I've added a jq
for Tukui I think will work:
{id: .id, dateReleased: .lastupdate, websiteUrl: .web_url, name: .name, summary: "", numberOfDownloads: .downloads, categories: [.category], flavors: ["wow_retail"], gameVersions: [{game_version: .patch, flavor: "wow_retail"}], source: "tukui"}
We should add these to tukui.json
if possible.
Certain addon releases do not present a "gameversion" in the api response. I do not know if this is a bug in curseforge, by design or an oversight on the part of the addon authors when uploading to curseforge.
Either way, it results in an addon that cannot be found via Ajour's Catalog tab. Looking in the curse.json there are records for the addons, but they are listed as having no flavors (and no gameVersions) and therefore it's not possible to perform a search in Ajour that would return it.
I think this is because curse.sh does a grouping per gameversion to get unique flavors and gameversions: https://github.com/casperstorm/ajour-catalog/blob/master/curse.sh#L32-L39
Examples include:
Angrier World Quests: https://addons-ecs.forgesvc.net/api/v2/addon/426990
Stay Collapsed: https://addons-ecs.forgesvc.net/api/v2/addon/430968
API response:
Notice gameVersion is [] but gameVersionFlavor has a value: wow_retail.
We would like to have the last (big) source into the catalog. Wowinterface.
I think we have to make it a two step rocket, and call two different APIs. Heres the details:
Endpoint for all addons: https://api.mmoui.com/v4/game/WOW/filelist.json
Example data:
[
{
"id": 3989,
"categoryId": 40,
"version": "3.3.2 BETA 2",
"lastUpdate": 1268587698000,
"title": "Recipe Book",
"author": "ayradyss",
"fileInfoUri": "https://www.wowinterface.com/downloads/info3989-RecipeBook.html",
"downloads": 119502,
"downloadsMonthly": 34,
"favorites": 744,
"gameVersions": null,
"checksum": "eb076e4ad97ba73300120e18ddcb7f53",
"addons": null
}
]
From this we can build the initial object:
{
"id": 3989,
"websiteUrl": "https://www.wowinterface.com/downloads/info3989-RecipeBook.html",
"dateReleased": "1268587698000",
"name": "Recipe Book",
"summary": NULL,
"numberOfDownloads": 119502,
"categories":[40],
"flavors": ["wow_retail"], // if categoryId == 160 ? "wow_classic" : "wow_retail"
"gameVersions": [{ "flavor": "wow_retail", "gameVersion": "0" }], // gameVersions was null. But we know flavor because of above.
"source": "wowi"
}
The only missing field is summary
which we can get from this call here.
https://api.mmoui.com/v4/game/WOW/filedetails/3989.json
Note: This can be called with multiple ids, separated by comma.
Note: The description you get from that call is kinda useless, so i think we should skip it initially.
[{
"id": 3989,
"categoryId": 40,
"version": "3.3.2 BETA 2",
"lastUpdate": 1268587698000,
"checksum": "eb076e4ad97ba73300120e18ddcb7f53",
"fileName": "RecipeBook_3.3.2-b2.zip",
"downloadUri": "https:\/\/cdn.wowinterface.com\/downloads\/getfile.php?id=3989&d=1268587698&minion",
"pendingUpdate": 0,
"title": "Recipe Book",
"author": "ayradyss",
"description": "RecipeBook is a mod that allows you to browse tradeskill recipes with one alt and see whether your other alts know it. \r\n\r\n\r\n[CENTER][B][COLOR=Red] ************ PLEASE NOTE ******************[\/COLOR][\/B]\r\n[B][COLOR=Red] \r\nI apologize to everyone who's been with me for the last three and a half years (wow!) but I'm putting the addon on Inactive status. We are expecting our second baby Any Day Now and the lifestyle and financial changes that brings have forced me out - I don't have the time to maintain it and I'm barely logging into WoW as it is, so it doesn't make sense for me to try and spend what interest I can muster in the game into coding.\r\n\r\nIf someone wants to pick things up I will be happy to cede the addon over to someone else but I just can't do it.\r\n[\/COLOR][\/B]\r\n\r\n[B][COLOR=Red] Also: Your data WILL NOT carry over from old (prior to 3.0.2) versions.[\/COLOR][\/B]\r\n[B][COLOR=Red] ****************************************[\/COLOR][\/B] \r\n[\/CENTER]\r\n \r\n\r\n[I] For example:[\/I]\r\nI have character BetsyRoss, who is a tailor by nature. She knows Pattern: American Flag, but for some reason, I can never remember this when UncleScrooge goes to the aucthouse to buy patterns. \r\n * Previously, I would have to keep a written or mental list of BetsyRoss's known patterns so that UncleScrooge didn't buy her a second copy of Pattern: American Flag on accident. \r\n * Now, with RecipeBook, UncleScrooge can mouse over Pattern: American Flag and see \"Already known by: BetsyRoss\" right there on the tooltip - or, if he chooses, in a special chat tab just for RecipeBook information.\r\n \r\nIt's fun! It's helpful! It's easy to use! It's also still in development, so there are a few known issues and some miscellaneous housework to be done.\r\n\r\nRecipeBook is most easlily managed using the minimap button and integrated menus. However, there are some slash commands for those who prefer them:\r\n\r\nUsage: \/recipebook or \/rbk or \/rbook <options>\r\n * General:\r\n - [B]\/rbk help[\/B] : Displays a help message\r\n - [B]\/rbk on|off [\/B]: Turns RecipeBook's data display on or off. It will continue to update alts' tradeskills when the tradeskill frames are opened, so you have the best list possible.\r\n - [B]\/rbk config[\/B] : Opens the graphical config window.\r\n - [B]\/rbk skill:[\/B] Open the skill browse window, which allows you to browse known recipes by character and tradeskill. \r\n \r\n * Sharing: \r\n - [B]\/rbk send <alt> to <player>[\/B] : Sends your RecipeBook data for a given alt to another player. Use 'all' as your alt to send all alts you know. Use 'me' to send just your character.\r\n\t- [B]\/rbk update from <player>[\/B] : Requests an update of RecipeBook data from another player. \r\n\r\n\t\r\n * Banking: \r\n -[B]\/rbk bank[\/B] : Displays your banked items and banking options\r\n \r\n * Finding Recipes:\r\n\t- [B]\/rbk search <item>[\/B] : Searches for items containing the given string.\r\n - [B]\/rbk searchmats <item>[\/B] : Searches for items using materials which match the given string.\r\n \r\n\t* Auction House Options (only available via [B]\/rbk config[\/B]):\r\n\t- Color Recipes based on status: This will shade the icons for recipes you see in the Auction House based on whether other alts can learn them.\r\n\t- Default color scheme is as follows (in order of precedence): \r\n\t\t- Normal : Current alt can learn the recipe\r\n\t\t- Green : Another alt can currently learn the recipe\r\n\t\t- Orange : Current alt is the only character who will be able to learn the recipe (requires \/rbk self on)\r\n\t\t- Cyan : Some alt or alts will be able to learn the recipe (may include current character)\r\n\t\t- Red : No alt\/alts will be able to learn the recipe, based on current data\r\n\t\t- Dark Red : All available alts already know the recipe\r\n\t- Blackout Banked Recipes: This will shade the icons for recipes that you have banked black in the Auction House so that you can tell you already have a copy.\r\n\t\r\n\t* Debugging functions\r\n\t- [B]\/rbk debug[\/B] : Turns on debug mode\r\n\t- [B]\/rbk verbose[\/B] : Turns on verbose send mode.\r\n\r\nKnown issues:\r\n * RecipeBook only updates its recipe list when your tradeskill window is open. So, if BetsyRoss just learned Pattern: Giant American Flag, she'll have to open her Tailoring window before RecipeBook (or UncleScrooge) knows about it. \r\n\r\nHousekeeping: \r\n * Hopes for next phase: Updating your recipe list when you learn items (in progress). \r\n \r\nCompatibilities:\r\n The easiest way to add RecipeBook compatibility to *your* mod is to call the following in your tooltip output:\r\n RecipeBook_DoHookedFunction(tooltip, link);\r\n Where tooltip is the tooltip (or tooltip name) you're using and link is the item link itself. That will add RecipeBook's data lines.\r\n\r\nSpecial thanks to:\r\n Curse Gaming's Pentarion and Ghandi, for some hard work helping me debug the German client version. Particularly to Pentarion for ongoing translation work.\r\n \r\n\r\nPLEASE NOTE: If you learn a new recipe, you will have to open your appropriate tradeskill window to update RecipeBook's database. Hopefully this will change soon.",
"changeLog": "3.3.2: \r\n\t\t- THIS VERSION WILL WIPE YOUR DATA. RecipeBook will clear its database on first loading - this means that EVERYTHING will need to be reloaded: character skills, cached items, everything. I'm having trouble with old (uncached) data again.\r\n\t\t- THIS VERSION WILL RESET MOST OPTIONS. I made some changes for the color-coding customization.\r\n\t\tFIXED: \r\n\t\t- Guild Bank items should now tooltip correctly once again.\r\n\t\t- Several small changes in the code should now clarify whether the \"RecipeBook data not yet loaded\" error stems from a blank DB or a lag concern, and help eliminate it recurring.\r\n\t\t!NEW!\r\n\t\t+ Color customization added: Check the \"colors\" tab in the RecipeBook UI for an option to change the colors of items and text.\r\n\t\t+ If RecipeBook cannot quickly load all of your recipe\/reagent data, it will now give you a popup message to that effect. Clicking \"Accept\" will attempt to force-load all of the tradeskill data. \r\n\t\t\t- This replaces the \"Some items were not scanned for this tradeskill\" and \"Some reagents for this tradeskill's items were not yet in local cache\" messages that were previously in your chat frame.\r\n\t\t\t- This scan may lag the UI intermittently; do not do it when you are doing things that are control-intensive.\r\n\t\t\t- You have the option of clicking \"Cancel\" which will wait for the next time RecipeBook updates to check again.\r\n\t\t\t- Doing this scan in Dalaran or other high-lag areas may require a little time. You will be updated periodically on the status of the deep scan.\r\n\tBETA 2:\r\n\t\t- THIS VERSION WILL RESET DEFAULT OPTIONS. Whoops, I didn't check my set defaults closely enough.\r\n\t\t- TRANSLATIONS NEEDED: I have hacked a few lines and changed some others so that the non-English clients should stop erroring on popup.\r\n\t\t- Tidied up the help messages to stop suggesting \/rb when it doesn't work any longer :)\r\n\t\t- When someone new shares data with you it should now show up without requiring a reload of the UI.\r\n\t\t- Using the minimap icon to select a RecipeBook tab while the RecipeBook window is open now correctly loads that tab.",
"downloads": 119502,
"downloadsMonthly": 34,
"favorites": 744,
"images": [{
"thumbUrl": "https:\/\/cdn-wow.mmoui.com\/preview\/tiny\/pvw2746.jpg",
"imageUrl": "https:\/\/cdn-wow.mmoui.com\/preview\/pvw2746.jpg",
"description": "Output to the tooltip!"
}, {
"thumbUrl": "https:\/\/cdn-wow.mmoui.com\/preview\/tiny\/pvw560.jpg",
"imageUrl": "https:\/\/cdn-wow.mmoui.com\/preview\/pvw560.jpg",
"description": "Alternative output to chatframe"
}, {
"thumbUrl": "https:\/\/cdn-wow.mmoui.com\/preview\/tiny\/pvw2879.jpg",
"imageUrl": "https:\/\/cdn-wow.mmoui.com\/preview\/pvw2879.jpg",
"description": "Auction House Color Coding"
}]
}]
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.