ayadn 1.4.2 → 1.4.3

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.
data/lib/ayadn/action.rb CHANGED
@@ -10,20 +10,19 @@ module Ayadn
10
10
  Settings.init_config
11
11
  Logs.create_logger
12
12
  Databases.open_databases
13
+ at_exit { Databases.close_all }
13
14
  end
14
15
 
15
16
  def unified(options)
16
17
  begin
17
18
  doing(options)
18
19
  stream = @api.get_unified(options)
19
- (no_new_posts unless Databases.has_new?(stream, 'unified')) if options[:new]
20
+ stop_if_no_new_posts(stream, options, 'unified')
20
21
  Databases.save_max_id(stream)
21
22
  render_view(stream, options)
22
23
  Scroll.new(@api, @view).unified(options) if options[:scroll]
23
24
  rescue => e
24
- Errors.global_error("action/unified", options, e)
25
- ensure
26
- Databases.close_all
25
+ Errors.global_error({error: e, caller: caller, data: [options]})
27
26
  end
28
27
  end
29
28
 
@@ -31,34 +30,28 @@ module Ayadn
31
30
  begin
32
31
  doing(options)
33
32
  stream = @api.get_checkins(options)
34
- (no_new_posts unless Databases.has_new?(stream, 'explore:checkins')) if options[:new]
33
+ stop_if_no_new_posts(stream, options, 'explore:checkins')
35
34
  Databases.save_max_id(stream)
36
35
  render_view(stream, options)
37
36
  Scroll.new(@api, @view).checkins(options) if options[:scroll]
38
37
  rescue => e
39
- Errors.global_error("action/checkins", options, e)
40
- ensure
41
- Databases.close_all
38
+ Errors.global_error({error: e, caller: caller, data: [options]})
42
39
  end
43
40
  end
44
41
 
45
42
  def global(settings)
46
43
  begin
47
44
  options = settings.dup
48
- if Settings.options[:nicerank]
49
- options[:filter] = true if Settings.options[:nicerank][:filter] == true
50
- end
45
+ options[:filter] = nicerank_true()
51
46
  doing(options)
52
47
  stream = @api.get_global(options)
53
- niceranks = NiceRank.new.get_ranks stream
54
- (no_new_posts unless Databases.has_new?(stream, 'global')) if options[:new]
48
+ niceranks = NiceRank.new.get_ranks(stream)
49
+ stop_if_no_new_posts(stream, options, 'global')
55
50
  Databases.save_max_id(stream)
56
51
  render_view(stream, options, niceranks)
57
52
  Scroll.new(@api, @view).global(options) if options[:scroll]
58
53
  rescue => e
59
- Errors.global_error("action/global", options, e)
60
- ensure
61
- Databases.close_all
54
+ Errors.global_error({error: e, caller: caller, data: [options]})
62
55
  end
63
56
  end
64
57
 
@@ -66,14 +59,12 @@ module Ayadn
66
59
  begin
67
60
  doing(options)
68
61
  stream = @api.get_trending(options)
69
- (no_new_posts unless Databases.has_new?(stream, 'explore:trending')) if options[:new]
62
+ stop_if_no_new_posts(stream, options, 'explore:trending')
70
63
  Databases.save_max_id(stream)
71
64
  render_view(stream, options)
72
65
  Scroll.new(@api, @view).trending(options) if options[:scroll]
73
66
  rescue => e
74
- Errors.global_error("action/trending", options, e)
75
- ensure
76
- Databases.close_all
67
+ Errors.global_error({error: e, caller: caller, data: [options]})
77
68
  end
78
69
  end
79
70
 
@@ -81,14 +72,12 @@ module Ayadn
81
72
  begin
82
73
  doing(options)
83
74
  stream = @api.get_photos(options)
84
- (no_new_posts unless Databases.has_new?(stream, 'explore:photos')) if options[:new]
75
+ stop_if_no_new_posts(stream, options, 'explore:photos')
85
76
  Databases.save_max_id(stream)
86
77
  render_view(stream, options)
87
78
  Scroll.new(@api, @view).photos(options) if options[:scroll]
88
79
  rescue => e
89
- Errors.global_error("action/photos", options, e)
90
- ensure
91
- Databases.close_all
80
+ Errors.global_error({error: e, caller: caller, data: [options]})
92
81
  end
93
82
  end
94
83
 
@@ -96,52 +85,46 @@ module Ayadn
96
85
  begin
97
86
  doing(options)
98
87
  stream = @api.get_conversations(options)
99
- (no_new_posts unless Databases.has_new?(stream, 'explore:replies')) if options[:new]
88
+ stop_if_no_new_posts(stream, options, 'explore:replies')
100
89
  Databases.save_max_id(stream)
101
90
  render_view(stream, options)
102
91
  Scroll.new(@api, @view).replies(options) if options[:scroll]
103
92
  rescue => e
104
- Errors.global_error("action/conversations", options, e)
105
- ensure
106
- Databases.close_all
93
+ Errors.global_error({error: e, caller: caller, data: [options]})
107
94
  end
108
95
  end
109
96
 
110
97
  def mentions(username, options)
111
98
  begin
112
- missing_username if username.empty?
113
- username = Workers.add_arobase_if_missing(username)
99
+ stop_if_no_username(username)
100
+ username = add_arobase(username)
114
101
  doing(options)
115
102
  stream = @api.get_mentions(username, options)
116
- user_404(username) if meta_404(stream)
103
+ stop_if_no_user(stream, username)
117
104
  Databases.save_max_id(stream)
118
105
  options = options.dup
119
106
  options[:in_mentions] = true
120
- no_data('mentions') if stream['data'].empty?
107
+ stop_if_no_data(stream, 'mentions')
121
108
  render_view(stream, options)
122
109
  Scroll.new(@api, @view).mentions(username, options) if options[:scroll]
123
110
  rescue => e
124
- Errors.global_error("action/mentions", [username, options], e)
125
- ensure
126
- Databases.close_all
111
+ Errors.global_error({error: e, caller: caller, data: [username, options]})
127
112
  end
128
113
  end
129
114
 
130
115
  def posts(username, options)
131
116
  begin
132
- missing_username if username.empty?
133
- username = Workers.add_arobase_if_missing(username)
117
+ stop_if_no_username(username)
118
+ username = add_arobase(username)
134
119
  doing(options)
135
120
  stream = @api.get_posts(username, options)
136
- user_404(username) if meta_404(stream)
121
+ stop_if_no_user(stream, username)
137
122
  Databases.save_max_id(stream)
138
- no_data('posts') if stream['data'].empty?
123
+ stop_if_no_data(stream, 'mentions')
139
124
  render_view(stream, options)
140
125
  Scroll.new(@api, @view).posts(username, options) if options[:scroll]
141
126
  rescue => e
142
- Errors.global_error("action/posts", [username, options], e)
143
- ensure
144
- Databases.close_all
127
+ Errors.global_error({error: e, caller: caller, data: [username, options]})
145
128
  end
