autoaudio 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -10
- data/README.md +15 -25
- data/Thorfile +10 -0
- data/autoaudio.gemspec +5 -1
- data/bin/autoaudio +4 -1
- data/config/mongoid.yml +1 -1
- data/config/settings.rb +13 -0
- data/{log → etc}/gist.txt +0 -0
- data/{log → etc}/reply.txt +0 -0
- data/{etc → images}/aa.jpg +0 -0
- data/lib/autoaudio.rb +24 -10
- data/lib/autoaudio/cli.rb +30 -0
- data/lib/autoaudio/destroy.rb +47 -0
- data/lib/autoaudio/download.rb +161 -106
- data/lib/autoaudio/genre.rb +14 -0
- data/lib/autoaudio/make.rb +102 -0
- data/lib/autoaudio/release.rb +30 -0
- data/lib/autoaudio/release_date.rb +11 -0
- data/lib/autoaudio/settings_setup.rb +33 -0
- data/lib/autoaudio/setup.rb +25 -0
- data/lib/autoaudio/stats.rb +12 -0
- data/lib/autoaudio/utils.rb +29 -0
- data/lib/autoaudio/version.rb +1 -1
- data/log/.gitkeep +0 -0
- data/tasks/gem.thor +22 -0
- data/tasks/tests.thor +7 -0
- metadata +38 -14
- data/Rakefile +0 -1
- data/lib/autoaudio/cli/application.rb +0 -83
- data/lib/autoaudio/feed.rb +0 -77
- data/lib/autoaudio/settings.rb +0 -6
- data/lib/autoaudio/utility.rb +0 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 171b6ac2299bc99f246e08efe0f9dcb6cd65c86d
|
4
|
+
data.tar.gz: 4ff98406573ab4a6f98041f92e0c50fd7550bb8f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f5eb67480752847ebc713230c708cdf36aac0690ed30339380c3fab6820f70a8c11ebc306c0ea951c250754bf3c12786315f2896a3f5bf119e8a5024ebd40046
|
7
|
+
data.tar.gz: fe4b1a730c4875c65a98341f72d8366d8d67c4be14acc2e8ba5d14759d7d01c020279aedc1c3096b600b55d3e489b917ac459610081e3a3c2ed4c51ee1cc0495
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,43 +1,33 @@
|
|
1
1
|
# Autoaudio
|
2
2
|
|
3
|
-
Autoaudio parses [http://nfodb.net.ru/rss.php](http://nfodb.net.ru/rss.php) for the latest Scene audio releases. Then, it queries [http://nzbindex.nl/](http://nzbindex.nl/) for the release and creates an `.nzb`.
|
4
3
|
|
5
|
-
|
6
|
-
|
7
|
-
![alt text](https://raw.github.com/GeneLocklin/autoaudio/master/etc/aa.jpg "Autoaudio")
|
8
|
-
|
9
|
-
## Installation
|
10
|
-
|
11
|
-
$ gem install autoaudio
|
12
|
-
|
13
|
-
## Usage
|
4
|
+
## THESE INSTRUCTIONS ARE NO LONGER VALID. ```audioaudio list``` for a list of commands. Proper readme coming soon.
|
14
5
|
|
15
|
-
|
6
|
+
### It's ugly as hell, but it 100% works.
|
16
7
|
|
17
|
-
|
8
|
+
![alt text](https://raw.github.com/GeneLocklin/autoaudio/master/etc/aa.jpg "Autoaudio")
|
18
9
|
|
19
|
-
|
20
|
-
* `autoaudio display_configuration_settings` Displays application configuration settings.
|
21
|
-
* `autoaudio make_feeds` Downloads all feeds into the database.
|
22
|
-
* `autoaudio display_feeds` Displays all feeds.
|
23
|
-
* `autoaudio download` Downloads all feeds, creates `.nzb` and `.nfo` files, zips and uploads to [https://anonfiles.com/](https://anonfiles.com/), creates a list of upload urls and tweets an the url of anonymous gist containing the upload urls.
|
24
|
-
* `autoaudio download_genre GENRE` <- Where GENRE is your chosen genre. This command will open a single genre's `.nzb` files in your chosen newsreader, and update the database to reflect the change.
|
10
|
+
Autoaudio parses [http://nfodb.net.ru/rss.php](http://nfodb.net.ru/rss.php) for the latest Scene audio releases. Then, it queries [http://nzbindex.nl/](http://nzbindex.nl/) for the release and creates a `.nzb`.
|
25
11
|
|
26
|
-
|
12
|
+
Releases are sorted by genre and album title and folders are created which hold `.nfo` and `.nzb` files for each release. A zip is created of each folder and is uploaded to [https://anonfiles.com/](https://anonfiles.com/). The resulting list is uploaded as an anonymous gist. A file called `download.thor`, which is a tiny robot that parses the anonymous gist and redownloads the files from [https://anonfiles.com/](https://anonfiles.com/), is uploaded with the album links. Finally, the gist url is tweeted.
|
27
13
|
|
28
|
-
## Gems Used
|
14
|
+
## Gems Used:
|
29
15
|
|
30
|
-
* [mongoid](https://github.com/mongoid/mongoid)
|
31
16
|
* [mechanize](https://github.com/sparklemotion/mechanize/)
|
17
|
+
* [mongoid](https://github.com/mongoid/mongoid)
|
32
18
|
* [gist](https://github.com/defunkt/gist)
|
33
19
|
* [thor](https://github.com/erikhuda/thor)
|
34
|
-
* [t](https://github.com/sferik/t)
|
20
|
+
* and, indirectly, [t](https://github.com/sferik/t)
|
21
|
+
|
22
|
+
## Basic Usage:
|
23
|
+
|
24
|
+
Run `Thor list` for a list of basic commands.
|
35
25
|
|
36
26
|
## To do:
|
37
27
|
|
38
28
|
* help
|
39
29
|
* write a more understandable readme
|
40
|
-
* add more thor commands as well as more descriptions
|
30
|
+
* add more thor commands as well as more and better descriptions
|
41
31
|
* clean up the code - at the moment, it's a huge ball of crap
|
42
32
|
* error handling
|
43
33
|
* multithreading
|
@@ -47,7 +37,7 @@ If you wish to tweet your results, you will need to install and set up [t](https
|
|
47
37
|
* more search and source options
|
48
38
|
* [tor-privoxy](https://github.com/pirj/tor-privoxy)
|
49
39
|
|
50
|
-
## License
|
40
|
+
## License:
|
51
41
|
|
52
42
|
Copyright (c) 2014 Gene Locklin
|
53
43
|
|
@@ -72,7 +62,7 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
72
62
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
73
63
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
74
64
|
|
75
|
-
## Contributing
|
65
|
+
## Contributing:
|
76
66
|
|
77
67
|
1. Fork it
|
78
68
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
data/Thorfile
ADDED
data/autoaudio.gemspec
CHANGED
@@ -20,10 +20,11 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.require_paths = %w[lib]
|
21
21
|
|
22
22
|
spec.add_dependency 'mechanize'
|
23
|
+
spec.add_dependency 'awesome_print'
|
23
24
|
spec.add_dependency 'mongoid'
|
25
|
+
spec.add_dependency 'retries'
|
24
26
|
spec.add_dependency 'thor'
|
25
27
|
spec.add_dependency 'gist'
|
26
|
-
spec.add_dependency 't'
|
27
28
|
|
28
29
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
29
30
|
spec.add_development_dependency 'rake'
|
@@ -33,3 +34,6 @@ Gem::Specification.new do |spec|
|
|
33
34
|
spec.add_development_dependency 'guard-bundler'
|
34
35
|
end
|
35
36
|
|
37
|
+
|
38
|
+
|
39
|
+
|
data/bin/autoaudio
CHANGED
data/config/mongoid.yml
CHANGED
data/config/settings.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'autoaudio'
|
2
|
+
|
3
|
+
module Autoaudio
|
4
|
+
Settings.config do
|
5
|
+
download_location "#{Dir.home}/Downloads/Test/Albums"
|
6
|
+
maximum_retention 900
|
7
|
+
nzb_client 'Unison.app'
|
8
|
+
zip_files true
|
9
|
+
share_files true
|
10
|
+
tweet_files true
|
11
|
+
twitter_username 'usenetdecoded'
|
12
|
+
end
|
13
|
+
end
|
data/{log → etc}/gist.txt
RENAMED
File without changes
|
data/{log → etc}/reply.txt
RENAMED
File without changes
|
data/{etc → images}/aa.jpg
RENAMED
File without changes
|
data/lib/autoaudio.rb
CHANGED
@@ -1,21 +1,35 @@
|
|
1
|
-
|
1
|
+
$:.unshift File.expand_path("../../config", __FILE__)
|
2
|
+
require 'autoaudio/settings_setup'
|
3
|
+
require 'settings'
|
4
|
+
|
5
|
+
require 'rubygems'
|
2
6
|
require 'open-uri'
|
7
|
+
require 'date'
|
8
|
+
|
9
|
+
require 'thor'
|
3
10
|
require 'mongoid'
|
4
|
-
require '
|
5
|
-
require '
|
11
|
+
require 'retries'
|
12
|
+
require 'nokogiri'
|
13
|
+
require 'mechanize'
|
14
|
+
require 'awesome_print'
|
15
|
+
|
16
|
+
require 'gist' if Autoaudio::Settings.share_files
|
6
17
|
|
7
18
|
require 'autoaudio/version'
|
8
|
-
require 'autoaudio/
|
9
|
-
require 'autoaudio/
|
19
|
+
require 'autoaudio/utils'
|
20
|
+
require 'autoaudio/genre'
|
21
|
+
require 'autoaudio/release_date'
|
22
|
+
require 'autoaudio/release'
|
10
23
|
|
11
|
-
require 'autoaudio/
|
12
|
-
require 'autoaudio/
|
24
|
+
require 'autoaudio/setup'
|
25
|
+
require 'autoaudio/make'
|
13
26
|
require 'autoaudio/download'
|
27
|
+
require 'autoaudio/destroy'
|
28
|
+
require 'autoaudio/stats'
|
29
|
+
require 'autoaudio/cli'
|
14
30
|
|
15
31
|
module Autoaudio
|
16
|
-
|
17
|
-
Mongoid.load!("./config/mongoid.yml", :development)
|
32
|
+
Mongoid.load!('config/mongoid.yml', :development)
|
18
33
|
end
|
19
34
|
|
20
35
|
|
21
|
-
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Autoaudio
|
2
|
+
class Cli < Thor
|
3
|
+
include Autoaudio::Utils
|
4
|
+
|
5
|
+
# unless Settings.initialized
|
6
|
+
# Setup.new.setup
|
7
|
+
# end
|
8
|
+
|
9
|
+
desc 'make SUBCOMMAND', 'make'
|
10
|
+
subcommand 'make', Autoaudio::Make
|
11
|
+
|
12
|
+
desc 'download SUBCOMMAND', 'download'
|
13
|
+
subcommand 'download', Autoaudio::Download
|
14
|
+
|
15
|
+
desc 'destroy SUBCOMMAND', 'destroy'
|
16
|
+
subcommand 'destroy', Autoaudio::Destroy
|
17
|
+
|
18
|
+
desc 'stats SUBCOMMAND', 'stats'
|
19
|
+
subcommand 'stats', Autoaudio::Stats
|
20
|
+
|
21
|
+
desc 'setup', 'setup'
|
22
|
+
subcommand 'setup', Autoaudio::Setup
|
23
|
+
|
24
|
+
desc 'list', 'list all autoaudio commands'
|
25
|
+
def list
|
26
|
+
system('thor list')
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'thor'
|
2
|
+
|
3
|
+
module Autoaudio
|
4
|
+
class Destroy < Thor
|
5
|
+
|
6
|
+
desc 'everything', 'destroys all genres, releases and release dates'
|
7
|
+
def everything
|
8
|
+
if yes?("Preparing to destroy Everything. Are you sure? [yN]")
|
9
|
+
invoke :genres
|
10
|
+
invoke :release_dates
|
11
|
+
invoke :releases
|
12
|
+
else
|
13
|
+
say "That's probably for the best..."
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
desc 'releases', 'destroys all releases'
|
18
|
+
def releases
|
19
|
+
if yes?("Preparing to destroy all releases. Are you sure? [yN]")
|
20
|
+
Release.destroy_all
|
21
|
+
say "BOOM!", :red
|
22
|
+
else
|
23
|
+
say "That's probably for the best..."
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
desc 'genres', 'destroys all genres'
|
28
|
+
def genres
|
29
|
+
if yes?("Preparing to destroy all genres. Are you sure? [yN]")
|
30
|
+
Genre.destroy_all
|
31
|
+
say "BOOM!", :red
|
32
|
+
else
|
33
|
+
say "That's probably for the best..."
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
desc 'release_dates', 'destroys all release dates'
|
38
|
+
def release_dates
|
39
|
+
if yes?("Preparing to destroy all release dates. Are you sure? [yN]")
|
40
|
+
ReleaseDate.destroy_all
|
41
|
+
say "BOOM!", :red
|
42
|
+
else
|
43
|
+
say "That's probably for the best..."
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/autoaudio/download.rb
CHANGED
@@ -1,126 +1,181 @@
|
|
1
|
-
require 'autoaudio/utility'
|
2
|
-
|
3
1
|
module Autoaudio
|
4
|
-
class Download
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
download_location = "#{Autoaudio::Config::NZB_DOWNLOAD_LOCATION[:directory]}/#{feed.genre_formatted}/#{sanitize_filename(feed.album_title)}"
|
14
|
-
nzb = "#{download_location}/#{sanitize_filename(feed.album_title)}.nzb"
|
15
|
-
nfo = "#{download_location}/#{sanitize_filename(feed.album_title)}.nfo"
|
16
|
-
zip = "#{download_location}/#{sanitize_filename(feed.album_title)}.zip"
|
17
|
-
|
18
|
-
agent = Mechanize.new { |agent| agent.user_agent_alias = 'Mac Safari' }
|
19
|
-
cookie = HTTP::Cookie.new(
|
20
|
-
:domain => 'nzbindex.nl',
|
21
|
-
:name => "agreed",
|
22
|
-
:value => "true",
|
23
|
-
:path => '/',
|
24
|
-
:expires => (Date.today + 1).to_s)
|
25
|
-
agent.cookie_jar.add(cookie)
|
26
|
-
|
27
|
-
page = agent.get('http://nzbindex.nl/')
|
28
|
-
search_form = page.form
|
29
|
-
search_form.q = feed.album_title
|
30
|
-
results_page = agent.submit(search_form, search_form.buttons.first)
|
31
|
-
|
32
|
-
if !feed.downloaded && results_page.links_with(:text => 'Download', :href => town_regex).any? do |link|
|
33
|
-
agent.get(link.click).save! nzb
|
34
|
-
puts success("Town = #{feed.album_title}")
|
35
|
-
feed.update_attributes(
|
36
|
-
downloaded: true,
|
37
|
-
download_method: "Town",
|
38
|
-
nzb: nzb
|
39
|
-
)
|
2
|
+
class Download < Thor
|
3
|
+
include Autoaudio::Utils
|
4
|
+
|
5
|
+
desc 'download_releases LOGGER, DOWNLOAD ATTEMPTS', 'download nfo and nzb files LOGGER, DOWNLOAD ATTEMPTS'
|
6
|
+
def download_releases(logger="nolog", release_nzb_download_attempts=1)
|
7
|
+
if logger == "log"
|
8
|
+
if yes?("Do you want to wipe the old .log file? [yN]")
|
9
|
+
File.truncate('./log/agent.log', 0)
|
40
10
|
end
|
41
11
|
end
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
form.checkboxes.each { |checkbox| checkbox.check if hash_regex.match(checkbox.text) }
|
47
|
-
form.submit.save! nzb
|
48
|
-
puts success("inner-sanctum => #{hash_regex.match(link.href)} = #{feed.album_title}")
|
49
|
-
feed.update_attributes(
|
50
|
-
downloaded: true,
|
51
|
-
download_method: "inner-sanctum #{hash_regex.match(link.href)}",
|
52
|
-
nzb: nzb
|
53
|
-
)
|
12
|
+
Make.new.releases
|
13
|
+
Release.where(release_nzb_downloaded: false, :release_nzb_download_attempts.lte => release_nzb_download_attempts).each do |release|
|
14
|
+
with_retries(:max_tries => 20, :base_sleep_seconds => 0.1, :max_sleep_seconds => 6.0) do
|
15
|
+
make_release(logger, release)
|
54
16
|
end
|
55
17
|
end
|
56
|
-
if
|
18
|
+
gist_tweet_releases if Settings.share_files
|
19
|
+
say ""
|
20
|
+
say "Thank you. Come again.", :white
|
21
|
+
end
|
22
|
+
|
23
|
+
no_commands do
|
24
|
+
def make_release(logger, release)
|
25
|
+
hash_regex = Regexp.new('\b[A-Za-z0-9]{32}\b')
|
26
|
+
psydealer_regex = Regexp.new('PsyDealer')
|
27
|
+
town_regex = Regexp.new('town\.ag')
|
28
|
+
flac_regex = Regexp.new('a\.b\.flac|a\.b\.sounds\.flac|a\.b\.flacEFNet')
|
29
|
+
|
30
|
+
download_location = "#{Settings.download_location}/#{release.release_genre_formatted}/#{sanitize_filename(release.release_name)}"
|
31
|
+
nzb = "#{download_location}/#{sanitize_filename(release.release_name)}.nzb"
|
32
|
+
nfo = "#{download_location}/#{sanitize_filename(release.release_name)}.nfo"
|
33
|
+
zip = "#{download_location}/#{sanitize_filename(release.release_name)}.zip"
|
34
|
+
|
35
|
+
agent = Mechanize.new
|
36
|
+
agent.user_agent_alias = 'Mac Safari'
|
37
|
+
agent.log = Logger.new('./log/agent.log') if logger == "log"
|
38
|
+
cookie = HTTP::Cookie.new(
|
39
|
+
:domain => 'nzbindex.nl',
|
40
|
+
:name => "agreed",
|
41
|
+
:value => "true",
|
42
|
+
:path => '/',
|
43
|
+
:expires => (Date.today + 1).to_s)
|
44
|
+
agent.cookie_jar.add(cookie)
|
45
|
+
|
46
|
+
page = agent.get('http://nzbindex.nl/')
|
57
47
|
search_form = page.form
|
58
|
-
search_form.q =
|
48
|
+
search_form.q = release.release_name
|
59
49
|
results_page = agent.submit(search_form, search_form.buttons.first)
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
50
|
+
|
51
|
+
if !release.release_nzb_downloaded && results_page.links_with(:text => 'Download', :href => hash_regex).any? do |link|
|
52
|
+
search_term = hash_regex.match(link.href)
|
53
|
+
page = agent.get("http://nzbindex.nl/groups/alt.binaries.inner-sanctum/?q=#{search_term}")
|
54
|
+
form = page.form_with(:action => 'http://nzbindex.nl/download/')
|
55
|
+
form.checkboxes.each { |checkbox| checkbox.check if hash_regex.match(checkbox.text) }
|
56
|
+
form.submit.save! nzb
|
57
|
+
say "inner-sanctum => #{hash_regex.match(link.href)} = #{release.release_name}", :green
|
58
|
+
release.update_attributes(
|
59
|
+
release_nzb_downloaded: true,
|
60
|
+
release_nzb_download_method: "inner-sanctum #{hash_regex.match(link.href)}",
|
61
|
+
release_nzb_location: nzb
|
62
|
+
)
|
63
|
+
end
|
69
64
|
end
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
65
|
+
|
66
|
+
if !release.release_nzb_downloaded && results_page.links_with(:text => 'Download', :href => town_regex).any? do |link|
|
67
|
+
agent.get(link.click).save! nzb
|
68
|
+
say "Town = #{release.release_name}", :green
|
69
|
+
release.update_attributes(
|
70
|
+
release_nzb_release_nzb_downloaded: true,
|
71
|
+
release_nzb_download_method: "Town",
|
72
|
+
release_nzb_location: nzb
|
73
|
+
)
|
74
|
+
end
|
79
75
|
end
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
76
|
+
|
77
|
+
if !release.release_nzb_downloaded && results_page.links_with(:text => 'Download', :href => hash_regex).any? do |link|
|
78
|
+
search_form.q = hash_regex.match(link.href)
|
79
|
+
results_page = agent.submit(search_form, search_form.buttons.first)
|
80
|
+
form = results_page.form_with(:action => 'http://nzbindex.nl/download/')
|
81
|
+
form.checkboxes.each { |checkbox| checkbox.check if hash_regex.match(checkbox.text) }
|
82
|
+
form.submit.save! nzb
|
83
|
+
say "#{hash_regex.match(link.href)} = #{release.release_name}", :green
|
84
|
+
release.update_attributes(
|
85
|
+
release_nzb_downloaded: true,
|
86
|
+
release_nzb_download_method: "hash_regex #{hash_regex.match(link.href)}",
|
87
|
+
release_nzb_location: nzb
|
88
|
+
)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
if !release.release_nzb_downloaded && results_page.links_with(:text => 'Download', :href => psydealer_regex).any? do |link|
|
93
|
+
agent.get(link.click).save! nzb
|
94
|
+
say "Psydealer = #{release.release_name}", :green
|
95
|
+
release.update_attributes(
|
96
|
+
release_nzb_downloaded: true,
|
97
|
+
release_nzb_download_method: "Psydealer",
|
98
|
+
release_nzb_location: nzb
|
99
|
+
)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
if !release.release_nzb_downloaded && results_page.links_with(:text => 'Download', :href => flac_regex).each do |link|
|
104
|
+
form = results_page.form_with(:action => 'http://nzbindex.nl/download/')
|
105
|
+
form.checkboxes.each { |checkbox| checkbox.check if flac_regex.match(link.href) }
|
106
|
+
form.submit.save! nzb
|
107
|
+
say "FLAC = #{release.release_name}", :green
|
108
|
+
release.update_attributes(
|
109
|
+
release_nzb_downloaded: true,
|
110
|
+
release_nzb_download_method: "FLAC",
|
111
|
+
release_nzb_location: nzb
|
112
|
+
)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
if !release.release_nzb_downloaded
|
117
|
+
release.update_attribute(:release_nzb_download_attempts, (release.release_nzb_download_attempts + 1))
|
118
|
+
say "NOPE = #{release.release_name}", :red
|
119
|
+
end
|
120
|
+
|
121
|
+
# ToDo: from here down, rewrite.
|
122
|
+
|
123
|
+
if release.release_nzb_downloaded
|
124
|
+
nfo_agent = Mechanize.new { |agent| agent.user_agent_alias = 'Mac Safari' }
|
125
|
+
nfo_page = nfo_agent.get("http://nfodb.net.ru/get_nfo-#{release.release_number}.php")
|
126
|
+
nfo_page.save! nfo
|
127
|
+
say ".nfo created - #{release.release_name}", :green
|
128
|
+
release.update_attributes(
|
129
|
+
release_nfo_downloaded: true,
|
130
|
+
release_nfo_location: nfo
|
131
|
+
)
|
91
132
|
end
|
92
|
-
end
|
93
|
-
if !feed.downloaded
|
94
|
-
feed.update_attribute(:download_attempts, (feed.download_attempts + 1))
|
95
|
-
puts failure("NOPE = #{feed.album_title}")
|
96
|
-
end
|
97
133
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
134
|
+
if release.release_nzb_downloaded && release.release_nfo_downloaded
|
135
|
+
system("zip -vjr #{zip} #{download_location}/* -x \"*.DS_Store\"" )
|
136
|
+
release.update_attributes(
|
137
|
+
release_zip_location: zip,
|
138
|
+
release_zip_created: true
|
139
|
+
)
|
140
|
+
say ".zip created - #{release.release_name}", :green
|
141
|
+
end
|
142
|
+
|
143
|
+
if release.release_zip_created
|
144
|
+
reply = './etc/reply.txt'
|
145
|
+
system("curl -kF \"file=@#{zip}\" https://anonfiles.com/api/v1/upload -o \"#{reply}\"")
|
146
|
+
zip_location = IO.readlines(reply)[0]
|
147
|
+
anon_hash = /\b[A-Za-z0-9]{32}\b/.match(zip_location)
|
148
|
+
release.update_attribute(:release_zip_uploaded_url, "https://anonfiles.com/file/#{anon_hash}")
|
149
|
+
say "#{release.release_name} = https://anonfiles.com/file/#{anon_hash}", :green
|
150
|
+
File.open('./etc/gist.txt', 'a') { |f| f.write "* #{release.release_name} = https://anonfiles.com/file/#{anon_hash}\n" }
|
151
|
+
File.truncate(reply, 0)
|
152
|
+
end
|
104
153
|
end
|
105
154
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
system("curl -kF \"file=@#{zip}\" https://anonfiles.com/api/hotlink -o \"#{reply}\"")
|
113
|
-
zip_location = IO.readlines(reply)[0]
|
114
|
-
anon_hash = /\b[A-Za-z0-9]{32}\b/.match(zip_location)
|
115
|
-
feed.update_attribute(:zip_uploaded_url, "https://anonfiles.com/file/#{anon_hash}")
|
116
|
-
puts success("#{feed.album_title} = https://anonfiles.com/file/#{anon_hash}")
|
117
|
-
if Autoaudio::Config::TWITTER_SETTINGS[:tweet_nzbs] == true
|
118
|
-
write_gist("#{feed.album_title} = https://anonfiles.com/file/#{anon_hash}")
|
155
|
+
def gist_tweet_releases
|
156
|
+
unless File.zero?('./etc/gist.txt')
|
157
|
+
system("gist -c -p -d \"#{DateTime.now}\" -f \"#{DateTime.now}\" './etc/gist.txt' -f download.thor './etc/download.thor'")
|
158
|
+
system("t set active \"#{Settings.twitter_username}\"")
|
159
|
+
system("t update `pbpaste`")
|
160
|
+
File.truncate('./etc/gist.txt', 0)
|
119
161
|
end
|
120
|
-
File.truncate(reply, 0)
|
121
162
|
end
|
163
|
+
end
|
122
164
|
|
165
|
+
desc 'open_nzbs GENRE AUDIO_FORMAT', 'Download a specific genre\'s .nzb\'s. Defaults to FLAC and MP3'
|
166
|
+
def open_nzbs(release_genre_formatted, release_audio_format="MP3|FLAC")
|
167
|
+
Release.where(
|
168
|
+
release_audio_format: %r(#{release_audio_format}),
|
169
|
+
release_genre_formatted: release_genre_formatted,
|
170
|
+
release_nzb_opened: false
|
171
|
+
).each do |release|
|
172
|
+
system("open #{release.release_nzb_location}")
|
173
|
+
release.update_attribute(:release_nzb_opened, true)
|
174
|
+
say "#{release.release_name}", :cyan
|
175
|
+
end
|
123
176
|
end
|
124
177
|
|
125
178
|
end
|
126
179
|
end
|
180
|
+
|
181
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Autoaudio
|
2
|
+
|
3
|
+
class Genre
|
4
|
+
include Autoaudio::Utils
|
5
|
+
include Mongoid::Document
|
6
|
+
|
7
|
+
field :genre_name, type: String
|
8
|
+
field :genre_name_formatted, type: String, default: -> { format_string(self.genre_name) }
|
9
|
+
field :genre_number, type: Integer
|
10
|
+
field :genre_url, type: String, default: -> { "http://nfodb.net.ru/index.php?genreid=#{self.genre_number}" }
|
11
|
+
field :genre_rss_url, type: String, default: -> { "http://nfodb.net.ru/rss.php?type=#{self.genre_number}" }
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
module Autoaudio
|
2
|
+
class Make < Thor
|
3
|
+
include Autoaudio::Utils
|
4
|
+
|
5
|
+
desc 'releases', 'make all releases'
|
6
|
+
method_option :initial, :type => :boolean, :aliases => "-i"
|
7
|
+
def releases
|
8
|
+
if options.initial?
|
9
|
+
if yes?("This could take quite a while. Are you sure? [yN]")
|
10
|
+
say "Making Genres...", :white
|
11
|
+
say ""
|
12
|
+
say ""
|
13
|
+
genres
|
14
|
+
say "Making Release Dates...", :white
|
15
|
+
say ""
|
16
|
+
say ""
|
17
|
+
release_dates
|
18
|
+
say "Making Releases...", :white
|
19
|
+
say ""
|
20
|
+
say ""
|
21
|
+
ReleaseDate.each { |release_date| parse_single_page(release_date.release_date_url) }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
say "Parsing Latest Feed...", :white
|
25
|
+
say ""
|
26
|
+
say ""
|
27
|
+
parse_feed
|
28
|
+
if options.initial?
|
29
|
+
say "Phew..."
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
desc 'genres', 'makes all genres'
|
34
|
+
def genres
|
35
|
+
doc = Nokogiri::HTML(open('http://nfodb.net.ru/index.php?genreid=0'))
|
36
|
+
doc.xpath('//*[@id="content"]/div[1]/form/select').children.map do |child|
|
37
|
+
unless Genre.where(genre_name: child.text).exists?
|
38
|
+
genre = Genre.create(
|
39
|
+
:genre_name => child.text,
|
40
|
+
:genre_number => child['value']
|
41
|
+
)
|
42
|
+
say "#{genre}", :green
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
desc 'release_dates', 'makes all release dates'
|
48
|
+
def release_dates
|
49
|
+
doc = Nokogiri::HTML(open("http://nfodb.net.ru/"))
|
50
|
+
doc.xpath('//*[@id="content"]/form[2]/select').children.map do |child|
|
51
|
+
unless ReleaseDate.where(release_date_string: child.text).exists?
|
52
|
+
release_date_string = child.text
|
53
|
+
r_date = Date.parse(child.text.gsub(/\./, '-'))
|
54
|
+
max_r_date = Date.today - Settings.maximum_retention
|
55
|
+
if r_date > max_r_date
|
56
|
+
release_date = ReleaseDate.create(
|
57
|
+
:release_date_string => release_date_string,
|
58
|
+
:release_date => r_date
|
59
|
+
)
|
60
|
+
say "#{release_date}", :green
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
no_commands do
|
67
|
+
def parse_single_page(url="http://nfodb.net.ru/")
|
68
|
+
doc = Nokogiri::HTML(open(url))
|
69
|
+
release_row = doc.css("html > body > div:nth-of-type(4) > div > table > tr").map do |r|
|
70
|
+
unless r.css('td:nth-of-type(2) > a').empty?
|
71
|
+
unless Release.where(release_name: r.css('td:nth-of-type(2) > a').text).exists?
|
72
|
+
release = Release.create(
|
73
|
+
:release_name => r.css('td:nth-of-type(2) > a').text,
|
74
|
+
:release_date => Date.parse(r.css('td:nth-of-type(1) > b').text.gsub(/\./, '-')),
|
75
|
+
:release_genre => r.css('td:nth-of-type(3) > a').text,
|
76
|
+
:release_number => r.css('td:nth-of-type(5) > a').map { |a| a['href'].match(/get_nfo-(.*?)\.php/)[1] }.join
|
77
|
+
)
|
78
|
+
say "#{release}", :green
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def parse_feed
|
85
|
+
doc = Nokogiri::XML(open("http://nfodb.net.ru/rss.php"))
|
86
|
+
doc.search('item').map do |doc_item|
|
87
|
+
unless Release.where(release_name: doc_item.at('title').text.gsub(/\[(.*?)\]./, '')).exists?
|
88
|
+
release = Release.create(
|
89
|
+
:release_name => doc_item.at('title').text.gsub(/\[(.*?)\]./, ''),
|
90
|
+
:release_date => Date.parse(doc_item.at('description').text.gsub(/Date:./,'').gsub(/\./, '-')),
|
91
|
+
:release_genre => doc_item.at('title').text[/[^\[]+[^\\]\]/].gsub(/[\[(.*?)\]]/,''),
|
92
|
+
:release_number => doc_item.at('link').text.match(/(http:\/\/nfodb.net.ru\/nfo-)(.*?)(.html)/)[2]
|
93
|
+
)
|
94
|
+
say "#{release}", :green
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Autoaudio
|
2
|
+
|
3
|
+
class Release
|
4
|
+
include Autoaudio::Utils
|
5
|
+
include Mongoid::Document
|
6
|
+
include Mongoid::Timestamps
|
7
|
+
|
8
|
+
field :release_name, type: String
|
9
|
+
field :release_date, type: Date
|
10
|
+
field :release_genre, type: String
|
11
|
+
field :release_genre_formatted, type: String, default: -> { format_string(self.release_genre) }
|
12
|
+
field :release_number, type: Integer
|
13
|
+
field :release_nfo_url, type: String, default: -> { "http://nfodb.net.ru/get_nfo-#{self.release_number}.php" }
|
14
|
+
field :release_audio_format, type: String, default: -> { test_audio_format(self.release_name) }
|
15
|
+
|
16
|
+
field :release_nfo_downloaded, type: Boolean, default: false
|
17
|
+
field :release_nfo_location, type: String, default: nil
|
18
|
+
|
19
|
+
field :release_nzb_downloaded, type: Boolean, default: false
|
20
|
+
field :release_nzb_location, type: String, default: nil
|
21
|
+
field :release_nzb_download_method, type: String, default: nil
|
22
|
+
field :release_nzb_download_attempts, type: Integer, default: 0
|
23
|
+
field :release_nzb_opened, type: Boolean, default: false
|
24
|
+
|
25
|
+
field :release_zip_location, type: String, default: nil
|
26
|
+
field :release_zip_uploaded_url, type: String, default: nil
|
27
|
+
field :release_zip_created, type: Boolean, default: false
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Autoaudio
|
2
|
+
|
3
|
+
class ReleaseDate
|
4
|
+
include Mongoid::Document
|
5
|
+
|
6
|
+
field :release_date_string, type: String
|
7
|
+
field :release_date, type: Date
|
8
|
+
field :release_date_url, type: String, default: -> { "http://nfodb.net.ru/index.php?rlsday=#{self.release_date_string}&do_search=Show" }
|
9
|
+
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Autoaudio
|
2
|
+
|
3
|
+
module Settings
|
4
|
+
extend self
|
5
|
+
|
6
|
+
def parameter(*names)
|
7
|
+
names.each do |name|
|
8
|
+
attr_accessor name
|
9
|
+
|
10
|
+
define_method name do |*values|
|
11
|
+
value = values.first
|
12
|
+
value ? self.send("#{name}=", value) : instance_variable_get("@#{name}")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def config(&block)
|
18
|
+
instance_eval &block
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
Autoaudio::Settings.config do
|
25
|
+
parameter :download_location
|
26
|
+
parameter :maximum_retention
|
27
|
+
parameter :nzb_client
|
28
|
+
parameter :zip_files
|
29
|
+
parameter :share_files
|
30
|
+
parameter :tweet_files
|
31
|
+
parameter :twitter_username
|
32
|
+
end
|
33
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Autoaudio
|
2
|
+
class Setup < Thor
|
3
|
+
|
4
|
+
desc 'setup', 'initial settings'
|
5
|
+
def setup
|
6
|
+
if yes?("Autoaudio is not initialized. Do you want to enter settings now? [yN]")
|
7
|
+
# say ""
|
8
|
+
# say "instructions:"
|
9
|
+
# say ""
|
10
|
+
# say ""
|
11
|
+
# say "Change initialized to true"
|
12
|
+
# say ""
|
13
|
+
# say "download_location is where your nfo and nzb files will go"
|
14
|
+
# say "maximum_retention is how long your usenet provider holds on to files"
|
15
|
+
# say "nzb_client is, um, your nzb client"
|
16
|
+
# say "zip files, zips files"
|
17
|
+
# say "share_files allows your nzbs and nfo files to be gisted and tweeted"
|
18
|
+
# say "tweet_files, tweets files"
|
19
|
+
# say "twitter_username is your twitter username"
|
20
|
+
system("open './config/settings.rb'")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Autoaudio
|
2
|
+
class Stats < Thor
|
3
|
+
|
4
|
+
desc 'audio_format_count', 'audio format count'
|
5
|
+
def audio_format_count
|
6
|
+
puts "#{Release.count} Releases"
|
7
|
+
puts "#{Release.where(release_audio_format: 'MP3').count} MP3 Releases"
|
8
|
+
puts "#{Release.where(release_audio_format: 'FLAC').count} FLAC Releases"
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Autoaudio
|
2
|
+
module Utils
|
3
|
+
def write_gist(string)
|
4
|
+
File.open('./log/gist.txt', 'a') { |f| f.write "* #{string}\n" }
|
5
|
+
end
|
6
|
+
|
7
|
+
def sanitize_filename(filename)
|
8
|
+
fn = filename.split(/(?<=.)\.(?=[^.])(?!.*\.[^.])/m)
|
9
|
+
fn.map! { |s| s.gsub( /[^a-z0-9\-]+/i, '_') }
|
10
|
+
return fn.join('.')
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_audio_format(string)
|
14
|
+
string = string.dup
|
15
|
+
string.match(/FLAC/) ? string = "FLAC" : string = "MP3"
|
16
|
+
end
|
17
|
+
|
18
|
+
def format_string(string)
|
19
|
+
string = string.dup
|
20
|
+
string.gsub!(/&/, '_and_') if string.match(/\w&\w/)
|
21
|
+
string.gsub!(/\+/, '_and_')
|
22
|
+
string.gsub!(/&/, 'and')
|
23
|
+
string.gsub!(/-/, '_')
|
24
|
+
string.gsub!(/ / ,'_')
|
25
|
+
string.downcase!
|
26
|
+
string
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/autoaudio/version.rb
CHANGED
data/log/.gitkeep
ADDED
File without changes
|
data/tasks/gem.thor
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
|
3
|
+
class Gem < Thor
|
4
|
+
include Thor::RakeCompat
|
5
|
+
Bundler::GemHelper.install_tasks
|
6
|
+
|
7
|
+
desc 'build', "Build autoaudio-#{Autoaudio::VERSION}.gem into the pkg directory"
|
8
|
+
def build
|
9
|
+
Rake::Task['build'].execute
|
10
|
+
end
|
11
|
+
|
12
|
+
desc 'install', "Build and install autoaudio-#{Autoaudio::VERSION}.gem into system gems"
|
13
|
+
def install
|
14
|
+
Rake::Task['install'].execute
|
15
|
+
end
|
16
|
+
|
17
|
+
desc 'release', "Create tag v#{Autoaudio::VERSION} and build and push autoaudio-#{Autoaudio::VERSION}.gem to Rubygems"
|
18
|
+
def release
|
19
|
+
Rake::Task['release'].execute
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
data/tasks/tests.thor
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: autoaudio
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gene Locklin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mechanize
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: awesome_print
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: mongoid
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,7 +53,7 @@ dependencies:
|
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
56
|
+
name: retries
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - ">="
|
@@ -53,7 +67,7 @@ dependencies:
|
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
70
|
+
name: thor
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - ">="
|
@@ -67,7 +81,7 @@ dependencies:
|
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
84
|
+
name: gist
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - ">="
|
@@ -176,21 +190,31 @@ files:
|
|
176
190
|
- Gemfile
|
177
191
|
- LICENSE.txt
|
178
192
|
- README.md
|
179
|
-
-
|
193
|
+
- Thorfile
|
180
194
|
- autoaudio.gemspec
|
181
195
|
- bin/autoaudio
|
182
196
|
- config/mongoid.yml
|
183
|
-
-
|
197
|
+
- config/settings.rb
|
184
198
|
- etc/download.thor
|
199
|
+
- etc/gist.txt
|
200
|
+
- etc/reply.txt
|
201
|
+
- images/aa.jpg
|
185
202
|
- lib/autoaudio.rb
|
186
|
-
- lib/autoaudio/cli
|
203
|
+
- lib/autoaudio/cli.rb
|
204
|
+
- lib/autoaudio/destroy.rb
|
187
205
|
- lib/autoaudio/download.rb
|
188
|
-
- lib/autoaudio/
|
189
|
-
- lib/autoaudio/
|
190
|
-
- lib/autoaudio/
|
206
|
+
- lib/autoaudio/genre.rb
|
207
|
+
- lib/autoaudio/make.rb
|
208
|
+
- lib/autoaudio/release.rb
|
209
|
+
- lib/autoaudio/release_date.rb
|
210
|
+
- lib/autoaudio/settings_setup.rb
|
211
|
+
- lib/autoaudio/setup.rb
|
212
|
+
- lib/autoaudio/stats.rb
|
213
|
+
- lib/autoaudio/utils.rb
|
191
214
|
- lib/autoaudio/version.rb
|
192
|
-
- log
|
193
|
-
-
|
215
|
+
- log/.gitkeep
|
216
|
+
- tasks/gem.thor
|
217
|
+
- tasks/tests.thor
|
194
218
|
homepage: https://github.com/GeneLocklin/autoaudio
|
195
219
|
licenses:
|
196
220
|
- MIT
|
@@ -211,7 +235,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
211
235
|
version: '0'
|
212
236
|
requirements: []
|
213
237
|
rubyforge_project:
|
214
|
-
rubygems_version: 2.
|
238
|
+
rubygems_version: 2.2.2
|
215
239
|
signing_key:
|
216
240
|
specification_version: 4
|
217
241
|
summary: Automatically download scene .nfo and .nzb files
|
data/Rakefile
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require "bundler/gem_tasks"
|
@@ -1,83 +0,0 @@
|
|
1
|
-
require 'thor'
|
2
|
-
|
3
|
-
module Autoaudio
|
4
|
-
module Cli
|
5
|
-
class Application < Thor
|
6
|
-
|
7
|
-
desc 'setup', 'Opens the application settings'
|
8
|
-
def setup
|
9
|
-
system("open #{File.expand_path("../../settings.rb", __FILE__)}")
|
10
|
-
end
|
11
|
-
|
12
|
-
desc 'display_configuration_settings', 'Displays the application configuration settings'
|
13
|
-
def display_configuration_settings
|
14
|
-
puts "Autoaudio::VERSION = #{Autoaudio::VERSION}"
|
15
|
-
puts "Download location = #{Autoaudio::Config::NZB_DOWNLOAD_LOCATION[:directory]}"
|
16
|
-
puts "Tweet = #{Autoaudio::Config::TWITTER_SETTINGS[:tweet_nzbs]}"
|
17
|
-
if Autoaudio::Config::TWITTER_SETTINGS[:tweet_nzbs] == true
|
18
|
-
puts "Twitter Username = #{Autoaudio::Config::TWITTER_SETTINGS[:username]}"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
desc 'make_feeds', 'Make all feeds'
|
23
|
-
def make_feeds
|
24
|
-
Feed.make
|
25
|
-
end
|
26
|
-
|
27
|
-
desc 'destroy_feeds', 'Destroy all feeds'
|
28
|
-
def destroy_feeds
|
29
|
-
Feed.destroy_all
|
30
|
-
end
|
31
|
-
|
32
|
-
desc 'count_feeds', 'Count all feeds'
|
33
|
-
def count_feeds
|
34
|
-
Feed.count
|
35
|
-
end
|
36
|
-
|
37
|
-
desc 'display_feeds', 'Display all feeds'
|
38
|
-
def display_feeds
|
39
|
-
Feed.each { |f| pp f }
|
40
|
-
end
|
41
|
-
|
42
|
-
desc 'download', 'Downloads all feeds'
|
43
|
-
def download
|
44
|
-
Feed.make
|
45
|
-
feeds = Feed.where(downloaded: false).each.to_a
|
46
|
-
i = (feeds.length / 5)
|
47
|
-
while i > 0
|
48
|
-
new_array = Array.new
|
49
|
-
5.times do
|
50
|
-
new_array << feeds.pop
|
51
|
-
end
|
52
|
-
new_array.each { |feed| Download.album(feed) }
|
53
|
-
sleep 20
|
54
|
-
i -= 1
|
55
|
-
end
|
56
|
-
unless File.zero?('./log/gist.txt')
|
57
|
-
system("gist -c -p -d \"#{DateTime.now}\" -f \"#{DateTime.now}\" './log/gist.txt' -f download.thor './etc/download.thor'")
|
58
|
-
if Autoaudio::Config::TWITTER_SETTINGS[:tweet_nzbs] == true
|
59
|
-
system("t set active #{Autoaudio::Config::TWITTER_SETTINGS[:username]}")
|
60
|
-
system("t update `pbpaste`")
|
61
|
-
end
|
62
|
-
end
|
63
|
-
File.truncate('./log/gist.txt', 0)
|
64
|
-
end
|
65
|
-
|
66
|
-
desc 'download_genre GENRE', 'Download a specific genre'
|
67
|
-
def download_genre(genre_formatted)
|
68
|
-
genre = Feed.where(
|
69
|
-
# audio_format: "MP3",
|
70
|
-
genre_formatted: genre_formatted,
|
71
|
-
nzb_opened: false
|
72
|
-
)
|
73
|
-
genre.each do |feed|
|
74
|
-
if feed.nzb != nil
|
75
|
-
system("open #{feed.nzb}")
|
76
|
-
feed.update_attribute(:nzb_opened, true)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
data/lib/autoaudio/feed.rb
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
module Autoaudio
|
2
|
-
class Feed
|
3
|
-
include Mongoid::Document
|
4
|
-
include Mongoid::Timestamps
|
5
|
-
|
6
|
-
field :release_date, type: DateTime
|
7
|
-
field :release_number, type: Integer
|
8
|
-
field :genre, type: String
|
9
|
-
field :genre_formatted, type: String
|
10
|
-
field :album_title, type: String
|
11
|
-
field :downloaded, type: Boolean
|
12
|
-
field :download_attempts, type: Integer
|
13
|
-
field :download_method, type: String
|
14
|
-
field :audio_format, type: String
|
15
|
-
field :nzb, type: String
|
16
|
-
field :nzb_opened, type: Boolean
|
17
|
-
field :nfo, type: String
|
18
|
-
field :zip, type: String
|
19
|
-
field :zip_uploaded_url, type: String
|
20
|
-
|
21
|
-
def self.make
|
22
|
-
feeds = parse
|
23
|
-
feeds.each do |f|
|
24
|
-
unless Feed.where(album_title: f[:album]).exists?
|
25
|
-
feed = Feed.create(
|
26
|
-
:release_date => f[:date],
|
27
|
-
:release_number => f[:release_number],
|
28
|
-
:genre => f[:genre],
|
29
|
-
:genre_formatted => format_string(f[:genre]),
|
30
|
-
:album_title => f[:album],
|
31
|
-
:downloaded => false,
|
32
|
-
:download_attempts => 0,
|
33
|
-
:download_method => nil,
|
34
|
-
:audio_format => test_audio_format(f[:album]),
|
35
|
-
:nzb => nil,
|
36
|
-
:nzb_opened => false,
|
37
|
-
:nfo => nil,
|
38
|
-
:zip => nil,
|
39
|
-
:zip_uploaded_url => nil
|
40
|
-
)
|
41
|
-
feed.save
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
class << self
|
47
|
-
private
|
48
|
-
|
49
|
-
def parse(feed="http://nfodb.net.ru/rss.php")
|
50
|
-
doc = Nokogiri::XML(open(feed))
|
51
|
-
doc.search('item').map do |doc_item|
|
52
|
-
item = {}
|
53
|
-
item[:link] = doc_item.at('link').text
|
54
|
-
item[:album] = doc_item.at('title').text.gsub(/\[(.*?)\]./, '')
|
55
|
-
item[:genre] = doc_item.at('title').text[/[^\[]+[^\\]\]/].gsub(/[\[(.*?)\]]/,'')
|
56
|
-
item[:date] = doc_item.at('description').text.gsub(/Date:./,'')
|
57
|
-
item[:release_number] = doc_item.at('link').text.match(/(http:\/\/nfodb.net.ru\/nfo-)(.*?)(.html)/)[2]
|
58
|
-
item
|
59
|
-
end
|
60
|
-
end
|
61
|
-
def format_string(string)
|
62
|
-
string = string.dup
|
63
|
-
string.gsub!(/&/, '_and_') if string.match(/\w&\w/)
|
64
|
-
string.gsub!(/\+/, '_and_')
|
65
|
-
string.gsub!(/&/, 'and')
|
66
|
-
string.gsub!(/-/, '_')
|
67
|
-
string.gsub!(/ / ,'_')
|
68
|
-
string.downcase!
|
69
|
-
string
|
70
|
-
end
|
71
|
-
def test_audio_format(string)
|
72
|
-
string = string.dup
|
73
|
-
string.match(/FLAC/) ? string = "FLAC" : string = "MP3"
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
data/lib/autoaudio/settings.rb
DELETED
data/lib/autoaudio/utility.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'autoaudio'
|
2
|
-
|
3
|
-
module Utility
|
4
|
-
|
5
|
-
def success(string)
|
6
|
-
%Q(\e[32m#{string}\e[0m)
|
7
|
-
end
|
8
|
-
|
9
|
-
def failure(string)
|
10
|
-
%Q(\e[1;41;37m#{string}\e[0m)
|
11
|
-
end
|
12
|
-
|
13
|
-
def write_gist(string)
|
14
|
-
File.open('./log/gist.txt', 'a') { |f| f.write "* #{string}\n" }
|
15
|
-
end
|
16
|
-
|
17
|
-
def sanitize_filename(filename)
|
18
|
-
fn = filename.split(/(?<=.)\.(?=[^.])(?!.*\.[^.])/m)
|
19
|
-
fn.map! { |s| s.gsub( /[^a-z0-9\-]+/i, '_') }
|
20
|
-
return fn.join('.')
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
24
|
-
|