ayadn 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/CHANGELOG.md +232 -0
- data/CONTRIBUTORS.md +5 -0
- data/LICENSE.md +14 -0
- data/README.md +489 -0
- data/bin/ayadn +358 -0
- data/config.yml +35 -0
- data/lib/ayadn/adn_files.rb +84 -0
- data/lib/ayadn/api.rb +302 -0
- data/lib/ayadn/authorize.rb +29 -0
- data/lib/ayadn/client-http.rb +226 -0
- data/lib/ayadn/colors.rb +62 -0
- data/lib/ayadn/debug.rb +36 -0
- data/lib/ayadn/endpoints.rb +154 -0
- data/lib/ayadn/extend.rb +23 -0
- data/lib/ayadn/files.rb +184 -0
- data/lib/ayadn/get-api.rb +43 -0
- data/lib/ayadn/help.rb +149 -0
- data/lib/ayadn/list.rb +89 -0
- data/lib/ayadn/main.rb +536 -0
- data/lib/ayadn/pinboard.rb +37 -0
- data/lib/ayadn/post.rb +212 -0
- data/lib/ayadn/requires.rb +12 -0
- data/lib/ayadn/skip.rb +27 -0
- data/lib/ayadn/status.rb +166 -0
- data/lib/ayadn/tools.rb +204 -0
- data/lib/ayadn/user-stream.rb +91 -0
- data/lib/ayadn/view-channels.rb +119 -0
- data/lib/ayadn/view-interactions.rb +57 -0
- data/lib/ayadn/view-object.rb +193 -0
- data/lib/ayadn/view.rb +270 -0
- data/lib/ayadn.rb +24 -0
- data/lib/experiments.rb +109 -0
- metadata +110 -0
data/lib/ayadn/main.rb
ADDED
@@ -0,0 +1,536 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'pstore'
|
3
|
+
|
4
|
+
# encoding: utf-8
|
5
|
+
class AyaDN
|
6
|
+
def initialize(token)
|
7
|
+
$PROGRAM_NAME = "AyaDN"
|
8
|
+
@token = token
|
9
|
+
@api = AyaDN::API.new(@token)
|
10
|
+
@view = AyaDN::View
|
11
|
+
@last_page_id_path = $tools.ayadn_configuration[:last_page_id_path]
|
12
|
+
@progress_indicator = $tools.ayadn_configuration[:progress_indicator]
|
13
|
+
end
|
14
|
+
def stream
|
15
|
+
$files.makedir(@last_page_id_path)
|
16
|
+
puts @view.new(@hash).showStream
|
17
|
+
end
|
18
|
+
def completeStream
|
19
|
+
$files.makedir(@last_page_id_path)
|
20
|
+
stream, pagination_array = @view.new(@hash).showCompleteStream
|
21
|
+
last_page_id = pagination_array.last
|
22
|
+
puts "\n" if last_page_id != nil
|
23
|
+
return stream, last_page_id
|
24
|
+
end
|
25
|
+
def displayStream(stream)
|
26
|
+
!stream.empty? ? (puts stream) : (puts $status.noNewPosts)
|
27
|
+
end
|
28
|
+
def displayScrollStream(stream)
|
29
|
+
!stream.empty? ? (puts stream) : (print "\r")
|
30
|
+
end
|
31
|
+
def ayadnScroll(value, target)
|
32
|
+
@progress_indicator = true
|
33
|
+
value = "unified" if value == nil
|
34
|
+
if target == nil
|
35
|
+
fileURL = @last_page_id_path + "/last_page_id-#{value}"
|
36
|
+
else
|
37
|
+
fileURL = @last_page_id_path + "/last_page_id-#{value}-#{target}"
|
38
|
+
end
|
39
|
+
loop do
|
40
|
+
begin
|
41
|
+
print "\r \r"
|
42
|
+
#puts "\n"
|
43
|
+
last_page_id = $files.get_last_page_id(fileURL)
|
44
|
+
case value
|
45
|
+
when "unified"
|
46
|
+
@hash = @api.getUnified(last_page_id)
|
47
|
+
when "global"
|
48
|
+
@hash = @api.getGlobal(last_page_id)
|
49
|
+
when "checkins", "photos", "conversations", "trending"
|
50
|
+
@hash = @api.getExplore(value, last_page_id)
|
51
|
+
when "mentions"
|
52
|
+
@hash = @api.getUserMentions(target, last_page_id)
|
53
|
+
when "posts"
|
54
|
+
@hash = @api.getUserPosts(target, last_page_id)
|
55
|
+
end
|
56
|
+
stream, last_page_id = completeStream
|
57
|
+
displayScrollStream(stream)
|
58
|
+
@progress_indicator = false
|
59
|
+
if last_page_id != nil
|
60
|
+
$files.write_last_page_id(fileURL, last_page_id)
|
61
|
+
print "\r "
|
62
|
+
puts "\n"
|
63
|
+
$tools.countdown($tools.config['timeline']['countdown_1'])
|
64
|
+
else
|
65
|
+
print "\rNo new posts ".red
|
66
|
+
sleep 2
|
67
|
+
$tools.countdown($tools.config['timeline']['countdown_2'])
|
68
|
+
end
|
69
|
+
rescue Exception
|
70
|
+
abort($status.stopped)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
def ayadnInteractions
|
75
|
+
puts $status.getInteractions
|
76
|
+
puts @view.new(@api.getInteractions).showInteractions + "\n\n"
|
77
|
+
end
|
78
|
+
def check_count(count, target)
|
79
|
+
@counted = false
|
80
|
+
if count != nil && count.is_integer?
|
81
|
+
case target
|
82
|
+
when "conversations", "photos", "trending"
|
83
|
+
$tools.config['counts']['explore'] = count
|
84
|
+
else
|
85
|
+
$tools.config['counts'][target] = count
|
86
|
+
end
|
87
|
+
@counted = true
|
88
|
+
end
|
89
|
+
end
|
90
|
+
def ayadnGlobal(count=nil)
|
91
|
+
puts $status.getGlobal
|
92
|
+
fileURL = @last_page_id_path + "/last_page_id-global"
|
93
|
+
check_count(count, "global")
|
94
|
+
@hash = @api.getGlobal($files.get_last_page_id(fileURL))
|
95
|
+
stream, last_page_id = completeStream
|
96
|
+
if @counted == false
|
97
|
+
$files.write_last_page_id(fileURL, last_page_id) unless last_page_id == nil
|
98
|
+
end
|
99
|
+
displayStream(stream)
|
100
|
+
puts "\n"
|
101
|
+
end
|
102
|
+
def ayadnUnified(count=nil)
|
103
|
+
fileURL = @last_page_id_path + "/last_page_id-unified"
|
104
|
+
puts $status.getUnified
|
105
|
+
check_count(count, "unified")
|
106
|
+
@hash = @api.getUnified($files.get_last_page_id(fileURL))
|
107
|
+
stream, last_page_id = completeStream
|
108
|
+
if @counted == false
|
109
|
+
$files.write_last_page_id(fileURL, last_page_id) unless last_page_id == nil
|
110
|
+
end
|
111
|
+
displayStream(stream)
|
112
|
+
puts "\n"
|
113
|
+
end
|
114
|
+
def ayadnHashtags(tag)
|
115
|
+
puts $status.getHashtags(tag)
|
116
|
+
@hash = @api.getHashtags(tag)
|
117
|
+
displayStream(completeStream[0])
|
118
|
+
puts "\n"
|
119
|
+
end
|
120
|
+
def ayadnExplore(explore, count=nil)
|
121
|
+
fileURL = @last_page_id_path + "/last_page_id-#{explore}"
|
122
|
+
puts $status.getExplore(explore)
|
123
|
+
check_count(count, explore)
|
124
|
+
@hash = @api.getExplore(explore, $files.get_last_page_id(fileURL))
|
125
|
+
stream, last_page_id = completeStream
|
126
|
+
if @counted == false
|
127
|
+
$files.write_last_page_id(fileURL, last_page_id) unless last_page_id == nil
|
128
|
+
end
|
129
|
+
displayStream(stream)
|
130
|
+
puts "\n"
|
131
|
+
end
|
132
|
+
def ayadnUserMentions(name, count=nil)
|
133
|
+
fileURL = @last_page_id_path + "/last_page_id-mentions-#{name}"
|
134
|
+
puts $status.mentionsUser(name)
|
135
|
+
check_count(count, "mentions")
|
136
|
+
@hash = @api.getUserMentions(name, $files.get_last_page_id(fileURL))
|
137
|
+
stream, last_page_id = completeStream
|
138
|
+
if @counted == false
|
139
|
+
$files.write_last_page_id(fileURL, last_page_id) unless last_page_id == nil
|
140
|
+
end
|
141
|
+
displayStream(stream)
|
142
|
+
puts "\n"
|
143
|
+
end
|
144
|
+
def ayadnUserPosts(name, count=nil)
|
145
|
+
fileURL = @last_page_id_path + "/last_page_id-posts-#{name}"
|
146
|
+
puts $status.postsUser(name)
|
147
|
+
check_count(count, "posts")
|
148
|
+
@hash = @api.getUserPosts(name, $files.get_last_page_id(fileURL))
|
149
|
+
stream, last_page_id = completeStream
|
150
|
+
if @counted == false
|
151
|
+
$files.write_last_page_id(fileURL, last_page_id) unless last_page_id == nil
|
152
|
+
end
|
153
|
+
displayStream(stream)
|
154
|
+
end
|
155
|
+
def ayadnUserInfos(name)
|
156
|
+
puts $status.infosUser(name)
|
157
|
+
puts @view.new(@api.getUserInfos(name)).showUsersInfos(name)
|
158
|
+
end
|
159
|
+
def get_loaded_channels
|
160
|
+
loaded_channels = $files.load_channels
|
161
|
+
channels_with_messages = $files.load_channels_with_messages
|
162
|
+
if loaded_channels != nil
|
163
|
+
puts "Backed-up list of your active channels:\n".green
|
164
|
+
loaded_channels.each do |k,v|
|
165
|
+
puts "Channel: ".cyan + k.brown
|
166
|
+
puts "Title: ".cyan + v.magenta
|
167
|
+
if channels_with_messages != nil && channels_with_messages[k] != nil
|
168
|
+
puts "Last message by @#{channels_with_messages[k]['username']} (#{channels_with_messages[k]['message_date']}): \n".cyan + channels_with_messages[k]['text']
|
169
|
+
end
|
170
|
+
puts "\n"
|
171
|
+
end
|
172
|
+
puts "Do you want to refresh the list? (y/N)".green
|
173
|
+
abort("\nCanceled.\n\n".red) unless STDIN.getch == ("y" || "Y")
|
174
|
+
puts "\n"
|
175
|
+
end
|
176
|
+
end
|
177
|
+
def ayadn_get_channels
|
178
|
+
@hash = @api.get_pm_channels
|
179
|
+
the_channels, channels_list = @view.new(@hash).show_pm_channels
|
180
|
+
puts the_channels
|
181
|
+
@hash = @api.get_channels
|
182
|
+
the_channels, channels_list = @view.new(@hash).show_channels
|
183
|
+
puts the_channels
|
184
|
+
end
|
185
|
+
def ayadnGetMessages(target, action = nil)
|
186
|
+
$files.makedir($tools.ayadn_configuration[:messages_path])
|
187
|
+
@progress_indicator = false
|
188
|
+
if target != nil
|
189
|
+
if !target.is_integer?
|
190
|
+
target = $files.load_channel_id(target)
|
191
|
+
end
|
192
|
+
fileURL = @last_page_id_path + "/last_page_id-channels-#{target}"
|
193
|
+
last_page_id = $files.get_last_page_id(fileURL) unless action == "all"
|
194
|
+
messages_string, last_page_id = @view.new(@api.getMessages(target, last_page_id)).showMessagesFromChannel
|
195
|
+
$files.write_last_page_id(fileURL, last_page_id) unless last_page_id == nil
|
196
|
+
displayStream(messages_string)
|
197
|
+
puts $status.noNewPosts if messages_string == "\n"
|
198
|
+
else
|
199
|
+
puts $status.errorSyntax
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
def ayadnDeletePost(postID)
|
204
|
+
puts $status.deletePost(postID)
|
205
|
+
if @api.goDelete(postID) == nil
|
206
|
+
abort($status.errorAlreadyDeleted)
|
207
|
+
else
|
208
|
+
$tools.checkHTTPResp(@api.http_delete)
|
209
|
+
puts $status.postDeleted
|
210
|
+
exit
|
211
|
+
end
|
212
|
+
end
|
213
|
+
def ayadn_delete_message(channel_id, message_id)
|
214
|
+
puts "\nDeleting message #{message_id} in channel #{channel_id}".green
|
215
|
+
@url = @api.unique_message(channel_id, message_id)
|
216
|
+
$tools.checkHTTPResp(@api.http_delete)
|
217
|
+
puts "\nDone!\n".green
|
218
|
+
end
|
219
|
+
|
220
|
+
def ayadnWhoReposted(postID)
|
221
|
+
puts $status.whoReposted(postID)
|
222
|
+
@hash = @api.getWhoReposted(postID)
|
223
|
+
abort($status.errorNobodyReposted) if @hash['data'].empty?
|
224
|
+
puts @view.new(@hash).showUsersList
|
225
|
+
end
|
226
|
+
def ayadnWhoStarred(postID)
|
227
|
+
puts $status.whoStarred(postID)
|
228
|
+
@hash = @api.getWhoStarred(postID)
|
229
|
+
abort($status.errorNobodyStarred) if @hash['data'].empty?
|
230
|
+
puts @view.new(@hash).showUsersList
|
231
|
+
end
|
232
|
+
def ayadnStarredPosts(name, count=nil)
|
233
|
+
puts $status.starsUser(name)
|
234
|
+
check_count(count, "starred")
|
235
|
+
@hash = @api.getStarredPosts(name)
|
236
|
+
displayStream(completeStream[0])
|
237
|
+
end
|
238
|
+
def ayadnConversation(postID)
|
239
|
+
puts $status.getPostReplies(postID)
|
240
|
+
@hash = @api.getPostReplies(postID)
|
241
|
+
displayStream(completeStream[0])
|
242
|
+
end
|
243
|
+
def ayadnPostInfos(postID)
|
244
|
+
puts $status.infosPost(postID)
|
245
|
+
puts @view.new(@api.getPostInfos(postID)).showPostInfos(postID, false)
|
246
|
+
end
|
247
|
+
def ayadnLoadPost(postID)
|
248
|
+
puts $status.infosPost(postID)
|
249
|
+
puts @view.new(nil).buildPostInfo(load_post(postID), true)
|
250
|
+
end
|
251
|
+
def load_post(post_id)
|
252
|
+
fileContent = {}
|
253
|
+
File.open("#{$tools.ayadn_configuration[:posts_path]}/#{post_id}.post", "r") do |f|
|
254
|
+
fileContent = f.gets
|
255
|
+
end
|
256
|
+
eval(fileContent)
|
257
|
+
end
|
258
|
+
def ayadnSavePost(postID)
|
259
|
+
@progress_indicator = false
|
260
|
+
name = postID.to_s
|
261
|
+
posts_path = $tools.ayadn_configuration[:posts_path]
|
262
|
+
$files.makedir(posts_path)
|
263
|
+
file = "/#{name}.post"
|
264
|
+
fileURL = posts_path + file
|
265
|
+
abort("\nYou already saved this post.\n\n".red) if File.exists?(fileURL)
|
266
|
+
puts "\nLoading post from App.net...".green + name.brown
|
267
|
+
puts $status.savingFile(name, posts_path, file)
|
268
|
+
f = File.new(fileURL, "w")
|
269
|
+
resp = @api.getSinglePost(postID)
|
270
|
+
f.puts(resp['data'])
|
271
|
+
f.close
|
272
|
+
puts "\nSuccessfully saved the post.\n\n".green
|
273
|
+
exit
|
274
|
+
end
|
275
|
+
|
276
|
+
def ayadnSearch(value)
|
277
|
+
@hash = @api.getSearch(value)
|
278
|
+
displayStream(completeStream[0])
|
279
|
+
end
|
280
|
+
|
281
|
+
def ayadnFollowing(action, name)
|
282
|
+
@progress_indicator = false
|
283
|
+
following = @api.getUserFollowInfo(name)
|
284
|
+
if action == "follow"
|
285
|
+
if following[:you_follow]
|
286
|
+
abort("You're already following this user.\n\n".red)
|
287
|
+
else
|
288
|
+
@api.followUser(name)
|
289
|
+
puts "\nYou just followed user ".green + "#{name}".brown + "\n\n"
|
290
|
+
end
|
291
|
+
elsif action == "unfollow"
|
292
|
+
if following[:you_follow]
|
293
|
+
@api.unfollowUser(name)
|
294
|
+
puts "\nYou just unfollowed user ".green + "#{name}".brown + "\n\n"
|
295
|
+
else
|
296
|
+
abort("You're already not following this user.\n\n".red)
|
297
|
+
end
|
298
|
+
else
|
299
|
+
abort($status.errorSyntax)
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
303
|
+
def ayadnMuting(action, name)
|
304
|
+
@progress_indicator = false
|
305
|
+
you_muted = @api.getUserMuteInfo(name)
|
306
|
+
if action == "mute"
|
307
|
+
if you_muted
|
308
|
+
abort("You've already muted this user.\n\n".red)
|
309
|
+
else
|
310
|
+
@api.muteUser(name)
|
311
|
+
puts "\nYou just muted user ".green + "#{name}".brown + "\n\n"
|
312
|
+
end
|
313
|
+
elsif action == "unmute"
|
314
|
+
if you_muted
|
315
|
+
@api.unmuteUser(name)
|
316
|
+
puts "\nYou just unmuted user ".green + "#{name}".brown + "\n\n"
|
317
|
+
else
|
318
|
+
abort("This user is not muted.\n\n".red)
|
319
|
+
end
|
320
|
+
else
|
321
|
+
abort($status.errorSyntax)
|
322
|
+
end
|
323
|
+
end
|
324
|
+
|
325
|
+
def ayadnBlocking(action, name)
|
326
|
+
@progress_indicator = false
|
327
|
+
you_blocked = @api.getUserBlockInfo(name)
|
328
|
+
if action == "block"
|
329
|
+
if you_blocked
|
330
|
+
abort("\nYou've already blocked this user.\n\n".red)
|
331
|
+
else
|
332
|
+
puts "\nAre you sure you want to block ".red + "#{name} ".brown + "?\n\nIt will mute him/her, then both of you will automatically unfollow each other (if applicable).".red + "\n\n(y/N)?\n\n".brown
|
333
|
+
case STDIN.getch
|
334
|
+
when "y", "Y"
|
335
|
+
@api.blockUser(name)
|
336
|
+
puts "debug"
|
337
|
+
puts "\nYou just blocked user ".green + "#{name}".brown + "\n\n"
|
338
|
+
exit
|
339
|
+
end
|
340
|
+
puts $status.canceled
|
341
|
+
end
|
342
|
+
elsif action == "unblock"
|
343
|
+
if you_blocked
|
344
|
+
@api.unblockUser(name)
|
345
|
+
puts "\nYou just unblocked user ".green + "#{name}".brown + "\n\n"
|
346
|
+
else
|
347
|
+
abort("\nThis user is not blocked.\n\n".red)
|
348
|
+
end
|
349
|
+
else
|
350
|
+
abort($status.errorSyntax)
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
354
|
+
def ayadnStarringPost(action, postID)
|
355
|
+
@progress_indicator = false
|
356
|
+
@hash = @api.getSinglePost(postID)
|
357
|
+
post_data = @hash['data']
|
358
|
+
you_starred = post_data['you_starred']
|
359
|
+
is_repost = post_data['repost_of']
|
360
|
+
if is_repost != nil
|
361
|
+
puts $status.errorIsRepost(postID)
|
362
|
+
puts "Redirecting to the original post.\n".cyan
|
363
|
+
postID = is_repost['id']
|
364
|
+
you_starred = is_repost['you_starred']
|
365
|
+
end
|
366
|
+
if action == "star"
|
367
|
+
if you_starred == false
|
368
|
+
puts "\nStarring post ".green + "#{postID}\n".brown
|
369
|
+
@api.starPost(postID)
|
370
|
+
puts "\nSuccessfully starred the post.\n\n".green
|
371
|
+
else
|
372
|
+
abort("Canceled: the post is already starred.\n\n".red)
|
373
|
+
end
|
374
|
+
elsif action == "unstar"
|
375
|
+
if you_starred == false
|
376
|
+
abort("Canceled: the post wasn't already starred.\n\n".red)
|
377
|
+
else
|
378
|
+
puts "\nUnstarring post ".green + "#{postID}\n".brown
|
379
|
+
@api.unstarPost(postID)
|
380
|
+
puts "\nSuccessfully unstarred the post.\n\n".green
|
381
|
+
end
|
382
|
+
else
|
383
|
+
abort("\nsyntax error\n".red)
|
384
|
+
end
|
385
|
+
end
|
386
|
+
def ayadnReposting(action, postID)
|
387
|
+
@progress_indicator = false
|
388
|
+
@hash = @api.getSinglePost(postID)
|
389
|
+
post_data = @hash['data']
|
390
|
+
is_repost = post_data['repost_of']
|
391
|
+
you_reposted = post_data['you_reposted']
|
392
|
+
if is_repost != nil && you_reposted == false
|
393
|
+
puts $status.errorIsRepost(postID)
|
394
|
+
puts "Redirecting to the original post.\n".cyan
|
395
|
+
postID = is_repost['id']
|
396
|
+
you_reposted = is_repost['you_reposted']
|
397
|
+
end
|
398
|
+
if action == "repost"
|
399
|
+
if you_reposted
|
400
|
+
abort("Canceled: you already reposted this post.\n\n".red)
|
401
|
+
else
|
402
|
+
puts "\nReposting post ".green + "#{postID}\n".brown
|
403
|
+
@api.repostPost(postID)
|
404
|
+
puts "\nSuccessfully reposted the post.\n\n".green
|
405
|
+
end
|
406
|
+
elsif action == "unrepost"
|
407
|
+
if you_reposted
|
408
|
+
puts "\nUnreposting post ".green + "#{postID}\n".brown
|
409
|
+
@api.unrepostPost(postID)
|
410
|
+
puts "\nSuccessfully unreposted the post.\n\n".green
|
411
|
+
else
|
412
|
+
abort("Canceled: this post wasn't reposted by you.\n\n".red)
|
413
|
+
end
|
414
|
+
else
|
415
|
+
abort($status.errorSyntax)
|
416
|
+
end
|
417
|
+
end
|
418
|
+
def ayadnReset(content, option)
|
419
|
+
$files.reset_pagination(content, option)
|
420
|
+
end
|
421
|
+
def ayadn_list_aliases
|
422
|
+
db = PStore.new($tools.ayadn_configuration[:db_path] + "/channels_alias.db")
|
423
|
+
db.transaction do
|
424
|
+
db.roots.each do |root|
|
425
|
+
puts "#{db[root]} ".brown + "=> " + "#{root} ".green
|
426
|
+
end
|
427
|
+
end
|
428
|
+
puts "\n"
|
429
|
+
end
|
430
|
+
def ayadn_alias_channel(channel_id, channel_alias)
|
431
|
+
puts "\nAdding new alias: ".cyan + "#{channel_id} ".brown + "=> " + "#{channel_alias}\n".green
|
432
|
+
if channel_id.is_integer? && channel_alias != nil
|
433
|
+
$files.save_channel_alias(channel_id, channel_alias)
|
434
|
+
else
|
435
|
+
puts $status.errorSyntax
|
436
|
+
exit
|
437
|
+
end
|
438
|
+
puts "List of saved aliases: \n".cyan
|
439
|
+
puts ayadn_list_aliases
|
440
|
+
puts "Done!\n\n".green
|
441
|
+
end
|
442
|
+
def ayadn_nowplaying
|
443
|
+
case $tools.ayadn_configuration[:platform]
|
444
|
+
when $tools.winplatforms
|
445
|
+
puts "\nThis feature only works with Mac OS X and iTunes. Sorry.\n\n".red
|
446
|
+
exit
|
447
|
+
end
|
448
|
+
begin
|
449
|
+
track = `osascript -e 'tell application "iTunes"' -e 'set trackName to name of current track' -e 'return trackName' -e 'end tell'`
|
450
|
+
artist = `osascript -e 'tell application "iTunes"' -e 'set trackArtist to artist of current track' -e 'return trackArtist' -e 'end tell'`
|
451
|
+
rescue => e
|
452
|
+
puts "\n\nError: #{e}\n\n".red
|
453
|
+
exit
|
454
|
+
end
|
455
|
+
track.chomp!
|
456
|
+
artist.chomp!
|
457
|
+
if track.length == 0 || artist.length == 0
|
458
|
+
abort("\nCanceled: couldn't get enough information (empty field).\n\n".red)
|
459
|
+
end
|
460
|
+
text_to_post = "#nowplaying '#{track}' by #{artist}"
|
461
|
+
puts "\nAyaDN will post this to your timeline:\n\n".cyan
|
462
|
+
puts text_to_post + "\n\n"
|
463
|
+
puts "Do you confirm? (y/N) ".brown
|
464
|
+
abort("\nCanceled.\n\n".red) unless STDIN.getch == ("y" || "Y")
|
465
|
+
puts "\n"
|
466
|
+
ayadnSendPost(text_to_post, nil)
|
467
|
+
end
|
468
|
+
def ayadn_does(params)
|
469
|
+
target_name, source_name = params[3].dup, params[1].dup
|
470
|
+
case params[2]
|
471
|
+
when "follow", "follows", "following", "followed"
|
472
|
+
fw = []
|
473
|
+
target_name[0,0] = '@' if target_name[0] != "@"
|
474
|
+
source_name[0,0] = '@' if source_name[0] != "@"
|
475
|
+
real_target_name = target_name.dup
|
476
|
+
real_target_name[0] = ''
|
477
|
+
source_list = @api.getFollowings(source_name, nil)
|
478
|
+
source_list['data'].each {|user| fw << user['username']}
|
479
|
+
min_id, more = source_list['meta']['min_id'], source_list['meta']['more']
|
480
|
+
if more
|
481
|
+
loop do
|
482
|
+
source_list = @api.getFollowings(source_name, min_id)
|
483
|
+
break if source_list['meta']['more'] == false
|
484
|
+
source_list['data'].each {|user| fw << user['username']}
|
485
|
+
min_id = source_list['meta']['min_id']
|
486
|
+
end
|
487
|
+
end
|
488
|
+
@f = false
|
489
|
+
fw.each do |name|
|
490
|
+
if name == real_target_name
|
491
|
+
@f = true
|
492
|
+
break
|
493
|
+
end
|
494
|
+
end
|
495
|
+
if @f
|
496
|
+
puts "\nYes, " + "#{source_name} ".green + "follows " + "#{target_name}\n\n".green
|
497
|
+
else
|
498
|
+
puts "\nNo, " + "#{source_name} ".magenta + "doesn't follow " + "#{target_name}\n\n".magenta
|
499
|
+
end
|
500
|
+
else
|
501
|
+
puts $status.errorSyntax
|
502
|
+
end
|
503
|
+
end
|
504
|
+
def ayadn_show_options
|
505
|
+
puts "\nCurrent options in ".cyan + "config.yml\n".magenta
|
506
|
+
$tools.config.each do |k,v|
|
507
|
+
puts "#{k.capitalize}:".cyan
|
508
|
+
v.each do |x,y|
|
509
|
+
puts "\t#{x.green} => #{y.to_s.brown}"
|
510
|
+
end
|
511
|
+
end
|
512
|
+
puts "\n"
|
513
|
+
puts "AyaDN local data: \n".magenta
|
514
|
+
puts "Posts path:".cyan
|
515
|
+
puts "\t" + $tools.ayadn_configuration[:posts_path].brown + "/".brown
|
516
|
+
puts "Messages path:".cyan
|
517
|
+
puts "\t" + $tools.ayadn_configuration[:messages_path].brown + "/".brown
|
518
|
+
puts "Lists path:".cyan
|
519
|
+
puts "\t" + $tools.ayadn_configuration[:lists_path].brown + "/".brown
|
520
|
+
puts "Files path:".cyan
|
521
|
+
puts "\t" + $tools.ayadn_configuration[:files_path].brown + "/".brown
|
522
|
+
puts "Database path:".cyan
|
523
|
+
puts "\t" + $tools.ayadn_configuration[:db_path].brown + "/".brown
|
524
|
+
puts "\n"
|
525
|
+
puts "AyaDN system configuration: \n".magenta
|
526
|
+
puts "Authorization token path:".cyan
|
527
|
+
puts "\t" + $tools.ayadn_configuration[:authorization_path].brown + "/".brown
|
528
|
+
puts "API configuration path:".cyan
|
529
|
+
puts "\t" + $tools.ayadn_configuration[:api_config_path].brown + "/".brown
|
530
|
+
puts "Pagination data path:".cyan
|
531
|
+
puts "\t" + $tools.ayadn_configuration[:last_page_id_path].brown + "/".brown
|
532
|
+
puts "Detected platform:".cyan
|
533
|
+
puts "\t" + $tools.ayadn_configuration[:platform].brown
|
534
|
+
puts "\n"
|
535
|
+
end
|
536
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'base64'
|
3
|
+
require 'open-uri'
|
4
|
+
|
5
|
+
# encoding: utf-8
|
6
|
+
class AyaDN
|
7
|
+
def ayadnBookmark(*args)
|
8
|
+
post_id = args[0][1]
|
9
|
+
tags = args[0][2]
|
10
|
+
hash = @api.getSinglePost(post_id)
|
11
|
+
data = hash['data']
|
12
|
+
post_text = data['text']
|
13
|
+
user_name = data['user']['username']
|
14
|
+
link = data['entities']['links'][0]['url']
|
15
|
+
if $tools.config['pinboard']['username'] != nil
|
16
|
+
puts "\nSaving post ".green + post_id.brown + " to Pinboard...\n".green
|
17
|
+
$tools.saveToPinboard(post_id, $tools.config['pinboard']['username'], URI.unescape(Base64::decode64($tools.config['pinboard']['password'])), link, tags, post_text, user_name)
|
18
|
+
puts "Done!\n\n".green
|
19
|
+
else
|
20
|
+
puts "\nConfiguration does not include your Pinbard credentials.\n".red
|
21
|
+
begin
|
22
|
+
puts "Please enter your Pinboard username (CTRL+C to cancel): ".green
|
23
|
+
pin_username = STDIN.gets.chomp()
|
24
|
+
puts "\nPlease enter your Pinboard password (invisible, CTRL+C to cancel): ".green
|
25
|
+
pin_password = STDIN.noecho(&:gets).chomp()
|
26
|
+
rescue Exception
|
27
|
+
abort($status.stopped)
|
28
|
+
end
|
29
|
+
$tools.config['pinboard']['username'] = pin_username
|
30
|
+
$tools.config['pinboard']['password'] = URI.escape(Base64::encode64(pin_password))
|
31
|
+
$tools.saveConfig
|
32
|
+
puts "Saving post ".green + post_id.brown + " to Pinboard...\n".green
|
33
|
+
$tools.saveToPinboard(post_id, pin_username, pin_password, link, tags, post_text, user_name)
|
34
|
+
puts "Done!\n\n".green
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|