146
129
  end
147
130
 
@@ -149,114 +132,95 @@ module Ayadn
149
132
  begin
150
133
  doing(options)
151
134
  stream = @api.get_interactions
152
- unless options[:raw]
153
- @view.clear_screen
154
- @view.show_interactions(stream['data'])
155
- else
156
- @view.show_raw(stream)
157
- end
135
+ option_show_raw(stream, options)
136
+ @view.clear_screen
137
+ @view.show_interactions(stream['data'])
158
138
  rescue => e
159
- Errors.global_error("action/interactions", options, e)
160
- ensure
161
- Databases.close_all
139
+ Errors.global_error({error: e, caller: caller, data: [options]})
162
140
  end
163
141
  end
164
142
 
165
143
  def whatstarred(username, options)
166
144
  begin
167
- missing_username if username.empty?
168
- username = Workers.add_arobase_if_missing(username)
145
+ stop_if_no_username(username)
146
+ username = add_arobase(username)
169
147
  doing(options)
170
148
  stream = @api.get_whatstarred(username, options)
171
- user_404(username) if meta_404(stream)
172
- no_data('whatstarred') if stream['data'].empty?
173
- if options[:extract]
174
- view_all_stars_links(stream)
175
- else
176
- render_view(stream, options)
177
- end
149
+ stop_if_no_user(stream, username)
150
+ stop_if_no_data(stream, 'whatstarred')
151
+ options[:extract] ? view_all_stars_links(stream) : render_view(stream, options)
178
152
  rescue => e
179
- Errors.global_error("action/whatstarred", [username, options], e)
180
- ensure
181
- Databases.close_all
153
+ Errors.global_error({error: e, caller: caller, data: [username, options]})
182
154
  end
183
155
  end
184
156
 
185
157
  def whoreposted(post_id, options)
186
158
  begin
187
- missing_post_id unless post_id.is_integer?
159
+ stop_if_bad_post_id(post_id)
188
160
  doing(options)
189
- id = get_original_id(post_id, @api.get_details(post_id, options))
161
+ details = @api.get_details(post_id, options)
162
+ stop_if_404(details, post_id)
163
+ id = get_original_id(post_id, details)
190
164
  list = @api.get_whoreposted(id)
191
- unless options[:raw]
192
- unless list['data'].empty?
193
- get_list(:whoreposted, list['data'], post_id)
194
- else
195
- puts Status.nobody_reposted
196
- end
165
+ option_show_raw(list, options)
166
+ unless list['data'].empty?
167
+ get_list(:whoreposted, list['data'], post_id)
197
168
  else
198
- @view.show_raw(list)
169
+ puts Status.nobody_reposted
199
170
  end
200
171
  rescue => e
201
- Errors.global_error("action/whoreposted", post_id, e)
202
- ensure
203
- Databases.close_all
172
+ Errors.global_error({error: e, caller: caller, data: [post_id, options]})
204
173
  end
205
174
  end
206
175
 
207
176
  def whostarred(post_id, options)
208
177
  begin
209
- missing_post_id unless post_id.is_integer?
178
+ stop_if_bad_post_id(post_id)
210
179
  doing(options)
211
- id = get_original_id(post_id, @api.get_details(post_id, options))
180
+ details = @api.get_details(post_id, options)
181
+ stop_if_404(details, post_id)
182
+ id = get_original_id(post_id, details)
212
183
  list = @api.get_whostarred(id)
213
- unless options[:raw]
214
- unless list['data'].empty?
215
- get_list(:whostarred, list['data'], id)
216
- else
217
- puts Status.nobody_starred
218
- end
184
+ option_show_raw(list, options)
185
+ unless list['data'].empty?
186
+ get_list(:whostarred, list['data'], id)
219
187
  else
220
- @view.show_raw(list)
188
+ puts Status.nobody_starred
221
189
  end
222
190
  rescue => e
223
- Errors.global_error("action/whostarred", [post_id, id], e)
224
- ensure
225
- Databases.close_all
191
+ Errors.global_error({error: e, caller: caller, data: [post_id, id, options]})
226
192
  end
227
193
  end
228
194
 
229
195
  def convo(post_id, options)
230
196
  begin
231
- missing_post_id unless post_id.is_integer?
197
+ stop_if_bad_post_id(post_id)
232
198
  doing(options)
233
- id = get_original_id(post_id, @api.get_details(post_id, options))
199
+ details = @api.get_details(post_id, options)
200
+ stop_if_404(details, post_id)
201
+ id = get_original_id(post_id, details)
234
202
  stream = get_convo id, options
235
203
  Databases.pagination["replies:#{id}"] = stream['meta']['max_id']
236
204
  render_view(stream, options)
237
205
  Scroll.new(@api, @view).convo(id, options) if options[:scroll]
238
206
  rescue => e
239
- Errors.global_error("action/convo", [post_id, id, options], e)
240
- ensure
241
- Databases.close_all
207
+ Errors.global_error({error: e, caller: caller, data: [post_id, id, options]})
242
208
  end
243
209
  end
244
210
 
245
211
  def get_convo id, options
246
212
  stream = @api.get_convo(id, options)
247
- post_404(id) if meta_404(stream)
213
+ stop_if_no_post(stream, id)
248
214
  stream
249
215
  end
250
216
 
251
217
  def delete(post_id)
252
218
  begin
253
- missing_post_id unless post_id.is_integer?
219
+ stop_if_bad_post_id(post_id)
254
220
  print Status.deleting_post(post_id)
255
221
  check_has_been_deleted(post_id, @api.delete_post(post_id))
256
222
  rescue => e
257
- Errors.global_error("action/delete", post_id, e)
258
- ensure
259
- Databases.close_all
223
+ Errors.global_error({error: e, caller: caller, data: [post_id]})
260
224
  end
261
225
  end
262
226
 
@@ -270,108 +234,92 @@ module Ayadn
270
234
  resp = @api.delete_message(channel_id, message_id)
271
235
  check_message_has_been_deleted(message_id, resp)
272
236
  rescue => e
273
- Errors.global_error("action/delete message", message_id, e)
274
- ensure
275
- Databases.close_all
237
+ Errors.global_error({error: e, caller: caller, data: [message_id]})
276
238
  end
277
239
  end
278
240
 
279
241
  def unfollow(username)
280
242
  begin
281
- missing_username if username.empty?
282
- username = Workers.add_arobase_if_missing(username)
243
+ stop_if_no_username(username)
244
+ username = add_arobase(username)
283
245
  puts Status.unfollowing(username)
284
246
  check_has_been_unfollowed(username, @api.unfollow(username))
285
247
  rescue => e
286
- Errors.global_error("action/unfollow", username, e)
287
- ensure
288
- Databases.close_all
248
+ Errors.global_error({error: e, caller: caller, data: [username]})
289
249
  end
