diff --git a/database/db.js b/database/db.js index ed3b61f..67a8c28 100644 --- a/database/db.js +++ b/database/db.js @@ -719,7 +719,7 @@ db.getBookmarks = function() { db.getBookmarkWaitSnap = function(today) { var todayNotSnap = today + 31; - var sql = "SELECT id, url, snap_state, favicon_state FROM `bookmarks` WHERE `snap_state`>=0 AND `snap_state` <= 64 AND snap_state != " + todayNotSnap + " ORDER BY created_at DESC LIMIT 0, 1"; + var sql = "SELECT id, url, snap_state FROM `bookmarks` WHERE `snap_state`>=0 AND `snap_state` <= 64 AND snap_state != " + todayNotSnap + " ORDER BY created_at DESC LIMIT 0, 1"; return new Promise(function(resolve, reject) { client.query(sql, (err, result) => { if (err) { @@ -733,7 +733,7 @@ db.getBookmarkWaitSnap = function(today) { db.getBookmarkWaitFavicon = function(today) { var todayNotSnap = today + 31; - var sql = "SELECT id, url, snap_state, favicon_state FROM `bookmarks` WHERE `favicon_state`>=0 AND `favicon_state` <= 64 AND favicon_state != " + todayNotSnap + " ORDER BY created_at DESC LIMIT 0, 1"; + var sql = "SELECT id, url, favicon_state FROM `bookmarks` WHERE `favicon_state`>=0 AND `favicon_state` <= 64 AND favicon_state != " + todayNotSnap + " ORDER BY created_at DESC LIMIT 0, 1"; return new Promise(function(resolve, reject) { client.query(sql, (err, result) => { if (err) { diff --git a/routes/api.js b/routes/api.js index 39e373f..0a03b7f 100644 --- a/routes/api.js +++ b/routes/api.js @@ -930,8 +930,14 @@ api.getSnapByTimer = function() { api.getFaviconByTimer = function() { console.log('getFaviconByTimer...........'); - var timeout = 3000 + var timeout = 3000; + var busy = false; setInterval(function() { + if (busy) { + console.log('getFaviconByTimer is busy') + return; + } + busy = true; var today = new Date().getDate(); db.getBookmarkWaitFavicon(today) .then((bookmarks) => { @@ -944,12 +950,26 @@ api.getFaviconByTimer = function() { if (!/http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/.test(url)) { copyFile(defaultFile, faviconPath); - db.updateBookmarkFaviconState(id, today + 31); - }else{ + db.updateBookmarkFaviconState(id, today + 31) + .then((affectedRows) => { + busy = false + }) + .catch((err) => { + console.log('updateBookmarkFaviconState err', err); + busy = false + }); + } else { var faviconUrl = "http://g.soz.im/" + url; download(faviconUrl).then(data => { fs.writeFileSync(faviconPath, data); - db.updateBookmarkFaviconState(id, -1); + db.updateBookmarkFaviconState(id, -1) + .then((affectedRows) => { + busy = false; + }) + .catch((err) => { + console.log('updateBookmarkFaviconState err', err); + busy = false; + }); }).catch((err) => { var newFaviconState = -1; console.log("boomarkid = " + id + ", download over", err) @@ -959,12 +979,22 @@ api.getFaviconByTimer = function() { newFaviconState = today + 31; copyFile(defaultFile, faviconPath); } - db.updateBookmarkFaviconState(id, newFaviconState); + db.updateBookmarkFaviconState(id, newFaviconState) + .then((affectedRows) => { + busy = false; + }) + .catch((err) => { + console.log('updateBookmarkFaviconState err', err); + busy = false; + }); }); } } }) - .catch((err) => console.log('getFaviconByTimer err', err)); + .catch((err) => { + console.log('getFaviconByTimer err', err); + busy = false; + }); }, timeout); } @@ -972,7 +1002,7 @@ function md5(str) { return crypto.createHash('md5').update(str).digest('hex'); }; -function copyFile(sourceFile, destFile){ +function copyFile(sourceFile, destFile) { fs.exists(sourceFile, function(exists) { if (exists) { var readStream = fs.createReadStream(sourceFile);