Release 2.9.0

This commit is contained in:
2026-08-28 02:53:59 +01:00
parent 9097d45d6a
commit 3de0e89e94
67 changed files with 1767 additions and 98 deletions
+46 -1
View File
@@ -153,6 +153,46 @@ async function refreshApiSource(pool, common, apiSourceOrId, actorId, notifyPlay
}
}
async function refreshWeatherLocation(pool, common, weatherLocationOrId, actorId, notifyPlayerScreens) {
const connection = await pool.getConnection();
try {
const location = weatherLocationOrId && typeof weatherLocationOrId === 'object'
? weatherLocationOrId
: await common.fetchWeatherLocationById(pool, Number(weatherLocationOrId));
if (!location) throw new Error('Weather location not found.');
let result = null;
let pullError = '';
try {
result = await common.fetchWeatherLocationForecast(pool, location);
} catch (error) {
pullError = String(error && error.message ? error.message : 'Unable to load weather forecast.');
}
await connection.beginTransaction();
await connection.query(
'UPDATE i_weather_locations SET last_pulled_at = ?, last_pull_error = ?, last_response_json = COALESCE(?, last_response_json), modified_by = ? WHERE id = ?',
[new Date(), pullError || null, result ? result.responseJson : null, actorId, location.id]
);
await connection.commit();
if (pullError) {
console.error('[data-source-refresh] Weather location refresh completed with an error for location ' + location.id + ': ' + pullError);
} else if (typeof notifyAffectedScreens === 'function') {
try {
await notifyAffectedScreens(connection, common, notifyPlayerScreens, 'weather_location_id', location.id);
} catch (notifyError) {
console.warn('[data-source-refresh] Unable to notify players after weather refresh ' + location.id + ':', notifyError);
}
}
} catch (error) {
try { await connection.rollback(); } catch (_rollbackError) { }
throw error;
} finally {
connection.release();
}
}
async function refreshRssFeed(pool, common, rssFeedId, feedUrl, itemLimit, actorId, notifyPlayerScreens) {
const connection = await pool.getConnection();
try {
@@ -170,6 +210,10 @@ async function refreshRssFeed(pool, common, rssFeedId, feedUrl, itemLimit, actor
if (typeof common.replaceRssFeedItems === 'function') {
await common.replaceRssFeedItems(connection, rssFeedId, updatedItems);
}
await connection.query(
'UPDATE i_rss_feeds SET last_pulled_at = ? WHERE id = ?',
[new Date(), rssFeedId]
);
await connection.commit();
if (!pullError && rssFeedChanged) {
@@ -197,5 +241,6 @@ async function refreshRssFeed(pool, common, rssFeedId, feedUrl, itemLimit, actor
module.exports = {
refreshApiSource: refreshApiSource,
refreshRssFeed: refreshRssFeed
refreshRssFeed: refreshRssFeed,
refreshWeatherLocation: refreshWeatherLocation
};