quran-audio 0.3.2 → 0.3.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b9d4aa2977f958be7f3d1544b0cefa0141a464886fbcc6681390735b1af33083
4
- data.tar.gz: 467c4a4f34baf890df84fce649122fb3fca2bb483c399ee831fdb7e699b43b9b
3
+ metadata.gz: 709a79351be5539a80a26a13ac39b41336b6a084cc14e56d476e5cd203090ab6
4
+ data.tar.gz: 7a0e5403541389a206d28f98bf53756a33ef672ad2bbc7162378efd59080642e
5
5
  SHA512:
6
- metadata.gz: 00c1fef420cf3fb24b2130c04da9b8c8032f8cb101089d4f430fb1a3029e869d0359aa20e7e650f9c2b0ce3f52c09e28399710bb62cb33a246a5c99efec1dab5
7
- data.tar.gz: 0c7ab62d560a4b775edfdbb596cffffa8163de8137133b84e826fd647f7654316d659490cc11c339715a8ac11e0f1f11703c1a1d5010606d23fdc873e1dca5de
6
+ metadata.gz: 655fda01723b31bd0d125f886a1b4695d6f16f8ae6bc5b3fac69c12019954c059f1a0fad0987e4d417e689d818400696a11dfa4431002cbcf4d9151f3c41640e
7
+ data.tar.gz: ede8a0dee97e2c33ddb78314bf4004ab8e785cf6b761cb7b9aea2c1ce03e30d7bbc88b7c0dfc0eeca96c5ac23b013f767b062f415eb3d2ed6608da600fd76554
data/bin/quran-audio CHANGED
@@ -1,17 +1,28 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- libexec = File.realpath File.join(__dir__, "..", "libexec", "quran-audio")
5
- case ARGV[0]
6
- when "pull"
7
- Process.spawn File.join(libexec, "pull"), *ARGV[1..]
4
+ def wait
8
5
  Process.wait
9
- when "ls"
10
- Process.spawn File.join(libexec, "ls"), *ARGV[1..]
11
- Process.wait
12
- else
13
- warn "Usage: quran-audio [COMMAND] [OPTIONS]\n\n" \
14
- "Commands:\n" \
15
- " pull Pull MP3 files from everyayah.com\n" \
16
- " ls List reciters\n" \
6
+ rescue Interrupt
7
+ retry
8
+ end
9
+
10
+ def main(argv)
11
+ libexec = File.realpath File.join(__dir__, "..", "libexec", "quran-audio")
12
+ case argv[0]
13
+ when "pull"
14
+ Process.spawn File.join(libexec, "pull"), *ARGV[1..]
15
+ Process.wait
16
+ when "ls"
17
+ Process.spawn File.join(libexec, "ls"), *ARGV[1..]
18
+ Process.wait
19
+ else
20
+ warn "Usage: quran-audio [COMMAND] [OPTIONS]\n\n" \
21
+ "Commands:\n" \
22
+ " pull Pull MP3 files from everyayah.com\n" \
23
+ " ls List reciters\n" \
24
+ end
25
+ rescue Interrupt
26
+ wait
17
27
  end
28
+ main(ARGV)
@@ -16,6 +16,14 @@ module Quran::Audio
16
16
 
17
17
  def run
18
18
  summary(recitations[recitation])
19
+ start(surahs)
20
+ end
21
+
22
+ private
23
+
24
+ attr_reader :http
25
+
26
+ def start(surahs)
19
27
  surahs.each do |surah|
20
28
  1.upto(sizeof[surah]) do |ayah|
21
29
  mp3 = MP3.new(recitation:, surah:, ayah:, bitrate:)
@@ -27,20 +35,16 @@ module Quran::Audio
27
35
  end
28
36
  end
29
37
 
30
- private
31
-
32
- attr_reader :http
33
-
34
38
  def pull(mp3, delay, interrupt: false)
35
39
  res = http.get(mp3.remote_path)
36
40
  write(mp3, res, interrupt:)
37
41
  sleep(delay)
38
42
  rescue Interrupt
39
- line.end.rewind.print("Wait for a graceful exit").end
43
+ line.end.rewind.print("SIGINT: exiting cleanly, please wait").end
40
44
  pull(mp3, delay, interrupt: true)
41
45
  rescue SocketError, SystemCallError, Net::OpenTimeout => e
42
46
  line.end.rewind.print("#{e.class}: retry")
