quran-audio 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 709a79351be5539a80a26a13ac39b41336b6a084cc14e56d476e5cd203090ab6
4
- data.tar.gz: 7a0e5403541389a206d28f98bf53756a33ef672ad2bbc7162378efd59080642e
3
+ metadata.gz: e4f6bb534d549b8f15007767b977d02ba66bb99b29230d208cd025beef58156e
4
+ data.tar.gz: fcf08060b5f19fc4404cf8620f3c4acde6e936f6080ecc5ee36f266eaa0a4f11
5
5
  SHA512:
6
- metadata.gz: 655fda01723b31bd0d125f886a1b4695d6f16f8ae6bc5b3fac69c12019954c059f1a0fad0987e4d417e689d818400696a11dfa4431002cbcf4d9151f3c41640e
7
- data.tar.gz: ede8a0dee97e2c33ddb78314bf4004ab8e785cf6b761cb7b9aea2c1ce03e30d7bbc88b7c0dfc0eeca96c5ac23b013f767b062f415eb3d2ed6608da600fd76554
6
+ metadata.gz: b470c6fc24757c9f77702dd1516a2ea13b853169cd8838515c911d8d9ed2c4cebccb7c502fec64df657badebb82f5f1870e3dcecce314e9e1c9e5ebf4ae69bbc
7
+ data.tar.gz: 0ade0f5665a4e42b2811ce6582a62ab4162954eccceee2084a8eccc2a98d59b2accae844a113fa1a4c1b71f03248291be66e0e42efc99e3c3d48b6eebb5ee5b9
data/README.md CHANGED
@@ -1,16 +1,23 @@
1
+ <p align="center">
2
+ الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِي
3
+ </p>
4
+
1
5
  ## About
2
6
 
3
7
  quran-audio is a command-line utility that
4
8
  can download recitations of The Noble Quran from
