in_our_time 0.6.0 → 0.7.0
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.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/lib/iot/iot.rb +130 -102
- data/lib/iot/keyboard_events.rb +13 -13
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 956e4e9773aad8f71897640c04d397bd566f512d
|
4
|
+
data.tar.gz: 39f0098a0bb42d7f4a16d04fb518f68bfb2fb61a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 62af2485c95313e901ac884a6eb111a8cc2d407aafa64a1feda55e27c48ac85c1c3183781d4cc0d8c5f672aeeddf11a6bffc693aaafbde34d957e21d04605d30
|
7
|
+
data.tar.gz: b6bb8e7f15b7f92ce50fe922fc04f418c7058506dbd78b09ce069bd1b8ad77b13a18064dbdf1dbc578df45e379c947f849ae1d294271e28bcd9f0acaa17980cd
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.7.0
|
data/lib/iot/iot.rb
CHANGED
@@ -74,13 +74,14 @@ class InOurTime
|
|
74
74
|
end
|
75
75
|
|
76
76
|
def quit code = 0
|
77
|
+
@key.kill if @key
|
78
|
+
@tic.kill if @tic
|
79
|
+
sleep 0.5
|
77
80
|
STDIN.echo = true
|
78
81
|
STDIN.cooked!
|
79
|
-
|
82
|
+
puts "\n\n#{@error_msg}" if @error_msg
|
80
83
|
puts 'Quitting...'
|
81
|
-
|
82
|
-
@key.kill
|
83
|
-
@tic.kill
|
84
|
+
sleep 0.5
|
84
85
|
exit code
|
85
86
|
end
|
86
87
|
|
@@ -89,9 +90,15 @@ class InOurTime
|
|
89
90
|
do_events while Time.now - @start_time < 1.5
|
90
91
|
end
|
91
92
|
|
92
|
-
def iot_print x, col = @text_colour
|
93
|
-
|
94
|
-
|
93
|
+
def iot_print x, col = @text_colour, now = false
|
94
|
+
content = ''
|
95
|
+
content << x.colorize(col) if @config[:colour]
|
96
|
+
content << x unless @config[:colour]
|
97
|
+
unless now
|
98
|
+
@content << content
|
99
|
+
else
|
100
|
+
$stdout << content
|
101
|
+
end
|
95
102
|
end
|
96
103
|
|
97
104
|
def iot_puts x = '', col = @text_colour
|
@@ -281,8 +288,9 @@ class InOurTime
|
|
281
288
|
case res
|
282
289
|
when Net::HTTPOK
|
283
290
|
File.open(filename_from_title(program[:title]) , 'wb') do |f|
|
284
|
-
|
291
|
+
iot_puts "writing #{File.basename(filename_from_title(program[:title]))}", @system_colour
|
285
292
|
render
|
293
|
+
sleep 0.2
|
286
294
|
f.print(res.body)
|
287
295
|
iot_puts " written.", @system_colour
|
288
296
|
render
|
@@ -306,10 +314,10 @@ class InOurTime
|
|
306
314
|
|
307
315
|
def update
|
308
316
|
clear_content
|
309
|
-
|
317
|
+
clear
|
318
|
+
iot_print "Checking rss feeds ", @system_colour, :now
|
310
319
|
local_rss.length.times do |count|
|
311
|
-
iot_print '.', @system_colour
|
312
|
-
render
|
320
|
+
iot_print '.', @system_colour, :now
|
313
321
|
fetch_uri rss_addresses[count], rss_files[count]
|
314
322
|
end
|
315
323
|
@config[:last_update] = now
|
@@ -384,20 +392,28 @@ class InOurTime
|
|
384
392
|
@sorted_titles.sort_by!(&:downcase) unless @sort == :age
|
385
393
|
end
|
386
394
|
|
395
|
+
def get_line_count idx
|
396
|
+
idx += 1
|
397
|
+
while idx % @page_height != 0
|
398
|
+
idx += 1
|
399
|
+
end
|
400
|
+
idx
|
401
|
+
end
|
402
|
+
|
387
403
|
def sort_selected title
|
388
|
-
@sorted_titles.each_with_index do |st,
|
404
|
+
@sorted_titles.each_with_index do |st, sel|
|
389
405
|
if st == title
|
390
|
-
|
391
|
-
idx += 1
|
392
|
-
while idx % @page_height != 0
|
393
|
-
idx += 1
|
394
|
-
end
|
395
|
-
return selected, idx
|
406
|
+
return sel, get_line_count(sel)
|
396
407
|
end
|
397
408
|
end
|
398
409
|
end
|
399
410
|
|
400
|
-
def
|
411
|
+
def draw_selected
|
412
|
+
@line_count = get_line_count(@selected)
|
413
|
+
redraw
|
414
|
+
end
|
415
|
+
|
416
|
+
def draw_by_title title
|
401
417
|
@selected, @line_count = sort_selected(title)
|
402
418
|
redraw
|
403
419
|
end
|
@@ -405,7 +421,7 @@ class InOurTime
|
|
405
421
|
def list_key
|
406
422
|
title = @playing ? @playing : (@sorted_titles[@last_selected || 0])
|
407
423
|
if top_or_end?
|
408
|
-
|
424
|
+
draw_by_title title
|
409
425
|
else
|
410
426
|
@last_selected = @selected
|
411
427
|
list_top_or_end
|
@@ -427,20 +443,20 @@ class InOurTime
|
|
427
443
|
|
428
444
|
def list_top
|
429
445
|
@last_selected = @selected
|
430
|
-
|
431
|
-
|
446
|
+
@selected = 0
|
447
|
+
draw_selected
|
432
448
|
end
|
433
449
|
|
434
450
|
def list_end
|
435
451
|
@last_selected = @selected
|
436
|
-
|
437
|
-
|
452
|
+
@selected = @titles_count - 1
|
453
|
+
draw_selected
|
438
454
|
end
|
439
455
|
|
440
456
|
def sort_key
|
441
457
|
title = @sorted_titles[@selected]
|
442
458
|
toggle_sort
|
443
|
-
|
459
|
+
draw_by_title title
|
444
460
|
end
|
445
461
|
|
446
462
|
def toggle_sort
|
@@ -451,7 +467,8 @@ class InOurTime
|
|
451
467
|
end
|
452
468
|
|
453
469
|
def redraw
|
454
|
-
|
470
|
+
@line_count -= @page_height
|
471
|
+
draw_page
|
455
472
|
end
|
456
473
|
|
457
474
|
def date
|
@@ -473,11 +490,16 @@ class InOurTime
|
|
473
490
|
@config[:mpg_player] == :mpg123
|
474
491
|
end
|
475
492
|
|
493
|
+
def get_player
|
494
|
+
return 'afplay' if @config[:mpg_player] == :afplay
|
495
|
+
@config[:mpg_player].to_s
|
496
|
+
end
|
497
|
+
|
476
498
|
def player_cmd
|
477
499
|
if use_mpg123?
|
478
500
|
"mpg123 --remote-err -Cqk#{pre_delay}"
|
479
501
|
else
|
480
|
-
|
502
|
+
get_player
|
481
503
|
end
|
482
504
|
end
|
483
505
|
|
@@ -525,7 +547,7 @@ class InOurTime
|
|
525
547
|
@key = KeyboardEvents.new
|
526
548
|
begin
|
527
549
|
if choice.to_i > 0 && choice.to_i < 6
|
528
|
-
|
550
|
+
draw_by_title(results[choice.to_i - 1][0])
|
529
551
|
return
|
530
552
|
end
|
531
553
|
end
|
@@ -568,48 +590,73 @@ class InOurTime
|
|
568
590
|
display_search_choice results, choice
|
569
591
|
end
|
570
592
|
|
571
|
-
def
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
end
|
586
|
-
case res
|
587
|
-
when Net::HTTPFound
|
588
|
-
iot_puts 'redirecting...', @system_colour
|
589
|
-
render
|
590
|
-
@doc = Oga.parse_xml(res.body)
|
591
|
-
redirect = @doc.css("body p a").text
|
592
|
-
break if download_audio(prg, redirect)
|
593
|
-
sleep 2
|
594
|
-
else
|
595
|
-
print_error_and_delay 'Error! Failed to be redirected!'
|
596
|
-
render
|
597
|
-
@no_play = true
|
598
|
-
end
|
599
|
-
retries += 1
|
593
|
+
def download prg
|
594
|
+
return if prg[:have_locally]
|
595
|
+
retries = 0
|
596
|
+
clear_content
|
597
|
+
iot_puts "Fetching #{prg[:title]}", @system_colour
|
598
|
+
render
|
599
|
+
10.times do
|
600
|
+
begin
|
601
|
+
res = Net::HTTP.get_response(URI.parse(prg[:link]))
|
602
|
+
rescue SocketError => e
|
603
|
+
print_error_and_delay "Error: Failed to connect to Internet! (#{e.class})"
|
604
|
+
render
|
605
|
+
@no_play = true
|
606
|
+
break
|
600
607
|
end
|
601
|
-
|
602
|
-
|
608
|
+
case res
|
609
|
+
when Net::HTTPFound
|
610
|
+
iot_puts 'redirecting...', @system_colour
|
611
|
+
render
|
612
|
+
@doc = Oga.parse_xml(res.body)
|
613
|
+
redirect = @doc.css("body p a").text
|
614
|
+
break if download_audio(prg, redirect)
|
615
|
+
sleep 2
|
616
|
+
else
|
617
|
+
print_error_and_delay 'Error! Failed to be redirected!'
|
603
618
|
render
|
604
619
|
@no_play = true
|
605
620
|
end
|
621
|
+
retries += 1
|
606
622
|
end
|
623
|
+
if retries >= 10
|
624
|
+
print_error_and_delay "Max retries downloading #{prg[:title]}"
|
625
|
+
render
|
626
|
+
@no_play = true
|
627
|
+
end
|
628
|
+
end
|
629
|
+
|
630
|
+
# Cross-platform way of finding an executable in the $PATH.
|
631
|
+
#
|
632
|
+
# which('ruby') #=> /usr/bin/ruby
|
633
|
+
|
634
|
+
def which(cmd)
|
635
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
636
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
637
|
+
exts.each { |ext|
|
638
|
+
exe = File.join(path, "#{cmd}#{ext}")
|
639
|
+
return exe if File.executable?(exe) && !File.directory?(exe)
|
640
|
+
}
|
641
|
+
end
|
642
|
+
return nil
|
643
|
+
end
|
644
|
+
|
645
|
+
def unknown_player cmd
|
646
|
+
@error_msg = "Error: Unknown MPG Player: #{cmd}\r"
|
647
|
+
quit 1
|
648
|
+
end
|
649
|
+
|
650
|
+
def run_program prg
|
651
|
+
download prg
|
607
652
|
unless @no_play
|
608
653
|
@playing = prg[:title]
|
654
|
+
player = player_cmd.split(' ').first
|
655
|
+
unknown_player(player) unless which(player)
|
609
656
|
window_title prg[:title]
|
610
|
-
|
657
|
+
cmd = player_cmd + ' ' + filename_from_title(@playing)
|
611
658
|
@messages = []
|
612
|
-
@p_out, @p_in, @pid = PTY.spawn(
|
659
|
+
@p_out, @p_in, @pid = PTY.spawn(cmd)
|
613
660
|
end
|
614
661
|
@no_play = nil
|
615
662
|
end
|
@@ -716,24 +763,6 @@ class InOurTime
|
|
716
763
|
render
|
717
764
|
end
|
718
765
|
|
719
|
-
def display_list action
|
720
|
-
case action
|
721
|
-
when :next_page
|
722
|
-
draw_page
|
723
|
-
when :previous_page
|
724
|
-
if @line_count > 0
|
725
|
-
@line_count -= (@page_height * 2)
|
726
|
-
else
|
727
|
-
@line_count = @titles_count
|
728
|
-
@selected = @line_count
|
729
|
-
end
|
730
|
-
draw_page
|
731
|
-
when :same_page
|
732
|
-
@line_count -= @page_height
|
733
|
-
draw_page
|
734
|
-
end
|
735
|
-
end
|
736
|
-
|
737
766
|
def help_option?
|
738
767
|
ARGV[0] == '-h' || ARGV[0] == '--help' || ARGV[0] == '-?'
|
739
768
|
end
|
@@ -757,6 +786,7 @@ class InOurTime
|
|
757
786
|
" Theme Toggle - T " <<
|
758
787
|
" List Top/End - L " <<
|
759
788
|
" Update - U " <<
|
789
|
+
" Download - D " <<
|
760
790
|
" Info - I " <<
|
761
791
|
" Help - H " <<
|
762
792
|
" Quit - Q " <<
|
@@ -770,11 +800,11 @@ class InOurTime
|
|
770
800
|
|
771
801
|
def help_partial x,y; help_screen[x..y] end
|
772
802
|
def help_title; help_partial(0, 1) end
|
773
|
-
def help_main; help_partial(2,
|
774
|
-
def help_cfg; help_partial(
|
803
|
+
def help_main; help_partial(2, 13) end
|
804
|
+
def help_cfg; help_partial(18, -1) end
|
775
805
|
|
776
806
|
def help_mpg
|
777
|
-
scr = help_partial(
|
807
|
+
scr = help_partial(14,17)
|
778
808
|
scr[0].rstrip! << ' (enabled) ' if use_mpg123?
|
779
809
|
scr[0].rstrip! << ' (disabled) ' unless use_mpg123?
|
780
810
|
scr
|
@@ -954,44 +984,36 @@ class InOurTime
|
|
954
984
|
def page_forward
|
955
985
|
return unless @line_count < @titles_count
|
956
986
|
@selected = @line_count
|
957
|
-
|
987
|
+
draw_selected
|
958
988
|
end
|
959
989
|
|
960
990
|
def page_back
|
961
991
|
@selected = @line_count - @page_height * 2
|
962
992
|
@selected = @selected < 0 ? 0 : @selected
|
963
|
-
|
993
|
+
draw_selected
|
964
994
|
end
|
965
995
|
|
966
996
|
def previous
|
967
|
-
|
968
|
-
|
969
|
-
|
970
|
-
redraw
|
971
|
-
else
|
972
|
-
display_list :previous_page
|
973
|
-
end
|
997
|
+
return if @selected <= 0
|
998
|
+
@selected -= 1
|
999
|
+
draw_selected
|
974
1000
|
end
|
975
1001
|
|
976
1002
|
def next
|
977
1003
|
return if @selected >= (@titles_count - 1)
|
978
1004
|
@selected += 1
|
979
|
-
|
980
|
-
redraw
|
981
|
-
else
|
982
|
-
display_list :next_page
|
983
|
-
end
|
1005
|
+
draw_selected
|
984
1006
|
end
|
985
1007
|
|
986
1008
|
def play
|
987
|
-
if @playing
|
988
|
-
kill_audio
|
989
|
-
else
|
1009
|
+
if(@playing != @sorted_titles[@selected]) || (! @playing)
|
990
1010
|
kill_audio
|
991
1011
|
title = @sorted_titles[@selected]
|
992
1012
|
pr = select_program title
|
993
1013
|
run_program pr
|
994
1014
|
redraw
|
1015
|
+
else
|
1016
|
+
kill_audio
|
995
1017
|
end
|
996
1018
|
end
|
997
1019
|
|
@@ -999,9 +1021,15 @@ class InOurTime
|
|
999
1021
|
update
|
1000
1022
|
parse_rss
|
1001
1023
|
sort_titles
|
1002
|
-
@line_count = 0
|
1003
1024
|
@selected = 0
|
1004
|
-
|
1025
|
+
draw_selected
|
1026
|
+
end
|
1027
|
+
|
1028
|
+
def download_key
|
1029
|
+
title = @sorted_titles[@selected]
|
1030
|
+
pr = select_program title
|
1031
|
+
download pr
|
1032
|
+
draw_selected
|
1005
1033
|
end
|
1006
1034
|
|
1007
1035
|
def quit_key
|
@@ -1013,7 +1041,7 @@ class InOurTime
|
|
1013
1041
|
case ip
|
1014
1042
|
when :pause, :forward, :rewind, :list_key, :page_forward, :page_back,
|
1015
1043
|
:previous, :next, :play, :sort_key, :theme_toggle, :update_key,
|
1016
|
-
:info, :help, :quit_key, :search
|
1044
|
+
:info, :help, :quit_key, :search, :download_key
|
1017
1045
|
self.send ip
|
1018
1046
|
end
|
1019
1047
|
end
|
data/lib/iot/keyboard_events.rb
CHANGED
@@ -72,30 +72,30 @@ class KeyboardEvents
|
|
72
72
|
when "\e"
|
73
73
|
@mode = :escape
|
74
74
|
:no_event
|
75
|
-
when
|
75
|
+
when 'd', 'D'
|
76
|
+
:download_key
|
77
|
+
when 'f', 'F'
|
78
|
+
:forward
|
79
|
+
when 'h', 'H'
|
80
|
+
:help
|
81
|
+
when 'i', 'I'
|
82
|
+
:info
|
83
|
+
when 'l', 'L'
|
76
84
|
:list_key
|
77
|
-
when
|
78
|
-
:update_key
|
79
|
-
when ' '
|
85
|
+
when 'p', 'P', ' '
|
80
86
|
:pause
|
81
|
-
when
|
87
|
+
when 'q', 'Q', "\u0003", "\u0004"
|
82
88
|
:quit_key
|
83
|
-
when 'p', 'P'
|
84
|
-
:pause
|
85
|
-
when 'f', 'F'
|
86
|
-
:forward
|
87
89
|
when 'r', 'R'
|
88
90
|
:rewind
|
89
91
|
when 's', 'S'
|
90
92
|
:sort_key
|
91
93
|
when 't', 'T'
|
92
94
|
:theme_toggle
|
95
|
+
when 'u', 'U'
|
96
|
+
:update_key
|
93
97
|
when 'x', 'X', "\r"
|
94
98
|
:play
|
95
|
-
when 'i', 'I'
|
96
|
-
:info
|
97
|
-
when 'h', 'H'
|
98
|
-
:help
|
99
99
|
when '?'
|
100
100
|
:search
|
101
101
|
else
|