diff --git a/client/scripts/database.js b/client/scripts/database.js index 51d1922..6a73136 100644 --- a/client/scripts/database.js +++ b/client/scripts/database.js @@ -1,4 +1,4 @@ -const DB_VERSION = 8; +const DB_VERSION = 9; const USER_ID = localStorage.getItem('auth_user'); const USER_NAME = localStorage.getItem('auth_username'); @@ -619,7 +619,7 @@ function sync() { localTimes[entry['table']] = entry['time']; }); - syncInProgress = 13; + syncInProgress = 14; var syncOkay = true; log("[db] Sync Start"); $('#i-sync').addClass('fa-spin'); @@ -1008,8 +1008,35 @@ function sync() { syncInProgress --; } + // FOLLOWS + getJSON(QUERY_URL + 'get_follows', function (code, data) { + if (code == 200) { + var os = db.transaction('follows', 'readwrite').objectStore('follows'); + data.data.forEach(function (entry) { + os.put(entry); + }); + os.openCursor().onsuccess = function (event) { + var cursor = event.target.result; + if (cursor) { + if (!data.keys.includes(parseInt(cursor.key))) { + os.delete(cursor.key); + } + cursor.continue(); + } else { + syncInProgress --; + log('[db] follows synced, remaining:', syncInProgress); + } + }; + } else { + log("[db] follows: Something went wrong (HTTP " + code + ")"); + syncOkay = false; + syncInProgress --; + log('[db] follows failed, remaining:', syncInProgress); + } + }); + } else { - syncInProgress -= 3; + syncInProgress -= 4; } // NEWS @@ -1236,6 +1263,11 @@ function initDatabase() { var osRankings = db.createObjectStore('rankings', { keyPath: 'id' }); } + if ((oldVersion < 9) && (newVersion >= 9)) { + log('[db] to version 9'); + var osFollows = db.createObjectStore('follows', { keyPath: 'id' }); + } + // Force resync after db update if (oldVersion >= 1) { var osUpdateTimes = upgradeTransaction.objectStore('update_times'); diff --git a/server/scripts/index.js b/server/scripts/index.js index 93b9915..edec6c4 100644 --- a/server/scripts/index.js +++ b/server/scripts/index.js @@ -85,12 +85,10 @@ var siteScript = async function() { var user = await dbGetData('users', localStorage.getItem('auth_user')); // Favorites + var follows = await dbGetData('follows'); var watched = []; - for (var i = 1; i <= 5; i ++) { - sailor_id = user['sailor' + i]; - if (sailor_id != null) { - watched.push(await dbGetData('sailors', sailor_id)); - } + for (var i in follows) { + watched.push(await dbGetData('sailors', follows[i])); } if (watched.length > 0) { var year = (new Date()).getFullYear(); diff --git a/server/scripts/sailors.js b/server/scripts/sailors.js index 3f088ea..3c135ca 100644 --- a/server/scripts/sailors.js +++ b/server/scripts/sailors.js @@ -194,12 +194,10 @@ var siteScript = async function() { if (isLoggedIn()) { var user = await dbGetData('users', USER_ID); + var follows = await dbGetData('follows'); followedSailors = []; - for (var i = 1; i <= 5; i ++) { - sailor_id = user['sailor' + i]; - if (sailor_id != null) { - followedSailors.push(await dbGetData('sailors', sailor_id)); - } + for (var i in follows) { + followedSailors.push(await dbGetData('sailors', follows[i])); } } diff --git a/server/version.php b/server/version.php index ed1ec39..585d731 100644 --- a/server/version.php +++ b/server/version.php @@ -1,5 +1,5 @@