twterm 1.0.6 → 1.0.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a9e8728be1c9bd555f0354eb36822c8d01156911
4
- data.tar.gz: 03799091452f4954c392253206977513e8a66f9f
3
+ metadata.gz: 47e25077b5997ac024770d29a7faa63b0367d200
4
+ data.tar.gz: 752e5cc8daf0a00ab054602a2bc1c437f98b80e1
5
5
  SHA512:
6
- metadata.gz: 14af06eb721896713d982419195c28e64c22cfe6eace3746fb299cbbc849d5382a1c37a4fe527899ccb5aa6d89ee13dea1ce9d3027da34865af8955fbfd7787b
7
- data.tar.gz: 99e220ffd485f2d8b7d2909a0b9689dd2e06ef52528c600da85e201657304f693d5bab38f5410afd7135b8e49de134ceac4908056d6223fda7d4900df8990a43
6
+ metadata.gz: 40f134f4fd0eeaaed2998883330a9d132b4e99862c0aeebeb2a57326be3c76b08ed2899c83d9366172f82cc8c7b871226e284751645b4bd45df145e9416ac60c
7
+ data.tar.gz: 7cba404740e73eefec2a29b5c64368d1cfd2882e58e9847c6aae858470bcca7e27c7b9fb7cbcbc588e206c7188df7b3b92fb0dae1ab15c4f27305ffde82057a8
data/lib/twterm/app.rb CHANGED
@@ -51,7 +51,10 @@ module Twterm
51
51
  private
52
52
 
53
53
  def run_periodic_cleanup
54
- Scheduler.new(300) { Status.cleanup }
54
+ Scheduler.new(300) do
55
+ Status.cleanup
56
+ User.cleanup
57
+ end
55
58
  end
56
59
  end
57
60
  end
data/lib/twterm/client.rb CHANGED
@@ -32,6 +32,10 @@ module Twterm
32
32
  end
33
33
 
34
34
  def stream
35
+ @stream_client.on_friends do
36
+ Notifier.instance.show_message 'Connection established'
37
+ end
38
+
35
39
  @stream_client.on_timeline_status do |tweet|
36
40
  status = Status.new(tweet)
37
41
  invoke_callbacks(:timeline_status, status)
@@ -57,18 +61,16 @@ module Twterm
57
61
 
58
62
  def connect_stream
59
63
  @stream_client.stop_stream
60
- @streaming_thread.kill if @streaming_thread.is_a? Thread
61
64
 
62
- Notifier.instance.show_message 'Trying to connect to Twitter...'
63
65
  @streaming_thread = Thread.new do
64
66
  begin
67
+ Notifier.instance.show_message 'Trying to connect to Twitter...'
65
68
  @stream_client.userstream
66
69
  rescue EventMachine::ConnectionError
67
70
  Notifier.instance.show_error 'Connection failed'
68
71
  sleep 30
69
72
  retry
70
73
  end
71
- Notifier.instance.show_message 'Connection established'
72
74
  end
73
75
  end
74
76
 
@@ -4,7 +4,7 @@ module Twterm
4
4
  attr_reader :time, :fg_color, :bg_color
5
5
 
6
6
  def initialize(message)
7
- @message = message
7
+ @message = CGI.unescapeHTML(message)
8
8
  @time = Time.now
9
9
  end
10
10
 
@@ -7,8 +7,10 @@ class Scheduler
7
7
  @paused = false
8
8
 
9
9
  @thread = Thread.new do
10
- sleep @interval
11
- run
10
+ loop do
11
+ sleep @interval
12
+ run
13
+ end
12
14
  end
13
15
  end
14
16
 
data/lib/twterm/status.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  module Twterm
2
2
  class Status
3
- MAX_CACHED_STATUSES_COUNT = 1000
3
+ MAX_CACHED_TIME = 3600
4
4
 
5
- attr_reader :id, :text, :created_at, :created_at_for_sort, :retweet_count, :favorite_count, :in_reply_to_status_id, :favorited, :retweeted, :user, :retweeted_by, :urls, :media, :touched_at
5
+ attr_reader :id, :text, :created_at, :created_at_for_sort, :retweet_count, :favorite_count, :in_reply_to_status_id, :favorited, :retweeted, :user_id, :retweeted_by_user_id, :urls, :media, :touched_at
6
6
  alias_method :favorited?, :favorited
7
7
  alias_method :retweeted?, :retweeted
8
8
 
@@ -15,7 +15,8 @@ module Twterm
15
15
 
16
16
  def initialize(tweet)
17
17
  unless tweet.retweeted_status.is_a? Twitter::NullObject
18
- @retweeted_by = User.new(tweet.user)
18
+ @retweeted_by_user_id = tweet.user.id
19
+ User.create(tweet.user)
19
20
  retweeted_at = Status.parse_time(tweet.created_at)
20
21
  tweet = tweet.retweeted_status
21
22
  end
