in_our_time 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/lib/iot/iot.rb +91 -64
- data/lib/iot/keyboard_events.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6d431c6acebb6c984ae2866189aa2ff50b3d52c8
|
4
|
+
data.tar.gz: 91ea04fe56e4b78e57fc46e4a42350b9f7abafde
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 12cdc3af80022e5a5d50cb34b98d8f2a58431225dde9625b0f2327780892d968c0764e006eee719c8abdd45b42d97b337e9eccf615e84f2fa0e920a23263e12d
|
7
|
+
data.tar.gz: a12f8953946ed6708e765f79ed4a9ce1d808f5c63091ef5445f70833678965bfc32e2de3589c5a3cb68ff54ffce9ddf9eca748d476a0b81bfa5d639728ec918b
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
data/lib/iot/iot.rb
CHANGED
@@ -51,7 +51,6 @@ class InOurTime
|
|
51
51
|
|
52
52
|
def initialize
|
53
53
|
@content = ''
|
54
|
-
@programs = []
|
55
54
|
@selected = 0
|
56
55
|
clear
|
57
56
|
print "\e[?25h"
|
@@ -313,7 +312,6 @@ class InOurTime
|
|
313
312
|
render
|
314
313
|
fetch_uri rss_addresses[count], rss_files[count]
|
315
314
|
end
|
316
|
-
# iot_puts
|
317
315
|
@config[:last_update] = now
|
318
316
|
save_config
|
319
317
|
end
|
@@ -323,35 +321,57 @@ class InOurTime
|
|
323
321
|
end
|
324
322
|
|
325
323
|
def uniquify_programs
|
326
|
-
@programs
|
324
|
+
@programs.uniq!{|pr| pr[:title]}
|
327
325
|
return if @programs.uniq.length == @programs.length
|
328
326
|
print_error_and_delay "Error ensuring Programs unique!"
|
329
327
|
quit 1
|
330
328
|
end
|
331
329
|
|
330
|
+
def tags
|
331
|
+
['title', 'itunes:subtitle',
|
332
|
+
'itunes:summary', 'itunes:duration',
|
333
|
+
'pubDate', 'link']
|
334
|
+
end
|
335
|
+
|
336
|
+
def build_program(bin)
|
337
|
+
title = bin[tags[0]].shift.text
|
338
|
+
{ title: title,
|
339
|
+
subtitle: bin[tags[1]].shift.text,
|
340
|
+
summary: bin[tags[2]].shift.text,
|
341
|
+
duration: bin[tags[3]].shift.text,
|
342
|
+
date: bin[tags[4]].shift.text[0..15],
|
343
|
+
link: bin[tags[5]].shift.text,
|
344
|
+
have_locally: have_locally?(title)
|
345
|
+
}
|
346
|
+
end
|
347
|
+
|
348
|
+
def build_programs bin
|
349
|
+
bin['title'].size.times do
|
350
|
+
@programs << build_program(bin)
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
354
|
+
def item_path name
|
355
|
+
"rss/channel/item/#{name}"
|
356
|
+
end
|
357
|
+
|
358
|
+
def clear_programs
|
359
|
+
@programs = []
|
360
|
+
end
|
361
|
+
|
332
362
|
def parse_rss
|
363
|
+
clear_programs
|
333
364
|
rss_files.each do |file|
|
334
365
|
@doc = Oga.parse_xml(File.open(file))
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
dates = @doc.xpath('rss/channel/item/pubDate')
|
340
|
-
links = @doc.xpath('rss/channel/item/link')
|
341
|
-
|
342
|
-
0.upto(titles.length - 1) do |idx|
|
343
|
-
program = {}
|
344
|
-
program[:title] = titles[idx].text
|
345
|
-
program[:subtitle] = subtitles[idx].text
|
346
|
-
program[:summary] = summarys[idx].text
|
347
|
-
program[:duration] = durations[idx].text
|
348
|
-
program[:date] = (dates[idx].text)[0..15]
|
349
|
-
program[:link] = links[idx].text
|
350
|
-
program[:have_locally] = have_locally?(titles[idx].text)
|
351
|
-
@programs << program
|
366
|
+
bin = {}
|
367
|
+
tags.each do |tag|
|
368
|
+
bin[tag] = [] if bin[tag].nil?
|
369
|
+
bin[tag] = @doc.xpath(item_path(tag))
|
352
370
|
end
|
371
|
+
build_programs(bin)
|
353
372
|
end
|
354
373
|
uniquify_programs
|
374
|
+
@titles_count = @programs.length
|
355
375
|
end
|
356
376
|
|
357
377
|
def select_program title
|
@@ -360,9 +380,8 @@ class InOurTime
|
|
360
380
|
end
|
361
381
|
|
362
382
|
def sort_titles
|
363
|
-
@sorted_titles = []
|
364
383
|
@sorted_titles = @programs.collect { |pr| pr[:title] }
|
365
|
-
@sorted_titles.
|
384
|
+
@sorted_titles.sort_by!(&:downcase) unless @sort == :age
|
366
385
|
end
|
367
386
|
|
368
387
|
def sort_selected title
|
@@ -383,37 +402,39 @@ class InOurTime
|
|
383
402
|
redraw
|
384
403
|
end
|
385
404
|
|
386
|
-
def
|
387
|
-
title = @sorted_titles[@
|
388
|
-
if
|
389
|
-
|
405
|
+
def list_key
|
406
|
+
title = @playing ? @playing : (@sorted_titles[@last_selected || 0])
|
407
|
+
if top_or_end?
|
408
|
+
list_selected title
|
390
409
|
else
|
391
|
-
|
410
|
+
@last_selected = @selected
|
411
|
+
list_top_or_end
|
392
412
|
end
|
393
413
|
end
|
394
414
|
|
395
|
-
def
|
396
|
-
|
397
|
-
|
398
|
-
list_selected title
|
399
|
-
else
|
415
|
+
def list_top_or_end
|
416
|
+
@list_top = @list_top? nil : true
|
417
|
+
if @list_top
|
400
418
|
list_top
|
419
|
+
else
|
420
|
+
list_end
|
401
421
|
end
|
402
422
|
end
|
403
423
|
|
404
|
-
def
|
405
|
-
|
406
|
-
list_playing
|
407
|
-
else
|
408
|
-
list_stopped
|
409
|
-
end
|
424
|
+
def top_or_end?
|
425
|
+
@selected == 0 || @selected == @titles_count - 1
|
410
426
|
end
|
411
427
|
|
412
428
|
def list_top
|
413
429
|
@last_selected = @selected
|
414
|
-
|
415
|
-
|
416
|
-
|
430
|
+
title = @sorted_titles.first
|
431
|
+
list_selected title
|
432
|
+
end
|
433
|
+
|
434
|
+
def list_end
|
435
|
+
@last_selected = @selected
|
436
|
+
title = @sorted_titles.last
|
437
|
+
list_selected title
|
417
438
|
end
|
418
439
|
|
419
440
|
def sort_key
|
@@ -441,7 +462,7 @@ class InOurTime
|
|
441
462
|
x = DateTime.strptime("Mon, 20 Jun 2016", '%a, %d %b %Y')
|
442
463
|
y = DateTime.strptime(date, '%a, %d %b %Y')
|
443
464
|
if y < x
|
444
|
-
return '
|
465
|
+
return '415' unless @playing == 'Abelard and Heloise'
|
445
466
|
'0' if @playing == 'Abelard and Heloise'
|
446
467
|
else
|
447
468
|
'435'
|
@@ -586,9 +607,9 @@ class InOurTime
|
|
586
607
|
|
587
608
|
def draw_page
|
588
609
|
clear_content
|
589
|
-
if @line_count <= @
|
610
|
+
if @line_count <= @titles_count
|
590
611
|
@line_count.upto(@line_count + @page_height - 1) do |idx|
|
591
|
-
if idx < @
|
612
|
+
if idx < @titles_count
|
592
613
|
iot_print "> " if(idx == @selected) unless @config[:colour]
|
593
614
|
show_count_maybe idx
|
594
615
|
iot_puts @sorted_titles[idx], @selection_colour if (idx == @selected)
|
@@ -616,7 +637,7 @@ class InOurTime
|
|
616
637
|
if @line_count > 0
|
617
638
|
@line_count -= (@page_height * 2)
|
618
639
|
else
|
619
|
-
@line_count = @
|
640
|
+
@line_count = @titles_count
|
620
641
|
@selected = @line_count
|
621
642
|
end
|
622
643
|
draw_page
|
@@ -640,21 +661,20 @@ class InOurTime
|
|
640
661
|
[] <<
|
641
662
|
" In Our Time Player (#{@version})" <<
|
642
663
|
" " <<
|
643
|
-
" Play/Stop
|
644
|
-
"
|
645
|
-
" Next Page
|
646
|
-
" Sort
|
647
|
-
" Theme Toggle
|
648
|
-
" List Top
|
649
|
-
" Update
|
650
|
-
" Info
|
651
|
-
" Help
|
652
|
-
" Quit
|
653
|
-
"
|
654
|
-
"
|
655
|
-
"
|
656
|
-
"
|
657
|
-
" Reverse Skip - R " <<
|
664
|
+
" Play/Stop - X or Enter " <<
|
665
|
+
" Next/Prev - Up / Down " <<
|
666
|
+
" Next/Prev Page - Right / Left " <<
|
667
|
+
" Sort - S " <<
|
668
|
+
" Theme Toggle - T " <<
|
669
|
+
" List Top/End - L " <<
|
670
|
+
" Update - U " <<
|
671
|
+
" Info - I " <<
|
672
|
+
" Help - H " <<
|
673
|
+
" Quit - Q " <<
|
674
|
+
" mpg123 Control " <<
|
675
|
+
" Pause/Resume - P / SPACEBAR " <<
|
676
|
+
" Forward Skip - F " <<
|
677
|
+
" Reverse Skip - R " <<
|
658
678
|
" " <<
|
659
679
|
"Config: #{CONFIG} "
|
660
680
|
end
|
@@ -807,10 +827,17 @@ class InOurTime
|
|
807
827
|
end
|
808
828
|
|
809
829
|
def page_forward
|
830
|
+
return unless @line_count < @titles_count
|
810
831
|
@selected = @line_count
|
811
832
|
display_list :next_page
|
812
833
|
end
|
813
834
|
|
835
|
+
def page_back
|
836
|
+
@selected = @line_count - @page_height * 2
|
837
|
+
@selected = @selected < 0 ? 0 : @selected
|
838
|
+
list_selected @sorted_titles[@selected]
|
839
|
+
end
|
840
|
+
|
814
841
|
def previous
|
815
842
|
@selected -= 1 if @selected > 0
|
816
843
|
if @selected >= @line_count -
|
@@ -822,6 +849,7 @@ class InOurTime
|
|
822
849
|
end
|
823
850
|
|
824
851
|
def next
|
852
|
+
return if @selected >= (@titles_count - 1)
|
825
853
|
@selected += 1
|
826
854
|
if @selected <= @line_count - 1
|
827
855
|
redraw
|
@@ -858,10 +886,9 @@ class InOurTime
|
|
858
886
|
|
859
887
|
def do_action ip
|
860
888
|
case ip
|
861
|
-
when :pause, :forward, :rewind,
|
862
|
-
:
|
863
|
-
:
|
864
|
-
:update_key, :info, :help, :quit_key
|
889
|
+
when :pause, :forward, :rewind, :list_key, :page_forward, :page_back,
|
890
|
+
:previous, :next, :play, :sort_key, :theme_toggle, :update_key,
|
891
|
+
:info, :help, :quit_key
|
865
892
|
self.send ip
|
866
893
|
end
|
867
894
|
end
|
data/lib/iot/keyboard_events.rb
CHANGED
@@ -53,7 +53,7 @@ class KeyboardEvents
|
|
53
53
|
@event = :previous if str == "A"
|
54
54
|
@event = :next if str == "B"
|
55
55
|
@event = :page_forward if str == "C"
|
56
|
-
@event = :
|
56
|
+
@event = :page_back if str == "D"
|
57
57
|
@mode = :normal
|
58
58
|
else
|
59
59
|
break if @event == :no_event
|
@@ -75,7 +75,7 @@ class KeyboardEvents
|
|
75
75
|
when "u",'U'
|
76
76
|
@event = :update_key
|
77
77
|
when ' '
|
78
|
-
@event = :
|
78
|
+
@event = :pause
|
79
79
|
when "q",'Q', "\u0003", "\u0004"
|
80
80
|
@event = :quit_key
|
81
81
|
when 'p', 'P'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: in_our_time
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martyn Jago
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oga
|