in_our_time 0.3.1 → 0.3.2
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 +217 -110
- 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: cf0d05644a0136dc6303c04a2f5337f9f0120b40
|
4
|
+
data.tar.gz: 164058d08b3fa8ed5c712b93b907a209afb00790
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8090701ea1243be0213807a7b10540b6d6b1e5c5a28a3a73e069d4f99f62c560f40c74c05fb0064870b03b57b2163c8f77be5c650667bc6a0928a246249d0290
|
7
|
+
data.tar.gz: 070414c04c8b5722e226e41e0b179107ac97fd0defe7424a9b9a19077055c76dc30c4ce11082c3b569e0ee869b9a4375792609d5eb65dc9383ae36dc88e34d27
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.2
|
data/lib/iot/iot.rb
CHANGED
@@ -7,6 +7,7 @@ require 'fileutils'
|
|
7
7
|
require 'colorize'
|
8
8
|
require 'oga'
|
9
9
|
require 'pty'
|
10
|
+
require 'io/console'
|
10
11
|
|
11
12
|
class InOurTime
|
12
13
|
|
@@ -26,67 +27,107 @@ class InOurTime
|
|
26
27
|
|
27
28
|
class KeyboardEvents
|
28
29
|
|
29
|
-
|
30
|
+
def initialize
|
31
|
+
@mode = :normal
|
32
|
+
@event = :no_event
|
33
|
+
end
|
30
34
|
|
31
35
|
def reset
|
32
|
-
|
36
|
+
STDIN.flush
|
33
37
|
end
|
34
38
|
|
35
|
-
def
|
36
|
-
|
37
|
-
|
38
|
-
str = $stdin.getc
|
39
|
-
ensure
|
40
|
-
system("stty -raw echo")
|
41
|
-
end
|
39
|
+
def ke_events
|
40
|
+
sleep 0.001
|
41
|
+
end
|
42
42
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
43
|
+
def read
|
44
|
+
ret_val = @event
|
45
|
+
# reset
|
46
|
+
@event = :no_event
|
47
|
+
ret_val
|
48
|
+
end
|
49
|
+
|
50
|
+
def run
|
51
|
+
loop do
|
52
|
+
str = ''
|
53
|
+
loop do
|
54
|
+
str = STDIN.getch
|
55
|
+
if str == "\e"
|
56
|
+
@mode = :escape
|
57
|
+
else
|
58
|
+
case @mode
|
59
|
+
when :escape
|
60
|
+
if str == "["
|
61
|
+
@mode = :escape_2
|
62
|
+
else
|
63
|
+
@mode = :normal
|
64
|
+
end
|
65
|
+
when :escape_2
|
66
|
+
@event = :previous if str == "A"
|
67
|
+
@event = :next if str == "B"
|
68
|
+
@event = :page_forward if str == "C"
|
69
|
+
@event = :previous if str == "D"
|
70
|
+
@mode = :normal
|
71
|
+
|
72
|
+
else
|
73
|
+
break if @event == :no_event
|
74
|
+
end
|
75
|
+
end
|
76
|
+
ke_events
|
49
77
|
end
|
50
78
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
79
|
+
case str
|
80
|
+
when "\e"
|
81
|
+
@mode = :escape
|
82
|
+
when "l",'L'
|
83
|
+
@event = :list
|
84
|
+
when ' '
|
85
|
+
@event = :page_forward
|
86
|
+
when "q",'Q', "\u0003", "\u0004"
|
87
|
+
@event = :quit
|
88
|
+
when 'p', 'P'
|
89
|
+
@event = :pause
|
90
|
+
when 'f', 'F'
|
91
|
+
@event = :forward
|
92
|
+
when 'r', 'R'
|
93
|
+
@event = :rewind
|
94
|
+
when 's', 'S'
|
95
|
+
@event = :sort
|
96
|
+
when 'x', 'X', "\r"
|
97
|
+
@event = :play
|
98
|
+
when 'i', 'I'
|
99
|
+
@event = :info
|
100
|
+
when '?', 'h'
|
101
|
+
@event = :help
|
102
|
+
else
|
103
|
+
@event = :no_event
|
104
|
+
end
|
105
|
+
ke_events
|
57
106
|
end
|
107
|
+
end
|
108
|
+
end
|
58
109
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
when 'p', 'P'
|
69
|
-
:pause
|
70
|
-
when 'f', 'F'
|
71
|
-
:forward
|
72
|
-
when 'r', 'R'
|
73
|
-
:rewind
|
74
|
-
when 's', 'S'
|
75
|
-
:stop
|
76
|
-
when 'x', 'X', "\r"
|
77
|
-
:play
|
78
|
-
when 'i', 'I'
|
79
|
-
:info
|
80
|
-
when '?', 'h'
|
81
|
-
:help
|
82
|
-
else
|
83
|
-
:unknown
|
110
|
+
class Tic
|
111
|
+
def initialize
|
112
|
+
@flag = false
|
113
|
+
end
|
114
|
+
|
115
|
+
def run
|
116
|
+
loop do
|
117
|
+
sleep 1
|
118
|
+
@flag = true
|
84
119
|
end
|
85
120
|
end
|
121
|
+
|
122
|
+
def toc
|
123
|
+
ret_val, @flag = @flag, false
|
124
|
+
ret_val
|
125
|
+
end
|
86
126
|
end
|
87
127
|
|
88
128
|
def initialize
|
89
129
|
@programs, @selected = [], 0
|
130
|
+
@lock = Mutex.new
|
90
131
|
setup
|
91
132
|
load_config
|
92
133
|
load_version
|
@@ -99,18 +140,27 @@ class InOurTime
|
|
99
140
|
run
|
100
141
|
end
|
101
142
|
|
143
|
+
def do_events
|
144
|
+
sleep 0.003
|
145
|
+
end
|
146
|
+
|
147
|
+
def quit code = 0
|
148
|
+
system("stty -raw echo")
|
149
|
+
exit code
|
150
|
+
end
|
151
|
+
|
102
152
|
def version_display_wait
|
103
|
-
|
153
|
+
do_events while Time.now - @start_time < 1
|
104
154
|
end
|
105
155
|
|
106
156
|
def iot_print x, col = @text_colour
|
107
|
-
print x.colorize col if @config[:colour]
|
108
|
-
print x unless @config[:colour]
|
157
|
+
STDOUT.print x.colorize col if @config[:colour]
|
158
|
+
STDOUT.print x unless @config[:colour]
|
109
159
|
end
|
110
160
|
|
111
|
-
def iot_puts x, col = @text_colour
|
112
|
-
|
113
|
-
|
161
|
+
def iot_puts x = '', col = @text_colour
|
162
|
+
iot_print x, col
|
163
|
+
iot_print "\n\r"
|
114
164
|
end
|
115
165
|
|
116
166
|
def now
|
@@ -134,7 +184,7 @@ class InOurTime
|
|
134
184
|
clear
|
135
185
|
iot_print("Loading ", @system_colour) unless ARGV[0] == '-v' || ARGV[0] == '--version'
|
136
186
|
iot_puts "In Our Time Player (#{@version})", @system_colour
|
137
|
-
|
187
|
+
quit if ARGV[0] == '-v' || ARGV[0] == '--version'
|
138
188
|
end
|
139
189
|
|
140
190
|
def load_version
|
@@ -151,13 +201,21 @@ class InOurTime
|
|
151
201
|
end
|
152
202
|
|
153
203
|
def do_configs
|
154
|
-
@line_count = @config[:page_height]
|
155
204
|
theme = @config[:colour_theme]
|
156
205
|
@selection_colour = @config[theme][:selection_colour]
|
157
206
|
@count_sel_colour = @config[theme][:count_sel_colour]
|
158
207
|
@count_colour = @config[theme][:count_colour]
|
159
208
|
@text_colour = @config[theme][:text_colour]
|
160
209
|
@system_colour = @config[theme][:system_colour]
|
210
|
+
rows, cols = $stdout.winsize
|
211
|
+
while(rows % 10 != 0) ; rows -=1 ; end
|
212
|
+
while(cols % 10 != 0) ; cols -=1 ; end
|
213
|
+
rows = 10 if rows < 10
|
214
|
+
cols = 20 if cols < 20
|
215
|
+
@config[:page_height] = rows if(@config[:page_height] == :auto)
|
216
|
+
@config[:page_width] = cols if(@config[:page_width] == :auto)
|
217
|
+
@line_count = @config[:page_height]
|
218
|
+
@sort = @config[:sort]
|
161
219
|
end
|
162
220
|
|
163
221
|
def load_config
|
@@ -239,7 +297,7 @@ class InOurTime
|
|
239
297
|
iot_print '.', @system_colour
|
240
298
|
fetch_uri rss_addresses[count], rss_files[count]
|
241
299
|
end
|
242
|
-
iot_puts
|
300
|
+
iot_puts
|
243
301
|
@config[:last_update] = now
|
244
302
|
save_config
|
245
303
|
end
|
@@ -249,7 +307,7 @@ class InOurTime
|
|
249
307
|
@programs = @programs.uniq{|pr| pr[:title]}
|
250
308
|
unless @programs.uniq.length == @programs.length
|
251
309
|
print_error_and_delay "Error ensuring Programs unique!"
|
252
|
-
|
310
|
+
quit 1
|
253
311
|
end
|
254
312
|
end
|
255
313
|
|
@@ -290,7 +348,32 @@ class InOurTime
|
|
290
348
|
def sort_titles
|
291
349
|
@sorted_titles = []
|
292
350
|
@sorted_titles = @programs.collect { |pr| pr[:title] }
|
293
|
-
@sorted_titles.sort! unless @
|
351
|
+
@sorted_titles.sort! unless @sort == :age
|
352
|
+
end
|
353
|
+
|
354
|
+
def sort_selected title
|
355
|
+
@sorted_titles.each_with_index do |st, idx|
|
356
|
+
if st == title
|
357
|
+
selected = idx
|
358
|
+
idx += 1
|
359
|
+
while idx % @config[:page_height] != 0
|
360
|
+
idx += 1
|
361
|
+
end
|
362
|
+
return selected, idx
|
363
|
+
end
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
def sort
|
368
|
+
title = @sorted_titles[@selected]
|
369
|
+
@sort = @sort == :age ? :alphabet : :age
|
370
|
+
sort_titles
|
371
|
+
@selected, @line_count = sort_selected(title)
|
372
|
+
redraw
|
373
|
+
end
|
374
|
+
|
375
|
+
def redraw
|
376
|
+
display_list :same_page
|
294
377
|
end
|
295
378
|
|
296
379
|
def date
|
@@ -318,7 +401,9 @@ class InOurTime
|
|
318
401
|
end
|
319
402
|
|
320
403
|
def clear
|
321
|
-
|
404
|
+
@lock.synchronize do
|
405
|
+
system 'clear' or system 'cls'
|
406
|
+
end
|
322
407
|
end
|
323
408
|
|
324
409
|
def print_error_and_delay message
|
@@ -369,13 +454,13 @@ class InOurTime
|
|
369
454
|
end
|
370
455
|
|
371
456
|
def window_title title = ''
|
372
|
-
puts "\"\033]0;#{title}\007"
|
457
|
+
STDOUT.puts "\"\033]0;#{title}\007"
|
373
458
|
end
|
374
459
|
|
375
460
|
def reset
|
376
461
|
@pid, @playing, @paused = nil, nil, nil
|
377
462
|
window_title
|
378
|
-
|
463
|
+
redraw
|
379
464
|
end
|
380
465
|
|
381
466
|
def write_player str
|
@@ -390,16 +475,12 @@ class InOurTime
|
|
390
475
|
if control_play?
|
391
476
|
@paused = @paused ? false : true
|
392
477
|
write_player " "
|
393
|
-
|
478
|
+
redraw
|
394
479
|
end
|
395
480
|
end
|
396
481
|
|
397
482
|
def control_play?
|
398
|
-
|
399
|
-
if @playing
|
400
|
-
true
|
401
|
-
end
|
402
|
-
end
|
483
|
+
@playing && (@config[:mpg_player] == :mpg123)
|
403
484
|
end
|
404
485
|
|
405
486
|
def forward
|
@@ -495,7 +576,7 @@ class InOurTime
|
|
495
576
|
def load_help_maybe
|
496
577
|
if ARGV[0] == '-h' || ARGV[0] == '--help' || ARGV[0] == '-?'
|
497
578
|
help
|
498
|
-
|
579
|
+
quit
|
499
580
|
end
|
500
581
|
end
|
501
582
|
|
@@ -503,25 +584,26 @@ class InOurTime
|
|
503
584
|
unless @help
|
504
585
|
clear
|
505
586
|
iot_puts " In Our Time Player (#{@version})"
|
506
|
-
iot_puts " Next
|
507
|
-
iot_puts " Previous
|
508
|
-
iot_puts " Next Page
|
509
|
-
iot_puts " Play
|
510
|
-
iot_puts "
|
511
|
-
iot_puts " List
|
512
|
-
iot_puts " Info
|
513
|
-
iot_puts " Help
|
514
|
-
iot_puts " Quit
|
515
|
-
iot_puts
|
516
|
-
iot_puts "
|
517
|
-
iot_puts "
|
518
|
-
iot_puts "
|
519
|
-
iot_puts "
|
520
|
-
iot_puts
|
587
|
+
iot_puts " Next - N or Down Key ", @system_colour
|
588
|
+
iot_puts " Previous - P or Up Key ", @system_colour
|
589
|
+
iot_puts " Next Page - SPACE ", @system_colour
|
590
|
+
iot_puts " Play/Stop - X or Enter ", @system_colour
|
591
|
+
iot_puts " Sort - S ", @system_colour
|
592
|
+
iot_puts " List Top - L ", @system_colour
|
593
|
+
iot_puts " Info - I ", @system_colour
|
594
|
+
iot_puts " Help - H ", @system_colour
|
595
|
+
iot_puts " Quit - Q ", @system_colour
|
596
|
+
iot_puts
|
597
|
+
iot_puts " mpg123 Controls: ", @system_colour
|
598
|
+
iot_puts " Pause/Resume - P ", @system_colour
|
599
|
+
iot_puts " Forward Skip - F ", @system_colour
|
600
|
+
iot_puts " Reverse Skip - R ", @system_colour
|
601
|
+
iot_puts
|
602
|
+
iot_puts "Config: #{CONFIG}", @system_colour
|
521
603
|
print_playing_maybe
|
522
604
|
@help = true
|
523
605
|
else
|
524
|
-
|
606
|
+
redraw
|
525
607
|
@help = nil
|
526
608
|
end
|
527
609
|
end
|
@@ -627,33 +709,52 @@ class InOurTime
|
|
627
709
|
prg = select_program @sorted_titles[@selected]
|
628
710
|
print_guests prg
|
629
711
|
else
|
630
|
-
|
712
|
+
redraw
|
631
713
|
@info = nil
|
632
714
|
end
|
633
715
|
end
|
634
716
|
|
717
|
+
def check_process
|
718
|
+
if(@playing && @pid.is_a?(Fixnum))
|
719
|
+
begin
|
720
|
+
write_player( "\e")
|
721
|
+
if @pid.is_a? Fixnum
|
722
|
+
Process.kill 0, @pid
|
723
|
+
end
|
724
|
+
rescue Errno::ESRCH
|
725
|
+
reset
|
726
|
+
end
|
727
|
+
else
|
728
|
+
@pid = nil
|
729
|
+
end
|
730
|
+
end
|
731
|
+
|
635
732
|
def run
|
733
|
+
ip = ''
|
734
|
+
@tic = Tic.new
|
735
|
+
@tic_thread = Thread.new do
|
736
|
+
@tic.run
|
737
|
+
end
|
738
|
+
|
739
|
+
@key = KeyboardEvents.new
|
740
|
+
key_thread = Thread.new do
|
741
|
+
@key.run
|
742
|
+
end
|
743
|
+
# sleep 0.015
|
744
|
+
|
636
745
|
action = :unknown
|
637
|
-
|
638
|
-
key = KeyboardEvents.new
|
746
|
+
redraw
|
639
747
|
loop do
|
748
|
+
|
640
749
|
unless action == :unknown
|
641
|
-
key.reset
|
750
|
+
@key.reset
|
642
751
|
end
|
643
752
|
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
if @pid.is_a? Fixnum
|
650
|
-
Process.kill 0, @pid
|
651
|
-
end
|
652
|
-
rescue Errno::ESRCH
|
653
|
-
reset
|
654
|
-
end
|
655
|
-
else
|
656
|
-
@pid = nil
|
753
|
+
loop do
|
754
|
+
ip = @key.read
|
755
|
+
break unless ip == :no_event
|
756
|
+
check_process if @tic.toc
|
757
|
+
do_events
|
657
758
|
end
|
658
759
|
|
659
760
|
@info = nil unless ip == :info
|
@@ -678,33 +779,39 @@ class InOurTime
|
|
678
779
|
@selected -= 1 if @selected > 0
|
679
780
|
if @selected >= @line_count -
|
680
781
|
@config[:page_height]
|
681
|
-
|
782
|
+
redraw
|
682
783
|
else
|
683
784
|
display_list :previous_page
|
684
785
|
end
|
685
786
|
when :next
|
686
787
|
@selected += 1
|
687
788
|
if @selected <= @line_count - 1
|
688
|
-
|
789
|
+
redraw
|
689
790
|
else
|
690
791
|
display_list :next_page
|
691
792
|
end
|
692
793
|
when :play
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
794
|
+
if @playing
|
795
|
+
kill_audio
|
796
|
+
@playing = nil
|
797
|
+
else
|
798
|
+
kill_audio
|
799
|
+
title = @sorted_titles[@selected]
|
800
|
+
pr = select_program title
|
801
|
+
run_program pr
|
802
|
+
redraw
|
803
|
+
end
|
804
|
+
when :sort
|
805
|
+
sort
|
700
806
|
when :info
|
701
807
|
info
|
702
808
|
when :help
|
703
809
|
help
|
704
810
|
when :quit
|
705
811
|
kill_audio
|
706
|
-
|
812
|
+
quit
|
707
813
|
end
|
814
|
+
do_events
|
708
815
|
end
|
709
816
|
end
|
710
817
|
end
|
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.3.
|
4
|
+
version: 0.3.2
|
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-10-
|
11
|
+
date: 2016-10-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oga
|