290
250
  end
291
251
 
292
252
  def follow(username)
293
253
  begin
294
- missing_username if username.empty?
295
- username = Workers.add_arobase_if_missing(username)
254
+ stop_if_no_username(username)
255
+ username = add_arobase(username)
296
256
  puts Status.following(username)
297
257
  check_has_been_followed(username, @api.follow(username))
298
258
  rescue => e
299
- Errors.global_error("action/follow", username, e)
300
- ensure
301
- Databases.close_all
259
+ Errors.global_error({error: e, caller: caller, data: [username]})
302
260
  end
303
261
  end
304
262
 
305
263
  def unmute(username)
306
264
  begin
307
- missing_username if username.empty?
308
- username = Workers.add_arobase_if_missing(username)
265
+ stop_if_no_username(username)
266
+ username = add_arobase(username)
309
267
  puts Status.unmuting(username)
310
268
  check_has_been_unmuted(username, @api.unmute(username))
311
269
  rescue => e
312
- Errors.global_error("action/unmute", username, e)
313
- ensure
314
- Databases.close_all
270
+ Errors.global_error({error: e, caller: caller, data: [username]})
315
271
  end
316
272
  end
317
273
 
318
274
  def mute(username)
319
275
  begin
320
- missing_username if username.empty?
321
- username = Workers.add_arobase_if_missing(username)
276
+ stop_if_no_username(username)
277
+ username = add_arobase(username)
322
278
  puts Status.muting(username)
323
279
  check_has_been_muted(username, @api.mute(username))
324
280
  rescue => e
325
- Errors.global_error("action/mute", username, e)
326
- ensure
327
- Databases.close_all
281
+ Errors.global_error({error: e, caller: caller, data: [username]})
328
282
  end
329
283
  end
330
284
 
331
285
  def unblock(username)
332
286
  begin
333
- missing_username if username.empty?
334
- username = Workers.add_arobase_if_missing(username)
287
+ stop_if_no_username(username)
288
+ username = add_arobase(username)
335
289
  puts Status.unblocking(username)
336
290
  check_has_been_unblocked(username, @api.unblock(username))
337
291
  rescue => e
338
- Errors.global_error("action/unblock", username, e)
339
- ensure
340
- Databases.close_all
292
+ Errors.global_error({error: e, caller: caller, data: [username]})
341
293
  end
342
294
  end
343
295
 
344
296
  def block(username)
345
297
  begin
346
- missing_username if username.empty?
347
- username = Workers.add_arobase_if_missing(username)
298
+ stop_if_no_username(username)
299
+ username = add_arobase(username)
348
300
  puts Status.blocking(username)
349
301
  check_has_been_blocked(username, @api.block(username))
350
302
  rescue => e
351
- Errors.global_error("action/block", username, e)
352
- ensure
353
- Databases.close_all
303
+ Errors.global_error({error: e, caller: caller, data: [username]})
354
304
  end
355
305
  end
356
306
 
357
307
  def repost(post_id)
358
308
  begin
359
- missing_post_id unless post_id.is_integer?
309
+ stop_if_bad_post_id(post_id)
360
310
  puts Status.reposting(post_id)
361
311
  resp = @api.get_details(post_id)
362
312
  check_if_already_reposted(resp)
363
313
  id = get_original_id(post_id, resp)
364
314
  check_has_been_reposted(id, @api.repost(id))
365
315
  rescue => e
366
- Errors.global_error("action/repost", [post_id, id], e)
367
- ensure
368
- Databases.close_all
316
+ Errors.global_error({error: e, caller: caller, data: [post_id, id]})
369
317
  end
370
318
  end
371
319
 
372
320
  def unrepost(post_id)
373
321
  begin
374
- missing_post_id unless post_id.is_integer?
322
+ stop_if_bad_post_id(post_id)
375
323
  puts Status.unreposting(post_id)
376
324
  if @api.get_details(post_id)['data']['you_reposted']
377
325
  check_has_been_unreposted(post_id, @api.unrepost(post_id))
@@ -379,15 +327,13 @@ module Ayadn
379
327
  puts Status.not_your_repost
380
328
  end
381
329
  rescue => e
382
- Errors.global_error("action/unrepost", post_id, e)
383
- ensure
384
- Databases.close_all
330
+ Errors.global_error({error: e, caller: caller, data: [post_id]})
385
331
  end
386
332
  end
387
333
 
388
334
  def unstar(post_id)
389
335
  begin
390
- missing_post_id unless post_id.is_integer?
336
+ stop_if_bad_post_id(post_id)
391
337
  puts Status.unstarring(post_id)
392
338
  resp = @api.get_details(post_id)
393
339
  id = get_original_id(post_id, resp)
@@ -398,24 +344,20 @@ module Ayadn
398
344
  puts Status.not_your_starred
399
345
  end
400
346
  rescue => e
401
- Errors.global_error("action/unstar", post_id, e)
402
- ensure
403
- Databases.close_all
347
+ Errors.global_error({error: e, caller: caller, data: [post_id]})
404
348
  end
405
349
  end
406
350
 
407
351
  def star(post_id)
408
352
  begin
409
- missing_post_id unless post_id.is_integer?
353
+ stop_if_bad_post_id(post_id)
410
354
  puts Status.starring(post_id)
411
355
  resp = @api.get_details(post_id)
412
356
  check_if_already_starred(resp)
413
357
  id = get_original_id(post_id, resp)
414
358
  check_has_been_starred(id, @api.star(id))
415
359
  rescue => e
416
- Errors.global_error("action/star", post_id, e)
417
- ensure
418
- Databases.close_all
360
+ Errors.global_error({error: e, caller: caller, data: [post_id]})
419
361
  end
420
362
  end
421
363
 
@@ -423,16 +365,14 @@ module Ayadn
423
365
  begin
424
366
  doing(options)
425
367
  stream = @api.get_hashtag(hashtag)
426
- no_data('hashtag') if stream['data'].empty?
368
+ stop_if_no_data(stream, 'hashtag')
427
369
  if options[:extract]
428
370
  view_all_hashtag_links(stream, hashtag)
429
371
  else
430
372
  render_view(stream, options)
431
373
  end
432
374
  rescue => e
433
- Errors.global_error("action/hashtag", [hashtag, options], e)
434
- ensure
435
- Databases.close_all
375
+ Errors.global_error({error: e, caller: caller, data: [hashtag, options]})
436
376
  end
437
377
  end
438
378
 
@@ -456,7 +396,7 @@ module Ayadn
456
396
  splitted = splitter_all words
457
397
  @api.get_search splitted.join(','), options
458
398
  end
459
- no_data('search') if stream['data'].empty?
399
+ stop_if_no_data(stream, 'search')
460
400
  if options[:users]
461
401
  stream['data'].sort_by! {|obj| obj['counts']['followers']}
462
402
  stream['data'].each do |obj|
