quran-audio 0.3.3 → 0.4.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 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