shutwork 0.1.0 → 0.2.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/Gemfile.lock +1 -1
- data/README.md +64 -1
- data/lib/shutwork/cli.rb +7 -3
- data/lib/shutwork/client.rb +12 -0
- data/lib/shutwork/command/base.rb +17 -1
- data/lib/shutwork/command/display.rb +54 -0
- data/lib/shutwork/command/help.rb +3 -3
- data/lib/shutwork/command/me.rb +5 -6
- data/lib/shutwork/command/rooms.rb +44 -15
- data/lib/shutwork/command/token.rb +5 -5
- data/lib/shutwork/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3ff7c92d1e6570df34fa40f2fbcb6e7296a98439ecc067b1bb0435a93998ea01
|
4
|
+
data.tar.gz: 4280596b8d939771b5d4d7b85f5dbff32a38d1a780e2d78b6ef819d766327e00
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eaa3804849dd7e30754697ba72a46c9465f1a7fc673c05dee40a3420937aba805a0c52586d56a73b5d58d17482c903eebf126c8a006db39d9631ea7387b9cb7d
|
7
|
+
data.tar.gz: 780e63d70d1b8d359260b8b2da437b1b8c15db4dc3fc296172e042768648800edb0ad31ecde2e315ac855762b58aa598df1487fb95ee17a9934eb98a5de79e21
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# Shutwork
|
2
2
|
|
3
3
|
[](https://travis-ci.com/kayhide/shutwork)
|
4
|
+
[](https://badge.fury.io/rb/shutwork)
|
4
5
|
|
5
6
|
## Installation
|
6
7
|
|
@@ -10,7 +11,69 @@ Install `shutwork` as:
|
|
10
11
|
|
11
12
|
## Usage
|
12
13
|
|
13
|
-
|
14
|
+
### About me
|
15
|
+
|
16
|
+
To get me:
|
17
|
+
|
18
|
+
$ shutwork me
|
19
|
+
|
20
|
+
For the first time, it will complain about the absense of token and tell you what to do.
|
21
|
+
Follow the displayed instruction and supply your token.
|
22
|
+
|
23
|
+
When token is prepared, `me` command will show your account id and your name.
|
24
|
+
|
25
|
+
$ shutwork me
|
26
|
+
123456 Alice
|
27
|
+
|
28
|
+
### List rooms and messages
|
29
|
+
|
30
|
+
To get rooms:
|
31
|
+
|
32
|
+
$ shutwork rooms
|
33
|
+
12000000 A room
|
34
|
+
29000000 Bob
|
35
|
+
47000000 Another room
|
36
|
+
188000000 Yet anoter room
|
37
|
+
....
|
38
|
+
|
39
|
+
To get messages of a room:
|
40
|
+
|
41
|
+
$ shutwork rooms 12000000
|
42
|
+
----------------
|
43
|
+
2019-10-23 01:19:50 +0900 Alice
|
44
|
+
Hey, it is working!
|
45
|
+
----------------
|
46
|
+
2019-10-23 12:49:16 +0900 Bob
|
47
|
+
Wow, unbelievable!
|
48
|
+
----------------
|
49
|
+
....
|
50
|
+
|
51
|
+
### List members and files
|
52
|
+
|
53
|
+
To list memebers at a room:
|
54
|
+
|
55
|
+
$ shutwork rooms 12000000 --members
|
56
|
+
123456 Alice
|
57
|
+
29000000 Bob
|
58
|
+
...
|
59
|
+
|
60
|
+
To list files at a room:
|
61
|
+
|
62
|
+
$ shutwork rooms 12000000 --files
|
63
|
+
2016-08-30 16:12:31 +0900 544KB help_me.jpg
|
64
|
+
2016-09-02 12:26:26 +0900 229KB maybe_broken.jpg
|
65
|
+
2016-10-15 19:59:53 +0900 1.0MB smoking_melting.jpg
|
66
|
+
2016-11-23 21:52:26 +0900 253KB seriously_damaged.jpg
|
67
|
+
2017-01-28 16:05:37 +0900 204KB rip.jpg
|
68
|
+
...
|
69
|
+
|
70
|
+
|
71
|
+
### Note
|
72
|
+
|
73
|
+
Because of the limitation of Chatwork API, messages cannot be retrieved more than 100 items.
|
74
|
+
|
75
|
+
It only collects the most recent 100 messages.
|
76
|
+
|
14
77
|
|
15
78
|
|
16
79
|
## Development
|
data/lib/shutwork/cli.rb
CHANGED
@@ -31,11 +31,11 @@ module Shutwork
|
|
31
31
|
|
32
32
|
case command
|
33
33
|
when "me"
|
34
|
-
Shutwork::Command::Me.new.run
|
34
|
+
Shutwork::Command::Me.new.run ARGV.clone
|
35
35
|
when "rooms"
|
36
|
-
Shutwork::Command::Rooms.new.run
|
36
|
+
Shutwork::Command::Rooms.new.run ARGV.clone
|
37
37
|
when "token"
|
38
|
-
Shutwork::Command::Token.new.run
|
38
|
+
Shutwork::Command::Token.new.run ARGV.clone
|
39
39
|
when nil
|
40
40
|
Shutwork::Command::Help.new.run
|
41
41
|
else
|
@@ -56,6 +56,10 @@ module Shutwork
|
|
56
56
|
$stderr.puts "3. Check if it works as:"
|
57
57
|
$stderr.puts " shutwork me"
|
58
58
|
$stderr.puts
|
59
|
+
|
60
|
+
rescue Errno::EPIPE
|
61
|
+
exit 0
|
62
|
+
|
59
63
|
end
|
60
64
|
end
|
61
65
|
end
|
data/lib/shutwork/client.rb
CHANGED
@@ -31,6 +31,18 @@ module Shutwork
|
|
31
31
|
process @conn.get("rooms/#{room_id}/messages?force=1")
|
32
32
|
end
|
33
33
|
|
34
|
+
def room_members room_id
|
35
|
+
process @conn.get("rooms/#{room_id}/members")
|
36
|
+
end
|
37
|
+
|
38
|
+
def room_files room_id
|
39
|
+
process @conn.get("rooms/#{room_id}/files")
|
40
|
+
end
|
41
|
+
|
42
|
+
def file room_id, file_id
|
43
|
+
process @conn.get("rooms/#{room_id}/files/#{file_id}?create_download_url=1")
|
44
|
+
end
|
45
|
+
|
34
46
|
def process res
|
35
47
|
if @verbose
|
36
48
|
$stderr.puts res.headers.to_json
|
@@ -1,7 +1,9 @@
|
|
1
1
|
require "forwardable"
|
2
|
-
|
2
|
+
require "open-uri"
|
3
3
|
require "thor/shell/color"
|
4
4
|
|
5
|
+
require "shutwork/command/display"
|
6
|
+
|
5
7
|
module Shutwork
|
6
8
|
module Command
|
7
9
|
class Base
|
@@ -9,9 +11,23 @@ module Shutwork
|
|
9
11
|
|
10
12
|
def_delegators :@shell, :say, :say_status
|
11
13
|
|
14
|
+
include Display
|
15
|
+
|
12
16
|
def initialize
|
13
17
|
@shell = Thor::Shell::Color.new
|
14
18
|
end
|
19
|
+
|
20
|
+
def download_file url, dst, at = nil
|
21
|
+
FileUtils.mkdir_p dst.dirname
|
22
|
+
open(url) do |i|
|
23
|
+
open(dst, 'wb') do |o|
|
24
|
+
o.write i.read
|
25
|
+
end
|
26
|
+
if at
|
27
|
+
File.utime at, at, dst
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
15
31
|
end
|
16
32
|
end
|
17
33
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Shutwork
|
2
|
+
module Command
|
3
|
+
module Display
|
4
|
+
def display_account item
|
5
|
+
puts ("%10s %s" % [item["account_id"], item["name"]])
|
6
|
+
end
|
7
|
+
|
8
|
+
def display_room item
|
9
|
+
puts ("%10s %s" % [item["room_id"], item["name"]])
|
10
|
+
end
|
11
|
+
|
12
|
+
def display_message item
|
13
|
+
puts "----------------"
|
14
|
+
puts ("%s %s" % [
|
15
|
+
format_datetime(item["send_time"]),
|
16
|
+
item.dig("account", "name")
|
17
|
+
])
|
18
|
+
puts item["body"]
|
19
|
+
end
|
20
|
+
|
21
|
+
def display_file item
|
22
|
+
puts ("%s %6s %s" % [
|
23
|
+
format_datetime(item["upload_time"]),
|
24
|
+
format_filesize(item["filesize"]),
|
25
|
+
item["filename"]]
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
def format_datetime x
|
30
|
+
Time.at(x).to_s
|
31
|
+
end
|
32
|
+
|
33
|
+
def format_filesize x
|
34
|
+
to_filesize_human x
|
35
|
+
end
|
36
|
+
|
37
|
+
def to_filesize_human x
|
38
|
+
x = %w(KB MB GB TB).inject([x.to_f, 'B']) do |acc, u|
|
39
|
+
v = acc.first / 1024
|
40
|
+
if v.round(2) < 0.90
|
41
|
+
acc
|
42
|
+
else
|
43
|
+
[v, u]
|
44
|
+
end
|
45
|
+
end
|
46
|
+
if x.first >= 10.0 || x.last == 'B'
|
47
|
+
"%.0f%s" % x
|
48
|
+
else
|
49
|
+
"%.1f%s" % x
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -10,11 +10,11 @@ Usage: shutwork COMMAND
|
|
10
10
|
Available options:
|
11
11
|
-h,--help Show this help text
|
12
12
|
--version Show version
|
13
|
-
-r,--raw Show result in raw format
|
14
13
|
|
15
14
|
Available commands:
|
16
|
-
me
|
17
|
-
rooms Rooms
|
15
|
+
me Show me
|
16
|
+
rooms Show Rooms and messages
|
17
|
+
token Manage token
|
18
18
|
EOS
|
19
19
|
end
|
20
20
|
end
|
data/lib/shutwork/command/me.rb
CHANGED
@@ -8,16 +8,16 @@ require "shutwork/token"
|
|
8
8
|
module Shutwork
|
9
9
|
module Command
|
10
10
|
class Me < Base
|
11
|
-
def parse_args
|
11
|
+
def parse_args args
|
12
12
|
opts = OptionParser.new
|
13
13
|
opts.program_name = "shutwork #{self.class.name.split(/::/).last.downcase}"
|
14
14
|
opts.on("-r", "--raw", "Show results in raw format") { @raw = true }
|
15
15
|
opts.on("-v", "--verbose", "Verbose") { @verbose = true }
|
16
|
-
opts.parse
|
16
|
+
opts.parse args
|
17
17
|
end
|
18
18
|
|
19
|
-
def run
|
20
|
-
parse_args
|
19
|
+
def run args = []
|
20
|
+
parse_args args
|
21
21
|
token = Shutwork::Token.read
|
22
22
|
@client = Shutwork::Client.new token: token, verbose: @verbose
|
23
23
|
|
@@ -25,8 +25,7 @@ module Shutwork
|
|
25
25
|
if @raw
|
26
26
|
puts item
|
27
27
|
else
|
28
|
-
|
29
|
-
puts ("%10s %s" % [me["account_id"], me["name"]])
|
28
|
+
display_account JSON.parse(item)
|
30
29
|
end
|
31
30
|
end
|
32
31
|
end
|
@@ -8,21 +8,29 @@ require "shutwork/token"
|
|
8
8
|
module Shutwork
|
9
9
|
module Command
|
10
10
|
class Rooms < Base
|
11
|
-
def parse_args
|
11
|
+
def parse_args args
|
12
12
|
opts = OptionParser.new
|
13
13
|
opts.program_name = "shutwork #{self.class.name.split(/::/).last.downcase}"
|
14
14
|
opts.on("-r", "--raw", "Show results in raw format") { @raw = true }
|
15
15
|
opts.on("-v", "--verbose", "Verbose") { @verbose = true }
|
16
|
-
opts.
|
16
|
+
opts.on("--members", "Fetch members instead of messages") { @target = :members }
|
17
|
+
opts.on("--files", "Fetch files instead of messages") { @target = :files }
|
18
|
+
opts.on("--download", "Download files") { @download = true }
|
19
|
+
opts.on("--download-dir DIR", "Set download dir (default: download)") { |dir| @download_dir = dir }
|
20
|
+
opts.parse args
|
17
21
|
end
|
18
22
|
|
19
|
-
def run
|
20
|
-
@args = parse_args
|
23
|
+
def run args = []
|
24
|
+
@args = parse_args args
|
21
25
|
token = Shutwork::Token.read
|
22
26
|
@client = Shutwork::Client.new token: token, verbose: @verbose
|
23
27
|
|
24
28
|
if @args.first
|
25
|
-
|
29
|
+
if @download
|
30
|
+
download @args.first
|
31
|
+
else
|
32
|
+
show @args.first
|
33
|
+
end
|
26
34
|
else
|
27
35
|
list
|
28
36
|
end
|
@@ -33,23 +41,44 @@ module Shutwork
|
|
33
41
|
if @raw
|
34
42
|
puts items
|
35
43
|
else
|
36
|
-
|
37
|
-
rooms.each do |room|
|
38
|
-
puts ("%10s %s" % [room["room_id"], room["name"]])
|
39
|
-
end
|
44
|
+
JSON.parse(items).each(&method(:display_room))
|
40
45
|
end
|
41
46
|
end
|
42
47
|
|
43
48
|
def show room_id
|
44
|
-
items =
|
49
|
+
items =
|
50
|
+
case @target
|
51
|
+
when :members
|
52
|
+
@display = :display_account
|
53
|
+
@client.room_members room_id
|
54
|
+
when :files
|
55
|
+
@display = :display_file
|
56
|
+
@client.room_files room_id
|
57
|
+
else
|
58
|
+
@display = :display_message
|
59
|
+
@client.room_messages room_id
|
60
|
+
end
|
45
61
|
if @raw
|
46
62
|
puts items
|
47
63
|
else
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
64
|
+
JSON.parse(items).each(&method(@display))
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def download room_id
|
69
|
+
dir = Pathname.new(@download_dir || "download").join(room_id.to_s)
|
70
|
+
items = @client.room_files room_id
|
71
|
+
files = JSON.parse(items)
|
72
|
+
files.each do |file|
|
73
|
+
dst = dir.join file["filename"]
|
74
|
+
if dst.exist?
|
75
|
+
say_status "exist", dst, :cyan
|
76
|
+
else
|
77
|
+
say_status "download", dst, :yellow
|
78
|
+
x = @client.file room_id, file["file_id"]
|
79
|
+
url = JSON.parse(x)["download_url"]
|
80
|
+
at = Time.at file["upload_time"]
|
81
|
+
download_file url, dst, at
|
53
82
|
end
|
54
83
|
end
|
55
84
|
end
|
@@ -4,16 +4,16 @@ require "shutwork/token"
|
|
4
4
|
module Shutwork
|
5
5
|
module Command
|
6
6
|
class Token < Base
|
7
|
-
def parse_args
|
7
|
+
def parse_args args
|
8
8
|
opts = OptionParser.new
|
9
|
-
opts.program_name = "shutwork #{self.class.name.split(/::/).last.downcase}"
|
9
|
+
opts.program_name = "shutwork #{self.class.name.split(/::/).last.downcase} [TOKEN]"
|
10
10
|
opts.on("--skip-verify", "Skips validity check") { @skip_verify = true }
|
11
11
|
opts.on("-v", "--verbose", "Verbose") { @verbose = true }
|
12
|
-
opts.parse
|
12
|
+
opts.parse args
|
13
13
|
end
|
14
14
|
|
15
|
-
def run
|
16
|
-
@token = parse_args.first&.strip
|
15
|
+
def run args = []
|
16
|
+
@token = parse_args(args).first&.strip
|
17
17
|
|
18
18
|
if @token
|
19
19
|
unless @skip_verify
|
data/lib/shutwork/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shutwork
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hideaki Kawai
|
@@ -115,6 +115,7 @@ files:
|
|
115
115
|
- lib/shutwork/cli.rb
|
116
116
|
- lib/shutwork/client.rb
|
117
117
|
- lib/shutwork/command/base.rb
|
118
|
+
- lib/shutwork/command/display.rb
|
118
119
|
- lib/shutwork/command/help.rb
|
119
120
|
- lib/shutwork/command/me.rb
|
120
121
|
- lib/shutwork/command/rooms.rb
|