@@ -473,208 +413,152 @@ module Ayadn
473
413
  end
474
414
  end
475
415
  rescue => e
476
- Errors.global_error("action/search", [words, options], e)
477
- ensure
478
- Databases.close_all
416
+ Errors.global_error({error: e, caller: caller, data: [words, options]})
479
417
  end
480
418
  end
481
419
 
482
420
  def followings(username, options)
483
421
  begin
484
- missing_username if username.empty?
485
- username = Workers.add_arobase_if_missing(username)
422
+ stop_if_no_username(username)
423
+ username = add_arobase(username)
486
424
  doing(options)
487
- unless options[:raw]
488
- list = @api.get_followings(username)
489
- auto_save_followings(list)
490
- no_data('followings') if list.empty?
491
- get_list(:followings, list, username)
492
- Databases.add_to_users_db_from_list(list)
493
- else
494
- @view.show_raw(@api.get_raw_list(username, :followings))
495
- end
425
+ option_show_raw(@api.get_raw_list(username, :followings), options)
426
+ list = @api.get_followings(username)
427
+ auto_save_followings(list)
428
+ no_data('followings') if list.empty?
429
+ get_list(:followings, list, username)
430
+ Databases.add_to_users_db_from_list(list)
496
431
  rescue => e
497
- Errors.global_error("action/followings", [username, options], e)
498
- ensure
499
- Databases.close_all
432
+ Errors.global_error({error: e, caller: caller, data: [username, options]})
500
433
  end
501
434
  end
502
435
 
503
436
  def followers(username, options)
504
437
  begin
505
- missing_username if username.empty?
506
- username = Workers.add_arobase_if_missing(username)
438
+ stop_if_no_username(username)
439
+ username = add_arobase(username)
507
440
  doing(options)
508
- unless options[:raw]
509
- list = @api.get_followers(username)
510
- auto_save_followers(list)
511
- no_data('followers') if list.empty?
512
- get_list(:followers, list, username)
513
- Databases.add_to_users_db_from_list(list)
514
- else
515
- @view.show_raw(@api.get_raw_list(username, :followers))
516
- end
441
+ option_show_raw(@api.get_raw_list(username, :followers), options)
442
+ list = @api.get_followers(username)
443
+ auto_save_followers(list)
444
+ no_data('followers') if list.empty?
445
+ get_list(:followers, list, username)
446
+ Databases.add_to_users_db_from_list(list)
517
447
  rescue => e
518
- Errors.global_error("action/followers", [username, options], e)
519
- ensure
520
- Databases.close_all
448
+ Errors.global_error({error: e, caller: caller, data: [username, options]})
521
449
  end
522
450
  end
523
451
 
524
452
  def muted(options)
525
453
  begin
526
454
  doing(options)
527
- unless options[:raw]
528
- list = @api.get_muted
529
- auto_save_muted(list)
530
- no_data('muted') if list.empty?
531
- get_list(:muted, list, nil)
532
- Databases.add_to_users_db_from_list(list)
533
- else
534
- @view.show_raw(@api.get_raw_list(nil, :muted))
535
- end
455
+ option_show_raw(@api.get_raw_list(nil, :muted), options)
456
+ list = @api.get_muted
457
+ auto_save_muted(list)
458
+ no_data('muted') if list.empty?
459
+ get_list(:muted, list, nil)
460
+ Databases.add_to_users_db_from_list(list)
536
461
  rescue => e
537
- Errors.global_error("action/muted", options, e)
538
- ensure
539
- Databases.close_all
462
+ Errors.global_error({error: e, caller: caller, data: [options]})
540
463
  end
541
464
  end
542
465
 
543
466
  def blocked(options)
544
467
  begin
545
468
  doing(options)
546
- unless options[:raw]
547
- list = @api.get_blocked
548
- no_data('blocked') if list.empty?
549
- get_list(:blocked, list, nil)
550
- Databases.add_to_users_db_from_list(list)
551
- else
552
- @view.show_raw(@api.get_raw_list(nil, :blocked))
553
- end
469
+ option_show_raw(@api.get_raw_list(nil, :blocked), options)
470
+ list = @api.get_blocked
471
+ no_data('blocked') if list.empty?
472
+ get_list(:blocked, list, nil)
473
+ Databases.add_to_users_db_from_list(list)
554
474
  rescue => e
555
- Errors.global_error("action/blocked", options, e)
556
- ensure
557
- Databases.close_all
475
+ Errors.global_error({error: e, caller: caller, data: [options]})
558
476
  end
559
477
  end
560
478
 
561
479
  def view_settings(options)
562
480
  begin
563
- if options[:raw]
564
- puts Settings.options.to_json
565
- else
566
- @view.clear_screen
567
- @view.show_settings
568
- end
481
+ options[:raw] ? (puts Settings.options.to_json) : @view.show_settings
569
482
  rescue => e
570
- Errors.global_error("action/settings", options, e)
571
- ensure
572
- Databases.close_all
483
+ Errors.global_error({error: e, caller: caller, data: [options]})
573
484
  end
574
485
  end
575
486
 
576
487
  def userinfo(username, options)
577
488
  begin
578
- missing_username if username.empty?
579
- username = Workers.add_arobase_if_missing(username)
489
+ stop_if_no_username(username)
490
+ username = add_arobase(username)
580
491
  doing(options)
581
- unless options[:raw]
582
- stream = @api.get_user(username)
583
- user_404(username) if meta_404(stream)
584
- if same_username?(stream)
585
- token = @api.get_token_info
586
- get_infos(stream['data'], token['data'])
587
- else
588
- get_infos(stream['data'], nil)
589
- end
590
- else
591
- @view.show_raw(@api.get_user(username))
592
- end
492
+ option_show_raw(@api.get_user(username), options)
493
+ stream = @api.get_user(username)
494
+ stop_if_no_user(stream, username)
495
+ same_username?(stream) ? token = @api.get_token_info['data'] : token = nil
496
+ get_infos(stream['data'], token)
593
497
  rescue => e
594
- Errors.global_error("action/userinfo", [username, options], e)
595
- ensure
596
- Databases.close_all
498
+ Errors.global_error({error: e, caller: caller, data: [username, options]})
597
499
  end
598
500
  end
599
501
 
600
502
  def postinfo(post_id, options)
601
503
  begin
602
- missing_post_id unless post_id.is_integer?
504
+ stop_if_bad_post_id(post_id)
603
505
  doing(options)
