in_our_time 0.2.1 → 0.3.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/.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
|