nehm 1.5.3 → 1.5.4

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
  SHA1:
3
- metadata.gz: 5bd2f9e928ec72d11c65ff7e1a8d4ab251e401c8
4
- data.tar.gz: 0422b2fceff29c45f852fe547670e6cd17753505
3
+ metadata.gz: 9da0b37e8738ecc87f3169744ac7bad706e04814
4
+ data.tar.gz: ccc01546551cd7f5836a59cb16d1323347917470
5
5
  SHA512:
6
- metadata.gz: fa9bfb36d31c334f211885c42e0c85bc2eae664b4fc7e7ef8000a38f6933124de3bf5be6b0e56762aa83a6974e2770764780483944301c332575833319e7bd50
7
- data.tar.gz: 36b2cfedab998142757a7a871868fa1d885b718a25560c468d80a09f4975a79714936405ebe296b92384d42684dd081f5f406c6e435457663f7255940a40c444
6
+ metadata.gz: 3a2405ccecfd65c5012471cc694caae4735c92a75e923c77e95f0bf9551309a7a2d5b350d2e7caf50b4cb5015113fe7bc6b3f5924ae3fffe4fff6b3abad0c97c
7
+ data.tar.gz: 1933d9e9b7430102a13a6b01e423109190fc5559a37c88eb651fe5a321899ad1ea8307d1c7e2a7455d91905718824162fe4b8b0b1b3881f9d6dec35f82869906
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # nehm change log
2
2
 
3
+ ## 1.5.4
4
+ * Add availability to get/dl 300+ likes and posts
5
+ * More convenient CLI
6
+ * Fix: nehm fails if you try to get/dl playlist
7
+ * Fix: nehm fails if you try to get/dl unstreamable track
8
+ * Minor optimizations and bug fixes
9
+
3
10
  ## 1.5.3
4
11
  * Fix bugs, associated with special characters in track's name
5
12
  * Minor improvements
data/README.md CHANGED
@@ -4,6 +4,10 @@
4
4
 
5
5
  *nehm* is a console tool, which downloads, sets IDv3 tags and adds to your iTunes library your SoundCloud posts or likes in convenient way
6
6
 
