mirror of
https://github.com/badlogic/heissepreise.git
synced 2024-09-22 00:00:59 +02:00
Improve binary decoding, make binary default.
This commit is contained in:
parent
d8a9da7692
commit
222720365c
|
@ -63,6 +63,46 @@ exports.today = () => {
|
||||||
return `${year}-${month}-${day}`;
|
return `${year}-${month}-${day}`;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
exports.isoDate = (daysSince2000) => {
|
||||||
|
// Number of days in each month (non-leap year)
|
||||||
|
const daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
||||||
|
|
||||||
|
// Number of days in each month (leap year)
|
||||||
|
const daysInMonthLeap = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
||||||
|
|
||||||
|
// Start date: January 1, 2000
|
||||||
|
const startYear = 2000;
|
||||||
|
const startMonth = 1;
|
||||||
|
const startDay = 1;
|
||||||
|
|
||||||
|
// Calculate the number of leap years
|
||||||
|
const numLeapYears = Math.floor(daysSince2000 / 365) - Math.floor((startYear - 2000) / 4);
|
||||||
|
|
||||||
|
// Calculate the number of non-leap years
|
||||||
|
const numNonLeapYears = Math.floor(daysSince2000 / 365) - numLeapYears;
|
||||||
|
|
||||||
|
// Calculate the number of days remaining after accounting for years
|
||||||
|
const remainingDays = daysSince2000 - (numLeapYears * 366 + numNonLeapYears * 365);
|
||||||
|
|
||||||
|
// Determine the current year
|
||||||
|
const currentYear = startYear + numLeapYears * 4 + numNonLeapYears;
|
||||||
|
const isLeapYear = currentYear % 4 === 0 && (currentYear % 100 !== 0 || currentYear % 400 === 0);
|
||||||
|
const daysInMonthArray = isLeapYear ? daysInMonthLeap : daysInMonth;
|
||||||
|
|
||||||
|
// Determine the current month and day
|
||||||
|
let currentMonth = 1;
|
||||||
|
let currentDay = remainingDays + 1;
|
||||||
|
for (const days of daysInMonthArray) {
|
||||||
|
if (currentDay <= days) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
currentMonth++;
|
||||||
|
currentDay -= days;
|
||||||
|
}
|
||||||
|
|
||||||
|
return `${currentYear}-${currentMonth.toString().padStart(2, "0")}-${currentDay.toString().padStart(2, "0")}`;
|
||||||
|
};
|
||||||
|
|
||||||
exports.fetchJSON = async (url) => {
|
exports.fetchJSON = async (url) => {
|
||||||
const response = await fetch(url);
|
const response = await fetch(url);
|
||||||
return await response.json();
|
return await response.json();
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const { deltaTime, log } = require("../js/misc");
|
const { deltaTime, log, isoDate } = require("../js/misc");
|
||||||
const { stores, STORE_KEYS } = require("./stores");
|
const { stores, STORE_KEYS } = require("./stores");
|
||||||
const { Model } = require("./model");
|
const { Model } = require("./model");
|
||||||
const { Settings } = require("./settings");
|
const { Settings } = require("./settings");
|
||||||
|
@ -61,11 +61,10 @@ function decompressBinary(buffer) {
|
||||||
// Deserialize days as a 32-bit integer
|
// Deserialize days as a 32-bit integer
|
||||||
const daysSince2000 = view.getInt32(offset, true);
|
const daysSince2000 = view.getInt32(offset, true);
|
||||||
offset += 4;
|
offset += 4;
|
||||||
|
|
||||||
// Calculate the date from days since 2000-01-01
|
// Calculate the date from days since 2000-01-01
|
||||||
const entryDate = new Date(baseDate.getTime() + daysSince2000 * 24 * 60 * 60 * 1000);
|
const dateStr = isoDate(daysSince2000);
|
||||||
|
|
||||||
obj.priceHistory[i] = { date: entryDate.toISOString().substring(0, 10), price };
|
obj.priceHistory[i] = { date: dateStr, price };
|
||||||
}
|
}
|
||||||
|
|
||||||
objects.push(obj);
|
objects.push(obj);
|
||||||
|
@ -143,14 +142,15 @@ class Items extends Model {
|
||||||
}
|
}
|
||||||
|
|
||||||
processItems(items) {
|
processItems(items) {
|
||||||
const lookup = {};
|
const lookup = new Set();
|
||||||
const start = performance.now();
|
const start = performance.now();
|
||||||
for (const item of items) {
|
for (const item of items) {
|
||||||
lookup[item.store + item.id] = item;
|
lookup[item.store + item.id] = item;
|
||||||
item.search = item.name + " " + item.quantity + " " + item.unit;
|
item.search = item.name + " " + item.quantity + " " + item.unit;
|
||||||
item.search = item.search.toLowerCase().replace(",", ".");
|
item.search = item.search.toLowerCase().replace(",", ".");
|
||||||
|
|
||||||
item.unitPrice = (item.price / item.quantity) * (item.unit == "g" || item.unit == "ml" ? 1000 : 1);
|
const unitPriceFactor = item.unit == "g" || item.unit == "ml" ? 1000 : 1;
|
||||||
|
item.unitPrice = (item.price / item.quantity) * unitPriceFactor;
|
||||||
item.numPrices = item.priceHistory.length;
|
item.numPrices = item.priceHistory.length;
|
||||||
item.priceOldest = item.priceHistory[item.priceHistory.length - 1].price;
|
item.priceOldest = item.priceHistory[item.priceHistory.length - 1].price;
|
||||||
item.dateOldest = item.priceHistory[item.priceHistory.length - 1].date;
|
item.dateOldest = item.priceHistory[item.priceHistory.length - 1].date;
|
||||||
|
@ -159,7 +159,7 @@ class Items extends Model {
|
||||||
let lowestPriceBefore = 100000;
|
let lowestPriceBefore = 100000;
|
||||||
for (let i = 0; i < item.priceHistory.length; i++) {
|
for (let i = 0; i < item.priceHistory.length; i++) {
|
||||||
const price = item.priceHistory[i];
|
const price = item.priceHistory[i];
|
||||||
price.unitPrice = (price.price / item.quantity) * (item.unit == "g" || item.unit == "ml" ? 1000 : 1);
|
price.unitPrice = (price.price / item.quantity) * unitPriceFactor;
|
||||||
if (i == 0) continue;
|
if (i == 0) continue;
|
||||||
if (i < 10) {
|
if (i < 10) {
|
||||||
item["price" + i] = price.price;
|
item["price" + i] = price.price;
|
||||||
|
@ -201,6 +201,7 @@ class Items extends Model {
|
||||||
const settings = new Settings();
|
const settings = new Settings();
|
||||||
const compressedItemsPerStore = [];
|
const compressedItemsPerStore = [];
|
||||||
for (const store of STORE_KEYS) {
|
for (const store of STORE_KEYS) {
|
||||||
|
// if (["reweDe", "dmDe", "sparSi"].includes(store)) continue;
|
||||||
compressedItemsPerStore.push(
|
compressedItemsPerStore.push(
|
||||||
new Promise(async (resolve) => {
|
new Promise(async (resolve) => {
|
||||||
let start = performance.now();
|
let start = performance.now();
|
||||||
|
@ -234,6 +235,7 @@ class Items extends Model {
|
||||||
log(`Items - loaded ${items.length} items took ${deltaTime(start).toFixed(4)} secs`);
|
log(`Items - loaded ${items.length} items took ${deltaTime(start).toFixed(4)} secs`);
|
||||||
|
|
||||||
this.processItems(items);
|
this.processItems(items);
|
||||||
|
log(`Items - total loading took ${deltaTime(start).toFixed(4)} secs`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ class Settings extends Model {
|
||||||
STORE_KEYS.forEach((store) => {
|
STORE_KEYS.forEach((store) => {
|
||||||
this[store] = stores[store].defaultChecked;
|
this[store] = stores[store].defaultChecked;
|
||||||
});
|
});
|
||||||
this.jsonData = true;
|
this.jsonData = false;
|
||||||
|
|
||||||
let settings = localStorage.getItem("settings");
|
let settings = localStorage.getItem("settings");
|
||||||
if (settings) {
|
if (settings) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user