twterm 2.3.0 → 2.4.0
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/README.md +1 -0
- data/lib/twterm.rb +4 -4
- data/lib/twterm/app.rb +4 -1
- data/lib/twterm/direct_message_composer.rb +2 -1
- data/lib/twterm/environment.rb +5 -0
- data/lib/twterm/event/{base.rb → abstract_event.rb} +1 -1
- data/lib/twterm/event/direct_message/fetched.rb +2 -2
- data/lib/twterm/event/message/abstract_message.rb +2 -2
- data/lib/twterm/event/notification/abstract_notification.rb +2 -2
- data/lib/twterm/event/open_photo.rb +13 -0
- data/lib/twterm/event/open_uri.rb +2 -2
- data/lib/twterm/event/screen/refresh.rb +13 -0
- data/lib/twterm/event/screen/resize.rb +2 -2
- data/lib/twterm/event/status/{base.rb → abstract_status_event.rb} +2 -2
- data/lib/twterm/event/status/delete.rb +2 -2
- data/lib/twterm/event/status/mention.rb +2 -2
- data/lib/twterm/event/status/timeline.rb +2 -2
- data/lib/twterm/event/status_garbage_collected.rb +2 -2
- data/lib/twterm/event/user_garbage_collected.rb +2 -2
- data/lib/twterm/event_dispatcher.rb +2 -2
- data/lib/twterm/photo_viewer.rb +36 -0
- data/lib/twterm/photo_viewer_backend/abstract_photo_viewer_backend.rb +46 -0
- data/lib/twterm/photo_viewer_backend/browser_backend.rb +16 -0
- data/lib/twterm/photo_viewer_backend/imgcat_backend.rb +33 -0
- data/lib/twterm/photo_viewer_backend/quick_look_backend.rb +13 -0
- data/lib/twterm/preferences.rb +10 -0
- data/lib/twterm/publisher.rb +2 -2
- data/lib/twterm/rest_client.rb +5 -5
- data/lib/twterm/screen.rb +8 -6
- data/lib/twterm/status.rb +7 -1
- data/lib/twterm/tab/{base.rb → abstract_tab.rb} +1 -1
- data/lib/twterm/tab/direct_message/conversation.rb +2 -2
- data/lib/twterm/tab/direct_message/conversation_list.rb +2 -2
- data/lib/twterm/tab/key_assignments_cheatsheet.rb +2 -2
- data/lib/twterm/tab/new/{start.rb → index.rb} +2 -2
- data/lib/twterm/tab/new/list.rb +2 -2
- data/lib/twterm/tab/new/search.rb +6 -3
- data/lib/twterm/tab/new/user.rb +8 -7
- data/lib/twterm/tab/preferences/index.rb +9 -3
- data/lib/twterm/tab/preferences/notification_backend.rb +2 -2
- data/lib/twterm/tab/preferences/photo_viewer_backend.rb +86 -0
- data/lib/twterm/tab/rate_limit_status.rb +1 -1
- data/lib/twterm/tab/status_tab.rb +4 -3
- data/lib/twterm/tab/statuses/{base.rb → abstract_statuses_tab.rb} +2 -2
- data/lib/twterm/tab/statuses/conversation.rb +2 -2
- data/lib/twterm/tab/statuses/favorites.rb +2 -2
- data/lib/twterm/tab/statuses/home.rb +2 -2
- data/lib/twterm/tab/statuses/list_timeline.rb +2 -2
- data/lib/twterm/tab/statuses/mentions.rb +2 -2
- data/lib/twterm/tab/statuses/search.rb +2 -2
- data/lib/twterm/tab/statuses/user_timeline.rb +2 -2
- data/lib/twterm/tab/user_list_management.rb +1 -1
- data/lib/twterm/tab/user_tab.rb +2 -2
- data/lib/twterm/tab/users/{base.rb → abstract_users_tab.rb} +2 -2
- data/lib/twterm/tab/users/followers.rb +2 -2
- data/lib/twterm/tab/users/friends.rb +2 -2
- data/lib/twterm/tab_manager.rb +2 -2
- data/lib/twterm/tweetbox.rb +20 -16
- data/lib/twterm/version.rb +1 -1
- data/spec/twterm/event_dispatcher_spec.rb +1 -1
- data/twterm.gemspec +1 -1
- metadata +20 -13
- data/lib/twterm/tab/favorites.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3ed5b1fe74b479cd44e106d99f63dcbc348d3f3c67b4f1dd537edd9c8dd9044c
|
4
|
+
data.tar.gz: 1969619f0f236f559409b7eaf4f9ac49e8d7226e5068e405ebd18955080b7260
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a78e4c7a2b71df77830a3639d16610de65f05ae4ca9d2a56790e7a542eb41b5a476db5e60adc784eb0905649eab2827acfdd2c93111e4d3a49afd5785f51002
|
7
|
+
data.tar.gz: d7625b41113573124d36363e5848e794698c17cb332aef8e47bdf9c54548a750ebc8003a92051a72fca8414c9b5393fffbb3b31aaf54c0bed3ce664f78c79263
|
data/README.md
CHANGED
data/lib/twterm.rb
CHANGED
@@ -31,16 +31,16 @@ require 'twterm/screen'
|
|
31
31
|
require 'twterm/scheduler'
|
32
32
|
require 'twterm/status'
|
33
33
|
require 'twterm/tab_manager'
|
34
|
-
require 'twterm/tab/
|
34
|
+
require 'twterm/tab/abstract_tab'
|
35
35
|
require 'twterm/tab/dumpable'
|
36
36
|
require 'twterm/tab/exceptions'
|
37
37
|
require 'twterm/tab/scrollable'
|
38
38
|
require 'twterm/tab/key_assignments_cheatsheet'
|
39
|
-
require 'twterm/tab/new/
|
39
|
+
require 'twterm/tab/new/index'
|
40
40
|
require 'twterm/tab/new/list'
|
41
41
|
require 'twterm/tab/new/search'
|
42
42
|
require 'twterm/tab/new/user'
|
43
|
-
require 'twterm/tab/statuses/
|
43
|
+
require 'twterm/tab/statuses/abstract_statuses_tab'
|
44
44
|
require 'twterm/tab/statuses/conversation'
|
45
45
|
require 'twterm/tab/statuses/favorites'
|
46
46
|
require 'twterm/tab/statuses/home'
|
@@ -49,7 +49,7 @@ require 'twterm/tab/statuses/mentions'
|
|
49
49
|
require 'twterm/tab/statuses/search'
|
50
50
|
require 'twterm/tab/statuses/user_timeline'
|
51
51
|
require 'twterm/tab/user_tab'
|
52
|
-
require 'twterm/tab/users/
|
52
|
+
require 'twterm/tab/users/abstract_users_tab'
|
53
53
|
require 'twterm/tab/users/followers'
|
54
54
|
require 'twterm/tab/users/friends'
|
55
55
|
require 'twterm/tweetbox'
|
data/lib/twterm/app.rb
CHANGED
@@ -3,11 +3,13 @@ require 'curses'
|
|
3
3
|
require 'twterm/completion_manager'
|
4
4
|
require 'twterm/direct_message_composer'
|
5
5
|
require 'twterm/environment'
|
6
|
+
require 'twterm/event/screen/refresh'
|
6
7
|
require 'twterm/event/screen/resize'
|
7
8
|
require 'twterm/message_window'
|
8
9
|
require 'twterm/notification_dispatcher'
|
9
10
|
require 'twterm/persistable_configuration_proxy'
|
10
11
|
require 'twterm/preferences'
|
12
|
+
require 'twterm/photo_viewer'
|
11
13
|
require 'twterm/repository/direct_message_repository'
|
12
14
|
require 'twterm/repository/friendship_repository'
|
13
15
|
require 'twterm/repository/hashtag_repository'
|
@@ -75,6 +77,7 @@ module Twterm
|
|
75
77
|
MessageWindow.instance
|
76
78
|
|
77
79
|
@notification_dispatcher = NotificationDispatcher.new(preferences)
|
80
|
+
@photo_viewer = PhotoViewer.new(preferences)
|
78
81
|
|
79
82
|
timeline = Tab::Statuses::Home.new(self, client)
|
80
83
|
tab_manager.add_and_show(timeline)
|
@@ -84,7 +87,7 @@ module Twterm
|
|
84
87
|
tab_manager.add(mentions_tab)
|
85
88
|
tab_manager.recover_tabs
|
86
89
|
|
87
|
-
|
90
|
+
publish(Event::Screen::Refresh.new)
|
88
91
|
|
89
92
|
client.connect_user_stream
|
90
93
|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'twterm/event/screen/refresh'
|
1
2
|
require 'twterm/publisher'
|
2
3
|
require 'twterm/user'
|
3
4
|
require 'twterm/utils'
|
@@ -21,7 +22,7 @@ module Twterm
|
|
21
22
|
resetter = proc do
|
22
23
|
reset_prog_mode
|
23
24
|
sleep 0.1
|
24
|
-
|
25
|
+
publish(Event::Screen::Refresh.new)
|
25
26
|
end
|
26
27
|
|
27
28
|
thread = Thread.new do
|
data/lib/twterm/environment.rb
CHANGED
@@ -7,6 +7,7 @@ module Twterm
|
|
7
7
|
|
8
8
|
@terminal_notifier_available = TerminalNotifier.available?
|
9
9
|
@with_eog = system('which eog 2>&1 >/dev/null')
|
10
|
+
@with_imgcat = system('which imgcat 2>&1 >/dev/null')
|
10
11
|
@with_tmux = system('which tmux 2>&1 >/dev/null') && !ENV['TMUX'].nil?
|
11
12
|
@with_qlmanage = system('which qlmanage 2>&1 >/dev/null')
|
12
13
|
end
|
@@ -27,6 +28,10 @@ module Twterm
|
|
27
28
|
@with_eog
|
28
29
|
end
|
29
30
|
|
31
|
+
def with_imgcat?
|
32
|
+
@with_imgcat
|
33
|
+
end
|
34
|
+
|
30
35
|
def with_qlmanage?
|
31
36
|
@with_qlmanage
|
32
37
|
end
|
@@ -1,10 +1,10 @@
|
|
1
|
-
require 'twterm/event/
|
1
|
+
require 'twterm/event/abstract_event'
|
2
2
|
|
3
3
|
module Twterm
|
4
4
|
module Event
|
5
5
|
module Notification
|
6
6
|
# @abstract
|
7
|
-
class AbstractNotification <
|
7
|
+
class AbstractNotification < AbstractEvent
|
8
8
|
# @abstract
|
9
9
|
# @return [String] notification body
|
10
10
|
def body
|
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'twterm/status'
|
2
|
-
require 'twterm/event/
|
2
|
+
require 'twterm/event/abstract_event'
|
3
3
|
|
4
4
|
module Twterm
|
5
5
|
module Event
|
6
6
|
module Status
|
7
|
-
class
|
7
|
+
class AbstractStatusEvent < AbstractEvent
|
8
8
|
def fields
|
9
9
|
{ status: ::Twterm::Status }
|
10
10
|
end
|
@@ -21,8 +21,8 @@ module Twterm
|
|
21
21
|
|
22
22
|
def register_subscription(subscriber_id, event, callback)
|
23
23
|
check_type Class, event
|
24
|
-
unless event <= Event::
|
25
|
-
raise TypeError, 'the second argument must be a subclass of Twterm::Event::
|
24
|
+
unless event <= Event::AbstractEvent
|
25
|
+
raise TypeError, 'the second argument must be a subclass of Twterm::Event::AbstractEvent'
|
26
26
|
end
|
27
27
|
|
28
28
|
@subscriptions << Subscription.new(subscriber_id, event, callback)
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'twterm/event/open_photo'
|
2
|
+
require 'twterm/photo_viewer_backend/browser_backend'
|
3
|
+
require 'twterm/photo_viewer_backend/imgcat_backend'
|
4
|
+
require 'twterm/photo_viewer_backend/quick_look_backend'
|
5
|
+
require 'twterm/subscriber'
|
6
|
+
|
7
|
+
module Twterm
|
8
|
+
class PhotoViewer
|
9
|
+
include Subscriber
|
10
|
+
|
11
|
+
# @param preferences [Twterm::Preferences]
|
12
|
+
def initialize(preferences)
|
13
|
+
@preferences = preferences
|
14
|
+
|
15
|
+
@backends = {
|
16
|
+
browser: PhotoViewerBackend::BrowserBackend.new,
|
17
|
+
imgcat: PhotoViewerBackend::ImgcatBackend.new,
|
18
|
+
quick_look: PhotoViewerBackend::QuickLookBackend.new,
|
19
|
+
}
|
20
|
+
|
21
|
+
subscribe(Event::OpenPhoto) { |n| view(n.photo) }
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
attr_reader :backends, :preferences
|
27
|
+
|
28
|
+
# @param photo [Twitter::Media::Photo]
|
29
|
+
# @return [void]
|
30
|
+
def view(photo)
|
31
|
+
backends.each do |key, backend|
|
32
|
+
backend.view(photo) if preferences[:photo_viewer_backend, key]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'concurrent'
|
2
|
+
|
3
|
+
module Twterm
|
4
|
+
module PhotoViewerBackend
|
5
|
+
# @abstract
|
6
|
+
class AbstractPhotoViewerBackend
|
7
|
+
# @abstract
|
8
|
+
def view(_photo)
|
9
|
+
raise NotImplementedError, '`view` method must be implemented'
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def getc
|
15
|
+
system('stty raw -echo')
|
16
|
+
STDIN.getc
|
17
|
+
ensure
|
18
|
+
system('stty -raw echo')
|
19
|
+
end
|
20
|
+
|
21
|
+
# @param url [String]
|
22
|
+
# @yieldparam file [File]
|
23
|
+
def with_downloaded_file(url, &block)
|
24
|
+
uri = URI.parse(url)
|
25
|
+
|
26
|
+
Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
|
27
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
28
|
+
res = http.get(uri.path)
|
29
|
+
|
30
|
+
case res
|
31
|
+
when Net::HTTPSuccess
|
32
|
+
Tempfile.open(['', '.jpg'], Dir.tmpdir) do |file|
|
33
|
+
file.binmode
|
34
|
+
file.write(res.body)
|
35
|
+
file.flush
|
36
|
+
|
37
|
+
block.call(file)
|
38
|
+
end
|
39
|
+
else
|
40
|
+
raise res
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'twterm/photo_viewer_backend/abstract_photo_viewer_backend'
|
2
|
+
require 'twterm/publisher'
|
3
|
+
require 'twterm/event/open_uri'
|
4
|
+
|
5
|
+
module Twterm
|
6
|
+
module PhotoViewerBackend
|
7
|
+
class BrowserBackend < AbstractPhotoViewerBackend
|
8
|
+
include Publisher
|
9
|
+
|
10
|
+
def view(photo)
|
11
|
+
event = Event::OpenURI.new(photo.media_url_https)
|
12
|
+
publish(event)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'curses'
|
2
|
+
|
3
|
+
require 'twterm/event/screen/refresh'
|
4
|
+
require 'twterm/photo_viewer_backend/abstract_photo_viewer_backend'
|
5
|
+
require 'twterm/publisher'
|
6
|
+
|
7
|
+
module Twterm
|
8
|
+
module PhotoViewerBackend
|
9
|
+
class ImgcatBackend < AbstractPhotoViewerBackend
|
10
|
+
include Publisher
|
11
|
+
|
12
|
+
def view(photo)
|
13
|
+
Curses.close_screen unless Curses.closed?
|
14
|
+
|
15
|
+
puts "\e[H\e[2JDownloading..."
|
16
|
+
|
17
|
+
with_downloaded_file(photo.media_url_https) do |file|
|
18
|
+
begin
|
19
|
+
puts "\e[H\e[2JRendering..."
|
20
|
+
system "imgcat #{file.path}"
|
21
|
+
getc
|
22
|
+
ensure
|
23
|
+
puts "\e[H\e[2J"
|
24
|
+
Curses.reset_prog_mode
|
25
|
+
sleep 0.1
|
26
|
+
publish(Event::Screen::Refresh.new)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|