604
- unless options[:raw]
605
- @view.clear_screen
606
- response = @api.get_details(post_id, options)
607
- post_404(post_id) if meta_404(response)
608
- resp = response['data']
609
- response = @api.get_user("@#{resp['user']['username']}")
610
- user_404(username) if meta_404(response)
611
- if same_username?(response)
612
- token = @api.get_token_info
613
- end
614
- stream = response['data']
615
- puts "POST:\n".inverse
616
- @view.show_simple_post([resp], options)
617
- if resp['repost_of']
618
- puts "REPOST OF:\n".inverse
619
- Errors.repost(post_id, resp['repost_of']['id'])
620
- @view.show_simple_post([resp['repost_of']], options)
621
- end
622
- puts "AUTHOR:\n".inverse
623
- if response['data']['username'] == Settings.config[:identity][:username]
624
- @view.show_userinfos(stream, token['data'])
625
- else
626
- @view.show_userinfos(stream, nil)
627
- end
506
+ option_show_raw(@api.get_details(post_id, options), options)
507
+ @view.clear_screen
508
+ response = @api.get_details(post_id, options)
509
+ stop_if_no_post(response, post_id)
510
+ resp = response['data']
511
+ response = @api.get_user("@#{resp['user']['username']}")
512
+ stop_if_no_user(response, response['data']['username'])
513
+ stream = response['data']
514
+ puts "POST:\n".inverse
515
+ @view.show_simple_post([resp], options)
516
+ if resp['repost_of']
517
+ puts "REPOST OF:\n".inverse
518
+ Errors.repost(post_id, resp['repost_of']['id'])
519
+ @view.show_simple_post([resp['repost_of']], options)
520
+ end
521
+ puts "AUTHOR:\n".inverse
522
+ if response['data']['username'] == Settings.config[:identity][:username]
523
+ @view.show_userinfos(stream, @api.get_token_info['data'])
628
524
  else
629
- @view.show_raw(@api.get_details(post_id, options))
525
+ @view.show_userinfos(stream, nil)
630
526
  end
631
527
  rescue => e
632
- Errors.global_error("action/postinfo", [post_id, options], e)
633
- ensure
634
- Databases.close_all
528
+ Errors.global_error({error: e, caller: caller, data: [post_id, options]})
635
529
  end
636
530
  end
637
531
 
638
532
  def files(options)
639
533
  begin
640
534
  doing(options)
641
- unless options[:raw]
642
- list = @api.get_files_list(options)
643
- @view.clear_screen
644
- list.empty? ? no_data('files') : @view.show_files_list(list)
645
- else
646
- @view.show_raw(@api.get_files_list(options))
647
- end
535
+ option_show_raw(@api.get_files_list(options), options)
536
+ list = @api.get_files_list(options)
537
+ @view.clear_screen
538
+ list.empty? ? no_data('files') : @view.show_files_list(list)
648
539
  rescue => e
649
- Errors.global_error("action/files", options, e)
650
- ensure
651
- Databases.close_all
540
+ Errors.global_error({error: e, caller: caller, data: [options]})
652
541
  end
653
542
  end
654
543
 
655
544
  def download(file_id)
656
545
  begin
657
- resp = @api.get_file(file_id)
658
- file = resp['data']
546
+ file = @api.get_file(file_id)['data']
659
547
  FileOps.download_url(file['name'], file['url'])
660
548
  puts Status.downloaded(file['name'])
661
549
  rescue => e
662
- Errors.global_error("action/download", [file_id, file['url']], e)
663
- ensure
664
- Databases.close_all
550
+ Errors.global_error({error: e, caller: caller, data: [file_id, file['url']]})
665
551
  end
666
552
  end
667
553
 
668
554
  def channels
669
555
  begin
670
- doing
556
+ doing()
671
557
  resp = @api.get_channels
672
558
  @view.clear_screen
673
559
  @view.show_channels(resp)
674
560
  rescue => e
675
- Errors.global_error("action/channels", resp['meta'], e)
676
- ensure
677
- Databases.close_all
561
+ Errors.global_error({error: e, caller: caller, data: [resp['meta']]})
678
562
  end
679
563
  end
680
564
 
@@ -683,19 +567,14 @@ module Ayadn
683
567
  channel_id = get_channel_id_from_alias(channel_id)
684
568
  doing(options)
685
569
  resp = @api.get_messages(channel_id, options)
686
- (no_new_posts unless Databases.has_new?(resp, "channel:#{channel_id}")) if options[:new]
570
+ stop_if_no_new_posts(resp, options, "channel:#{channel_id}")
687
571
  Databases.save_max_id(resp)
688
- if options[:raw]
689
- @view.show_raw(resp)
690
- exit
691
- end
692
- no_data('messages') if resp['data'].empty?
572
+ option_show_raw(resp, options)
573
+ stop_if_no_data(resp, 'messages')
693
574
  render_view(resp, options)
694
575
  Scroll.new(@api, @view).messages(channel_id, options) if options[:scroll]
695
576
  rescue => e
696
- Errors.global_error("action/messages", [channel_id, options], e)
697
- ensure
698
- Databases.close_all
577
+ Errors.global_error({error: e, caller: caller, data: [channel_id, options]})
699
578
  end
700
579
  end
701
580
 
@@ -703,14 +582,13 @@ module Ayadn
703
582
  require 'pinboard'
704
583
  require 'base64'
705
584
  begin
706
- missing_post_id unless post_id.is_integer?
707
- doing
708
- resp = get_data_from_response(@api.get_details(post_id, {}))
585
+ stop_if_bad_post_id(post_id)
586
+ doing()
587
+ resp = get_data_from_response(@api.get_details(post_id))
709
588
  @view.clear_screen
710
589
  links = Workers.new.extract_links(resp)
711
590
  resp['text'].nil? ? text = "" : text = resp['text']
712
591
  usertags << "ADN"
713
- post_url = resp['canonical_url']
714
592
  handle = "@" + resp['user']['username']
715
593
  post_text = "From: #{handle} -- Text: #{text} -- Links: #{links.join(" ")}"
716
594
  pinner = Ayadn::PinBoard.new
@@ -721,14 +599,12 @@ module Ayadn
721
599
  end
722
600
  credentials = pinner.load_credentials
723
601
  maker = Struct.new(:username, :password, :url, :tags, :text, :description)
724
- bookmark = maker.new(credentials[0], credentials[1], post_url, usertags.join(","), post_text, links[0])
602
+ bookmark = maker.new(credentials[0], credentials[1], resp['canonical_url'], usertags.join(","), post_text, links[0])
725
603
  puts Status.saving_pin
726
604
  pinner.pin(bookmark)
727
605
  puts Status.done
728
606
  rescue => e
729
- Errors.global_error("action/pin", [post_id, usertags], e)
730
- ensure
731
- Databases.close_all
607
+ Errors.global_error({error: e, caller: caller, data: [post_id, usertags]})
732
608
  end
733
609
  end
734
610
 
@@ -736,20 +612,9 @@ module Ayadn
736
612
  begin
737
613
  @view.clear_screen
738
614
  puts Status.auto
739
- poster = Post.new
740
- # platform = Settings.config[:platform]
741
- # case platform
742
- # when /mswin|mingw|cygwin/
743
- # poster.auto_classic
744
- # else
745
- require "readline"
746
- poster.auto_readline
747
- # end
615
+ Post.new.auto_readline
748
616
  rescue => e