@@ -34,7 +35,8 @@ module Twterm
34
35
  @media = tweet.media
35
36
  @urls = tweet.urls
36
37
 
37
- @user = User.new(tweet.user)
38
+ @user_id = tweet.user.id
39
+ User.create(tweet.user)
38
40
 
39
41
  @splitted_text = {}
40
42
 
@@ -95,15 +97,27 @@ module Twterm
95
97
  Client.current.show_status(@in_reply_to_status_id, &block)
96
98
  end
97
99
 
100
+ def retweeted_by
101
+ User.find(@retweeted_by_user_id)
102
+ end
103
+
98
104
  def touch!
99
105
  @touched_at = Time.now
100
106
  end
101
107
 
108
+ def user
109
+ User.find(user_id)
110
+ end
111
+
102
112
  def ==(other)
103
113
  other.is_a?(self.class) && id == other.id
104
114
  end
105
115
 
106
116
  class << self
117
+ def all
118
+ @@instances.values
119
+ end
120
+
107
121
  def find(id)
108
122
  @@instances[id]
109
123
  end
@@ -113,13 +127,11 @@ module Twterm
113
127
  end
114
128
 
115
129
  def cleanup
116
- count = MAX_CACHED_STATUSES_COUNT
117
- return if @@instances.count < count
118
-
119
130
  TabManager.instance.each_tab do |tab|
120
131
  tab.touch_statuses if tab.is_a?(Tab::StatusesTab)
121
132
  end
122
- statuses = @@instances.values.sort_by(&:touched_at).take(count)
133
+ cond = -> (status) { status.touched_at > Time.now - MAX_CACHED_TIME }
134
+ statuses = all.select(&cond)
123
135
  status_ids = statuses.map(&:id)
124
136
  @@instances = status_ids.zip(statuses).to_h
125
137
  end
@@ -104,7 +104,7 @@ module Twterm
104
104
  end
105
105
 
106
106
  def touch_statuses
107
- statuses.take(100).each(&:touch!)
107
+ statuses.reverse.take(100).each(&:touch!)
108
108
  end
109
109
 
110
110
  def update
@@ -246,6 +246,7 @@ module Twterm
246
246
  end
247
247
 
248
248
  def sort
249
+ @status_ids &= Status.all.map(&:id)
249
250
  @status_ids.sort_by! { |id| Status.find(id).created_at_for_sort }
250
251
  end
251
252
 
data/lib/twterm/user.rb CHANGED
@@ -1,17 +1,21 @@
1
1
  module Twterm
2
2
  class User
3
- attr_reader :id, :name, :screen_name, :description, :location, :website, :following, :protected, :statuses_count, :friends_count, :followers_count
4
- attr_reader :color
3
+ attr_reader :id, :name, :screen_name, :description, :location, :website,
4
+ :following, :protected, :statuses_count, :friends_count,
5
+ :followers_count, :touched_at, :color
5
6
  alias_method :following?, :following
6
7
  alias_method :protected?, :protected
8
+ class << self
9
+ alias_method :create, :new
10
+ end
7
11
 
12
+ MAX_CACHED_TIME = 3600
8
13
  COLORS = [:red, :blue, :green, :cyan, :yellow, :magenta]
9
14
 
10
- @@instances = []
15
+ @@instances = {}
11
16
 
12
17
  def self.new(user)
13
- detector = -> (instance) { instance.id == user.id }
14
- instance = @@instances.find(&detector)
18
+ instance = find(user.id)
15
19
  instance.nil? ? super : instance.update!(user)
16
20
  end
17
21
 
@@ -19,8 +23,13 @@ module Twterm
19
23
  @id = user.id
20
24
  update!(user)
21
25
  @color = COLORS[@id % 6]
26
+ touch!
27
+
28
+ @@instances[@id] = self
29
+ end
22
30
 
23
- @@instances << self
31
+ def touch!
32
+ @touched_at = Time.now
24
33
  end
25
34
 
26
35
  def update!(user)
@@ -39,5 +48,23 @@ module Twterm
39
48
 
40
49
  self
41
50
  end
51
+
52
+ def self.all
53
+ @@instances.values
54
+ end
55
+
56
+ def self.find(id)
57
+ @@instances[id]
58
+ end
59
+
60
+ def self.cleanup
61
+ referenced_users = Status.all.map(&:user)
62
+ referenced_users.each(&:touch!)
63
+
64
+ cond = -> (user) { user.touched_at > Time.now - MAX_CACHED_TIME }
65
+ users = all.select(&cond)
66
+ user_ids = users.map(&:id)
67
+ @@instances = user_ids.zip(users).to_h
68
+ end
42
69
  end
43
70
  end
@@ -1,3 +1,3 @@
1
1
  module Twterm
2
- VERSION = '1.0.6'
2
+ VERSION = '1.0.7'
3
3
  end
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.6
4
+ version: 1.0.7
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-04-12 00:00:00.000000000 Z
11
+ date: 2015-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: curses