presbeus 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/presbeus +118 -29
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5eccbc0625356b786735b43c6a71237c12f761dc
|
4
|
+
data.tar.gz: 957e3c0d6604fa0875ac5e6662fcbaa30fe55663
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 644f5372cab7a69065eb71e35b854efb0154c024ddcee54cbd5cd2db3adf4cad1d73c9fed53c3fb0da994c26dec0196d53705fb2c7ccf313c90f85a3d871abf1
|
7
|
+
data.tar.gz: ac7c6a6dafbd0d1d40847e0001b0bfaa4700b87c12f8fbb0d078910b7e13c9079e10d546a7076f27c73c685a3cfdecd0ca39110a79089dde1abcc221be42b5d6
|
data/bin/presbeus
CHANGED
@@ -6,14 +6,49 @@ require 'time_ago_in_words'
|
|
6
6
|
require 'terminal-table'
|
7
7
|
require 'highline'
|
8
8
|
require 'colorize'
|
9
|
+
require "readline"
|
10
|
+
|
11
|
+
class Time
|
12
|
+
|
13
|
+
alias_method :ago_in_words_no_timezone, :ago_in_words
|
14
|
+
|
15
|
+
end
|
9
16
|
|
10
17
|
class Presbeus
|
11
18
|
|
19
|
+
def initialize_arguments
|
20
|
+
argument(:help, [], "show this help") { help }
|
21
|
+
argument(:shell, [], "run in an interactive shell") { shell }
|
22
|
+
argument(:devices, [], "list devices") { puts table devices }
|
23
|
+
argument(:pushes, [], "list pushes") { puts table pushes_with_color }
|
24
|
+
argument(:threads, [:device_id], "show threads for device") do
|
25
|
+
|c| puts table threads c[0]
|
26
|
+
end
|
27
|
+
argument(:last, [:device_id], "show last thread for device") do |c|
|
28
|
+
puts table last_thread c[0]
|
29
|
+
end
|
30
|
+
argument(:push, [:all], "push note to all devices") do |c|
|
31
|
+
push c.join(" ")
|
32
|
+
end
|
33
|
+
argument(:thread, [:device_id, :thead_id], "show SMS thread") do |c|
|
34
|
+
puts table thread_with_two_columns_wrap c[0], c[1]
|
35
|
+
end
|
36
|
+
argument(:sms, [:device_id, :phone_number, :all], "send SMS") do |c|
|
37
|
+
send_sms c[0], c[1], c[2..-1].join(" ")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
12
41
|
def initialize
|
42
|
+
initialize_arguments
|
13
43
|
configuration_path = "#{ENV['HOME']}/.config/presbeus.yml"
|
14
44
|
configuration = YAML.load_file configuration_path
|
15
45
|
token = `#{configuration['password_command']}`
|
16
|
-
@headers = {"Access-Token" => token}
|
46
|
+
@headers = {"Access-Token" => token, "Content-Type" => "json"}
|
47
|
+
end
|
48
|
+
|
49
|
+
def post_v2 what, payload
|
50
|
+
RestClient.post(
|
51
|
+
'https://api.pushbullet.com/v2/' + what, payload.to_json, @headers)
|
17
52
|
end
|
18
53
|
|
19
54
|
def get_v2 what
|
@@ -39,31 +74,42 @@ class Presbeus
|
|
39
74
|
get_v2("permanents/#{device}_thread_#{id}")["thread"]
|
40
75
|
end
|
41
76
|
|
77
|
+
def pushes
|
78
|
+
get_v2("pushes")["pushes"].map do |push|
|
79
|
+
[Time.at(push["created"].to_i).ago_in_words, push["body"]]
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
42
83
|
def user_iden
|
43
84
|
get_v2("users/me")["iden"]
|
44
85
|
end
|
45
86
|
|
87
|
+
def push message
|
88
|
+
post_v2 "pushes", {
|
89
|
+
title: "push from presbeus",
|
90
|
+
type: "note",
|
91
|
+
body: message,
|
92
|
+
}
|
93
|
+
end
|
94
|
+
|
46
95
|
def send_sms device, conversation_iden, message
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
type: "push"
|
59
|
-
}.to_json,
|
60
|
-
@headers)
|
96
|
+
post_v2 "ephemerals", {
|
97
|
+
push: {
|
98
|
+
conversation_iden: conversation_iden,
|
99
|
+
message: message,
|
100
|
+
package_name: "com.pushbullet.android",
|
101
|
+
source_user_iden: user_iden,
|
102
|
+
target_device_iden: device,
|
103
|
+
type: "messaging_extension_reply"
|
104
|
+
},
|
105
|
+
type: "push"
|
106
|
+
}
|
61
107
|
end
|
62
108
|
|
63
109
|
def table rows, config = {}
|
64
110
|
t = Terminal::Table.new config.merge({:rows => rows})
|
65
111
|
t.style = { border_top: false, border_bottom: false, border_y: '' }
|
66
|
-
|
112
|
+
t
|
67
113
|
end
|
68
114
|
|
69
115
|
def wrap s, width
|
@@ -75,18 +121,29 @@ class Presbeus
|
|
75
121
|
lines.map { |line| line.ljust(width).colorize(color: :black, background: background)}.join "\n"
|
76
122
|
end
|
77
123
|
|
124
|
+
def width
|
125
|
+
HighLine::SystemExtensions.terminal_size[0]
|
126
|
+
end
|
127
|
+
|
128
|
+
def half_width
|
129
|
+
width / 2 - 4
|
130
|
+
end
|
131
|
+
|
132
|
+
def width_2
|
133
|
+
width - 4
|
134
|
+
end
|
135
|
+
|
78
136
|
def thread_with_two_columns_wrap device, id
|
79
|
-
width = HighLine::SystemExtensions.terminal_size[0] / 2 - 4
|
80
137
|
res = []
|
81
138
|
thread(device, id).reverse.each do |message|
|
82
|
-
text = [wrap(message["body"],
|
139
|
+
text = [wrap(message["body"], half_width), ""]
|
83
140
|
date = ["\n#{Time.at(message["timestamp"]).ago_in_words}", ""]
|
84
141
|
if message["direction"] != "incoming"
|
85
|
-
text[0] = with_color text[0],
|
142
|
+
text[0] = with_color text[0], half_width, :white
|
86
143
|
text.reverse!
|
87
144
|
date.reverse!
|
88
145
|
else
|
89
|
-
text[0] = with_color text[0],
|
146
|
+
text[0] = with_color text[0], half_width, :green
|
90
147
|
end
|
91
148
|
res << date
|
92
149
|
res << text
|
@@ -94,17 +151,49 @@ class Presbeus
|
|
94
151
|
res
|
95
152
|
end
|
96
153
|
|
154
|
+
def pushes_with_color
|
155
|
+
pushes.reverse.map do |push|
|
156
|
+
["\n" + push[0] + "\n" + with_color(wrap(push[1], width_2), width_2, :green)]
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
def last_thread device
|
161
|
+
thread_with_two_columns_wrap device, threads(device).last[0]
|
162
|
+
end
|
163
|
+
|
164
|
+
def argument name, args, description
|
165
|
+
@arguments ||= {}
|
166
|
+
@arguments[name] = {args: args, description: description, block: Proc.new { |c| yield c } }
|
167
|
+
end
|
168
|
+
|
169
|
+
def help
|
170
|
+
a = @arguments.to_a.map do |_|
|
171
|
+
[_[0].to_s, _[1][:args].map { |x| x.to_s }.join(" "), _[1][:description]]
|
172
|
+
end
|
173
|
+
puts table a
|
174
|
+
end
|
175
|
+
|
176
|
+
def shell
|
177
|
+
while buf = Readline.readline("> ", true)
|
178
|
+
run buf.split
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
def good_syntax? name, command
|
183
|
+
args = @arguments[name][:args]
|
184
|
+
count = args.size + 1
|
185
|
+
args.include?(:all) ? command.size >= count : command.size == count
|
186
|
+
end
|
187
|
+
|
97
188
|
def run command
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
puts table thread_with_two_columns_wrap command[1], command[2]
|
105
|
-
when "sms"
|
106
|
-
send_sms command[1], command[2], command[3..-1].join(" ")
|
189
|
+
if command.size > 0
|
190
|
+
name = command[0].to_sym
|
191
|
+
if @arguments.keys.include?(name) and good_syntax?(name, command)
|
192
|
+
@arguments[name][:block].call command[1..-1]
|
193
|
+
return
|
194
|
+
end
|
107
195
|
end
|
196
|
+
help
|
108
197
|
end
|
109
198
|
|
110
199
|
end
|