5
- [everyayah.com](https://everyayah.com).
6
- The recitations are provided as MP3 files
7
- (with one MP3 file per ayah).
9
+ [al-quran-audio.reflectslight.io](https://al-quran-audio.reflectslight.io).
10
+ The recitations are provided in the MP3 format with
11
+ one MP3 file per ayah and a *minimum* bitrate of
12
+ 128kbps.
8
13
 
9
- ## ~/.local/share/quran-audio/
14
+ ## share/
10
15
 
11
- Downloads are stored relative to ~/.local/share/quran-audio. <br>
12
- An example path:
13
- `/home/user/.local/share/quran-audio/mp3/alafasy/1/1.mp3`
16
+ The command-line utility attempts to download MP3 files
17
+ relative to the `~/.local/share/quran-audio/` directory.
18
+ A single, full recitation of The Noble Quran typically
19
+ ranges from 2.5GB to 2.8GB in size. Each recitation is
20
+ organized per this directory structure:
14
21
 
15
22
  * **~/.local/share/quran-audio/mp3/alafasy/** <br>
16
23
  Contains recitations by Mishari bin Rashed Alafasy
@@ -18,25 +25,50 @@ An example path:
18
25
  Contains recitations by Ahmad bin Ali Al-Ajmi
19
26
  * **~/.local/share/quran-audio/mp3/yassin/** <br>
20
27
  Contains recitations by Sahl Yassin
28
+ * **~/.local/share/quran-audio/mp3/rifai/** <br>
29
+ Contains recitations by Hani ar-Rifai
30
+
31
+ ## Examples
32
+
33
+ The following examples demonstrate how to use the quran-audio
34
+ command-line utility to download particular recitations, and
35
+ list available recitations as well:
36
+
37
+ ##
38
+ # Download recitations
39
+ user@localhost$ quran-audio pull -r alafasy
40
+ user@localhost$ quran-audio pull -r rifai
41
+
42
+ ##
43
+ # List available recitations
44
+ user@localhost$ quran-audio ls
21
45
 
22
46
  ## Install
23
47
 
24
- quran-audio is available via rubygems.org:
48
+ quran-audio is available via rubygems.org
49
+
50
+ gem install quran-audio
51
+
52
+ ## Credit
53
+
54
+ **Recitations**
55
+
56
+ * Mishari bin Rashed Alafasy
57
+ * Ahmad bin Ali Al-Ajmi
58
+ * Sahl Yassin
59
+ * Hani ar-Rifai
25
60
 
26
- user@localhost$ gem install quran-audio
27
- user@localhost$ quran-audio --help
28
- user@localhost$ quran-audio ls --help
29
- user@localhost$ quran-audio pull --help
61
+ **Sources**
30
62
 
31
- ## Thanks
63
+ * The [everyayah.com](https://everyayah.com) website
32
64
 
33
- Alhamdulillah
65
+ ## See also
34
66
 
35
- * Thanks to the [everyayah.com](https://everyayah.com) website
36
- * Thanks to the reciters
67
+ * [al-quran.reflectslight.io](https://al-quran.reflectslight.io)
68
+ * [al-quran-audio.reflectslight.io](https://al-quran-audio.reflectslight.io)
37
69
 
38
70
  ## License
39
71
 
40
72
  The "source code" is released under the [GPL](./LICENSE) license
41
73
  <br>
42
- The reciters hold the copyright for the audio files
74
+ Copyright for the recitations belongs to the reciters
data/bin/quran-audio CHANGED
@@ -7,8 +7,11 @@ rescue Interrupt
7
7
  retry
8
8
  end
9
9
 
10
+ def libexec
11
+ File.realpath File.join(__dir__, "..", "libexec", "quran-audio")
12
+ end
13
+
10
14
  def main(argv)
11
- libexec = File.realpath File.join(__dir__, "..", "libexec", "quran-audio")
12
15
  case argv[0]
13
16
  when "pull"
14
17
  Process.spawn File.join(libexec, "pull"), *ARGV[1..]
@@ -19,8 +22,8 @@ def main(argv)
19
22
  else
20
23
  warn "Usage: quran-audio [COMMAND] [OPTIONS]\n\n" \
21
24
  "Commands:\n" \
22
- " pull Pull MP3 files from everyayah.com\n" \
23
- " ls List reciters\n" \
25
+ " pull Download recitations\n" \
26
+ " ls List available recitations\n"
24
27
  end
25
28
  rescue Interrupt
26
29
  wait
@@ -2,18 +2,11 @@
2
2
 
3
3
  module Quran::Audio
4
4
  class Command::Ls < Command
5
- set_banner usage: "quran-audio ls [OPTIONS]",
6
- description: "List recitations"
7
-
8
- def run
9
- recitations = Ryo.from_json(path: File.join(dir.datadir, "recitations.json"))
10
- template = File.binread(File.join(dir.datadir, "erb", "recitation.erb"))
11
- render(recitations, template)
12
- end
13
-
14
- private
15
-
16
- def render(recitations, template)
5
+ ##
6
+ # @return [void]
7
+ def perform
8
+ recitations = Ryo.from_json(path: File.join(dir.json, "recitations.json"))
9
+ template = File.binread(File.join(dir.erb, "recitation.erb"))
17
10
  puts Ryo.each(recitations).map { |switch, recitation|
18
11
  ERB.new(template).result_with_hash({switch:, recitation: Ryo(recitation)})
19
12
  }.join("\n")
@@ -2,19 +2,17 @@
2
2
 
3
3
  module Quran::Audio
4
4
  class Command::Pull < Command
5
- set_banner usage: "quran-audio pull [OPTIONS]",
6
- description: "Pull MP3 files from everyayah.com"
7
- set_option "-r RECITATION", "--recitation RECITATION", "A recitation's name", default: "alafasy"
8
- set_option "-b BITRATE", "--bitrate BITRATE", "MP3 bitrate"
9
- set_option "-s NUMBERS", "--surahs NUMBERS", "Comma-separated list of surah IDs", as: Array, default: (1..114)
10
- set_option "-d SECONDS", "--delay", "Delay between requests, in seconds", as: Float, default: 0.5
5
+ require "forwardable"
6
+ extend Forwardable
7
+ def_delegators :@options,
8
+ :surahs,
9
+ :recitation,
10
+ :delay,
11
+ :bitrate
11
12
 
12
- def initialize(...)
13
- super
14
- @http = Net::HTTP.new("everyayah.com", 443).tap { _1.use_ssl = true }
15
- end
16
-
17
- def run
13
+ ##
14
+ # @return [void]
15
+ def perform
18
16
  summary(recitations[recitation])
19
17
  start(surahs)
20
18
  end
@@ -36,14 +34,15 @@ module Quran::Audio
36
34
  end
37
35
 
38
36
  def pull(mp3, delay, interrupt: false)
37
+ http = Net::HTTP.new(mp3.host, 443).tap { _1.use_ssl = true }
39
38
  res = http.get(mp3.remote_path)
40
39
  write(mp3, res, interrupt:)
41
40
  sleep(delay)
42
41
  rescue Interrupt
43
- line.end.rewind.print("SIGINT: exiting cleanly, please wait").end
42
+ line.end.print("SIGINT: exiting cleanly, please wait").end
44
43
  pull(mp3, delay, interrupt: true)
45
44
  rescue SocketError, SystemCallError, Net::OpenTimeout => e
46
- line.end.rewind.print("#{e.class}: retry")
45
+ line.end.print("#{e.class}: retry")
47
46
  interrupt ? abort! : pull(mp3, delay)
48
47
  end
49
48
 
@@ -61,18 +60,17 @@ module Quran::Audio
61
60
 
62
61
  def summary(r)
63
62
  line
64
- .rewind
65
- .print("Recitation".ljust(12), r.name).end
66
- .print("Directory".ljust(12), format(r.destdir, sharedir: dir.sharedir))
63
+ .print("Recited by".ljust(12), r.name).end
64
+ .print("Directory".ljust(12), format(r.destdir, sharedir: dir.share))
67
65
  .end.end
68
66
  end
69
67
 
70
68
  def sizeof
71
- @sizeof ||= Ryo.from_json(path: File.join(dir.datadir, "sizeof.json"))
69
+ @sizeof ||= Ryo.from_json(path: File.join(dir.json, "sizeof.json"))
72
70
  end
73
71
 
74
72
  def recitations
75
- @recitations ||= Ryo.from_json(path: File.join(dir.datadir, "recitations.json"))
73
+ @recitations ||= Ryo.from_json(path: File.join(dir.json, "recitations.json"))
76
74
  end
77
75
 
78
76
  def abort!
@@ -4,21 +4,20 @@ module Quran::Audio
4
4
  ##
5
5
  # The {Quran::Audio::Command Quran::Audio::Command} class
6
6
  # is the superclass of all commands.
7
- class Command < Cmd
7
+ class Command
8
8
  require_relative "command/ls"
9
9
  require_relative "command/pull"
10
10
  include FileUtils
11
11
 
12
- def method_missing(m, *ary, &b)
13
- Ryo.property?(options, m) ? options[m] : super
14
- end
15
-
16
- def respond_to_missing?(m, p = false)
17
- Ryo.property?(options, m) || super
18
- end
12
+ ##
13
+ # @return [Ryo]
14
+ # Command-line options
15
+ attr_reader :options
19
16
 
20
- def respond_to?(m, p = false)
21
- Ryo.property?(options, m) || super
17
+ ##
18
+ # @param [Ryo] options
19
+ def initialize(options)
20
+ @options = options
22
21
  end
23
22
 
24
23
  private
@@ -26,16 +25,13 @@ module Quran::Audio
26
25
  def dir
27
26
  @dir ||= Ryo.from({
28
27
  localbase: File.join(Dir.home, ".local"),
29
- rootdir: File.realpath(File.join(__dir__, "..", "..", "..")),
30
- sharedir: Ryo.memo { File.join(localbase, "share", "quran-audio") },
31
- datadir: Ryo.memo { File.join(rootdir, "share", "quran-audio", "data") }
28
+ share: Ryo.memo { File.join(localbase, "share", "quran-audio") },
29
+ root: File.realpath(File.join(__dir__, "..", "..", "..")),
30
+ erb: Ryo.memo { File.join(root, "share", "quran-audio", "erb") },
31
+ json: Ryo.memo { File.join(root, "share", "quran-audio", "json") },
32
32
  })
33
33
  end
34
34
 
35
- def options
36
- @options ||= parse_options(argv)
37
- end
38
-
39
35
  def line
40
36
  @line ||= IO::Line.new($stdout)
41
37
  end
@@ -2,9 +2,8 @@
2
2
 
3
3
  module Quran::Audio
4
4
  ##
5
- # {Quran::Audio::MP3 Quran::Audio::MP3} provides
6
- # an abstract interface around an MP3 file, and
7
- # within the context of the quran-audio project.
5
+ # {Quran::Audio::MP3 Quran::Audio::MP3} represents
6
+ # an ayah of The Noble Quran in the MP3 format.
8
7
  class MP3 < Struct.new(:recitation, :surah, :ayah, :bitrate, keyword_init: true)
9
8
  def initialize(recitation:, **kw)
10
9
  super(recitation: recitations[recitation], **kw)
@@ -17,12 +16,19 @@ module Quran::Audio
17
16
  super || recitation.default_bitrate
18
17
  end
19
18
 
19
+ ##
20
+ # @return [String]
21
+ # Returns the host of a remote HTTP server
22
+ def host
23
+ recitation.host
24
+ end
25
+
20
26
  ##
21
27
  # @return [String]
22
28
  # Returns the path to an MP3 file on a remote HTTP server
23
29
  def remote_path
24
- filename = [surah.to_s.rjust(3, "0"), ayah.to_s.rjust(3, "0"), ".mp3"].join
25
- File.join format(recitation.path, bitrate:), filename
30
+ File.join format(recitation.path, bitrate:),
31
+ [surah, "/", ayah, ".mp3"].join
26
32
  end
27
33
 
28
34
  ##
@@ -39,7 +45,7 @@ module Quran::Audio
39
45
  private
40
46
 
41
47
  def recitations
42
- @recitations ||= Ryo.from_json(path: File.join(datadir, "recitations.json"))
48
+ @recitations ||= Ryo.from_json(path: File.join(jsondir, "recitations.json"))
43
49
  end
44
50
 
45
51
  def sharedir
@@ -49,10 +55,10 @@ module Quran::Audio
49
55
  end
50
56
  end
51
57
 
52
- def datadir
53
- @datadir ||= File.realpath File.join(
58
+ def jsondir
59
+ @jsondir ||= File.realpath File.join(
54
60
  __dir__, "..", "..", "..",
55
- "share", "quran-audio", "data"
61
+ "share", "quran-audio", "json"
56
62
  )
57
63
  end
58
64
  end
data/lib/quran/audio.rb CHANGED
@@ -2,7 +2,13 @@
2
2
 
3
3
  module Quran
4
4
  module Audio
5
- require "cmd"
5
+ def self.setup_bundle!
6
+ bundle = File.realpath File.join(__dir__, "..", "..", "bundle")
7
+ Dir[File.join(bundle, "*")].each { $:.unshift File.join(_1, "lib") }
8
+ end
9
+ setup_bundle!
10
+
11
+ require "json"
6
12
  require "ryo"
7
13
  require "ryo/json"
8
14
  require "fileutils"
@@ -2,9 +2,26 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "quran/audio"
5
+ require "optparse"
6
+
7
+ ##
8
+ # main
5
9
  def main(argv)
6
- Quran::Audio::Command::Ls
7
- .new(argv)
8
- .run
10
+ options = Ryo({})
11
+ option_parser.parse(argv, into: options)
12
+ Quran::Audio::Command::Ls.new(options).perform
13
+ end
14
+
15
+ ##
16
+ # utils
17
+ def option_parser
18
+ OptionParser.new do |o|
19
+ o.banner = "Usage: quran-audio ls [OPTIONS]"
20
+ end
9
21
  end
10
- main(ARGV)
22
+
23
+ excode = catch(:abort) {
24
+ main(ARGV)
25
+ 0
26
+ }
27
+ exit excode
@@ -2,11 +2,33 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "quran/audio"
5
+ require "optparse"
6
+
7
+ ##
8
+ # main
5
9
  def main(argv)
6
- Quran::Audio::Command::Pull
7
- .new(argv)
8
- .run
10
+ options = Ryo({
11
+ recitation: "alafasy",
12
+ bitrate: 128,
13
+ surahs: (1..114),
14
+ delay: 0.5
15
+ })
16
+ option_parser.parse(argv, into: options)
17
+ Quran::Audio::Command::Pull.new(options).perform
18
+ end
19
+
20
+ ##
21
+ # utils
22
+ def option_parser
23
+ OptionParser.new do |o|
24
+ o.banner = "Usage: quran-audio pull [OPTIONS]"
25
+ o.on("-r RECITATION", "--recitation RECITATION", "A recitation's name", String)
26
+ o.on("-b BITRATE" , "--bitrate BITRATE", "MP3 bitrate", Integer)
27
+ o.on("-s NUMBERS" , "--surahs NUMBERS", "Comma-separated list of surah IDs", Array)
28
+ o.on("-d SECONDS" , "--delay", "Delay between requests, in seconds", Float)
29
+ end
9
30
  end
31
+
10
32
  excode = catch(:abort) {
11
33
  main(ARGV)
12
34
  0
@@ -0,0 +1,4 @@
1
+ * vNEXT
2
+
3
+ ** Add new reciter: Nabil Al-Rifai
4
+ At the recommendation of a friend
@@ -1 +1 @@
1
- v0.3.3
1
+ v0.4.0
@@ -0,0 +1,42 @@
1
+ {
2
+ "alafasy": {
3
+ "id": "alafasy",
4
+ "name": "Mishari bin Rashed Alafasy",
5
+ "origin": "Kuwait",
6
+ "available_bitrates": [128],
7
+ "default_bitrate": 128,
8
+ "host": "al-quran-audio.reflectslight.io",
9
+ "path": "/alafasy/",
10
+ "destdir": "%{sharedir}/mp3/alafasy/"
11
+ },
12
+ "alajmi": {
13
+ "id": "alajmi",
14
+ "name": "Ahmad bin Ali Al-Ajmi",
15
+ "origin": "Saudi Arabia",
16
+ "available_bitrates": [128],
17
+ "default_bitrate": 128,
18
+ "host": "al-quran-audio.reflectslight.io",
19
+ "path": "/alajmi/",
20
+ "destdir": "%{sharedir}/mp3/alajmi/"
21
+ },
22
+ "yassin": {
23
+ "id": "yassin",
24
+ "name": "Sahl Yassin",
25
+ "origin": "Saudi Arabia",
26
+ "available_bitrates": [128],
27
+ "default_bitrate": 128,
28
+ "host": "al-quran-audio.reflectslight.io",
29
+ "path": "/yassin/",
30
+ "destdir": "%{sharedir}/mp3/yassin/"
31
+ },
32
+ "rifai": {
33
+ "id": "rifai",
34
+ "name": "Hani ar-Rifai",
35
+ "origin": "Saudi Arabia",
36
+ "available_bitrates": [192],
37
+ "default_bitrate": 192,
38
+ "host": "al-quran-audio.reflectslight.io",
39
+ "path": "/rifai/",
40
+ "destdir": "%{sharedir}/mp3/rifai/"
41
+ }
42
+ }
metadata CHANGED
@@ -1,85 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quran-audio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - '0x1eef'
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-13 00:00:00.000000000 Z
11
+ date: 2024-11-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: ryo.rb
14
+ name: paint
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.5'
19
+ version: '2.3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.5'
26
+ version: '2.3'
27
27
  - !ruby/object:Gem::Dependency
28
- name: cmd.rb
28
+ name: json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.5'
33
+ version: '2.6'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.5'
40
+ version: '2.6'
41
41
  - !ruby/object:Gem::Dependency
42
- name: paint
42
+ name: optparse
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '2.3'
47
+ version: '0.6'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '2.3'
54
+ version: '0.6'
55
55
  - !ruby/object:Gem::Dependency
56
- name: json
56
+ name: net-http
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '2.6'
61
+ version: '0.5'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '2.6'
68
+ version: '0.5'
69
69
  - !ruby/object:Gem::Dependency
70
- name: io-line.rb
70
+ name: forwardable
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.1'
75
+ version: '1.3'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0.1'
82
+ version: '1.3'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: standard
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -94,7 +94,21 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '1.25'
97
- description: Downloads recitations of The Noble Quran from everyayah.com
97
+ - !ruby/object:Gem::Dependency
98
+ name: irb
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.14'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.14'
111
+ description: Download recitations of The Noble Quran
98
112
  email:
99
113
  - 0x1eef@protonmail.com
100
114
  executables:
@@ -112,10 +126,11 @@ files:
112
126
  - lib/quran/audio/mp3.rb
113
127
  - libexec/quran-audio/ls
114
128
  - libexec/quran-audio/pull
129
+ - share/quran-audio/CHANGELOG
115
130
  - share/quran-audio/VERSION
116
- - share/quran-audio/data/erb/recitation.erb
117
- - share/quran-audio/data/recitations.json
118
- - share/quran-audio/data/sizeof.json
131
+ - share/quran-audio/erb/recitation.erb
132
+ - share/quran-audio/json/recitations.json
133
+ - share/quran-audio/json/sizeof.json
119
134
  homepage: https://github.com/ReflectsLight/quran-audio#readme
120
135
  licenses:
121
136
  - GPL-3.0-or-later
@@ -135,8 +150,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
150
  - !ruby/object:Gem::Version
136
151
  version: '0'
137
152
  requirements: []
138
- rubygems_version: 3.5.9
153
+ rubygems_version: 3.5.21
139
154
  signing_key:
140
155
  specification_version: 4
141
- summary: Downloads recitations of The Noble Quran from everyayah.com
156
+ summary: Download recitations of The Noble Quran
142
157
  test_files: []
@@ -1,26 +0,0 @@
1
- {
2
- "alafasy": {
3
- "name": "Mishari bin Rashed Alafasy",
4
- "origin": "Kuwait",
5
- "available_bitrates": [128, 64],
6
- "default_bitrate": 128,
7
- "path": "/data/Alafasy_%{bitrate}kbps/",
8
- "destdir": "%{sharedir}/mp3/alafasy/"
9
- },
10
- "alajmi": {
11
- "name": "Ahmad bin Ali Al-Ajmi",
12
- "origin": "Saudi Arabia",
13
- "available_bitrates": [128],
14
- "default_bitrate": 128,
15
- "path": "/data/ahmed_ibn_ali_al_ajamy_%{bitrate}kbps/",
16
- "destdir": "%{sharedir}/mp3/alajmi/"
17
- },
18
- "yassin": {
19
- "name": "Sahl Yassin",
20
- "origin": "Saudi Arabia",
21
- "available_bitrates": [128],
22
- "default_bitrate": 128,
23
- "path": "/data/Sahl_Yassin_%{bitrate}kbps/",
24
- "destdir": "%{sharedir}/mp3/yassin/"
25
- }
26
- }
File without changes
File without changes