43
- interrupt ? throw(:interrupt, true) : pull(mp3, delay)
47
+ interrupt ? abort! : pull(mp3, delay)
44
48
  end
45
49
 
46
50
  def write(mp3, res, interrupt:)
@@ -48,9 +52,10 @@ module Quran::Audio
48
52
  when Net::HTTPOK
49
53
  mkdir_p File.dirname(mp3.local_path)
50
54
  File.binwrite(mp3.local_path, res.body)
51
- throw(:interrupt, true) if interrupt
55
+ abort! if interrupt
52
56
  else
53
- puts "error #{res.body}"
57
+ line.end.print("error: unexpected response (#{res.class})")
58
+ abort!
54
59
  end
55
60
  end
56
61
 
@@ -58,7 +63,7 @@ module Quran::Audio
58
63
  line
59
64
  .rewind
60
65
  .print("Recitation".ljust(12), r.name).end
61
- .print("Directory".ljust(12), format(r.dest_dir, sharedir: dir.sharedir))
66
+ .print("Directory".ljust(12), format(r.destdir, sharedir: dir.sharedir))
62
67
  .end.end
63
68
  end
64
69
 
@@ -69,5 +74,9 @@ module Quran::Audio
69
74
  def recitations
70
75
  @recitations ||= Ryo.from_json(path: File.join(dir.datadir, "recitations.json"))
71
76
  end
77
+
78
+ def abort!
79
+ throw(:abort, 1)
80
+ end
72
81
  end
73
82
  end
@@ -22,7 +22,7 @@ module Quran::Audio
22
22
  # Returns the path to an MP3 file on a remote HTTP server
23
23
  def remote_path
24
24
  filename = [surah.to_s.rjust(3, "0"), ayah.to_s.rjust(3, "0"), ".mp3"].join
25
- File.join format(recitation.remote_path, bitrate:), filename
25
+ File.join format(recitation.path, bitrate:), filename
26
26
  end
27
27
 
28
28
  ##
@@ -30,7 +30,7 @@ module Quran::Audio
30
30
  # Returns the path to an MP3 file on disk
31
31
  def local_path
32
32
  File.join(
33
- format(recitation.dest_dir, sharedir:),
33
+ format(recitation.destdir, sharedir:),
34
34
  surah.to_s,
35
35
  "#{ayah}.mp3"
36
36
  )
@@ -7,5 +7,8 @@ def main(argv)
7
7
  .new(argv)
8
8
  .run
9
9
  end
10
- interrupt = catch(:interrupt) { main(ARGV) }
11
- exit(1) if interrupt
10
+ excode = catch(:abort) {
11
+ main(ARGV)
12
+ 0
13
+ }
14
+ exit excode
@@ -1 +1 @@
1
- v0.3.2
1
+ v0.3.3
@@ -4,23 +4,23 @@
4
4
  "origin": "Kuwait",
5
5
  "available_bitrates": [128, 64],
6
6
  "default_bitrate": 128,
7
- "remote_path": "/data/Alafasy_%{bitrate}kbps/",
8
- "dest_dir": "%{sharedir}/mp3/alafasy/"
7
+ "path": "/data/Alafasy_%{bitrate}kbps/",
8
+ "destdir": "%{sharedir}/mp3/alafasy/"
9
9
  },
10
10
  "alajmi": {
11
11
  "name": "Ahmad bin Ali Al-Ajmi",
12
12
  "origin": "Saudi Arabia",
13
13
  "available_bitrates": [128],
14
14
  "default_bitrate": 128,
15
- "remote_path": "/data/ahmed_ibn_ali_al_ajamy_%{bitrate}kbps/",
16
- "dest_dir": "%{sharedir}/mp3/alajmi/"
15
+ "path": "/data/ahmed_ibn_ali_al_ajamy_%{bitrate}kbps/",
16
+ "destdir": "%{sharedir}/mp3/alajmi/"
17
17
  },
18
18
  "yassin": {
19
19
  "name": "Sahl Yassin",
20
20
  "origin": "Saudi Arabia",
21
21
  "available_bitrates": [128],
22
22
  "default_bitrate": 128,
23
- "remote_path": "/data/Sahl_Yassin_%{bitrate}kbps/",
24
- "dest_dir": "%{sharedir}/mp3/yassin/"
23
+ "path": "/data/Sahl_Yassin_%{bitrate}kbps/",
24
+ "destdir": "%{sharedir}/mp3/yassin/"
25
25
  }
26
26
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quran-audio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - '0x1eef'