From 75b4d1d9f16b3fd968c7f2c0221fb18596b54669 Mon Sep 17 00:00:00 2001 From: luchenqun Date: Thu, 9 Mar 2017 12:03:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E8=8E=B7=E5=8F=96faicon=E7=9A=84?= =?UTF-8?q?=E5=88=86=E7=A6=BB=E5=87=BA=E6=9D=A5=EF=BC=8C=E9=87=8D=E6=96=B0?= =?UTF-8?q?=E5=BC=80=E4=B8=AAtimer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.js | 3 ++- database/db.js | 16 ++++++++++++++- routes/api.js | 55 ++++++++++++++++++++++++++++++++++---------------- 3 files changed, 55 insertions(+), 19 deletions(-) diff --git a/app.js b/app.js index d9f392c..e251e50 100644 --- a/app.js +++ b/app.js @@ -76,6 +76,7 @@ app.use(function(err, req, res, next) { }); }); // api.checkSnapFaviconState(); -api.getSnapFaviconByTimer(); +api.getSnapByTimer(); +api.getFaviconByTimer(); module.exports = app; diff --git a/database/db.js b/database/db.js index 5a78164..ed3b61f 100644 --- a/database/db.js +++ b/database/db.js @@ -719,7 +719,21 @@ 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 + ") OR (`favicon_state`>=0 AND `favicon_state` <= 64 AND favicon_state != " + todayNotSnap + ") ORDER BY created_at DESC LIMIT 0, 1"; + 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"; + return new Promise(function(resolve, reject) { + client.query(sql, (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); +} + +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"; return new Promise(function(resolve, reject) { client.query(sql, (err, result) => { if (err) { diff --git a/routes/api.js b/routes/api.js index 61d0d9c..39e373f 100644 --- a/routes/api.js +++ b/routes/api.js @@ -877,9 +877,9 @@ api.checkSnapFaviconState = function() { .catch((err) => console.log('getBookmarks err', err)); } -api.getSnapFaviconByTimer = function() { - console.log('getSnapFaviconByTimer...........'); - var timeout = 5000 +api.getSnapByTimer = function() { + console.log('getSnapByTimer...........'); + var timeout = 30000 setInterval(function() { var today = new Date().getDate(); db.getBookmarkWaitSnap(today) @@ -887,11 +887,8 @@ api.getSnapFaviconByTimer = function() { if (bookmarks.length == 1) { var id = bookmarks[0].id; var snapState = bookmarks[0].snap_state; - var faviconState = bookmarks[0].favicon_state; var url = bookmarks[0].url; var filePath = './public/images/snap/' + id + '.png'; - var faviconPath = './public/images/favicon/' + id + '.ico'; - // 获取截图 fs.exists(filePath, function(exists) { if (exists) { @@ -924,19 +921,32 @@ api.getSnapFaviconByTimer = function() { }); } }); + } + }) + .catch((err) => console.log('getBookmarkWaitSnap err', err)); + }, timeout + 1000); +} + + +api.getFaviconByTimer = function() { + console.log('getFaviconByTimer...........'); + var timeout = 3000 + setInterval(function() { + var today = new Date().getDate(); + db.getBookmarkWaitFavicon(today) + .then((bookmarks) => { + if (bookmarks.length == 1) { + var id = bookmarks[0].id; + var faviconState = bookmarks[0].favicon_state; + var url = bookmarks[0].url; + var faviconPath = './public/images/favicon/' + id + '.ico'; + var defaultFile = './public/images/favicon/default.ico'; if (!/http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/.test(url)) { - fs.exists(faviconPath, function(exists) { - if (!exists) { - var sourceFile = './public/images/favicon/default.ico'; - var readStream = fs.createReadStream(sourceFile); - var writeStream = fs.createWriteStream(faviconPath); - readStream.pipe(writeStream); - } - }); + copyFile(defaultFile, faviconPath); db.updateBookmarkFaviconState(id, today + 31); }else{ - var faviconUrl = "http://g.soz.im/" + url + "/cdn.ico" + var faviconUrl = "http://g.soz.im/" + url; download(faviconUrl).then(data => { fs.writeFileSync(faviconPath, data); db.updateBookmarkFaviconState(id, -1); @@ -947,18 +957,29 @@ api.getSnapFaviconByTimer = function() { newFaviconState = faviconState + 1; } else if (faviconState == 2) { newFaviconState = today + 31; + copyFile(defaultFile, faviconPath); } db.updateBookmarkFaviconState(id, newFaviconState); }); } } }) - .catch((err) => console.log('getBookmarkWaitSnap err', err)); - }, timeout + 1000); + .catch((err) => console.log('getFaviconByTimer err', err)); + }, timeout); } function md5(str) { return crypto.createHash('md5').update(str).digest('hex'); }; +function copyFile(sourceFile, destFile){ + fs.exists(sourceFile, function(exists) { + if (exists) { + var readStream = fs.createReadStream(sourceFile); + var writeStream = fs.createWriteStream(destFile); + readStream.pipe(writeStream); + } + }); +} + module.exports = api;