twterm 1.0.5 → 1.0.6
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 +3 -2
- data/lib/twterm/app.rb +1 -6
- data/lib/twterm/client.rb +11 -0
- data/lib/twterm/scheduler.rb +30 -0
- data/lib/twterm/status.rb +3 -0
- data/lib/twterm/tab/list_tab.rb +6 -1
- data/lib/twterm/tab/mentions_tab.rb +1 -1
- data/lib/twterm/tab/statuses_tab.rb +16 -9
- data/lib/twterm/tab/timeline_tab.rb +1 -1
- data/lib/twterm/tab/user_tab.rb +6 -1
- data/lib/twterm/tab_manager.rb +6 -0
- data/lib/twterm/tweetbox.rb +31 -7
- data/lib/twterm/version.rb +1 -1
- data/twterm.gemspec +1 -0
- metadata +17 -3
- data/lib/twterm/tab/auto_reloadable.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a9e8728be1c9bd555f0354eb36822c8d01156911
|
4
|
+
data.tar.gz: 03799091452f4954c392253206977513e8a66f9f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 14af06eb721896713d982419195c28e64c22cfe6eace3746fb299cbbc849d5382a1c37a4fe527899ccb5aa6d89ee13dea1ce9d3027da34865af8955fbfd7787b
|
7
|
+
data.tar.gz: 99e220ffd485f2d8b7d2909a0b9689dd2e06ef52528c600da85e201657304f693d5bab38f5410afd7135b8e49de134ceac4908056d6223fda7d4900df8990a43
|
data/lib/twterm.rb
CHANGED
@@ -9,6 +9,7 @@ require 'readline'
|
|
9
9
|
require 'singleton'
|
10
10
|
require 'tweetstream'
|
11
11
|
require 'twitter'
|
12
|
+
require 'twitter-text'
|
12
13
|
require 'yaml'
|
13
14
|
|
14
15
|
require 'extentions'
|
@@ -26,10 +27,10 @@ require 'twterm/notification/message'
|
|
26
27
|
require 'twterm/notification/error'
|
27
28
|
require 'twterm/notifier'
|
28
29
|
require 'twterm/screen'
|
30
|
+
require 'twterm/scheduler'
|
29
31
|
require 'twterm/status'
|
30
32
|
require 'twterm/tab_manager'
|
31
33
|
require 'twterm/tab/base'
|
32
|
-
require 'twterm/tab/auto_reloadable'
|
33
34
|
require 'twterm/tab/exceptions'
|
34
35
|
require 'twterm/tab/scrollable'
|
35
36
|
require 'twterm/tab/statuses_tab'
|
@@ -50,6 +51,6 @@ require 'twterm/version'
|
|
50
51
|
|
51
52
|
module Twterm
|
52
53
|
class Conf
|
53
|
-
REQUIRE_VERSION = '1.0.
|
54
|
+
REQUIRE_VERSION = '1.0.6'
|
54
55
|
end
|
55
56
|
end
|
data/lib/twterm/app.rb
CHANGED
data/lib/twterm/client.rb
CHANGED
@@ -173,6 +173,17 @@ module Twterm
|
|
173
173
|
end
|
174
174
|
end
|
175
175
|
|
176
|
+
def destroy_status(status)
|
177
|
+
send_request do
|
178
|
+
begin
|
179
|
+
@rest_client.destroy_status(status.id)
|
180
|
+
yield if block_given?
|
181
|
+
rescue Twitter::Error::NotFound, Twitter::Error::Forbidden
|
182
|
+
Notifier.instance.show_error 'You cannot destroy that status'
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
176
187
|
def on_timeline_status(&block)
|
177
188
|
fail ArgumentError, 'no block given' unless block_given?
|
178
189
|
on(:timeline_status, &block)
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class Scheduler
|
2
|
+
def initialize(interval, &block)
|
3
|
+
fail ArgumentError, 'Interval must be a real number' unless interval.is_a?(Numeric) && interval.real?
|
4
|
+
fail RangeError, 'Interval must be greater than zero' unless interval > 0
|
5
|
+
|
6
|
+
@interval, @block = interval, block
|
7
|
+
@paused = false
|
8
|
+
|
9
|
+
@thread = Thread.new do
|
10
|
+
sleep @interval
|
11
|
+
run
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def kill
|
16
|
+
@thread.kill
|
17
|
+
end
|
18
|
+
|
19
|
+
def pause
|
20
|
+
@paused = true
|
21
|
+
end
|
22
|
+
|
23
|
+
def run
|
24
|
+
@block.call unless @paused
|
25
|
+
end
|
26
|
+
|
27
|
+
def unpause
|
28
|
+
@paused = false
|
29
|
+
end
|
30
|
+
end
|
data/lib/twterm/status.rb
CHANGED
@@ -116,6 +116,9 @@ module Twterm
|
|
116
116
|
count = MAX_CACHED_STATUSES_COUNT
|
117
117
|
return if @@instances.count < count
|
118
118
|
|
119
|
+
TabManager.instance.each_tab do |tab|
|
120
|
+
tab.touch_statuses if tab.is_a?(Tab::StatusesTab)
|
121
|
+
end
|
119
122
|
statuses = @@instances.values.sort_by(&:touched_at).take(count)
|
120
123
|
status_ids = statuses.map(&:id)
|
121
124
|
@@instances = status_ids.zip(statuses).to_h
|
data/lib/twterm/tab/list_tab.rb
CHANGED
@@ -13,7 +13,7 @@ module Twterm
|
|
13
13
|
@list = list
|
14
14
|
@title = @list.full_name
|
15
15
|
fetch { move_to_top }
|
16
|
-
|
16
|
+
@auto_reloader = Scheduler.new(300) { fetch }
|
17
17
|
end
|
18
18
|
|
19
19
|
def fetch
|
@@ -25,6 +25,11 @@ module Twterm
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
+
def close
|
29
|
+
@auto_reloader.kill
|
30
|
+
super
|
31
|
+
end
|
32
|
+
|
28
33
|
def ==(other)
|
29
34
|
other.is_a?(self.class) && list == other.list
|
30
35
|
end
|
@@ -3,19 +3,11 @@ module Twterm
|
|
3
3
|
module StatusesTab
|
4
4
|
include Base
|
5
5
|
include Scrollable
|
6
|
-
include AutoReloadable
|
7
6
|
|
8
7
|
def initialize
|
9
8
|
super
|
10
9
|
|
11
10
|
@status_ids = []
|
12
|
-
|
13
|
-
Thread.new do
|
14
|
-
loop do
|
15
|
-
statuses.take(100).each(&:touch!)
|
16
|
-
sleep 60
|
17
|
-
end
|
18
|
-
end
|
19
11
|
end
|
20
12
|
|
21
13
|
def statuses
|
@@ -73,7 +65,16 @@ module Twterm
|
|
73
65
|
end
|
74
66
|
end
|
75
67
|
|
76
|
-
def
|
68
|
+
def destroy_status
|
69
|
+
status = highlighted_status
|
70
|
+
|
71
|
+
Client.current.destroy_status(status) do
|
72
|
+
delete(status.id)
|
73
|
+
refresh
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def delete(status_id)
|
77
78
|
@status_ids.delete(status_id)
|
78
79
|
refresh
|
79
80
|
end
|
@@ -102,6 +103,10 @@ module Twterm
|
|
102
103
|
fail NotImplementedError, 'fetch method must be implemented'
|
103
104
|
end
|
104
105
|
|
106
|
+
def touch_statuses
|
107
|
+
statuses.take(100).each(&:touch!)
|
108
|
+
end
|
109
|
+
|
105
110
|
def update
|
106
111
|
current_line = 0
|
107
112
|
|
@@ -195,6 +200,8 @@ module Twterm
|
|
195
200
|
case key
|
196
201
|
when 'c'
|
197
202
|
show_conversation
|
203
|
+
when 'D'
|
204
|
+
destroy_status
|
198
205
|
when 'F'
|
199
206
|
favorite
|
200
207
|
when 'o'
|
data/lib/twterm/tab/user_tab.rb
CHANGED
@@ -14,7 +14,7 @@ module Twterm
|
|
14
14
|
@title = "@#{user.screen_name}"
|
15
15
|
|
16
16
|
fetch { move_to_top }
|
17
|
-
|
17
|
+
@auto_reloader = Scheduler.new(120) { fetch }
|
18
18
|
end
|
19
19
|
|
20
20
|
def fetch
|
@@ -25,6 +25,11 @@ module Twterm
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
+
def close
|
29
|
+
@auto_reloader.kill
|
30
|
+
super
|
31
|
+
end
|
32
|
+
|
28
33
|
def ==(other)
|
29
34
|
other.is_a?(self.class) && user == other.user
|
30
35
|
end
|
data/lib/twterm/tab_manager.rb
CHANGED
data/lib/twterm/tweetbox.rb
CHANGED
@@ -47,16 +47,32 @@ module Twterm
|
|
47
47
|
end
|
48
48
|
|
49
49
|
loop do
|
50
|
-
|
51
|
-
|
52
|
-
|
50
|
+
loop do
|
51
|
+
msg = @in_reply_to.nil? || !@status.empty? ? '> ' : "> @#{in_reply_to.user.screen_name} "
|
52
|
+
line = (readline(msg, true) || '').strip
|
53
|
+
break if line.empty?
|
53
54
|
|
54
|
-
|
55
|
-
|
55
|
+
if line.end_with?('\\')
|
56
|
+
@status << line.chop.lstrip + "\n"
|
57
|
+
else
|
58
|
+
@status << line
|
59
|
+
break
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
puts "\n"
|
64
|
+
|
65
|
+
case validate
|
66
|
+
when :too_long
|
67
|
+
puts "Status is too long (#{length} / 140 characters)"
|
68
|
+
when :invalid_characters
|
69
|
+
puts 'Status contains invalid characters'
|
56
70
|
else
|
57
|
-
@status << line
|
58
71
|
break
|
59
72
|
end
|
73
|
+
|
74
|
+
puts "\n"
|
75
|
+
clear
|
60
76
|
end
|
61
77
|
|
62
78
|
resetter.call
|
@@ -74,12 +90,20 @@ module Twterm
|
|
74
90
|
end
|
75
91
|
|
76
92
|
def post
|
77
|
-
return if
|
93
|
+
return if validate
|
78
94
|
|
79
95
|
Client.current.post(@status, @in_reply_to)
|
80
96
|
clear
|
81
97
|
end
|
82
98
|
|
99
|
+
def validate
|
100
|
+
Twitter::Validation.tweet_invalid?(@status)
|
101
|
+
end
|
102
|
+
|
103
|
+
def length
|
104
|
+
Twitter::Validation.tweet_length(@status)
|
105
|
+
end
|
106
|
+
|
83
107
|
def clear
|
84
108
|
@status = ''
|
85
109
|
end
|
data/lib/twterm/version.rb
CHANGED
data/twterm.gemspec
CHANGED
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_dependency 'oauth', '>= 0.4.7'
|
23
23
|
spec.add_dependency 'tweetstream', '>= 2.6.1'
|
24
24
|
spec.add_dependency 'twitter', '>= 5.14.0'
|
25
|
+
spec.add_dependency 'twitter-text', '>= 1.11.0'
|
25
26
|
|
26
27
|
spec.add_development_dependency 'bundler', '~> 1.8'
|
27
28
|
spec.add_development_dependency 'rake', '~> 10.0'
|
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.0.
|
4
|
+
version: 1.0.6
|
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-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: curses
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 5.14.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: twitter-text
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.11.0
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.11.0
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: bundler
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -137,9 +151,9 @@ files:
|
|
137
151
|
- lib/twterm/notification/error.rb
|
138
152
|
- lib/twterm/notification/message.rb
|
139
153
|
- lib/twterm/notifier.rb
|
154
|
+
- lib/twterm/scheduler.rb
|
140
155
|
- lib/twterm/screen.rb
|
141
156
|
- lib/twterm/status.rb
|
142
|
-
- lib/twterm/tab/auto_reloadable.rb
|
143
157
|
- lib/twterm/tab/base.rb
|
144
158
|
- lib/twterm/tab/conversation_tab.rb
|
145
159
|
- lib/twterm/tab/exceptions.rb
|