749
- #Errors.global_error("action/auto post", [options, platform], e)
750
- Errors.global_error("action/auto post", [options], e)
751
- ensure
752
- Databases.close_all
617
+ Errors.global_error({error: e, caller: caller, data: [options]})
753
618
  end
754
619
  end
755
620
 
@@ -758,8 +623,16 @@ module Ayadn
758
623
  writer = Post.new
759
624
  @view.clear_screen
760
625
  if options['embed']
761
- puts Status.uploading(options['embed'])
762
- resp = writer.send_embedded(args.join(" "), FileOps.make_paths(options['embed']))
626
+ if options['embed'].length > 1 # if args are inversed on the cl
627
+ opts = options['embed'].dup
628
+ embed = [opts.shift]
629
+ text = opts.join(" ")
630
+ else
631
+ embed = options['embed']
632
+ text = args.join(" ")
633
+ end
634
+ puts Status.uploading(embed)
635
+ resp = writer.send_embedded(text, FileOps.make_paths(embed))
763
636
  else
764
637
  puts Status.posting
765
638
  resp = writer.post(args)
@@ -769,9 +642,7 @@ module Ayadn
769
642
  puts Status.yourpost
770
643
  @view.show_posted(resp)
771
644
  rescue => e
772
- Errors.global_error("action/post", [args, options], e)
773
- ensure
774
- Databases.close_all
645
+ Errors.global_error({error: e, caller: caller, data: [args, options]})
775
646
  end
776
647
  end
777
648
 
@@ -798,18 +669,15 @@ module Ayadn
798
669
  puts Status.yourpost
799
670
  @view.show_posted(resp)
800
671
  rescue => e
801
- Errors.global_error("action/write", [text, options], e)
802
- ensure
803
- Databases.close_all
672
+ Errors.global_error({error: e, caller: caller, data: [text, options]})
804
673
  end
805
674
  end
806
675
 
807
676
  def pmess(username, options = {})
808
677
  begin
809
678
  files = FileOps.make_paths(options['embed']) if options['embed']
810
- missing_username if username.empty?
811
- temp = Workers.add_arobase_if_missing(username)
812
- username = [temp]
679
+ stop_if_no_username(username)
680
+ username = [add_arobase(username)]
813
681
  messenger = Post.new
814
682
  puts Status.message_from(username)
815
683
  puts Status.message
@@ -829,7 +697,7 @@ module Ayadn
829
697
  puts Status.yourmessage
830
698
  @view.show_posted(resp)
831
699
  rescue => e
832
- Errors.global_error("action/pmess", [username, options], e)
700
+ Errors.global_error({error: e, caller: caller, data: [username, options]})
833
701
  ensure
834
702
  Databases.close_all
835
703
  end
@@ -851,7 +719,7 @@ module Ayadn
851
719
  puts Status.yourpost
852
720
  @view.show_posted(resp)
853
721
  rescue => e
854
- Errors.global_error("action/send_to_channel", channel_id, e)
722
+ Errors.global_error({error: e, caller: caller, data: [channel_id]})
855
723
  ensure
856
724
  Databases.close_all
857
725
  end
@@ -863,12 +731,12 @@ module Ayadn
863
731
  post_id = get_real_post_id(post_id)
864
732
  puts Status.replying_to(post_id)
865
733
  replied_to = @api.get_details(post_id)
866
- post_404(post_id) if meta_404(replied_to)
734
+ stop_if_no_post(replied_to, post_id)
867
735
  post_id = get_original_id(post_id, replied_to)
868
736
  if replied_to['data']['repost_of']
869
737
  if post_id == replied_to['data']['repost_of']['id']
870
738
  replied_to = @api.get_details(post_id)
871
- post_404(post_id) if meta_404(replied_to)
739
+ stop_if_no_post(replied_to, post_id)
872
740
  end
873
741
  end
874
742
  poster = Post.new
@@ -888,56 +756,14 @@ module Ayadn
888
756
  FileOps.save_post(resp) if Settings.options[:backup][:auto_save_sent_posts]
889
757
  @view.clear_screen
890
758
  puts Status.done
891
- render_view(@api.get_convo(post_id, {}), {})
759
+ render_view(@api.get_convo(post_id))
892
760
  rescue => e
893
- Errors.global_error("action/reply", [post_id, options], e)
894
- ensure
895
- Databases.close_all
761
+ Errors.global_error({error: e, caller: caller, data: [post_id, options]})
896
762
  end
897
763
  end
898
764
 
899
765
  def nowplaying(options = {})
900
- begin
901
- Databases.close_all
902
- abort(Status.error_only_osx) unless Settings.config[:platform] =~ /darwin/
903
- itunes = get_track_infos()
904
- itunes.each {|el| abort(Status.empty_fields) if el.length == 0}
905
- @view.clear_screen
906
- unless options['no_url']
907
- store = itunes_request(itunes)
908
- end
909
- text_to_post = "#nowplaying\n \nTitle: ‘#{itunes.track}’\nArtist: #{itunes.artist}\nfrom ‘#{itunes.album}’"
910
- puts Status.writing
911
- show_nowplaying("\n#{text_to_post}", options, store)
912
- text_to_post += "\n \n[> Listen](#{store['preview']})" unless options['no_url']
913
- unless STDIN.getch == ("y" || "Y")
914
- puts "\nCanceled.\n\n".color(:red)
915
- exit
916
- end
917
- puts "\n"
918
- puts Status.yourpost
919
- if options['no_url'].nil?
920
- visible, track, artwork = true, store['track'], store['artwork']
921
- else
922
- visible, track, artwork = false, false, false
923
- end
924
- dic = {
925
- 'text' => text_to_post,
926
- 'title' => track,
927
- 'artwork' => artwork,
928
- 'width' => 1200,
929
- 'height' => 1200,
930
- 'visible' => visible
931
- }
932
- @view.show_posted(Post.new.send_nowplaying(dic))
933
- rescue => e
934
- puts Status.wtf
935
- if options['no_url']
936
- Errors.global_error("action/nowplaying", itunes, e)
937
- else
938
- Errors.global_error("action/nowplaying", [itunes, store, options], e)
939
- end
940
- end
766
+ options['lastfm'] ? np_lastfm(options) : np_itunes(options)
941
767
  end
942
768
 
943
769
  def random_posts(options)
@@ -967,27 +793,146 @@ module Ayadn
967
793
  end
968
794
  end
969
795
  rescue => e
970
- Errors.global_error("action/random_posts", [@max_id, @random_post_id, @resp], e)
971
- ensure
972
- Databases.close_all
796
+ Errors.global_error({error: e, caller: caller, data: [@max_id, @random_post_id, @resp, options]})
973
797
  end
974
798
  end
975
799
 
976
800
  private
977
801
 