7
+ [![Gem Version](https://badge.fury.io/rb/nehm.svg)](http://badge.fury.io/rb/nehm)
8
+ [![Dependency Status](https://gemnasium.com/bogem/nehm.svg)](https://gemnasium.com/bogem/nehm)
9
+ [![Code Climate](https://codeclimate.com/github/bogem/nehm/badges/gpa.svg)](https://codeclimate.com/github/bogem/nehm)
10
+
7
11
  ## Installation
8
12
 
9
13
  **1. Install `taglib` library**
@@ -51,6 +55,8 @@ Enter path to desirable download directory (press enter to set it to ...
51
55
 
52
56
  `nehm get post`
53
57
 
58
+ ***(nehm doesn't get and download playlists. It just skips them)***
59
+
54
60
  * Get multiple last posts or likes
55
61
 
56
62
  `nehm get 3 posts` or `nehm get 3 likes`
@@ -89,16 +95,16 @@ Enter path to desirable download directory (press enter to set it to ...
89
95
 
90
96
  `nehm help`
91
97
 
98
+ ## TODO
99
+
100
+ * Getting/downloading playlists from posts
101
+
92
102
  ##FAQ
93
103
 
94
104
  **Q: What is permalink?**
95
105
 
96
106
  A: Permalink is the last word in your profile url. **Example:** for profile url ***soundcloud.com/qwerty*** permalink is ***qwerty***
97
107
 
98
- ## Contributing
99
-
100
- Bug reports and pull requests are welcome.
101
-
102
108
  ## License
103
109
 
104
110
  MIT License
data/lib/nehm.rb CHANGED
@@ -28,10 +28,10 @@ module App
28
28
  Get[:dl, args]
29
29
  when 'configure'
30
30
  Configure.menu
31
- when 'help'
31
+ when 'help', nil
32
32
  Help.show(args.first)
33
33
  else
34
- puts Paint['Invalid command', :red]
34
+ puts Paint["Invalid command '#{command}'", :red]
35
35
  puts "Input #{Paint['nehm help', :yellow]} for all avalaible commands"
36
36
  end
37
37
 
@@ -15,7 +15,7 @@ module AppleScript
15
15
  module_function
16
16
 
17
17
  def script_path(script_name)
18
- applescripts_path = File.expand_path(File.join(File.dirname(__FILE__), "applescripts"))
18
+ applescripts_path = File.expand_path(File.join(File.dirname(__FILE__), 'applescripts'))
19
19
  File.join(applescripts_path, "#{script_name.to_s}.applescript")
20
20
  end
21
21
  end
@@ -2,9 +2,9 @@
2
2
  module Configure
3
3
  def self.menu
4
4
  loop do
5
- puts 'Download path: ' + Paint[Cfg[:dl_path], :magenta]
6
- puts 'Permalink: ' + Paint[Cfg[:permalink], :cyan]
7
- puts 'iTunes playlist: ' + Paint[PlaylistManager.playlist, :cyan] unless OS.linux?
5
+ puts "Download path: #{Paint[Cfg[:dl_path], :magenta]}"
6
+ puts "Permalink: #{Paint[Cfg[:permalink], :cyan]}"
7
+ puts "iTunes playlist: #{Paint[PlaylistManager.playlist, :cyan]}" unless OS.linux?
8
8
  puts "\n"
9
9
 
10
10
  HighLine.new.choose do |menu|
data/lib/nehm/get.rb CHANGED
@@ -4,9 +4,9 @@ require 'taglib'
4
4
  module Get
5
5
  def self.[](get_or_dl, args)
6
6
  # Processing arguments
7
- options = [{ name: 'to', module: PathManager, setter: :temp_dl_path= },
8
- { name: 'from', module: UserManager, setter: :temp_user= },
9
- { name: 'playlist', module: PlaylistManager, setter: :temp_playlist= }]
7
+ options = [{ name: 'to', method: PathManager.method(:temp_dl_path=) },
8
+ { name: 'from', method: UserManager.method(:temp_user=) },
9
+ { name: 'playlist', method: PlaylistManager.method(:temp_playlist=) }]
10
10
 
11
11
  options.each do |option|
12
12
  if args.include? option[:name]
@@ -15,10 +15,11 @@ module Get
15
15
  args.delete_at(index + 1)
16
16
  args.delete_at(index)
17
17
 
18
- option[:module].send(option[:setter], value)
18
+ option[:method].call(value)
19
19
  end
20
20
  end
21
21
 
22
+ puts 'Getting information about track(s)'
22
23
  user = UserManager.user
23
24
  tracks = []
24
25
  tracks +=
@@ -35,19 +36,29 @@ module Get
35
36
  user.posts(count)
36
37
  when %r{https:\/\/soundcloud.com\/}
37
38
  track_from_url(args.last)
39
+ when nil
40
+ puts Paint['You must provide option', :red]
41
+ puts "Input #{Paint['nehm help', :yellow]} for help"
42
+ exit
38
43
  else
39
- puts Paint['Invalid argument(s)', :red]
44
+ puts Paint["Invalid argument(s) '#{args.last}'", :red]
40
45
  puts "Input #{Paint['nehm help', :yellow]} for help"
41
46
  exit
42
47
  end
43
48
 
44
49
  playlist = PlaylistManager.playlist
45
50
  tracks.each do |track|
46
- dl(track)
47
- dl(track.artwork)
48
- tag(track)
49
- track.artwork.suicide
50
- playlist.add_track(track.file_path) if playlist && get_or_dl == :get && !OS.linux?
51
+ if track.streamable?
52
+ dl(track)
53
+ dl(track.artwork)
54
+ tag(track)
55
+ track.artwork.suicide
56
+ playlist.add_track(track.file_path) if playlist && get_or_dl == :get && !OS.linux?
57
+ else
58
+ puts "#{Paint['Track', :yellow]} #{Paint[track.name, :cyan]} #{Paint['undownloadable', :yellow]}"
59
+ puts 'Skip it'
60
+ end
61
+ puts "\n"
51
62
  end
52
63
  puts Paint['Done!', :green]
53
64
  end
@@ -63,7 +74,7 @@ module Get
63
74
  puts 'Downloading ' + arg.name
64
75
  path = arg.file_path
65
76
  url = arg.url
66
- command = "curl -# -o \"" + path + "\" -L " + url
77
+ command = "curl -# -o \"#{path}\" -L #{url}"
67
78
  `#{command}`
68
79
  end
69
80
 
data/lib/nehm/help.rb CHANGED
@@ -2,10 +2,13 @@
2
2
  module Help
3
3
  def self.available_commands
4
4
  puts <<-HELP.gsub(/^ {6}/, '')
5
+ #{Paint['nehm', :green]} is a console tool, which downloads, sets IDv3 tags and adds to your iTunes library your SoundCloud posts or likes in convenient way
6
+
5
7
  #{Paint['Avalaible nehm commands:', :yellow]}
6
8
  #{Paint['get', :green]} Downloading, setting tags and adding to your iTunes library last post or like from your profile
7
9
  #{Paint['dl', :green]} Downloading and setting tags last post or like from your profile
8
10
  #{Paint['configure', :green]} Configuring application
11
+
9
12
  See #{Paint['nehm help [command]', :yellow]} to read about a specific subcommand
10
13
  HELP
11
14
  end
@@ -17,7 +20,7 @@ module Help
17
20
  when nil
18
21
  Help.available_commands
19
22
  else
20
- puts Paint["Command #{command} doesn't exist", :red]
23
+ puts Paint["Command '#{command}' doesn't exist", :red]
21
24
  puts "\n"
22
25
  Help.available_commands
23
26
  end
data/lib/nehm/track.rb CHANGED
@@ -19,7 +19,7 @@ class Track
19
19
  end
20
20
 
21
21
  def file_name
22
- "#{name}.mp3".tr('/', '')
22
+ "#{name}.mp3".tr("/'\"", '')
23
23
  end
24
24
 
25
25
  def file_path
@@ -35,6 +35,10 @@ class Track
35
35
  artist + ' - ' + title
36
36
  end
37
37
 
38
+ def streamable?
39
+ @hash['streamable']
40
+ end
41
+
38
42
  def title
39
43
  if @hash['title'].include?('-')
40
44
  title = @hash['title'].split('-')
data/lib/nehm/user.rb CHANGED
@@ -2,6 +2,8 @@ require 'json'
2
2
  require 'faraday'
3
3
 
4
4
  class User
5
+ SOUNDCLOUD_MAX_LIMIT = 180
6
+
5
7
  def initialize(id)
6
8
  @id = id
7
9
  end
@@ -13,10 +15,20 @@ class User
13
15
  exit
14
16
  end
15
17
 
16
- likes = Client.get("/users/#{@id}/favorites?limit=#{count}")
18
+ d = count / SOUNDCLOUD_MAX_LIMIT
19
+ m = count % SOUNDCLOUD_MAX_LIMIT
20
+ d = m == 0 ? d : d + 1
21
+
22
+ likes = []
23
+ d.times do |i|
24
+ limit = count > SOUNDCLOUD_MAX_LIMIT ? SOUNDCLOUD_MAX_LIMIT : count
25
+ count -= SOUNDCLOUD_MAX_LIMIT
26
+
27
+ likes += Client.get("/users/#{@id}/favorites?limit=#{limit}&offset=#{(i)*SOUNDCLOUD_MAX_LIMIT}")
28
+ end
17
29
 
18
30
  if likes.empty?
19
- puts Paint["There are no likes yet :(", :red]
31
+ puts Paint['There are no likes yet :(', :red]
20
32
  exit
21
33
  end
22
34
 
@@ -31,20 +43,36 @@ class User
31
43
  exit
32
44
  end
33
45
 
34
- # Official SC API wrapper doesn't support for posts
46
+ d = count / SOUNDCLOUD_MAX_LIMIT
47
+ m = count % SOUNDCLOUD_MAX_LIMIT
48
+ d = m == 0 ? d : d + 1
49
+
50
+ # Official SC API wrapper doesn't support posts
35
51
  # So I should get posts by HTTP requests
36
- #TODO: Get more than 300 posts (max limit = 300)
37
52
  conn = Faraday.new(url: 'https://api-v2.soundcloud.com/')
38
- response = conn.get("/profile/soundcloud:users:#{@id}?limit=#{count}&offset=0")
39
53
 
40
- parsed = JSON.parse(response.body)
41
- posts = parsed['collection']
54
+ posts = []
55
+ d.times do |i|
56
+ limit = count > SOUNDCLOUD_MAX_LIMIT ? SOUNDCLOUD_MAX_LIMIT : count
57
+ count -= SOUNDCLOUD_MAX_LIMIT
58
+
59
+ response = conn.get("/profile/soundcloud:users:#{@id}?limit=#{limit}&offset=#{i*SOUNDCLOUD_MAX_LIMIT}")
60
+ parsed = JSON.parse(response.body)
61
+ collection = parsed['collection']
62
+
63
+ break if collection.nil?
64
+
65
+ posts += collection
66
+ end
42
67
 
43
68
  if posts.empty?
44
- puts Paint["There are no posts yet :(", :red]
69
+ puts Paint['There are no posts yet :(', :red]
45
70
  exit
46
71
  end
47
72
 
73
+ rejected = posts.reject! { |hash| hash['type'] == 'playlist' }
74
+ puts Paint["Was skipped #{rejected.count} playlist(s) (nehm doesn't download playlists)", :yellow] if rejected
75
+
48
76
  posts.map { |hash| Track.new(hash['track']) }
49
77
  end
50
78
  end
data/lib/nehm/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Nehm
2
- VERSION = '1.5.3'.freeze
2
+ VERSION = '1.5.4'.freeze
3
3
  end
data/nehm.gemspec CHANGED
@@ -20,11 +20,11 @@ Gem::Specification.new do |spec|
20
20
  spec.require_paths = ['lib']
21
21
  spec.required_ruby_version = '>= 1.9.3'
22
22
 
23
- spec.add_dependency 'soundcloud', '>= 0.3.2'
24
- spec.add_dependency 'taglib-ruby', '>= 0.7.0'
23
+ spec.add_dependency 'bogy', '>= 1.1'
24
+ spec.add_dependency 'certifi'
25
25
  spec.add_dependency 'faraday', '>= 0.9.1'
26
26
  spec.add_dependency 'highline', '>= 1.7.2'
27
- spec.add_dependency 'certifi'
28
27
  spec.add_dependency 'paint'
29
- spec.add_dependency 'bogy'
28
+ spec.add_dependency 'soundcloud', '>= 0.3.2'
29
+ spec.add_dependency 'taglib-ruby', '>= 0.7.0'
30
30
  end
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nehm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.3
4
+ version: 1.5.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Albert Nigmatzianov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-29 00:00:00.000000000 Z
11
+ date: 2015-09-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: soundcloud
14
+ name: bogy
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.3.2
19
+ version: '1.1'
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.3.2
26
+ version: '1.1'
27
27
  - !ruby/object:Gem::Dependency
28
- name: taglib-ruby
28
+ name: certifi
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.7.0
33
+ version: '0'
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.7.0
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: faraday
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: 1.7.2
69
69
  - !ruby/object:Gem::Dependency
70
- name: certifi
70
+ name: paint
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
@@ -81,33 +81,33 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: paint
84
+ name: soundcloud
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: 0.3.2
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: 0.3.2
97
97
  - !ruby/object:Gem::Dependency
98
- name: bogy
98
+ name: taglib-ruby
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: '0'
103
+ version: 0.7.0
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: '0'
110
+ version: 0.7.0
111
111
  description: " nehm is a console tool, which downloads, sets IDv3 tags and adds to
112
112
  your iTunes library your SoundCloud posts or likes in convenient way. See homepage
113
113
  for instructions "