twitter2jabber 0.1.7 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  == VERSION
4
4
 
5
- This documentation refers to twitter2jabber version 0.1.7
5
+ This documentation refers to twitter2jabber version 0.1.8
6
6
 
7
7
 
8
8
  == DESCRIPTION
data/TODO CHANGED
@@ -1,7 +1,6 @@
1
- - Jabber::ServerDisconnected in lib/twitter2jabber.rb:165 (??? => Jabber::ServerDisconnected < Jabber::JabberError)
2
1
  - threading?
3
2
  - 'direct message' command
4
- - persistent cache! (friends_timeline: since/since_id?)
3
+ - persistent cache? (friends_timeline: since/since_id?)
5
4
  - OAuth (register: http://twitter.com/oauth_clients/new)
6
5
  - better interrupt handling (in loop mode)
7
6
  - daemonize after asking for credentials (in loop mode)
data/bin/twitter2jabber CHANGED
@@ -56,6 +56,7 @@ options = {
56
56
  :template_dir => nil,
57
57
  :loop => false,
58
58
  :pause => nil,
59
+ :last => nil,
59
60
  :verbose => false,
60
61
  :debug => false
61
62
  }
@@ -111,6 +112,12 @@ OptionParser.new { |opts|
111
112
  options[:pause] = p
112
113
  }
113
114
 
115
+ opts.separator ' '
116
+
117
+ opts.on('-S', '--since-id ID', 'Return tweets with status IDs greater than ID') { |i|
118
+ options[:last] = i
119
+ }
120
+
114
121
  opts.separator ' '
115
122
  opts.separator 'Generic options:'
116
123
 
@@ -163,9 +170,9 @@ begin
163
170
 
164
171
  if options[:loop]
165
172
  warn Process.pid if options[:verbose]
166
- twitter2jabber.loop(recipients, options[:pause] || config[:pause])
173
+ twitter2jabber.loop(recipients, options[:pause] || config[:pause], options[:last])
167
174
  else
168
- twitter2jabber.run(recipients)
175
+ twitter2jabber.run(recipients, options[:last])
169
176
  end
170
177
  rescue RuntimeError => err
171
178
  abort err
@@ -4,7 +4,7 @@ class Twitter2Jabber
4
4
 
5
5
  MAJOR = 0
6
6
  MINOR = 1
7
- TINY = 7
7
+ TINY = 8
8
8
 
9
9
  class << self
10
10
 
@@ -48,12 +48,12 @@ class Twitter2Jabber
48
48
  JABBER_NS = 'http://jabber.org/protocol/xhtml-im'
49
49
  XHTML_NS = 'http://www.w3.org/1999/xhtml'
50
50
 
51
- def self.loop(options, recipients = [], pause = nil, &block)
52
- new(options).loop(recipients, pause, &block)
51
+ def self.loop(options, recipients = [], pause = nil, last = nil, &block)
52
+ new(options).loop(recipients, pause, last, &block)
53
53
  end
54
54
 
55
- def self.run(options, recipients = [], &block)
56
- new(options).run(recipients, &block)
55
+ def self.run(options, recipients = [], last = nil, &block)
56
+ new(options).run(recipients, last, &block)
57
57
  end
58
58
 
59
59
  attr_reader :id, :verbose, :debug, :twitter, :jabber, :filter, :formats, :templates, :_erb
@@ -88,15 +88,17 @@ class Twitter2Jabber
88
88
  }
89
89
  end
90
90
 
91
- def run(recipients = [], seen = {}, flag = true, &block)
92
- deliver_tweets(recipients, seen, &block) if flag
91
+ def run(recipients = [], last = nil, flag = true, &block)
92
+ last = deliver_tweets(recipients, last, &block) if flag
93
93
  post_messages(recipients)
94
+
95
+ last
94
96
  end
95
97
 
96
- def loop(recipients = [], pause = nil, &block)
98
+ def loop(recipients = [], pause = nil, last = nil, &block)
97
99
  pause ||= DEFAULT_PAUSE
98
100
 
99
- i, seen = 1, Hash.new { |h, k| h[k] = true; false }
101
+ i = 1
100
102
 
101
103
  trap(:INT) {
102
104
  log 'SIGINT received, shutting down...'
@@ -104,7 +106,7 @@ class Twitter2Jabber
104
106
  }
105
107
 
106
108
  while i > 0
107
- run(recipients, seen, i % pause == 1, &block)
109
+ last = run(recipients, last, i % pause == 1, &block)
108
110
 
109
111
  sleep 1
110
112
 
@@ -112,13 +114,13 @@ class Twitter2Jabber
112
114
  end
113
115
 
114
116
  log 'KTHXBYE!'
115
- end
116
117
 
117
- def deliver_tweets(recipients, seen = {}, &block)
118
- get_tweets.each { |tweet|
119
- next if seen[tweet.id]
118
+ last
119
+ end
120
120
 
121
- logt tweet.id
121
+ def deliver_tweets(recipients, last = nil, &block)
122
+ get_tweets(last).each { |tweet|
123
+ logt last = tweet.id
122
124
 
123
125
  # apply filters
124
126
  next if filter && !filter[tweet]
@@ -132,6 +134,8 @@ class Twitter2Jabber
132
134
 
133
135
  sleep 1
134
136
  }
137
+
138
+ last
135
139
  end
136
140
 
137
141
  def post_messages(recipients = [])
@@ -173,8 +177,11 @@ class Twitter2Jabber
173
177
  raise "Can't connect to Jabber with JID '#{options[:user]}': #{err}"
174
178
  end
175
179
 
176
- def get_tweets
177
- tweets = twitter.friends_timeline
180
+ def get_tweets(last = nil)
181
+ options = {}
182
+ options[:since_id] = last if last
183
+
184
+ tweets = twitter.friends_timeline(options)
178
185
  return [] unless tweets.is_a?(Array)
179
186
 
180
187
  tweets.sort_by { |tweet|
@@ -224,8 +231,8 @@ class Twitter2Jabber
224
231
  end
225
232
 
226
233
  def process_html(text)
227
- text.gsub(/(?=\A|\W)@(\w+)/, '@<a href="http://twitter.com/\1">\1</a>').
228
- gsub(/(?=\A|\W)#(\w+)/, '<a href="http://search.twitter.com/search?q=%23\1">#\1</a>')
234
+ text.gsub(/(\A|\W)@(\w+)/, '\1@<a href="http://twitter.com/\2">\2</a>').
235
+ gsub(/(\A|\W)#(\w+)/, '\1<a href="http://search.twitter.com/search?q=%23\2">#\2</a>')
229
236
  end
230
237
 
231
238
  def process_text(text)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twitter2jabber
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jens Wille
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-09-11 00:00:00 +02:00
12
+ date: 2009-09-13 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency