right-align images, ensure that creator is init'd before first request
This commit is contained in:
parent
341236e170
commit
67f940f9e8
2 changed files with 31 additions and 8 deletions
|
@ -18,9 +18,28 @@ const jobsRowStart = 495;
|
||||||
const jobsRowTextSize = 30;
|
const jobsRowTextSize = 30;
|
||||||
const jobsRowTextSpacer = jobsRowTextSize * 2;
|
const jobsRowTextSpacer = jobsRowTextSize * 2;
|
||||||
|
|
||||||
|
const deityIconCol = 252;
|
||||||
|
const deityIconRow = 805;
|
||||||
|
|
||||||
|
const gcRankIconCol = 293;
|
||||||
|
const gcRankIconRow = 799;
|
||||||
|
|
||||||
const fcCrestCol = 345;
|
const fcCrestCol = 345;
|
||||||
|
const fcCrestRow = 800;
|
||||||
|
|
||||||
class CardCreator {
|
class CardCreator {
|
||||||
|
constructor(){
|
||||||
|
this.isInit = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
async ensureInit() {
|
||||||
|
if (this.isInit) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.init();
|
||||||
|
}
|
||||||
|
|
||||||
async init() {
|
async init() {
|
||||||
this.bgImage = await loadImage("./chara_n.png");
|
this.bgImage = await loadImage("./chara_n.png");
|
||||||
|
|
||||||
|
@ -81,6 +100,10 @@ class CardCreator {
|
||||||
console.log(`Refreshed counts: ${this.countMinion} - ${this.countMount}`);
|
console.log(`Refreshed counts: ${this.countMinion} - ${this.countMount}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async createCrest(crestAry) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
async createCard(charaId) {
|
async createCard(charaId) {
|
||||||
var response = await fetch(`https://xivapi.com/character/${charaId}?extended=1&data=FC,mimo`);
|
var response = await fetch(`https://xivapi.com/character/${charaId}?extended=1&data=FC,mimo`);
|
||||||
var data = await response.json();
|
var data = await response.json();
|
||||||
|
@ -141,26 +164,26 @@ class CardCreator {
|
||||||
ctx.fillText(data.Character.GuardianDeity.Name, 480, 280);
|
ctx.fillText(data.Character.GuardianDeity.Name, 480, 280);
|
||||||
var measure = ctx.measureText(data.Character.GuardianDeity.Name);
|
var measure = ctx.measureText(data.Character.GuardianDeity.Name);
|
||||||
var deityIcon = await loadImage('https://xivapi.com/' + data.Character.GuardianDeity.Icon);
|
var deityIcon = await loadImage('https://xivapi.com/' + data.Character.GuardianDeity.Icon);
|
||||||
ctx.drawImage(deityIcon, 480 + measure.width + 20, 252, 28, 28);
|
ctx.drawImage(deityIcon, deityIconRow, deityIconCol, 28, 28);
|
||||||
|
|
||||||
if (data.Character.GrandCompany.Company != null) {
|
if (data.Character.GrandCompany.Company != null) {
|
||||||
ctx.fillText(data.Character.GrandCompany.Company.Name, 480, 330);
|
ctx.fillText(data.Character.GrandCompany.Company.Name, 480, 330);
|
||||||
|
|
||||||
var measure = ctx.measureText(data.Character.GrandCompany.Company.Name);
|
var measure = ctx.measureText(data.Character.GrandCompany.Company.Name);
|
||||||
var gcRankIcon = await loadImage('https://xivapi.com/' + data.Character.GrandCompany.Rank.Icon);
|
var gcRankIcon = await loadImage('https://xivapi.com/' + data.Character.GrandCompany.Rank.Icon);
|
||||||
ctx.drawImage(gcRankIcon, 480 + measure.width + 20, 300, 40, 40);
|
ctx.drawImage(gcRankIcon, gcRankIconRow, gcRankIconCol, 40, 40);
|
||||||
}
|
}
|
||||||
if (data.Character.FreeCompanyName != null) {
|
if (data.Character.FreeCompanyName != null) {
|
||||||
var measure = ctx.measureText(data.Character.FreeCompanyName);
|
var measure = ctx.measureText(data.Character.FreeCompanyName);
|
||||||
|
|
||||||
var crestLayer2 = await loadImage(data.FreeCompany.Crest[0]);
|
var crestLayer2 = await loadImage(data.FreeCompany.Crest[0]);
|
||||||
ctx.drawImage(crestLayer2, 480 + measure.width + 20, fcCrestCol, 38, 38);
|
ctx.drawImage(crestLayer2, fcCrestRow, fcCrestCol, 38, 38);
|
||||||
|
|
||||||
var crestLayer1 = await loadImage(data.FreeCompany.Crest[1]);
|
var crestLayer1 = await loadImage(data.FreeCompany.Crest[1]);
|
||||||
ctx.drawImage(crestLayer1, 480 + measure.width + 20, fcCrestCol, 38, 38);
|
ctx.drawImage(crestLayer1, fcCrestRow, fcCrestCol, 38, 38);
|
||||||
|
|
||||||
var crestLayer0 = await loadImage(data.FreeCompany.Crest[2]);
|
var crestLayer0 = await loadImage(data.FreeCompany.Crest[2]);
|
||||||
ctx.drawImage(crestLayer0, 480 + measure.width + 20, fcCrestCol, 38, 38);
|
ctx.drawImage(crestLayer0, fcCrestRow, fcCrestCol, 38, 38);
|
||||||
|
|
||||||
ctx.fillText(data.Character.FreeCompanyName, 480, 380);
|
ctx.fillText(data.Character.FreeCompanyName, 480, 380);
|
||||||
}
|
}
|
||||||
|
|
6
index.js
6
index.js
|
@ -6,7 +6,6 @@ const port = process.env.PORT || 5000;
|
||||||
const { CardCreator } = require('./create-card');
|
const { CardCreator } = require('./create-card');
|
||||||
|
|
||||||
const creator = new CardCreator();
|
const creator = new CardCreator();
|
||||||
creator.init();
|
|
||||||
|
|
||||||
// node cachemanager
|
// node cachemanager
|
||||||
var cacheManager = require('cache-manager');
|
var cacheManager = require('cache-manager');
|
||||||
|
@ -28,15 +27,16 @@ var diskCache = cacheManager.caching({
|
||||||
app.get('/characters/id/:charaId.png', async (req, res) => {
|
app.get('/characters/id/:charaId.png', async (req, res) => {
|
||||||
var cacheKey = `img:${req.params.charaId}`;
|
var cacheKey = `img:${req.params.charaId}`;
|
||||||
var ttl = 60 * 60 * 4; // 4 hours
|
var ttl = 60 * 60 * 4; // 4 hours
|
||||||
|
ttl = 1;
|
||||||
|
|
||||||
diskCache.wrap(cacheKey,
|
diskCache.wrap(cacheKey,
|
||||||
// called if the cache misses in order to generate the value to cache
|
// called if the cache misses in order to generate the value to cache
|
||||||
function (cb) {
|
function (cb) {
|
||||||
creator.createCard(req.params.charaId).then(image => cb(null, {
|
creator.ensureInit().then(() => creator.createCard(req.params.charaId).then(image => cb(null, {
|
||||||
binary: {
|
binary: {
|
||||||
image: image,
|
image: image,
|
||||||
}
|
}
|
||||||
})).catch((reason) => cb(reason, null));
|
})).catch((reason) => cb(reason, null)));
|
||||||
},
|
},
|
||||||
// Options, see node-cache-manager for more examples
|
// Options, see node-cache-manager for more examples
|
||||||
{ ttl: ttl },
|
{ ttl: ttl },
|
||||||
|
|
Loading…
Reference in a new issue