From 2b59c9e380094a31d5ad7596e3d586c0c69e3ea1 Mon Sep 17 00:00:00 2001 From: ccd0 Date: Tue, 4 Dec 2018 20:08:04 -0800 Subject: [PATCH] Show threads from other sites in watcher. --- src/Monitoring/ThreadWatcher.coffee | 57 ++++++++++++++++------------- src/site/SW.tinyboard.coffee | 2 +- src/site/Site.coffee | 8 ++-- 3 files changed, 37 insertions(+), 30 deletions(-) diff --git a/src/Monitoring/ThreadWatcher.coffee b/src/Monitoring/ThreadWatcher.coffee index 94a9b987d..707db7296 100644 --- a/src/Monitoring/ThreadWatcher.coffee +++ b/src/Monitoring/ThreadWatcher.coffee @@ -17,7 +17,7 @@ ThreadWatcher = @refreshButton = $ '.refresh', @dialog @closeButton = $('.move > .close', @dialog) @unreaddb = Unread.db or UnreadIndex.db or new DataBoard 'lastReadPosts' - @unreadEnabled = Conf['Remember Last Read Post'] and Site.software is 'yotsuba' + @unreadEnabled = Conf['Remember Last Read Post'] $.on d, 'QRPostSuccessful', @cb.post $.on sc, 'click', @toggleWatcher @@ -129,16 +129,17 @@ ThreadWatcher = $.event 'CloseMenu' pruneDeads: -> return if $.hasClass @, 'disabled' - for {boardID, threadID, data} in ThreadWatcher.getAll() when data.isDead - ThreadWatcher.db.delete {boardID, threadID} + for {siteID, boardID, threadID, data} in ThreadWatcher.getAll() when data.isDead + ThreadWatcher.db.delete {siteID, boardID, threadID} ThreadWatcher.refresh() $.event 'CloseMenu' toggle: -> {thread} = Get.postFromNode @ ThreadWatcher.toggle thread rm: -> + {siteID} = @parentNode.dataset [boardID, threadID] = @parentNode.dataset.fullID.split '.' - ThreadWatcher.rm boardID, +threadID + ThreadWatcher.rm siteID, boardID, +threadID post: (e) -> {boardID, threadID, postID} = e.detail if postID is threadID @@ -148,9 +149,10 @@ ThreadWatcher = ThreadWatcher.add g.threads[boardID + '.' + threadID] onIndexUpdate: (e) -> {db} = ThreadWatcher + siteID = Site.hostname boardID = g.BOARD.ID nKilled = 0 - for threadID, data of db.data[Site.hostname].boards[boardID] when not data?.isDead and "#{boardID}.#{threadID}" not in e.detail.threads + for threadID, data of db.data[siteID].boards[boardID] when not data?.isDead and "#{boardID}.#{threadID}" not in e.detail.threads # Don't prune threads that have yet to appear in index. continue unless e.detail.threads.some (fullID) -> +fullID.split('.')[1] > threadID nKilled++ @@ -159,7 +161,7 @@ ThreadWatcher = else db.extend {boardID, threadID, val: {isDead: true}} if ThreadWatcher.unreadEnabled and Conf['Show Unread Count'] - ThreadWatcher.fetchStatus {boardID, threadID, data} + ThreadWatcher.fetchStatus {siteID, boardID, threadID, data} ThreadWatcher.refresh() if nKilled onThreadRefresh: (e) -> thread = g.threads[e.detail.threadID] @@ -212,8 +214,8 @@ ThreadWatcher = return fetchStatus: (thread, force) -> - return unless Site.software is 'yotsuba' - {boardID, threadID, data} = thread + {siteID, boardID, threadID, data} = thread + return unless Site.software is 'yotsuba' and siteID is Site.hostname return if data.isDead and not force if ThreadWatcher.requests.length is 0 ThreadWatcher.status.textContent = '...' @@ -288,14 +290,15 @@ ThreadWatcher = getAll: -> all = [] - for boardID, threads of ThreadWatcher.db.data[Site.hostname].boards - if Conf['Current Board'] and boardID isnt g.BOARD.ID - continue - for threadID, data of threads when data and typeof data is 'object' - all.push {boardID, threadID, data} + for siteID, boards of ThreadWatcher.db.data + for boardID, threads of boards.boards + if Conf['Current Board'] and (siteID isnt Site.hostname or boardID isnt g.BOARD.ID) + continue + for threadID, data of threads when data and typeof data is 'object' + all.push {siteID, boardID, threadID, data} all - makeLine: (boardID, threadID, data) -> + makeLine: (siteID, boardID, threadID, data) -> x = $.el 'a', className: 'fa fa-times' href: 'javascript:;' @@ -305,7 +308,7 @@ ThreadWatcher = excerpt or= "/#{boardID}/ - No.#{threadID}" link = $.el 'a', - href: Site.urls.thread({boardID, threadID}) + href: SW[Site.swDict[siteID]].urls.thread({siteID, boardID, threadID}) title: excerpt className: 'watcher-link' @@ -323,6 +326,7 @@ ThreadWatcher = div = $.el 'div' fullID = "#{boardID}.#{threadID}" div.dataset.fullID = fullID + div.dataset.siteID = siteID $.addClass div, 'current' if g.VIEW is 'thread' and fullID is "#{g.BOARD}.#{g.THREADID}" $.addClass div, 'dead-thread' if data.isDead if ThreadWatcher.unreadEnabled and Conf['Show Unread Count'] @@ -334,11 +338,11 @@ ThreadWatcher = build: -> nodes = [] - for {boardID, threadID, data} in ThreadWatcher.getAll() + for {siteID, boardID, threadID, data} in ThreadWatcher.getAll() # Add missing excerpt for threads added by Auto Watch - if not data.excerpt? and (thread = g.threads["#{boardID}.#{threadID}"]) + if not data.excerpt? and siteID is Site.hostname and (thread = g.threads["#{boardID}.#{threadID}"]) ThreadWatcher.db.extend {boardID, threadID, val: {excerpt: Get.threadExcerpt thread}} - nodes.push ThreadWatcher.makeLine boardID, threadID, data + nodes.push ThreadWatcher.makeLine siteID, boardID, threadID, data {list} = ThreadWatcher $.rmAll list $.add list, nodes @@ -368,6 +372,7 @@ ThreadWatcher = return update: (boardID, threadID, newData) -> + siteID = Site.hostname return if not (data = ThreadWatcher.db?.get {boardID, threadID}) if newData.isDead and Conf['Auto Prune'] ThreadWatcher.db.delete {boardID, threadID} @@ -378,8 +383,8 @@ ThreadWatcher = return unless n return if not (data = ThreadWatcher.db.get {boardID, threadID}) ThreadWatcher.db.extend {boardID, threadID, val: newData} - if line = $ "#watched-threads > [data-full-i-d='#{boardID}.#{threadID}']", ThreadWatcher.dialog - newLine = ThreadWatcher.makeLine boardID, threadID, data + if line = $ "#watched-threads > [data-site-i-d='#{siteID}'][data-full-i-d='#{boardID}.#{threadID}']", ThreadWatcher.dialog + newLine = ThreadWatcher.makeLine siteID, boardID, threadID, data $.replace line, newLine ThreadWatcher.refreshIcon() else @@ -394,20 +399,22 @@ ThreadWatcher = ThreadWatcher.db.extend {boardID, threadID, val: {isDead: true}, rm: ['unread', 'quotingYou']}, cb toggle: (thread) -> + siteID = Site.hostname boardID = thread.board.ID threadID = thread.ID if ThreadWatcher.db.get {boardID, threadID} - ThreadWatcher.rm boardID, threadID + ThreadWatcher.rm siteID, boardID, threadID else ThreadWatcher.add thread add: (thread) -> data = {} + siteID = Site.hostname boardID = thread.board.ID threadID = thread.ID if thread.isDead if Conf['Auto Prune'] and ThreadWatcher.db.get {boardID, threadID} - ThreadWatcher.rm boardID, threadID + ThreadWatcher.rm siteID, boardID, threadID return data.isDead = true data.excerpt = Get.threadExcerpt thread @@ -417,10 +424,10 @@ ThreadWatcher = ThreadWatcher.db.set {boardID, threadID, val: data} ThreadWatcher.refresh() if ThreadWatcher.unreadEnabled and Conf['Show Unread Count'] - ThreadWatcher.fetchStatus {boardID, threadID, data}, true + ThreadWatcher.fetchStatus {siteID: Site.hostname, boardID, threadID, data}, true - rm: (boardID, threadID) -> - ThreadWatcher.db.delete {boardID, threadID} + rm: (siteID, boardID, threadID) -> + ThreadWatcher.db.delete {siteID, boardID, threadID} ThreadWatcher.refresh() menu: diff --git a/src/site/SW.tinyboard.coffee b/src/site/SW.tinyboard.coffee index 56d8dd381..97581f63a 100644 --- a/src/site/SW.tinyboard.coffee +++ b/src/site/SW.tinyboard.coffee @@ -48,7 +48,7 @@ SW.tinyboard = false urls: - thread: ({boardID, threadID}) -> "#{location.origin}/#{boardID}/res/#{threadID}.html" + thread: ({siteID, boardID, threadID}) -> "#{if siteID is Site.hostname then location.origin else ('http://' + siteID)}/#{boardID}/res/#{threadID}.html" selectors: board: 'form[name="postcontrols"]' diff --git a/src/site/Site.coffee b/src/site/Site.coffee index 4b1b78daf..5c79ea4cf 100644 --- a/src/site/Site.coffee +++ b/src/site/Site.coffee @@ -1,15 +1,15 @@ Site = init: (cb) -> - swDict = {} + @swDict = {} for line in Conf['siteSoftware'].split('\n') when line[0] isnt '#' [hostname, software] = line.split(' ') - swDict[hostname] = software if software of SW + @swDict[hostname] = software if software of SW {hostname} = location - while hostname and hostname not of swDict + while hostname and hostname not of @swDict hostname = hostname.replace(/^[^.]*\.?/, '') hostname = '4chan.org' if hostname is '4channel.org' if hostname - @set hostname, swDict[hostname] + @set hostname, @swDict[hostname] cb() else $.onExists doc, 'body', =>