facy 1.2.9.rc1
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 +7 -0
- data/.gitignore +34 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +32 -0
- data/Rakefile +1 -0
- data/bin/facy +18 -0
- data/config.yml +4 -0
- data/facy.gemspec +27 -0
- data/lib/facy.rb +32 -0
- data/lib/facy/command.rb +180 -0
- data/lib/facy/converter.rb +91 -0
- data/lib/facy/core.rb +104 -0
- data/lib/facy/core_ext.rb +9 -0
- data/lib/facy/exception.rb +3 -0
- data/lib/facy/facebook.rb +108 -0
- data/lib/facy/get_token.rb +112 -0
- data/lib/facy/help.rb +28 -0
- data/lib/facy/image_viewer.rb +82 -0
- data/lib/facy/input_queue.rb +35 -0
- data/lib/facy/logger.rb +26 -0
- data/lib/facy/option_parser.rb +23 -0
- data/lib/facy/output.rb +183 -0
- data/lib/facy/version.rb +3 -0
- metadata +153 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
module Facy
|
2
|
+
module InputQueue
|
3
|
+
def printed_item
|
4
|
+
@printed_item ||= Set.new
|
5
|
+
end
|
6
|
+
|
7
|
+
def stream_print_queue
|
8
|
+
@stream_print_queue ||= []
|
9
|
+
end
|
10
|
+
|
11
|
+
def notification_print_queue
|
12
|
+
@notification_print_queue ||= []
|
13
|
+
end
|
14
|
+
|
15
|
+
def item_print_queue
|
16
|
+
@item_print_queue ||= []
|
17
|
+
end
|
18
|
+
|
19
|
+
def insert_lock
|
20
|
+
@insert_lock ||= Monitor.new
|
21
|
+
end
|
22
|
+
|
23
|
+
def insert_item(item)
|
24
|
+
insert_lock.synchronize do
|
25
|
+
_insert_item(item)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def _insert_item(item)
|
30
|
+
item_print_queue << item
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
extend InputQueue
|
35
|
+
end
|
data/lib/facy/logger.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
module Facy
|
2
|
+
module Logger
|
3
|
+
def log_file
|
4
|
+
File.expand_path(config[:log_file_name], config[:log_folder])
|
5
|
+
end
|
6
|
+
|
7
|
+
def log_queue
|
8
|
+
@log_queue ||= []
|
9
|
+
end
|
10
|
+
|
11
|
+
def log(info, message)
|
12
|
+
return unless config[:debug_log]
|
13
|
+
log_queue << {info: info.to_s, message: message}
|
14
|
+
end
|
15
|
+
|
16
|
+
def dump_log
|
17
|
+
File.open(log_file, "w") do |f|
|
18
|
+
log_queue.each {|m| f.write "#{m[:info]} #{m[:message]} \n"}
|
19
|
+
end
|
20
|
+
rescue Exception => e
|
21
|
+
error e
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
extend Logger
|
26
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Facy
|
2
|
+
module OptParser
|
3
|
+
def parse(argv)
|
4
|
+
OptionParser.new do |opt|
|
5
|
+
# -h, --h, --help is show usage.
|
6
|
+
# -v, --v, --version is show version.
|
7
|
+
|
8
|
+
# short option with require argument
|
9
|
+
opt.on('--debug_log VALUE') do |v|
|
10
|
+
config[:debug_log] = v
|
11
|
+
end
|
12
|
+
|
13
|
+
opt.on('--enable_img_view VALUE') do |v|
|
14
|
+
config[:enable_img_view] = v
|
15
|
+
end
|
16
|
+
|
17
|
+
opt.parse!(argv)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
extend OptParser
|
23
|
+
end
|
data/lib/facy/output.rb
ADDED
@@ -0,0 +1,183 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Facy
|
4
|
+
module Output
|
5
|
+
def periodic_output
|
6
|
+
return if (items = not_yet_print_items).empty?
|
7
|
+
new_line
|
8
|
+
items.each {|item| instant_output(item)}
|
9
|
+
clear_line
|
10
|
+
end
|
11
|
+
|
12
|
+
def not_yet_print_items
|
13
|
+
items = []
|
14
|
+
while !stream_print_queue.empty?
|
15
|
+
post = stream_print_queue.pop
|
16
|
+
items << post unless printed_item.include? post.id
|
17
|
+
end
|
18
|
+
|
19
|
+
while !notification_print_queue.empty?
|
20
|
+
notify = notification_print_queue.pop
|
21
|
+
items << notify unless printed_item.include? notify.id
|
22
|
+
end
|
23
|
+
return items
|
24
|
+
end
|
25
|
+
|
26
|
+
def instant_output(item)
|
27
|
+
printed_item << item.id if item.id
|
28
|
+
info = item.info
|
29
|
+
print_registers.each do |pattern|
|
30
|
+
if info == pattern[:name]
|
31
|
+
pattern[:block].call(item)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
rescue
|
35
|
+
end
|
36
|
+
|
37
|
+
def print_registers
|
38
|
+
@print_registers ||= []
|
39
|
+
end
|
40
|
+
|
41
|
+
def print_register(item_name, &block)
|
42
|
+
print_registers << {name: item_name, block: block}
|
43
|
+
end
|
44
|
+
|
45
|
+
def stop_animation
|
46
|
+
@stop_animation ||= true
|
47
|
+
end
|
48
|
+
|
49
|
+
def error(text)
|
50
|
+
instant_output(Item.new(info: :error, content: text))
|
51
|
+
end
|
52
|
+
|
53
|
+
def new_line
|
54
|
+
puts ''
|
55
|
+
end
|
56
|
+
|
57
|
+
def clear_line
|
58
|
+
Readline.refresh_line
|
59
|
+
end
|
60
|
+
|
61
|
+
def username_color_map
|
62
|
+
@username_color_map ||= {}
|
63
|
+
end
|
64
|
+
|
65
|
+
def username_color_table
|
66
|
+
@username_color_table ||= []
|
67
|
+
end
|
68
|
+
|
69
|
+
def username_color_table_load
|
70
|
+
max_range = 256
|
71
|
+
step = 9
|
72
|
+
start = current = 1
|
73
|
+
(1..max_range).each do |col|
|
74
|
+
username_color_table << [38,5,current]
|
75
|
+
current = current + step
|
76
|
+
current = current % max_range if current > max_range
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def username_color(uname)
|
81
|
+
return username_color_map[uname] if username_color_map[uname]
|
82
|
+
username_color_table_load if username_color_table.empty?
|
83
|
+
return (username_color_map[uname] = username_color_table.pop)
|
84
|
+
end
|
85
|
+
|
86
|
+
def post_code(item)
|
87
|
+
post_id = item.id
|
88
|
+
|
89
|
+
return post_code_map[post_id] if post_code_map[post_id]
|
90
|
+
post_code_table_load if post_code_table.empty?
|
91
|
+
code = post_code_table.pop
|
92
|
+
|
93
|
+
post_code_reverse_map[code] = item
|
94
|
+
post_code_map[post_id] = code
|
95
|
+
|
96
|
+
return code
|
97
|
+
end
|
98
|
+
|
99
|
+
def post_code_table
|
100
|
+
@post_code_table ||= []
|
101
|
+
end
|
102
|
+
|
103
|
+
def post_code_map
|
104
|
+
@post_code_map ||= {}
|
105
|
+
end
|
106
|
+
|
107
|
+
def post_code_reverse_map
|
108
|
+
@post_code_reverse_map ||= {}
|
109
|
+
end
|
110
|
+
|
111
|
+
def post_code_table_load
|
112
|
+
max_length = 3
|
113
|
+
_post_code_table_loop('$', max_length)
|
114
|
+
post_code_table.sort!
|
115
|
+
end
|
116
|
+
|
117
|
+
def _post_code_table_loop(prefix, max_length)
|
118
|
+
post_code_table << prefix if prefix.length > 0
|
119
|
+
if prefix.length < max_length
|
120
|
+
('a'..'z').each do |char|
|
121
|
+
_post_code_table_loop(prefix + char, max_length)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
init do
|
128
|
+
print_registers.clear
|
129
|
+
username_color_table_load
|
130
|
+
post_code_table_load
|
131
|
+
|
132
|
+
print_register :feed do |item|
|
133
|
+
code = post_code(item).colorize(38,5,8).strip
|
134
|
+
info = "♡ #{item.info.to_s.capitalize}".colorize(38,5,118).strip
|
135
|
+
type = item.data.type.colorize(38,5,238)
|
136
|
+
uname = item.data.user
|
137
|
+
like_count = item.data.like_count.to_s.colorize(36,48,5,0)
|
138
|
+
comment_count = item.data.comment_count.to_s.colorize(36,48,5,0)
|
139
|
+
uname = uname.colorize(username_color(uname))
|
140
|
+
content = item.data.content.colorize(0,55)
|
141
|
+
date = item.data.date
|
142
|
+
|
143
|
+
puts "[#{code}][#{info}] #{uname} #{content} {#{type}} L:#{like_count} C:#{comment_count}"
|
144
|
+
end
|
145
|
+
|
146
|
+
print_register :notification do |item|
|
147
|
+
info = "☢ #{item.info.to_s.capitalize}".colorize(0,31)
|
148
|
+
uname = item.data.user
|
149
|
+
uname = uname.colorize(username_color(uname))
|
150
|
+
content = item.data.content.colorize(0,55)
|
151
|
+
|
152
|
+
puts "[#{info}] #{uname} #{content}"
|
153
|
+
end
|
154
|
+
|
155
|
+
print_register :info do |item|
|
156
|
+
new_line
|
157
|
+
info = item.info.to_s.capitalize.colorize(0,31)
|
158
|
+
content = item.content
|
159
|
+
puts "[#{info}] #{content}"
|
160
|
+
end
|
161
|
+
|
162
|
+
print_register :error do |item|
|
163
|
+
new_line
|
164
|
+
info = "Error".colorize(0,31)
|
165
|
+
puts "[#{info}] #{item.content}"
|
166
|
+
end
|
167
|
+
|
168
|
+
print_register :help do |item|
|
169
|
+
puts item.content
|
170
|
+
puts "example: #{item.extra}" if item.extra
|
171
|
+
end
|
172
|
+
|
173
|
+
print_register :comment do |item|
|
174
|
+
puts " #{item.from} => #{item.message}"
|
175
|
+
end
|
176
|
+
|
177
|
+
print_register :like do |item|
|
178
|
+
puts " ♥ #{item.from}"
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
extend Output
|
183
|
+
end
|
data/lib/facy/version.rb
ADDED
metadata
ADDED
@@ -0,0 +1,153 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: facy
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.2.9.rc1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- dxhuy1988
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-08-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.5'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: koala
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.10'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.10'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: activesupport
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '4.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '4.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: launchy
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.4'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.4'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: eventmachine
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rmagick
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.13'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '2.13'
|
97
|
+
description: 'facy: first colorful terminal client for facebook'
|
98
|
+
email:
|
99
|
+
- doxuanhuy@gmail.com
|
100
|
+
executables:
|
101
|
+
- facy
|
102
|
+
extensions: []
|
103
|
+
extra_rdoc_files: []
|
104
|
+
files:
|
105
|
+
- ".gitignore"
|
106
|
+
- Gemfile
|
107
|
+
- LICENSE.txt
|
108
|
+
- README.md
|
109
|
+
- Rakefile
|
110
|
+
- bin/facy
|
111
|
+
- config.yml
|
112
|
+
- facy.gemspec
|
113
|
+
- lib/facy.rb
|
114
|
+
- lib/facy/command.rb
|
115
|
+
- lib/facy/converter.rb
|
116
|
+
- lib/facy/core.rb
|
117
|
+
- lib/facy/core_ext.rb
|
118
|
+
- lib/facy/exception.rb
|
119
|
+
- lib/facy/facebook.rb
|
120
|
+
- lib/facy/get_token.rb
|
121
|
+
- lib/facy/help.rb
|
122
|
+
- lib/facy/image_viewer.rb
|
123
|
+
- lib/facy/input_queue.rb
|
124
|
+
- lib/facy/logger.rb
|
125
|
+
- lib/facy/option_parser.rb
|
126
|
+
- lib/facy/output.rb
|
127
|
+
- lib/facy/version.rb
|
128
|
+
homepage: https://github.com/huydx/facy
|
129
|
+
licenses:
|
130
|
+
- MIT
|
131
|
+
metadata: {}
|
132
|
+
post_install_message:
|
133
|
+
rdoc_options: []
|
134
|
+
require_paths:
|
135
|
+
- lib
|
136
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
138
|
+
- - ">="
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: '0'
|
141
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 1.3.1
|
146
|
+
requirements: []
|
147
|
+
rubyforge_project:
|
148
|
+
rubygems_version: 2.2.2
|
149
|
+
signing_key:
|
150
|
+
specification_version: 4
|
151
|
+
summary: 'facy: terminal client for facebook'
|
152
|
+
test_files: []
|
153
|
+
has_rdoc:
|