2ch
Version:
A JavaScript library for comfortable 2ch watching.
85 lines (69 loc) • 2.2 kB
text/coffeescript
_ = require 'lodash'
{EventEmitter} = require 'events'
BbsMenu = require './bbs_menu'
Bbs = require './bbs'
Thread = require './thread'
class BbsMenuFactory
: null
get: ->
= new BbsMenu() unless
bbsMenuFactory = new BbsMenuFactory()
module.exports = class ThreadWatcher extends EventEmitter
constructor: (, , =600000, ) ->
= 5000 if < 5000
= bbsMenuFactory.get() unless ?
= new Bbs(, )
= null
= false
()
_initializeEvents: ->
=
'thread error': (error) => ('error', error)
'thread update': (messages) => ('update', messages)
'thread reload': (title) => ('reload', title)
'thread begin': (title) => ('begin', title)
'thread end': (title) => ('end', title)
()
delegateEvents: ->
_.forEach , (fn, key) =>
[propName, eventName] = key.split /\s+/
@[propName]?.on eventName, fn
undelegateEvents: ->
_.forEach , (fn, key) =>
[propName, eventName] = key.split /\s+/
@[propName]?.off eventName, fn
isWatching: ->
start: ->
return if
= true
()
_run: =>
return unless
=>
setTimeout ,
stop: ->
= false
update: (done) ->
if ? and not .isEnded()
.update (error, messages) => done? null, messages
else
(error, thread) =>
return done? error if error
return done? null, [] unless thread?
thread
.update (error, messages) => done? null, messages
setThread: (thread) ->
()
= thread
()
findNewThread: (done) ->
.fetchThreadHeader , (error, header) =>
if error
'error', error
return done error
else if not header
'notfound'
return done null, null
done null, new Thread(, header.number, header.title)