978
- def itunes_request itunes
802
+ def np_lastfm options
803
+ require 'rss'
804
+ begin
805
+ if Settings.options[:nowplaying]
806
+ if Settings.options[:nowplaying][:lastfm]
807
+ user = Settings.options[:nowplaying][:lastfm]
808
+ else
809
+ user = create_lastfm_user()
810
+ end
811
+ else
812
+ Settings.options[:nowplaying] = {}
813
+ user = create_lastfm_user()
814
+ end
815
+ puts Status.fetching_from('Last.fm')
816
+ artist, track = get_lastfm_track_infos(user)
817
+ puts Status.itunes_store
818
+ store = lastfm_istore_request(artist, track) unless options['no_url']
819
+ text_to_post = "#nowplaying\n \nTitle: ‘#{track}’\nArtist: #{artist}"
820
+ post_nowplaying(text_to_post, store, options)
821
+ rescue => e
822
+ puts Status.wtf
823
+ Errors.global_error({error: e, caller: caller, data: [lfm, store, options]})
824
+ end
825
+ end
826
+
827
+ def get_lastfm_track_infos user
828
+ begin
829
+ url = "http://ws.audioscrobbler.com/2.0/user/#{user}/recenttracks.rss"
830
+ feed = RSS::Parser.parse(CNX.download(url))
831
+ lfm = feed.items[0].title.split(' – ')
832
+ return lfm[0], lfm[1]
833
+ rescue Interrupt
834
+ abort(Status.canceled)
835
+ end
836
+ end
837
+
838
+ def np_itunes options
839
+ begin
840
+ abort(Status.error_only_osx) unless Settings.config[:platform] =~ /darwin/
841
+ puts Status.fetching_from('iTunes')
842
+ itunes = get_itunes_track_infos()
843
+ itunes.each {|el| abort(Status.empty_fields) if el.length == 0}
844
+ puts Status.itunes_store
845
+ store = itunes_istore_request(itunes) unless options['no_url']
846
+ text_to_post = "#nowplaying\n \nTitle: ‘#{itunes.track}’\nArtist: #{itunes.artist}\nfrom ‘#{itunes.album}’"
847
+ post_nowplaying(text_to_post, store, options)
848
+ rescue => e
849
+ puts Status.wtf
850
+ Errors.global_error({error: e, caller: caller, data: [itunes, store, options]})
851
+ end
852
+ end
853
+
854
+ def post_nowplaying text_to_post, store, options
855
+ begin
856
+ @view.clear_screen
857
+ puts Status.writing
858
+ show_nowplaying("\n#{text_to_post}", options, store)
859
+ unless options['no_url'] || store['code'] != 200
860
+ #text_to_post += "\n \n[> Listen](#{store['preview']})"
861
+ text_to_post += "\n \n[iTunes Store](#{store['link']})"
862
+ end
863
+ abort(Status.canceled) unless STDIN.getch == ("y" || "Y")
864
+ puts "\n#{Status.yourpost}"
865
+ unless options['no_url'] || store['code'] != 200
866
+ visible, track, artwork, artwork_thumb = true, store['track'], store['artwork'], store['artwork_thumb']
867
+ else
868
+ visible, track, artwork, artwork_thumb = false
869
+ end
870
+ dic = {
871
+ 'text' => text_to_post,
872
+ 'title' => track,
873
+ 'artwork' => artwork,
874
+ 'artwork_thumb' => artwork_thumb,
875
+ 'width' => 1200,
876
+ 'height' => 1200,
877
+ 'width_thumb' => 200,
878
+ 'height_thumb' => 200,
879
+ 'visible' => visible
880
+ }
881
+ @view.show_posted(Post.new.send_nowplaying(dic))
882
+ rescue => e
883
+ puts Status.wtf
884
+ Errors.global_error({error: e, caller: caller, data: [dic, store, options]})
885
+ end
886
+ end
887
+
888
+ def ask_lastfm_user
889
+ puts "\nPlease enter your Last.fm username:\n".color(:cyan)
890
+ begin
891
+ STDIN.gets.chomp!
892
+ rescue Interrupt
893
+ abort(Status.canceled)
894
+ end
895
+ end
896
+
897
+ def create_lastfm_user
898
+ Settings.options[:nowplaying][:lastfm] = ask_lastfm_user()
899
+ Settings.save_config
900
+ return Settings.options[:nowplaying][:lastfm]
901
+ end
902
+
903
+ def itunes_istore_request itunes
979
904
  infos = itunes_reg([itunes.artist, itunes.track, itunes.album])
980
905
  itunes_url = "https://itunes.apple.com/search?term=#{infos[0]}&term=#{infos[1]}&term=#{infos[2]}&media=music&entity=musicTrack"
981
- results = JSON.load(CNX.download(itunes_url))['results']
982
- candidate = results[0]
983
- {
984
- 'artist' => candidate['artistName'],
985
- 'track' => candidate['trackName'],
986
- 'preview' => candidate['previewUrl'],
987
- 'artwork' => candidate['artworkUrl100'].gsub('100x100', '1200x1200'),
988
- 'request' => itunes_url,
989
- 'results' => results
990
- }
906
+ get_itunes_store(itunes_url)
907
+ end
908
+
909
+ def lastfm_istore_request artist, track
910
+ infos = itunes_reg([artist, track])
911
+ itunes_url = "https://itunes.apple.com/search?term=#{infos[0]}&term=#{infos[1]}&media=music&entity=musicTrack"
912
+ get_itunes_store(itunes_url)
913
+ end
914
+
915
+ def get_itunes_store url
916
+ results = JSON.load(CNX.download(url))['results']
917
+ unless results.empty? || results.nil?
918
+ candidate = results[0]
919
+ return {
920
+ 'code' => 200,
921
+ 'artist' => candidate['artistName'],
922
+ 'track' => candidate['trackName'],
923
+ 'preview' => candidate['previewUrl'],
924
+ 'link' => candidate['collectionViewUrl'],
925
+ 'artwork' => candidate['artworkUrl100'].gsub('100x100', '1200x1200'),
926
+ 'artwork_thumb' => candidate['artworkUrl100'].gsub('100x100', '600x600'),
927
+ 'request' => url,
928
+ 'results' => results
929
+ }
930
+ else
931
+ return {
932
+ 'code' => 404,
933
+ 'request' => url
934
+ }
935
+ end
991
936
  end
992
937
 
993
938
  def itunes_reg arr_of_itunes
@@ -997,6 +942,73 @@ module Ayadn
997
942
  end
998
943
  end
999
944
 
