ayadn 1.4.2 → 1.4.3

Sign up to get free protection for your applications and to get access to all the features.
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)