in_our_time 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +0 -1
- data/VERSION +1 -1
- data/config.yml +30 -0
- data/lib/iot/iot.rb +111 -78
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a4d33efed1ec31350eb4993c5be89f4506d0200b
|
4
|
+
data.tar.gz: dcada7f6e8bdafe08258d7529785af1fdbbac2ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec29eeae228da573d068ef13d71ee7c05632fda8b99a331045afbc2cbf4950c23bd30112a0d4da05205645bec85c515f9177fd4bbbb347b44eacc0e6f194007c
|
7
|
+
data.tar.gz: ee0742b483f3ea7859ebbc36e72b48dd60743b6c87acc692628326021575642f2286728aa1563571ebcc022d15e96ba6e51e1b346700339cb04072a60c7f7321
|
data/.gitignore
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/config.yml
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
---
|
2
|
+
:last_update: 1474712963
|
3
|
+
:update_interval: 604800
|
4
|
+
:colour: true
|
5
|
+
:mpg_player: :afplay
|
6
|
+
:sort: :age
|
7
|
+
:show_count: true
|
8
|
+
:page_height: 20
|
9
|
+
:page_width: 80
|
10
|
+
:colour_theme: :light_theme
|
11
|
+
:light_theme:
|
12
|
+
:selection_colour:
|
13
|
+
:colour: :magenta
|
14
|
+
:background: :light_white
|
15
|
+
:count_sel_colour:
|
16
|
+
:colour: :cyan
|
17
|
+
:background: :light_white
|
18
|
+
:count_colour: :yellow
|
19
|
+
:text_colour: :default
|
20
|
+
:system_colour: :yellow
|
21
|
+
:dark_theme:
|
22
|
+
:selection_colour:
|
23
|
+
:colour: :light_yellow
|
24
|
+
:background: :light_black
|
25
|
+
:count_sel_colour:
|
26
|
+
:colur: :blue
|
27
|
+
:background: :yellow
|
28
|
+
:count_colour: :yellow
|
29
|
+
:text_colour: :default
|
30
|
+
:system_colour: :yellow
|
data/lib/iot/iot.rb
CHANGED
@@ -10,8 +10,12 @@ require 'oga'
|
|
10
10
|
class InOurTime
|
11
11
|
|
12
12
|
ROOT = File.expand_path '~/'
|
13
|
-
|
14
|
-
|
13
|
+
HERE = File.dirname(__FILE__)
|
14
|
+
CONFIG_DIR = '.in_our_time'
|
15
|
+
CONFIG_NAME = 'config.yml'
|
16
|
+
IN_OUR_TIME = File.join ROOT, CONFIG_DIR
|
17
|
+
DEFAULT_CONFIG = File.join HERE, '..','..',CONFIG_NAME
|
18
|
+
CONFIG = File.join IN_OUR_TIME,CONFIG_NAME
|
15
19
|
UPDATE_INTERVAL = 604800
|
16
20
|
AUDIO_DIRECTORY = 'audio'
|
17
21
|
RSS_DIRECTORY = 'rss'
|
@@ -20,7 +24,7 @@ class InOurTime
|
|
20
24
|
|
21
25
|
class KeyboardEvents
|
22
26
|
|
23
|
-
@
|
27
|
+
@mode = :normal
|
24
28
|
|
25
29
|
def reset
|
26
30
|
$stdin.flush
|
@@ -34,25 +38,25 @@ class InOurTime
|
|
34
38
|
system("stty -raw echo")
|
35
39
|
end
|
36
40
|
|
37
|
-
case @
|
38
|
-
when
|
41
|
+
case @mode
|
42
|
+
when :escape
|
39
43
|
if str == "["
|
40
|
-
@
|
44
|
+
@mode = :escape_2
|
41
45
|
else
|
42
|
-
@
|
46
|
+
@mode = :normal
|
43
47
|
end
|
44
48
|
|
45
|
-
when
|
49
|
+
when :escape_2
|
46
50
|
return :previous if str == "A"
|
47
51
|
return :next if str == "B"
|
48
52
|
return :page_forward if str == "C"
|
49
53
|
return :previous if str == "D"
|
50
|
-
@
|
54
|
+
@mode = :normal
|
51
55
|
end
|
52
56
|
|
53
57
|
case str
|
54
58
|
when "\e"
|
55
|
-
@
|
59
|
+
@mode = :escape
|
56
60
|
when "l",'L'
|
57
61
|
:list
|
58
62
|
when ' '
|
@@ -117,38 +121,12 @@ class InOurTime
|
|
117
121
|
now - @config[:update_interval] > @config[:last_update]
|
118
122
|
end
|
119
123
|
|
120
|
-
def
|
121
|
-
|
122
|
-
|
123
|
-
:colour => true,
|
124
|
-
:mpg_player => :afplay,
|
125
|
-
:sort => :age,
|
126
|
-
:show_count => true,
|
127
|
-
:page_height => PAGE_HEIGHT,
|
128
|
-
:page_width => PAGE_WIDTH,
|
129
|
-
:colour_theme => :light_theme,
|
130
|
-
:light_theme => {
|
131
|
-
:selection_colour => {:colour => :magenta, :background => :light_white},
|
132
|
-
:count_sel_colour => {:colour => :cyan, :background => :light_white},
|
133
|
-
:count_colour => :yellow,
|
134
|
-
:text_colour => :default,
|
135
|
-
:system_colour => :yellow
|
136
|
-
},
|
137
|
-
:dark_theme => {
|
138
|
-
:selection_colour => {:colour => :light_yellow, :background => :light_black},
|
139
|
-
:count_sel_colour => {:colur => :blue, :background => :yellow},
|
140
|
-
:count_colour => :yellow,
|
141
|
-
:text_colour => :default,
|
142
|
-
:system_colour => :yellow
|
143
|
-
}
|
144
|
-
}
|
124
|
+
def create_config
|
125
|
+
@config = YAML::load_file(DEFAULT_CONFIG)
|
126
|
+
save_config
|
145
127
|
end
|
146
128
|
|
147
|
-
def
|
148
|
-
unless File.exist? CONFIG
|
149
|
-
save_config new_config
|
150
|
-
end
|
151
|
-
@config = YAML::load_file(CONFIG)
|
129
|
+
def do_configs
|
152
130
|
@line_count = @config[:page_height]
|
153
131
|
theme = @config[:colour_theme]
|
154
132
|
@selection_colour = @config[theme][:selection_colour]
|
@@ -158,8 +136,14 @@ class InOurTime
|
|
158
136
|
@system_colour = @config[theme][:system_colour]
|
159
137
|
end
|
160
138
|
|
161
|
-
def
|
162
|
-
|
139
|
+
def load_config
|
140
|
+
create_config unless File.exist? CONFIG
|
141
|
+
@config = YAML::load_file(CONFIG)
|
142
|
+
do_configs
|
143
|
+
end
|
144
|
+
|
145
|
+
def save_config
|
146
|
+
File.open(CONFIG, 'w') { |f| f.write @config.to_yaml}
|
163
147
|
end
|
164
148
|
|
165
149
|
def rss_addresses
|
@@ -208,7 +192,7 @@ class InOurTime
|
|
208
192
|
end
|
209
193
|
program[:have_locally] = true
|
210
194
|
else
|
211
|
-
iot_puts '
|
195
|
+
iot_puts 'Download failed. Retrying...', @system_colour
|
212
196
|
end
|
213
197
|
end
|
214
198
|
|
@@ -226,7 +210,7 @@ class InOurTime
|
|
226
210
|
|
227
211
|
def check_remote
|
228
212
|
if update_remote?
|
229
|
-
iot_print "
|
213
|
+
iot_print "Checking rss feeds ", @system_colour
|
230
214
|
local_rss.length.times do |count|
|
231
215
|
iot_print '.', @system_colour
|
232
216
|
fetch_uri rss_addresses[count], rss_files[count]
|
@@ -240,7 +224,7 @@ class InOurTime
|
|
240
224
|
def uniquify_programs
|
241
225
|
@programs = @programs.uniq{|pr| pr[:title]}
|
242
226
|
unless @programs.uniq.length == @programs.length
|
243
|
-
|
227
|
+
print_error_and_delay "Error ensuring Programs unique!"
|
244
228
|
exit 1
|
245
229
|
end
|
246
230
|
end
|
@@ -314,12 +298,28 @@ class InOurTime
|
|
314
298
|
end
|
315
299
|
end
|
316
300
|
|
301
|
+
def clear
|
302
|
+
system 'clear' or system 'cls'
|
303
|
+
end
|
304
|
+
|
305
|
+
def print_error_and_delay message
|
306
|
+
iot_puts message, :red
|
307
|
+
sleep 2
|
308
|
+
end
|
309
|
+
|
317
310
|
def run_program prg
|
318
311
|
unless prg[:have_locally]
|
319
312
|
retries = 0
|
320
|
-
|
313
|
+
clear
|
314
|
+
iot_puts "Fetching #{prg[:title]}", @system_colour
|
321
315
|
10.times do
|
322
|
-
|
316
|
+
begin
|
317
|
+
res = Net::HTTP.get_response(URI.parse(prg[:link]))
|
318
|
+
rescue SocketError => e
|
319
|
+
print_error_and_delay "Error: Failed to connect to Internet! (#{e.class})"
|
320
|
+
@no_play = true
|
321
|
+
break
|
322
|
+
end
|
323
323
|
case res
|
324
324
|
when Net::HTTPFound
|
325
325
|
iot_puts 'redirecting...', @system_colour
|
@@ -328,22 +328,26 @@ class InOurTime
|
|
328
328
|
break if download_audio(prg, redirect)
|
329
329
|
sleep 2
|
330
330
|
else
|
331
|
-
|
332
|
-
|
331
|
+
print_error_and_delay 'Error! Failed to be redirected!'
|
332
|
+
@no_play = true
|
333
|
+
break
|
333
334
|
end
|
334
335
|
retries += 1
|
335
336
|
end
|
336
337
|
if retries >= 10
|
337
|
-
|
338
|
-
|
338
|
+
print_error_and_delay "Max retries downloading #{prg[:title]}"
|
339
|
+
@no_play = true
|
339
340
|
end
|
340
341
|
end
|
341
|
-
@
|
342
|
-
@
|
343
|
-
|
344
|
-
|
345
|
-
|
342
|
+
unless @no_play
|
343
|
+
@play = Thread.new do
|
344
|
+
@playing = prg[:title]
|
345
|
+
system player_cmd + ' ' +
|
346
|
+
filename_from_title(@playing)
|
347
|
+
@playing, @no_play = nil, nil
|
348
|
+
end
|
346
349
|
end
|
350
|
+
@no_play = nil
|
347
351
|
end
|
348
352
|
|
349
353
|
def print_playing_maybe
|
@@ -385,7 +389,7 @@ class InOurTime
|
|
385
389
|
iot_print "> " if(idx == @selected) unless @config[:colour]
|
386
390
|
show_count_maybe idx
|
387
391
|
iot_puts @sorted_titles[idx], @selection_colour if (idx == @selected)
|
388
|
-
iot_puts @sorted_titles[idx], @text_colour
|
392
|
+
iot_puts @sorted_titles[idx], @text_colour unless(idx == @selected)
|
389
393
|
end
|
390
394
|
end
|
391
395
|
else
|
@@ -401,7 +405,7 @@ class InOurTime
|
|
401
405
|
end
|
402
406
|
|
403
407
|
def display_list action
|
404
|
-
|
408
|
+
clear
|
405
409
|
case action
|
406
410
|
when :draw_page
|
407
411
|
draw_page
|
@@ -421,7 +425,7 @@ class InOurTime
|
|
421
425
|
|
422
426
|
def help
|
423
427
|
unless @help
|
424
|
-
|
428
|
+
clear
|
425
429
|
iot_puts " In Our Time Player (Help) "
|
426
430
|
iot_puts " "
|
427
431
|
iot_puts " Next - N (down arrow) "
|
@@ -436,7 +440,7 @@ class InOurTime
|
|
436
440
|
iot_puts " TL;DR "
|
437
441
|
iot_puts "Select: up/down arrows "
|
438
442
|
iot_puts "Play: enter "
|
439
|
-
iot_puts "Config:
|
443
|
+
iot_puts "Config: #{CONFIG} "
|
440
444
|
18.upto(@config[:page_height] - 1) {iot_puts ''}
|
441
445
|
print_playing_maybe
|
442
446
|
@help = true
|
@@ -495,28 +499,57 @@ class InOurTime
|
|
495
499
|
pages
|
496
500
|
end
|
497
501
|
|
502
|
+
def print_subtitle prg
|
503
|
+
clear
|
504
|
+
justify(prg[:subtitle].gsub(/\s+/, ' '))[0].map{|x| iot_puts x}
|
505
|
+
print_program_details prg
|
506
|
+
@info = 1
|
507
|
+
@page_count = 1
|
508
|
+
end
|
509
|
+
|
510
|
+
def print_program_details prg
|
511
|
+
iot_puts "\nDate Broadcast: #{prg[:date]}"
|
512
|
+
iot_puts "Duration: #{prg[:duration].to_i/60} mins"
|
513
|
+
iot_puts "Availability: " +
|
514
|
+
(prg[:have_locally] ? "Downloaded" : "Requires Download")
|
515
|
+
end
|
516
|
+
|
517
|
+
def print_info prg
|
518
|
+
info = prg[:summary].gsub(/\s+/, ' ')
|
519
|
+
clear
|
520
|
+
count = 1
|
521
|
+
justify(reformat(info))[0].each do |x|
|
522
|
+
if (count > (@page_count - 1) * @config[:page_height]) &&
|
523
|
+
(count <= @page_count * @config[:page_height])
|
524
|
+
iot_puts x
|
525
|
+
end
|
526
|
+
count += 1
|
527
|
+
end
|
528
|
+
if count <= @page_count * @config[:page_height] + 1
|
529
|
+
@info = justify(reformat(info))[1] == [] ? -1 : 2
|
530
|
+
else
|
531
|
+
@page_count += 1
|
532
|
+
end
|
533
|
+
end
|
534
|
+
|
535
|
+
def print_guests prg
|
536
|
+
info = prg[:summary].gsub(/\s+/, ' ')
|
537
|
+
clear
|
538
|
+
justify(reformat(info))[1].map{|x| iot_puts x}
|
539
|
+
@info = -1
|
540
|
+
end
|
541
|
+
|
498
542
|
def info
|
499
|
-
|
543
|
+
case @info
|
544
|
+
when nil
|
500
545
|
prg = select_program @sorted_titles[@selected]
|
501
|
-
|
502
|
-
|
503
|
-
iot_puts "\nDate Broadcast: #{prg[:date]}"
|
504
|
-
iot_puts "Duration: #{prg[:duration].to_i/60} mins"
|
505
|
-
iot_puts "Availability: " +
|
506
|
-
(prg[:have_locally] ? "Downloaded" : "Requires Download")
|
507
|
-
@info = 1
|
508
|
-
elsif @info == 1
|
546
|
+
print_subtitle prg
|
547
|
+
when 1
|
509
548
|
prg = select_program @sorted_titles[@selected]
|
510
|
-
|
511
|
-
|
512
|
-
justify(reformat(info))[0].map{|x| iot_puts x}
|
513
|
-
@info = justify(reformat(info))[1] == [] ? -1 : 2
|
514
|
-
elsif @info == 2
|
549
|
+
print_info prg
|
550
|
+
when 2
|
515
551
|
prg = select_program @sorted_titles[@selected]
|
516
|
-
|
517
|
-
system 'clear'
|
518
|
-
justify(reformat(info))[1].map{|x| iot_puts x}
|
519
|
-
@info = -1
|
552
|
+
print_guests prg
|
520
553
|
else
|
521
554
|
display_list :same_page
|
522
555
|
@info = nil
|
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.3.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
|
+
date: 2016-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oga
|
@@ -66,6 +66,7 @@ files:
|
|
66
66
|
- Rakefile
|
67
67
|
- VERSION
|
68
68
|
- bin/iot
|
69
|
+
- config.yml
|
69
70
|
- dark_theme.png
|
70
71
|
- in_our_time.gemspec
|
71
72
|
- lib/in_our_time.rb
|