Skip to content

Instantly share code, notes, and snippets.

@noplans
Created March 24, 2009 04:31
Show Gist options
  • Save noplans/83940 to your computer and use it in GitHub Desktop.
Save noplans/83940 to your computer and use it in GitHub Desktop.
require 'tumblr'
require 'drb/drb'
require 'pit'
class TumblrServer
Entries = [
['write', [:page, nil]],
['write', [:reblog, nil]]
]
def initialize(ts)
@q = Queue.new
@t = Tumblr.new(Pit.get('tumblr'))
@ts = ts
make_listener
end
def new_loop
loop do
event, (symbol, value) = @q.pop # e.g. ['write', [:page, 1]]
case symbol
when :page
sleep 2
$stderr.puts "#{Time.now}: dashboard: #{value}"
images = @t.dashboard(:page => value) rescue []
@ts.write [:images, images]
when :reblog
$stderr.puts "rebloged #{value}"
@t.reblog value
end
end
end
private
def make_listener
Entries.each do |event, pattern|
entry = @ts.notify(event, pattern)
Thread.new { entry.each {|e| @q.push e} }
end
end
end
if __FILE__ == $0
ts_uri = ARGV.shift || 'druby://127.0.0.1:12345'
DRb.start_service
$ts = DRbObject.new_with_uri ts_uri
TumblrServer.new($ts).new_loop
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment