twterm 1.1.0 → 1.1.1
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.
- checksums.yaml +4 -4
- data/lib/twterm.rb +2 -1
- data/lib/twterm/app.rb +3 -1
- data/lib/twterm/client.rb +74 -50
- data/lib/twterm/filter_query_window.rb +5 -0
- data/lib/twterm/history/base.rb +5 -24
- data/lib/twterm/history/hashtag.rb +3 -3
- data/lib/twterm/history/savable.rb +37 -0
- data/lib/twterm/history/screen_name.rb +2 -4
- data/lib/twterm/notifier.rb +5 -0
- data/lib/twterm/screen.rb +11 -0
- data/lib/twterm/status.rb +7 -7
- data/lib/twterm/tab/base.rb +5 -0
- data/lib/twterm/tab/statuses/base.rb +1 -1
- data/lib/twterm/tab_manager.rb +13 -0
- data/lib/twterm/user.rb +0 -2
- data/lib/twterm/version.rb +1 -1
- data/twterm.gemspec +2 -2
- metadata +11 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 706e593e4edcad70bc6c85a508a87bb3b0b6f627
|
4
|
+
data.tar.gz: 5103de0dc3e61d085910facd228e7901feec04bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b154db08ac62478501dbad44c8330f6abb79a30514ded5432400b36221934a7c89e740b4180471c9334d04c2638bada78fec70a0c4490a570c8db6ad9f99e2de
|
7
|
+
data.tar.gz: e383c7167af2a394cc2ea7f0930c581c6e3afae5c630b7311791e2dcff8438b45f2999fda09e586f71324c3d35d48b567252a3fa9960abb63172d465faea585e
|
data/lib/twterm.rb
CHANGED
@@ -28,6 +28,7 @@ require 'twterm/filter_query_window'
|
|
28
28
|
require 'twterm/filterable_list'
|
29
29
|
require 'twterm/friendship'
|
30
30
|
require 'twterm/history/base'
|
31
|
+
require 'twterm/history/savable'
|
31
32
|
require 'twterm/history/hashtag'
|
32
33
|
require 'twterm/history/screen_name'
|
33
34
|
require 'twterm/list'
|
@@ -67,6 +68,6 @@ require 'twterm/version'
|
|
67
68
|
|
68
69
|
module Twterm
|
69
70
|
class Conf
|
70
|
-
REQUIRE_VERSION = '1.1.
|
71
|
+
REQUIRE_VERSION = '1.1.1'
|
71
72
|
end
|
72
73
|
end
|
data/lib/twterm/app.rb
CHANGED
data/lib/twterm/client.rb
CHANGED
@@ -18,21 +18,6 @@ module Twterm
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
def connect_stream
|
22
|
-
stream_client.stop_stream
|
23
|
-
|
24
|
-
@streaming_thread = Thread.new do
|
25
|
-
begin
|
26
|
-
Notifier.instance.show_message 'Trying to connect to Twitter...'
|
27
|
-
stream_client.userstream
|
28
|
-
rescue EventMachine::ConnectionError
|
29
|
-
Notifier.instance.show_error 'Connection failed'
|
30
|
-
sleep 30
|
31
|
-
retry
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
21
|
def destroy_status(status)
|
37
22
|
send_request_without_catch do
|
38
23
|
rest_client.destroy_status(status.id)
|
@@ -143,9 +128,45 @@ module Twterm
|
|
143
128
|
end
|
144
129
|
end
|
145
130
|
|
131
|
+
initialize_user_stream
|
132
|
+
|
146
133
|
@@instances << self
|
147
134
|
end
|
148
135
|
|
136
|
+
def initialize_user_stream
|
137
|
+
return if user_stream_initialized?
|
138
|
+
|
139
|
+
streaming_client.on_friends do
|
140
|
+
user_stream_connected!
|
141
|
+
end
|
142
|
+
|
143
|
+
streaming_client.on_timeline_status do |tweet|
|
144
|
+
status = Status.new(tweet)
|
145
|
+
invoke_callbacks(:timeline_status, status)
|
146
|
+
invoke_callbacks(:mention, status) if status.text.include? "@#{@screen_name}"
|
147
|
+
end
|
148
|
+
|
149
|
+
streaming_client.on_delete do |status_id|
|
150
|
+
timeline.delete_status(status_id)
|
151
|
+
end
|
152
|
+
|
153
|
+
streaming_client.on_event(:favorite) do |event|
|
154
|
+
break if event[:source][:screen_name] == @screen_name
|
155
|
+
|
156
|
+
user = event[:source][:screen_name]
|
157
|
+
text = event[:target_object][:text]
|
158
|
+
message = "@#{user} has favorited your tweet: #{text}"
|
159
|
+
Notifier.instance.show_message(message)
|
160
|
+
end
|
161
|
+
|
162
|
+
streaming_client.on_no_data_received do
|
163
|
+
user_stream_disconnected!
|
164
|
+
user_stream
|
165
|
+
end
|
166
|
+
|
167
|
+
user_stream_initialized!
|
168
|
+
end
|
169
|
+
|
149
170
|
def list(list_id)
|
150
171
|
send_request do
|
151
172
|
rest_client.list(list_id)
|
@@ -318,41 +339,8 @@ module Twterm
|
|
318
339
|
end
|
319
340
|
end
|
320
341
|
|
321
|
-
def
|
322
|
-
|
323
|
-
Notifier.instance.show_message 'Connection established' unless @stream_connected
|
324
|
-
@stream_connected = true
|
325
|
-
end
|
326
|
-
|
327
|
-
stream_client.on_timeline_status do |tweet|
|
328
|
-
status = Status.new(tweet)
|
329
|
-
invoke_callbacks(:timeline_status, status)
|
330
|
-
invoke_callbacks(:mention, status) if status.text.include? "@#{@screen_name}"
|
331
|
-
end
|
332
|
-
|
333
|
-
stream_client.on_delete do |status_id|
|
334
|
-
timeline.delete_status(status_id)
|
335
|
-
end
|
336
|
-
|
337
|
-
stream_client.on_event(:favorite) do |event|
|
338
|
-
break if event[:source][:screen_name] == @screen_name
|
339
|
-
|
340
|
-
user = event[:source][:screen_name]
|
341
|
-
text = event[:target_object][:text]
|
342
|
-
message = "@#{user} has favorited your tweet: #{text}"
|
343
|
-
Notifier.instance.show_message(message)
|
344
|
-
end
|
345
|
-
|
346
|
-
stream_client.on_no_data_received do
|
347
|
-
@stream_connected = false
|
348
|
-
connect_stream
|
349
|
-
end
|
350
|
-
|
351
|
-
connect_stream
|
352
|
-
end
|
353
|
-
|
354
|
-
def stream_client
|
355
|
-
@stream_client ||= TweetStream::Client.new(
|
342
|
+
def streaming_client
|
343
|
+
@streaming_client ||= TweetStream::Client.new(
|
356
344
|
consumer_key: CONSUMER_KEY,
|
357
345
|
consumer_secret: CONSUMER_SECRET,
|
358
346
|
oauth_token: @access_token,
|
@@ -402,6 +390,42 @@ module Twterm
|
|
402
390
|
end
|
403
391
|
end
|
404
392
|
|
393
|
+
def user_stream
|
394
|
+
streaming_client.stop_stream
|
395
|
+
|
396
|
+
@streaming_thread = Thread.new do
|
397
|
+
begin
|
398
|
+
Notifier.instance.show_message 'Trying to connect to Twitter...'
|
399
|
+
streaming_client.userstream
|
400
|
+
rescue EventMachine::ConnectionError
|
401
|
+
Notifier.instance.show_error 'Connection failed'
|
402
|
+
sleep 30
|
403
|
+
retry
|
404
|
+
end
|
405
|
+
end
|
406
|
+
end
|
407
|
+
|
408
|
+
def user_stream_connected?
|
409
|
+
@user_stream_connected || false
|
410
|
+
end
|
411
|
+
|
412
|
+
def user_stream_connected!
|
413
|
+
Notifier.instance.show_message 'Connection established' unless user_stream_connected?
|
414
|
+
@user_stream_connected = true
|
415
|
+
end
|
416
|
+
|
417
|
+
def user_stream_disconnected!
|
418
|
+
@user_stream_connected = false
|
419
|
+
end
|
420
|
+
|
421
|
+
def user_stream_initialized?
|
422
|
+
@user_stream_initialized || false
|
423
|
+
end
|
424
|
+
|
425
|
+
def user_stream_initialized!
|
426
|
+
@user_stream_initialized = true
|
427
|
+
end
|
428
|
+
|
405
429
|
def user_timeline(user_id)
|
406
430
|
send_request do
|
407
431
|
rest_client.user_timeline(user_id, count: 200)
|
data/lib/twterm/history/base.rb
CHANGED
@@ -1,39 +1,20 @@
|
|
1
1
|
module Twterm
|
2
2
|
module History
|
3
3
|
module Base
|
4
|
-
MAX_HISTORY_SIZE = 500
|
5
|
-
|
6
4
|
attr_reader :history
|
7
5
|
|
8
6
|
def initialize
|
9
|
-
|
10
|
-
@history = []
|
11
|
-
return
|
12
|
-
end
|
13
|
-
|
14
|
-
begin
|
15
|
-
@history = YAML.load(File.read(history_file)) || []
|
16
|
-
rescue
|
17
|
-
@history = []
|
18
|
-
end
|
7
|
+
@history = []
|
19
8
|
end
|
20
9
|
|
21
|
-
def add(
|
22
|
-
@history
|
23
|
-
@history = @history.uniq.take(MAX_HISTORY_SIZE)
|
24
|
-
save
|
10
|
+
def add(item)
|
11
|
+
@history << item
|
25
12
|
end
|
26
13
|
|
27
14
|
private
|
28
15
|
|
29
|
-
def
|
30
|
-
|
31
|
-
f.write @history.to_yaml
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def history_file
|
36
|
-
fail NotImplementedError, 'history_file method must be implemented'
|
16
|
+
def file
|
17
|
+
fail NotImplementedError, 'file method must be implemented'
|
37
18
|
end
|
38
19
|
end
|
39
20
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Twterm
|
2
|
+
module History
|
3
|
+
module Savable
|
4
|
+
include Base
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
unless File.exist?(file)
|
8
|
+
@history = []
|
9
|
+
return
|
10
|
+
end
|
11
|
+
|
12
|
+
begin
|
13
|
+
@history = YAML.load(File.read(file)) || []
|
14
|
+
rescue
|
15
|
+
@history = []
|
16
|
+
end
|
17
|
+
|
18
|
+
Scheduler.new(300) { save }
|
19
|
+
end
|
20
|
+
|
21
|
+
def add(item)
|
22
|
+
@history << item unless @history.include?(item)
|
23
|
+
@history = history.take(1000)
|
24
|
+
end
|
25
|
+
|
26
|
+
def save
|
27
|
+
File.open(file, 'w', 0600) { |f| f.write(history.to_yaml) }
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def file
|
33
|
+
fail NotImplementedError, 'file method must be implemented'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/twterm/notifier.rb
CHANGED
data/lib/twterm/screen.rb
CHANGED
@@ -19,6 +19,17 @@ module Twterm
|
|
19
19
|
Notifier.instance.show
|
20
20
|
end
|
21
21
|
|
22
|
+
def resize
|
23
|
+
resizeterm(`tput lines`.to_i, `tput cols`.to_i)
|
24
|
+
@screen.resize(`tput lines`.to_i, `tput cols`.to_i)
|
25
|
+
|
26
|
+
TabManager.instance.resize
|
27
|
+
TabManager.instance.each_tab(&:resize)
|
28
|
+
Notifier.instance.resize
|
29
|
+
FilterQueryWindow.instance.resize
|
30
|
+
refresh
|
31
|
+
end
|
32
|
+
|
22
33
|
def respond_to_key(key)
|
23
34
|
case key
|
24
35
|
when ?n
|
data/lib/twterm/status.rb
CHANGED
@@ -52,13 +52,13 @@ module Twterm
|
|
52
52
|
unless tweet.retweeted_status.is_a? Twitter::NullObject
|
53
53
|
@retweeted_by_user_id = tweet.user.id
|
54
54
|
User.new(tweet.user)
|
55
|
-
retweeted_at =
|
55
|
+
retweeted_at = tweet.created_at.dup.localtime
|
56
56
|
tweet = tweet.retweeted_status
|
57
57
|
end
|
58
58
|
|
59
59
|
@id = tweet.id
|
60
60
|
@text = CGI.unescapeHTML(tweet.full_text.dup)
|
61
|
-
@created_at =
|
61
|
+
@created_at = tweet.created_at.dup.localtime
|
62
62
|
@appeared_at = retweeted_at || @created_at
|
63
63
|
@retweet_count = tweet.retweet_count
|
64
64
|
@favorite_count = tweet.favorite_count
|
@@ -100,7 +100,7 @@ module Twterm
|
|
100
100
|
end
|
101
101
|
|
102
102
|
def split(width)
|
103
|
-
@splitted_text[
|
103
|
+
@splitted_text[width] ||= @text.split_by_width(width)
|
104
104
|
end
|
105
105
|
|
106
106
|
def touch!
|
@@ -138,6 +138,10 @@ module Twterm
|
|
138
138
|
@@instances = status_ids.zip(statuses).to_h
|
139
139
|
end
|
140
140
|
|
141
|
+
def self.delete(id)
|
142
|
+
@@instances.delete(id)
|
143
|
+
end
|
144
|
+
|
141
145
|
def self.find(id)
|
142
146
|
@@instances[id]
|
143
147
|
end
|
@@ -155,9 +159,5 @@ module Twterm
|
|
155
159
|
instance = find(tweet.id)
|
156
160
|
instance.nil? ? super : instance.update!(tweet)
|
157
161
|
end
|
158
|
-
|
159
|
-
def self.parse_time(time)
|
160
|
-
(time.is_a?(String) ? Time.parse(time) : time.dup).localtime
|
161
|
-
end
|
162
162
|
end
|
163
163
|
end
|
data/lib/twterm/tab/base.rb
CHANGED
data/lib/twterm/tab_manager.rb
CHANGED
@@ -116,8 +116,21 @@ module Twterm
|
|
116
116
|
@window.refresh
|
117
117
|
end
|
118
118
|
|
119
|
+
def resize
|
120
|
+
@window.resize(3, stdscr.maxx)
|
121
|
+
@window.move(0, 0)
|
122
|
+
end
|
123
|
+
|
119
124
|
def respond_to_key(key)
|
120
125
|
case key
|
126
|
+
when ?1..?9
|
127
|
+
@index = key.to_i - 1 if @tabs.count >= key.to_i
|
128
|
+
current_tab.refresh
|
129
|
+
refresh_window
|
130
|
+
when ?0
|
131
|
+
@index = @tabs.count - 1
|
132
|
+
current_tab.refresh
|
133
|
+
refresh_window
|
121
134
|
when ?h, 2, Key::LEFT
|
122
135
|
show_previous
|
123
136
|
when ?l, 6, Key::RIGHT
|
data/lib/twterm/user.rb
CHANGED
data/lib/twterm/version.rb
CHANGED
data/twterm.gemspec
CHANGED
@@ -21,8 +21,8 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_dependency 'curses', '>= 1.0.1'
|
22
22
|
spec.add_dependency 'launchy', '>= 2.4.3'
|
23
23
|
spec.add_dependency 'oauth', '>= 0.4.7'
|
24
|
-
spec.add_dependency 'tweetstream', '
|
25
|
-
spec.add_dependency 'twitter', '
|
24
|
+
spec.add_dependency 'tweetstream', '~> 2.6'
|
25
|
+
spec.add_dependency 'twitter', '~> 5.13'
|
26
26
|
spec.add_dependency 'twitter-text', '>= 1.11.0'
|
27
27
|
|
28
28
|
spec.add_development_dependency 'bundler', '~> 1.8'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: twterm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryota Kameoka
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: curses
|
@@ -56,30 +56,30 @@ dependencies:
|
|
56
56
|
name: tweetstream
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 2.6
|
61
|
+
version: '2.6'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 2.6
|
68
|
+
version: '2.6'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: twitter
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 5.
|
75
|
+
version: '5.13'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 5.
|
82
|
+
version: '5.13'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: twitter-text
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -167,6 +167,7 @@ files:
|
|
167
167
|
- lib/twterm/friendship.rb
|
168
168
|
- lib/twterm/history/base.rb
|
169
169
|
- lib/twterm/history/hashtag.rb
|
170
|
+
- lib/twterm/history/savable.rb
|
170
171
|
- lib/twterm/history/screen_name.rb
|
171
172
|
- lib/twterm/list.rb
|
172
173
|
- lib/twterm/notification/base.rb
|