diff --git a/app.js b/app.js index f25b6ab..e3cd275 100644 --- a/app.js +++ b/app.js @@ -78,6 +78,6 @@ app.use(function(err, req, res, next) { api.checkSnapFaviconState(); api.getSnapByTimer(); api.getFaviconByTimer(); -api.getHotBookmarks(); +api.getHotBookmarksByTimer(); module.exports = app; diff --git a/database/db.js b/database/db.js index 54ae4af..a5b6ec4 100644 --- a/database/db.js +++ b/database/db.js @@ -776,26 +776,27 @@ db.updateBookmarkFaviconState = function(id, faviconState) { } db.addHotBookmark = function(bookmark) { - var insertSql = "INSERT INTO `hot_bookmarks` (`id`, `date`, `title`, `url`, `fav_count`, `created_by`, `created_at`, `last_click`, `snap_url`, `favicon_url`) VALUES ('" + client.escape(bookmark.id) + "', '" + client.escape(bookmark.date) + "', '" + client.escape(bookmark.title) + "', '" + client.escape(bookmark.url) + "', '" + client.escape(bookmark.fav_count) + "', '" + client.escape(bookmark.created_by) + "', '" + client.escape(bookmark.created_at) + "', '" + client.escape(bookmark.last_click) + "', '" + client.escape(bookmark.snap_url) + "', '" + client.escape(bookmark.favicon_url) + "')"; + var sql = "REPLACE INTO `hot_bookmarks` (`id`, `date`, `title`, `url`, `fav_count`, `created_by`, `created_at`, `last_click`, `snap_url`, `favicon_url`) VALUES ('" + bookmark.id + "', '" + bookmark.date + "', " + client.escape(bookmark.title) + ", " + client.escape(bookmark.url) + ", '" + bookmark.fav_count + "', " + client.escape(bookmark.created_by) + ", '" + bookmark.created_at + "', '" + bookmark.last_click + "', " + client.escape(bookmark.snap_url) + ", " + client.escape(bookmark.favicon_url) + ")"; - var selectSql = "SELECT * FROM `bookmarks` WHERE `id` = '" + bookmark.id + "' OR `url` = '" + bookmark.url + "'"; - console.log(insertSql, selectSql); return new Promise(function(resolve, reject) { - client.query(selectSql, (err, result) => { + client.query(sql, (err, result) => { if (err) { reject(err); } else { - if (result.length >= 1) { - resolve(result[0].id); - } else { - client.query(insertSql, (err, result) => { - if (err) { - reject(err); - } else { - resolve(result.insertId); - } - }); - } + resolve(result.insertId); + } + }); + }); +}; + +db.hotBookmarks = function(date) { + var sql = "SELECT * FROM `hot_bookmarks` WHERE `date` = "+ date +" AND `status` = 0" + return new Promise(function(resolve, reject) { + client.query(sql, (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); } }); }); diff --git a/public/scripts/controllers/bookmark-info-controller.js b/public/scripts/controllers/bookmark-info-controller.js index 7014f98..7bdfaa9 100644 --- a/public/scripts/controllers/bookmark-info-controller.js +++ b/public/scripts/controllers/bookmark-info-controller.js @@ -9,8 +9,8 @@ app.controller('bookmarkInfoCtr', ['$scope', '$state', '$timeout', '$sce', '$win $('.ui.modal.js-bookmark-info').modal({ closable: false, }).modal('setting', 'transition', transition()).modal('show'); - bookmark.favicon = bookmark.favicon || ('http://g.soz.im/'+bookmark.url +'/cdn.ico'); - bookmark.image = bookmark.image || ('./images/snap/'+bookmark.id+'.png'); + bookmark.favicon_url = bookmark.favicon_url || ('http://g.soz.im/'+bookmark.url +'/cdn.ico'); + bookmark.snap_url = bookmark.snap_url || ('./images/snap/'+bookmark.id+'.png'); $scope.bookmark = bookmark; $scope.bookmark.description = $sce.trustAsHtml(bookmark.description); $scope.content = ''; diff --git a/public/scripts/controllers/edit-controller.js b/public/scripts/controllers/edit-controller.js index 791a890..e2e058a 100644 --- a/public/scripts/controllers/edit-controller.js +++ b/public/scripts/controllers/edit-controller.js @@ -198,7 +198,9 @@ app.controller('editCtr', ['$scope', '$state', '$timeout', '$document', 'bookmar $scope.autoGettitle = false; $scope.url = bookmark.url; $scope.title = bookmark.title; - $scope.newTags = bookmark.tags.map((item) => item.name).toString(); + if(bookmark.tags && bookmark.tags.length >= 1){ + $scope.newTags = bookmark.tags.map((item) => item.name).toString(); + } }); // 在输入文字的时候也会触发,所以不要用Ctrl,Shift之类的按键 diff --git a/public/scripts/controllers/hot-controller.js b/public/scripts/controllers/hot-controller.js index f20391e..f2c878c 100644 --- a/public/scripts/controllers/hot-controller.js +++ b/public/scripts/controllers/hot-controller.js @@ -24,7 +24,7 @@ app.controller('hotCtr', ['$scope', '$state', '$stateParams', '$filter', '$windo console.log('autoLogin err', err) }); - getBookmarks(); + getHotBookmarks(); $scope.jumpToUrl = function(url) { $window.open(url, '_blank'); @@ -66,6 +66,9 @@ app.controller('hotCtr', ['$scope', '$state', '$stateParams', '$filter', '$windo $scope.toastrId = toastr.info('请先登录再转存书签!', "提示"); } else { var b = $.extend(true, {}, bookmark); // 利用jQuery执行深度拷贝 + b.tags = [{ + name: b.created_by + }] pubSubService.publish('TagCtr.storeBookmark', b); } } @@ -91,6 +94,7 @@ app.controller('hotCtr', ['$scope', '$state', '$stateParams', '$filter', '$windo $scope.detailBookmark = function(b) { var bookmark = $.extend(true, {}, b); // 利用jQuery执行深度拷贝 bookmark.own = false; + bookmark.own = false; bookmark.tags = [{ id: -1, name: '热门收藏' @@ -100,12 +104,12 @@ app.controller('hotCtr', ['$scope', '$state', '$stateParams', '$filter', '$windo } $scope.loadCardData = function() { - console.log('loadCardData.........') if (!$scope.loadBusy) { + console.log('loadCardData.........') var menusScope = $('div[ng-controller="menuCtr"]').scope(); var login = (menusScope && menusScope.login) || false; if (login) { - getBookmarks(); + getHotBookmarks(); } else { toastr.remove(); $scope.toastrId = toastr.info('想要查看更多热门标签,请先登录!', "提示"); @@ -113,7 +117,19 @@ app.controller('hotCtr', ['$scope', '$state', '$stateParams', '$filter', '$windo } } - function getBookmarks() { + function getHotBookmarks() { + getHotBookmarksbyAPI(); // 先实时获取,实时获取失败再从缓存中获取 + + var menusScope = $('div[ng-controller="menuCtr"]').scope(); + var login = (menusScope && menusScope.login) || false; + var index = login ? 4 : 2; + pubSubService.publish('Common.menuActive', { + login: login, + index: index + }); + } + + function getHotBookmarksbyAPI() { $scope.loadBusy = true; var requireData = { userId: null, @@ -122,7 +138,7 @@ app.controller('hotCtr', ['$scope', '$state', '$stateParams', '$filter', '$windo pageSize: 1000, sort: 'desc', renderType: 0, - date: CurentDate($scope.curDay), + date: curentDate($scope.curDay, "yyyy年M月d日"), idfa: "d4995f8a0c9b2ad9182369016e376278", os: "ios", osv: "9.3.5" @@ -144,13 +160,14 @@ app.controller('hotCtr', ['$scope', '$state', '$stateParams', '$filter', '$windo var b = {}; b.title = bookmark.title; b.url = bookmark.url; - b.favicon = bookmark.sourceLogo; - b.from = bookmark.sourceName; - b.image = alterImg; + b.favicon_url = bookmark.sourceLogo; + b.created_by = bookmark.sourceName; if (bookmark.imageList.length >= 1) { - b.image = (json.data.pageNo == 1 ? (bookmark.imageList[0].url.match(alterRex) != null ? alterImg : bookmark.imageList[0].url) : alterImg); + b.snap_url = (json.data.pageNo == 1 ? (bookmark.imageList[0].url.match(alterRex) != null ? alterImg : bookmark.imageList[0].url) : alterImg); + } else { + b.snap_url = alterImg; } - b.click_count = bookmark.favCount; + b.fav_count = bookmark.favCount; b.created_at = $filter('date')(new Date(bookmark.updatetime), "yyyy-MM-dd HH:mm:ss"); b.last_click = $filter('date')(new Date(bookmark.createtime), "yyyy-MM-dd HH:mm:ss"); b.id = bookmark.id; @@ -160,36 +177,53 @@ app.controller('hotCtr', ['$scope', '$state', '$stateParams', '$filter', '$windo }) $scope.curDay--; } else { - toastr.error('获取热门书签失败!失败原因:' + json.message, "提示"); + toastr.error('获取热门书签失败!失败原因:' + json.message + "。将尝试从缓存中获取!", "提示"); + getHotBookmarksbyCache(); } }, 100); }, error: function(json) { - toastr.error('获取热门书签失败!失败原因:' + json.message, "提示"); + toastr.error('获取热门书签失败!失败原因:' + json.message + "。将尝试从缓存中获取!", "提示"); $scope.loadBusy = false; + getHotBookmarksbyCache(); } }); - - var menusScope = $('div[ng-controller="menuCtr"]').scope(); - var login = (menusScope && menusScope.login) || false; - var index = login ? 4 : 2; - pubSubService.publish('Common.menuActive', { - login: login, - index: index - }); } - function CurentDate(i) { + function getHotBookmarksbyCache() { + var params = { + date: curentDate($scope.curDay, "yyyyMMdd"), + } + $scope.loadBusy = true; + bookmarkService.getHotBookmarks(params) + .then((data) => { + data.forEach((bookmark) => { + bookmark.created_at = $filter('date')(new Date(bookmark.updatetime), "yyyy-MM-dd HH:mm:ss"); + bookmark.last_click = $filter('date')(new Date(bookmark.createtime), "yyyy-MM-dd HH:mm:ss"); + bookmark.edit = false; + $scope.bookmarks.push(bookmark); + }) + $scope.curDay--; + $scope.loadBusy = false; + }) + .catch((err) => { + toastr.error("getHotBookmarksbyCache: " + JSON.stringify(err), "提示"); + $scope.curDay--; + $scope.loadBusy = false; + }); + } + + function curentDate(i, format) { if (i == undefined) { i = 0; } + if (format == undefined) { + format = 'yyyyMMddhhmmss' + } var now = new Date(); now.setTime(now.getTime() + i * 24 * 60 * 60 * 1000); - var year = now.getFullYear(); //年 - var month = now.getMonth() + 1; //月 - var day = now.getDate(); //日 - var clock = year + "年" + month + "月" + day + "日"; - return (clock); + clock = $filter('date')(now, format); + return clock; } function transition() {} diff --git a/public/scripts/services/bookmark-service.js b/public/scripts/services/bookmark-service.js index b642709..953b1e0 100644 --- a/public/scripts/services/bookmark-service.js +++ b/public/scripts/services/bookmark-service.js @@ -312,6 +312,20 @@ app.factory('bookmarkService', ['$http', '$q', function($http, $q) { }); return def.promise; }, + getHotBookmarks: function(params) { + var def = $q.defer(); + + $http.get('/api/hotBookmarks/', { + params: params + }) + .success(function(data) { + def.resolve(data); + }) + .error(function(data, status) { + def.reject('getHotBookmarks error'); + }); + return def.promise; + }, }; return service; diff --git a/public/views/bookmark-info.html b/public/views/bookmark-info.html index 4ebd6e3..9bae623 100644 --- a/public/views/bookmark-info.html +++ b/public/views/bookmark-info.html @@ -6,7 +6,7 @@