diff --git a/package.json b/package.json index 56e26f79..a2fee628 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "author": "Calvin Montgomery", "name": "CyTube", "description": "Online media synchronizer and chat", - "version": "3.32.1", + "version": "3.33.0", "repository": { "url": "http://github.com/calzoneman/sync" }, diff --git a/src/channel/channel.js b/src/channel/channel.js index 3a4cdd09..3d3ed460 100644 --- a/src/channel/channel.js +++ b/src/channel/channel.js @@ -93,10 +93,10 @@ function Channel(name) { if (err && err !== "Channel is not registered") { self.emit("loadFail", "Failed to load channel data from the database. Please try again later."); self.setFlag(Flags.C_ERROR); - return; } else { self.initModules(); self.loadState(); + db.channels.updateLastLoaded(self.id); } }); } diff --git a/src/database/channels.js b/src/database/channels.js index 224a1e39..f05c4079 100644 --- a/src/database/channels.js +++ b/src/database/channels.js @@ -147,8 +147,8 @@ module.exports = { } db.query("INSERT INTO `channels` " + - "(`name`, `owner`, `time`) VALUES (?, ?, ?)", - [name, owner, Date.now()], + "(`name`, `owner`, `time`, `last_loaded`) VALUES (?, ?, ?, ?)", + [name, owner, Date.now(), new Date()], function (err, res) { if (err) { callback(err, null); @@ -641,5 +641,20 @@ module.exports = { } db.query("DELETE FROM `channel_bans` WHERE channel=?", [chan], callback); + }, + + /** + * Updates the `last_loaded` column to be the current timestamp + */ + updateLastLoaded: function updateLastLoaded(channelId) { + if (channelId <= 0) { + return; + } + + db.query("UPDATE channels SET last_loaded = ? WHERE id = ?", [new Date(), channelId], error => { + if (error) { + Logger.errlog.log(`Failed to update last_loaded column for channel ID ${channelId}: ${error}`); + } + }); } }; diff --git a/src/database/update.js b/src/database/update.js index b09efff1..3ff22a45 100644 --- a/src/database/update.js +++ b/src/database/update.js @@ -3,7 +3,7 @@ var Logger = require("../logger"); var Q = require("q"); import Promise from 'bluebird'; -const DB_VERSION = 9; +const DB_VERSION = 10; var hasUpdates = []; module.exports.checkVersion = function () { @@ -63,6 +63,8 @@ function update(version, cb) { addUsernameDedupeColumn(cb); } else if (version < 9) { populateUsernameDedupeColumn(cb); + } else if (version < 10) { + addChannelLastLoadedColumn(cb); } } @@ -388,3 +390,21 @@ function populateUsernameDedupeColumn(cb) { }) }); } + +function addChannelLastLoadedColumn(cb) { + db.query("ALTER TABLE channels ADD COLUMN last_loaded TIMESTAMP NOT NULL DEFAULT 0", error => { + if (error) { + Logger.errlog.log(`Failed to add last_loaded column: ${error}`); + return; + } + + db.query("ALTER TABLE channels ADD INDEX i_last_loaded (last_loaded)", error => { + if (error) { + Logger.errlog.log(`Failed to add index on last_loaded column: ${error}`); + return; + } + + cb(); + }); + }); +}