945
+ def get_itunes_track_infos
946
+ track = `osascript -e 'tell application "iTunes"' -e 'set trackName to name of current track' -e 'return trackName' -e 'end tell'`
947
+ if track.empty?
948
+ puts Status.no_itunes
949
+ Errors.warn "Nowplaying canceled: unable to get info from iTunes."
950
+ exit
951
+ end
952
+ album = `osascript -e 'tell application "iTunes"' -e 'set trackAlbum to album of current track' -e 'return trackAlbum' -e 'end tell'`
953
+ artist = `osascript -e 'tell application "iTunes"' -e 'set trackArtist to artist of current track' -e 'return trackArtist' -e 'end tell'`
954
+ maker = Struct.new(:artist, :album, :track)
955
+ maker.new(artist.chomp!, album.chomp!, track.chomp!)
956
+ end
957
+
958
+ def show_nowplaying(text, options, store)
959
+ puts "\nYour post:\n".color(:cyan)
960
+ if options['no_url'] || store['code'] != 200
961
+ puts text + "\n\n\n"
962
+ else
963
+ puts text + "\n\n\nThe iTunes Store thinks this track is: ".color(:green) + "'#{store['track']}'".color(:magenta) + " by ".color(:green) + "'#{store['artist']}'".color(:magenta) + ".\n\nAyadn will use these elements to insert album artwork and a link to the track.\n\n".color(:green)
964
+ end
965
+ puts "Do you confirm? (y/N) ".color(:yellow)
966
+ end
967
+
968
+ def nicerank_true
969
+ if Settings.options[:nicerank]
970
+ if Settings.options[:nicerank][:filter] == true
971
+ return true
972
+ end
973
+ end
974
+ end
975
+
976
+ def option_show_raw stream, options
977
+ if options[:raw]
978
+ @view.show_raw(stream)
979
+ exit
980
+ end
981
+ end
982
+
983
+ def stop_if_bad_post_id post_id
984
+ missing_post_id() unless post_id.is_integer?
985
+ end
986
+
987
+ def stop_if_no_data stream, target
988
+ if stream['data'].empty?
989
+ Errors.warn "In action/#{target}: no data"
990
+ abort(Status.empty_list)
991
+ end
992
+ end
993
+
994
+ def stop_if_404 stream, post_id
995
+ if stream['meta']['code'] == 404
996
+ abort(Status.post_404(post_id))
997
+ end
998
+ end
999
+
1000
+ def add_arobase username
1001
+ Workers.add_arobase_if_missing(username)
1002
+ end
1003
+
1004
+ def stop_if_no_new_posts stream, options, title
1005
+ if options[:new]
1006
+ unless Databases.has_new?(stream, title)
1007
+ no_new_posts()
1008
+ end
1009
+ end
1010
+ end
1011
+
1000
1012
  def splitter_all words
1001
1013
  [words].collect {|w| w.split(' ')}
1002
1014
  end
@@ -1144,31 +1156,31 @@ module Ayadn
1144
1156
  abort(Status.empty_list)
1145
1157
  end
1146
1158
 
1147
- def meta_404(stream)
1148
- stream['meta']['code'] == 404
1149
- end
1150
-
1151
- def user_404(username)
1152
- puts Status.user_404 username
1153
- Errors.info("User #{username} doesn't exist")
1154
- exit
1159
+ def stop_if_no_user stream, username
1160
+ if stream['meta']['code'] == 404
1161
+ puts Status.user_404(username)
1162
+ Errors.info("User #{username} doesn't exist")
1163
+ exit
1164
+ end
1155
1165
  end
1156
1166
 
1157
- def post_404(post_id)
1158
- puts Status.post_404 post_id
1159
- Errors.info("Impossible to find #{post_id}")
1160
- exit
1167
+ def stop_if_no_post stream, post_id
1168
+ if stream['meta']['code'] == 404
1169
+ puts Status.post_404(post_id)
1170
+ Errors.info("Impossible to find #{post_id}")
1171
+ exit
1172
+ end
1161
1173
  end
1162
1174
 
1163
1175
  def length_of_index
1164
1176
  Databases.get_index_length
1165
1177
  end
1166
1178
 
1167
- def get_post_from_index(id)
1168
- Databases.get_post_from_index(id)
1179
+ def get_post_from_index id
1180
+ Databases.get_post_from_index id
1169
1181
  end
1170
1182
 
1171
- def get_real_post_id(post_id)
1183
+ def get_real_post_id post_id
1172
1184
  id = post_id.to_i
1173
1185
  if id > 0 && id <= length_of_index
1174
1186
  resp = get_post_from_index(id)
@@ -1177,11 +1189,11 @@ module Ayadn
1177
1189
  post_id
1178
1190
  end
1179
1191
 
1180
- def render_view(data, options = {}, niceranks = {})
1192
+ def render_view(stream, options = {}, niceranks = {})
1181
1193
  unless options[:raw]
1182
- get_view(data['data'], options, niceranks)
1194
+ get_view(stream['data'], options, niceranks)
1183
1195
  else
1184
- @view.show_raw(data)
1196
+ @view.show_raw(stream)
1185
1197
  end
1186
1198
  end
1187
1199
 
@@ -1256,9 +1268,11 @@ module Ayadn
1256
1268
  exit
1257
1269
  end
1258
1270
 
1259
- def missing_username
1260
- puts Status.error_missing_username
1261
- exit
1271
+ def stop_if_no_username username
1272
+ if username.empty?
1273
+ puts Status.error_missing_username
1274
+ exit
1275
+ end
1262
1276
  end
1263
1277
 
1264
1278
  def missing_post_id
@@ -1285,29 +1299,6 @@ module Ayadn
1285
1299
  stream['data']['username'] == Settings.config[:identity][:username]
1286
1300
  end
1287
1301
 
1288
- def get_track_infos
1289
- track = `osascript -e 'tell application "iTunes"' -e 'set trackName to name of current track' -e 'return trackName' -e 'end tell'`
1290
- if track.empty?
1291
- puts Status.no_itunes
1292
- Errors.warn "Nowplaying canceled: unable to get info from iTunes."
1293
- exit
1294
- end
1295
- album = `osascript -e 'tell application "iTunes"' -e 'set trackAlbum to album of current track' -e 'return trackAlbum' -e 'end tell'`
1296
- artist = `osascript -e 'tell application "iTunes"' -e 'set trackArtist to artist of current track' -e 'return trackArtist' -e 'end tell'`
1297
- maker = Struct.new(:artist, :album, :track)
1298
- maker.new(artist.chomp!, album.chomp!, track.chomp!)
1299
- end
1300
-
1301
- def show_nowplaying(text, options, store)
1302
- puts "\nYour post:\n".color(:cyan)
1303
- if options['no_url']
1304
- puts text + "\n\n\n"
1305
- else
1306
- puts text + "\n\nAlbum artwork + 30 sec preview for track '#{store['track']}' by '#{store['artist']}' will be inserted in the post.\n\n\n".color(:green)
1307
- end
1308
- puts "Do you confirm? (y/N) ".color(:yellow)
1309
- end
1310
-
1311
1302
  def countdown(wait)
1312
1303
  wait.downto(1) do |i|
1313
1304
  print "\r#{sprintf("%02d", i)} sec... QUIT WITH [CTRL+C]".color(:cyan)