nehm 1.1 → 1.2.1

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: b9c9545cfe38f0c3e10bd266e91ea5ae1751711d
4
- data.tar.gz: 80821931bd91b2158e2f95fe4afd8b89d44deb30
3
+ metadata.gz: 5768d05298cc87c8d0cc0a0321ceda2a02da9062
4
+ data.tar.gz: 88c398ca600814eb8f808e0426a12989043f933f
5
5
  SHA512:
6
- metadata.gz: bb946ad6b78d06d6a17136a0ba5d700a4ff75554fc1dab0f55b669fed3b1ca13ff9c663002a29a5ea5ea32a73622475109f40e81c0f9a18f20f4b6419445f8e7
7
- data.tar.gz: c57d2aaf0e4ca759269f6cab88dbc239e94b437e202c6ff6cf38f871f0b152aaba38e9cfa628c955d100c7aaef56f21da076d9c57fa1d30b417d9c5442e8afab
6
+ metadata.gz: ca4ec26cc69d3beac67d282757bdda36119ea41cce5b2fd5a0e515fe1b502168ead270a3104a6fba3aa43d6f980fd3b8b49fc0ce52460a0e31bcdcf7e352f657
7
+ data.tar.gz: 248c24c28a67b8abdbff1de3d41329fb53fb7fa9b5290b91a14d36a8cbd0756feac804848018a9fe01e8fce899aa81ea928bc60cd9ae8f59e9d40aa37c9626f1
data/CHANGELOG.md CHANGED
@@ -1,8 +1,14 @@
1
1
  # nehm change log
2
2
 
3
+ ## 1.2
4
+
5
+ * Add 'to PARHTODIRECTORY' feature. See the 'Usage' for instructions
6
+ * Improve readability of help
7
+ * Add some error checks
8
+
3
9
  ## 1.1
4
10
 
5
- * Add 'from PERMALINK' feature
11
+ * Add 'from PERMALINK' feature. See the 'Usage' for instructions
6
12
 
7
13
  ## 1.0.7.1
8
14
 
data/README.md CHANGED
@@ -14,7 +14,7 @@ or
14
14
 
15
15
  `sudo port install taglib`
16
16
 
17
- **Linux** (depends on your package manager):
17
+ **Linux:**
18
18
 
19
19
  Debian/Ubuntu: ` sudo apt-get install libtag1-dev`
20
20
 
@@ -28,9 +28,9 @@ Fedora/RHEL: ` sudo yum install taglib-devel`
28
28
 
29
29
  ## First usage
30
30
 
31
- If you just installed nehm, you should set it up
31
+ If you just installed nehm, write any command for its setup
32
32
 
33
- Write `nehm init` for it
33
+ For example, `nehm help`
34
34
 
35
35
  nehm should answer like this:
36
36
  ```
@@ -58,14 +58,18 @@ Go to usage for further instructions
58
58
 
59
59
  `nehm get 3 posts` or `nehm get 3 likes`
60
60
 
61
- * To get last post(s) or like(s) from another user
62
-
63
- `nehm get post from nasa` or `nehm get like from nasa`
64
-
65
61
  * To just download and set tags any track, you can input
66
62
 
67
63
  `nehm dl post` or `nehm dl like` or `nehm dl 3 likes` and etc.
68
64
 
65
+ * To get tracks from another user
66
+
67
+ `nehm get post from nasa` or `nehm dl like from bogem`
68
+
69
+ * To download tracks to custom directory
70
+
71
+ `nehm dl like to /Users/john/Music` or `nehm get post from nasa to ~/Downloads`
72
+
69
73
  * And of course you can get or download track from url
70
74
 
71
75
  `nehm get https://soundcloud.com/nasa/delta-iv-launch`
data/lib/nehm.rb CHANGED
@@ -1,29 +1,30 @@
1
- require_relative 'nehm/os.rb'
2
- require_relative 'nehm/track_utils.rb'
3
- require_relative 'nehm/path_control.rb'
4
- require_relative 'nehm/user_control.rb'
5
- require_relative 'nehm/config.rb'
6
- require_relative 'nehm/configure.rb'
7
- require_relative 'nehm/help.rb'
8
- module App
9
-
10
- # Public
1
+ require 'highline'
2
+ require 'paint'
3
+
4
+ require 'nehm/artwork'
5
+ require 'nehm/config'
6
+ require 'nehm/configure'
7
+ require 'nehm/client'
8
+ require 'nehm/get'
9
+ require 'nehm/help'
10
+ require 'nehm/os'
11
+ require 'nehm/path_control'
12
+ require 'nehm/track'
13
+ require 'nehm/user'
14
+ require 'nehm/user_control'
11
15
 
16
+ module App
12
17
  def self.do(args)
13
18
  init unless initialized?
14
19
 
15
20
  command = args.shift
16
21
  case command
17
22
  when 'get'
18
- TrackUtils.get(:get, args)
23
+ Get[:get, args]
19
24
  when 'dl'
20
- TrackUtils.get(:dl, args)
25
+ Get[:dl, args]
21
26
  when 'configure'
22
27
  Configure.menu
23
- when 'login'
24
- UserControl.log_in
25
- when 'init'
26
- init
27
28
  when 'help'
28
29
  Help.show(args.first)
29
30
  else
@@ -32,19 +33,23 @@ module App
32
33
  end
33
34
  end
34
35
 
35
- # Private
36
-
37
36
  module_function
38
37
 
39
38
  def init
40
39
  puts Paint['Hello!', :green]
41
40
  puts 'Before using the nehm, you should set it up:'
42
41
  Config.create unless Config.exist?
42
+
43
43
  PathControl.set_dl_path
44
44
  puts "\n"
45
- PathControl.set_itunes_path unless OS.linux?
46
- puts "\n" unless OS.linux?
45
+
46
+ unless OS.linux?
47
+ PathControl.set_itunes_path
48
+ puts "\n"
49
+ end
50
+
47
51
  UserControl.log_in
52
+
48
53
  puts Paint['Now you can use nehm :)', :green]
49
54
  end
50
55
 
data/lib/nehm/artwork.rb CHANGED
@@ -5,21 +5,26 @@ class Artwork
5
5
  end
6
6
 
7
7
  def file_path
8
- id = @track.id
9
- file_name = "#{id}.jpg"
10
- File.join('/tmp', file_name)
8
+ File.join('/tmp', "#{@track.id}.jpg")
9
+ end
10
+
11
+ # Use in Get.dl
12
+ def name
13
+ 'artwork'
11
14
  end
12
15
 
13
16
  def suicide
14
17
  File.delete(file_path)
15
18
  end
16
19
 
17
- def dl_url
20
+ def url
18
21
  hash = @track.hash
19
- if hash['artwork_url'].nil?
20
- hash['user']['avatar_url'].sub('large', 't500x500')
21
- else
22
- hash['artwork_url'].sub('large', 't500x500')
23
- end
22
+ url =
23
+ if hash['artwork_url'].nil?
24
+ hash['user']['avatar_url']
25
+ else
26
+ hash['artwork_url']
27
+ end
28
+ url.sub('large', 't500x500')
24
29
  end
25
30
  end
data/lib/nehm/client.rb CHANGED
@@ -1,14 +1,20 @@
1
1
  require 'soundcloud'
2
- require_relative 'config.rb'
3
2
 
4
3
  # Just a Soundcloud API client.
5
4
  module Client
6
5
  # Set a SSL certificate file path for SC API
7
6
  ENV['SSL_CERT_FILE'] = File.join(__dir__, 'cacert.pem')
8
7
 
8
+ # SoundCloud API client ID
9
9
  CLIENT_ID = '11a37feb6ccc034d5975f3f803928a32'
10
10
 
11
- def self.new
11
+ def self.get(*args)
12
+ sc_client.get(*args)
13
+ end
14
+
15
+ module_function
16
+
17
+ def sc_client
12
18
  @client ||= Soundcloud.new(client_id: CLIENT_ID)
13
19
  end
14
20
  end
data/lib/nehm/config.rb CHANGED
@@ -2,9 +2,6 @@ require 'yaml'
2
2
 
3
3
  # Config module manipulate with nehm's config file (~/.nehmconfig)
4
4
  module Config
5
-
6
- # Public
7
-
8
5
  def self.[](key)
9
6
  config_hash = load_config
10
7
  config_hash[key.to_s]
@@ -17,7 +14,7 @@ module Config
17
14
  end
18
15
 
19
16
  def self.create
20
- File.open(file_path, 'w+') { |f| f.write("---\napp: nehm")}
17
+ File.open(file_path, 'w+') { |f| f.write("---\napp: nehm") }
21
18
  end
22
19
 
23
20
  def self.exist?
@@ -28,8 +25,6 @@ module Config
28
25
  load_config.key?(key.to_s)
29
26
  end
30
27
 
31
- # Private
32
-
33
28
  module_function
34
29
 
35
30
  def file_path
@@ -37,12 +32,10 @@ module Config
37
32
  end
38
33
 
39
34
  def load_config
40
- file = file_path
41
- YAML.load_file(file)
35
+ YAML.load_file(file_path)
42
36
  end
43
37
 
44
38
  def save_config(config_hash)
45
- file = file_path
46
- IO.write(file, config_hash.to_yaml)
39
+ IO.write(file_path, config_hash.to_yaml)
47
40
  end
48
41
  end
@@ -1,16 +1,9 @@
1
- require 'highline'
2
- require 'paint'
3
- require_relative 'user_control.rb'
4
- require_relative 'os.rb'
5
- require_relative 'config.rb'
6
- require_relative 'path_control.rb'
7
-
8
1
  # Configure module responds to 'nehm configure' command
9
2
  module Configure
10
3
  def self.menu
11
- puts 'Download path: ' + Paint[PathControl.dl_path, :magenta]
12
- puts 'iTunes path: ' + Paint[PathControl.itunes_path.sub("/iTunes\ Media/Automatically\ Add\ to\ iTunes.localized", ''), :magenta] unless OS.linux?
13
- puts 'Permalink: ' + Paint[Config[:permalink], :cyan]
4
+ puts 'Download path: ' + Paint[PathControl.dl_path, :magenta] if PathControl.dl_path
5
+ puts 'iTunes path: ' + Paint[PathControl.itunes_path_name, :magenta] if PathControl.itunes_path
6
+ puts 'Permalink: ' + Paint[Config[:permalink], :cyan] if Config[:permalink]
14
7
  puts "\n"
15
8
 
16
9
  HighLine.new.choose do |menu|
@@ -1,31 +1,35 @@
1
1
  require 'taglib'
2
2
  require 'fileutils'
3
- require 'paint'
4
- require_relative 'path_control.rb'
5
- require_relative 'client.rb'
6
- require_relative 'user.rb'
7
- require_relative 'track.rb'
8
- require_relative 'os.rb'
9
3
 
10
4
  # TrackUtils module responds to 'nehm get/dl ...' commands
11
- module TrackUtils
12
-
13
- # Public
14
-
15
- def self.get(dl, args)
5
+ module Get
6
+ def self.[](get_or_dl, args)
16
7
  user =
17
- # If option 'from ...' wrote
8
+ # If option 'from ...' typed
18
9
  if args.include? 'from'
19
10
  index = args.index('from')
20
- username = args[index + 1]
11
+ permalink = args[index + 1]
21
12
 
22
13
  args.delete_at(index + 1)
23
14
  args.delete_at(index)
24
- User.new(username)
15
+ UserControl.user(permalink)
25
16
  else
26
- User.new
17
+ UserControl.default_user
27
18
  end
28
19
 
20
+ # If option 'to ...' typed
21
+ if args.include? 'to'
22
+ index = args.index('to')
23
+ path = args[index + 1]
24
+
25
+ path = File.join(ENV['HOME'], path[1..-1]) if path[0] == '~'
26
+
27
+ PathControl.temp_dl_path = path
28
+
29
+ args.delete_at(index + 1)
30
+ args.delete_at(index)
31
+ end
32
+
29
33
  tracks = []
30
34
  tracks +=
31
35
  case args.last
@@ -54,37 +58,26 @@ module TrackUtils
54
58
 
55
59
  tracks.each do |track|
56
60
  dl(track)
61
+ dl(track.artwork)
57
62
  tag(track)
58
- cp(track) unless (dl == :dl) || (OS.linux?)
63
+ cp(track) unless (get_or_dl == :dl) || (OS.linux?)
59
64
  track.artwork.suicide
60
65
  end
61
66
  puts Paint['Done!', :green]
62
67
  end
63
68
 
64
- # Private
65
-
66
69
  module_function
67
70
 
68
71
  def track_from_url(url)
69
- client = Client.new
70
- track = client.get('/resolve', url: url)
71
- tracks = []
72
- tracks << Track.new(track)
72
+ hash = Client.get('/resolve', url: url)
73
+ [*Track.new(hash)]
73
74
  end
74
75
 
75
- def dl(track)
76
- # Downloading track and artwork
77
- puts 'Downloading ' + track.artist + ' - ' + track.title
78
- path = track.file_path
79
- dl_url = track.dl_url
80
- command = "curl -# -o '" + path + "' -L " + dl_url
81
- system(command)
82
-
83
- puts 'Downloading artwork'
84
- artwork = track.artwork
85
- path = artwork.file_path
86
- dl_url = artwork.dl_url
87
- command = "curl -# -o '" + path + "' -L " + dl_url
76
+ def dl(arg)
77
+ puts 'Downloading ' + arg.name
78
+ path = arg.file_path
79
+ url = arg.url
80
+ command = "curl -# -o '" + path + "' -L " + url
88
81
  system(command)
89
82
  end
90
83
 
data/lib/nehm/help.rb CHANGED
@@ -1,65 +1,65 @@
1
1
  # Help module responds to 'nehm help ...' command
2
2
  module Help
3
-
4
- # Public
5
-
6
3
  def self.available_commands
7
4
  puts Paint['Avalaible nehm commands:', :yellow]
8
5
  puts ' ' + Paint['get', :green] + ' - Downloading, setting tags and adding to your iTunes library last post or like from your profile'
9
6
  puts ' ' + Paint['dl', :green] + ' - Downloading and setting tags last post or like from your profile'
10
7
  puts ' ' + Paint['configure', :green] + ' - Configuring application'
11
- puts "See #{Paint['nehm help [command]']} to read about a specific subcommand"
8
+ puts "See #{Paint['nehm help [command]', :yellow]} to read about a specific subcommand"
12
9
  end
13
10
 
14
11
  def self.show(command)
15
12
  case command
16
13
  when 'get', 'dl', 'configure'
17
14
  Help.send(command)
15
+ when nil
16
+ Help.available_commands
18
17
  else
18
+ puts Paint["Command #{command} doesn't exist", :red]
19
+ puts "\n"
19
20
  Help.available_commands
20
21
  end
21
22
  end
22
23
 
23
- # Private
24
-
25
24
  module_function
26
25
 
27
26
  def configure
28
27
  puts Paint['Input: ', :yellow] + 'nehm configure'
29
-
28
+ puts "\n"
30
29
  puts Paint['Available options:', :yellow]
31
30
  puts ' No options'
32
31
  end
33
32
 
34
33
  def dl
35
- puts Paint['Input: ', :yellow] + 'nehm dl OPTIONS [from PERMALINK]'
36
-
34
+ puts Paint['Input: ', :yellow] + 'nehm dl OPTIONS [from PERMALINK] [to PATHTODIRECTORY]'
35
+ puts "\n"
37
36
  puts Paint['OPTIONS:', :yellow]
38
37
  puts ' ' + Paint['post', :green] + ' - Downloading and setting tags last post(track or repost) from your profile'
39
38
  puts ' ' + Paint['<number> posts', :green] + ' - Downloading and setting tags last <number> posts from your profile'
40
39
  puts ' ' + Paint['like', :green] + ' - Downloading and setting tags your last like'
41
40
  puts ' ' + Paint['<number> likes', :green] + ' - Downloading and setting tags your last <number> likes'
42
-
41
+ puts "\n"
43
42
  puts Paint['Extra options:', :yellow]
44
- puts ' ' + Paint['from PERMALINK', :green] + ' - Do the aforecited operations from the custom user profile'
43
+ puts ' ' + Paint['from PERMALINK', :green] + ' - Do the aforecited operations from the custom user profile'
44
+ puts ' ' + Paint['to PATHTODIRECTORY', :green] + ' - Do the aforecited operations to the custom directory'
45
45
  end
46
46
 
47
47
  def get
48
- puts Paint['Input: ', :yellow] + 'nehm get OPTIONS [from PERMALINK]'
49
-
50
- puts Paint['Available options:', :yellow]
48
+ puts Paint['Input: ', :yellow] + 'nehm get OPTIONS [from PERMALINK] [to PATHTODIRECTORY]'
49
+ puts "\n"
50
+ puts Paint['OPTIONS:', :yellow]
51
51
  puts ' ' + Paint['post', :green] + ' - Downloading, setting tags and adding to your iTunes library last post(track or repost) from your profile'
52
52
  puts ' ' + Paint['<number> posts', :green] + ' - Downloading, setting tags and adding to your iTunes library last <number> posts from your profile'
53
53
  puts ' ' + Paint['like', :green] + ' - Downloading, setting tags and adding to your iTunes library your last like'
54
54
  puts ' ' + Paint['<number> likes', :green] + ' - Downloading, setting tags and adding to your iTunes library your last <number> likes'
55
-
55
+ puts "\n"
56
56
  puts Paint['Extra options:', :yellow]
57
- puts ' ' + Paint['from PERMALINK', :green] + ' - Do the aforecited operations from the profile with PERMALINK'
57
+ puts ' ' + Paint['from PERMALINK', :green] + ' - Do the aforecited operations from the profile with PERMALINK'
58
+ puts ' ' + Paint['to PATHTODIRECTORY', :green] + ' - Do the aforecited operations to the custom directory'
58
59
  end
59
60
 
60
61
  def permalink
61
62
  puts 'Permalink is the last word in your profile url'
62
63
  puts 'Example: for profile url ' + Paint['soundcloud.com/qwerty', :magenta] + ' permalink is ' + Paint['qwerty', :magenta]
63
64
  end
64
-
65
65
  end
data/lib/nehm/os.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'rbconfig'
2
2
  module OS
3
3
  def self.linux?
4
- host_os = RbConfig::CONFIG['host_os']
5
- host_os =~ /linux/ ? true : false
4
+ RbConfig::CONFIG['host_os'] =~ /linux/ ? true : false
6
5
  end
7
6
  end
@@ -1,36 +1,63 @@
1
- require 'highline'
2
- require_relative 'config.rb'
3
- module PathControl
1
+ class PathControl
4
2
  def self.dl_path
5
- Config[:dl_path]
3
+ @temp_dl_path ? @temp_dl_path : Config[:dl_path]
6
4
  end
7
5
 
8
6
  def self.set_dl_path
9
7
  loop do
10
8
  default_path = File.join(ENV['HOME'], '/Music')
11
- path = HighLine.new.ask("Enter a FULL path to desirable download directory (press enter to set it to #{default_path}): ")
12
- path = default_path if path == ''
9
+ path_ask = 'Enter a FULL path to default download directory'
10
+
11
+ if Dir.exist?(default_path)
12
+ path_ask << " (press enter to set it to #{Paint[default_path, :magenta]})"
13
+ else
14
+ default_path = nil
15
+ end
16
+
17
+ path = HighLine.new.ask(path_ask + ':')
18
+ path = default_path if path == '' && default_path
13
19
 
14
20
  if Dir.exist?(path)
15
21
  Config[:dl_path] = path
16
22
  puts Paint['Download directory set up!', :green]
17
23
  break
18
24
  else
19
- puts "\n"
20
25
  puts Paint["This directory doesn't exist. Please enter path again", :red]
21
26
  end
22
27
  end
23
28
  end
24
29
 
30
+ def self.temp_dl_path=(path)
31
+ if Dir.exist?(path)
32
+ @temp_dl_path = path
33
+ else
34
+ puts Paint['Invalid path!', :red]
35
+ exit
36
+ end
37
+ end
38
+
25
39
  def self.itunes_path
26
40
  Config[:itunes_path]
27
41
  end
28
42
 
43
+ # Use in Configure.menu
44
+ def self.itunes_path_name
45
+ PathControl.itunes_path.sub("/iTunes\ Media/Automatically\ Add\ to\ iTunes.localized", '')
46
+ end
47
+
29
48
  def self.set_itunes_path
30
49
  loop do
31
50
  default_path = File.join(ENV['HOME'], '/Music/iTunes')
32
- path = HighLine.new.ask("Enter a FULL path to iTunes directory (press enter to set it to #{default_path}): ")
33
- path = default_path if path == ''
51
+ path_ask = 'Enter a FULL path to iTunes directory'
52
+
53
+ if Dir.exist?(default_path)
54
+ path_ask << " (press enter to set it to #{Paint[default_path, :magenta]})"
55
+ else
56
+ default_path = nil
57
+ end
58
+
59
+ path = HighLine.new.ask(path_ask + ':')
60
+ path = default_path if path == '' && default_path
34
61
 
35
62
  path = File.join(path, "iTunes\ Media/Automatically\ Add\ to\ iTunes.localized")
36
63
 
@@ -39,10 +66,8 @@ module PathControl
39
66
  puts Paint['iTunes directory set up!', :green]
40
67
  break
41
68
  else
42
- puts "\n"
43
69
  puts Paint["This directory doesn't exist. Please enter path again", :red]
44
70
  end
45
-
46
71
  end
47
72
  end
48
73
  end
data/lib/nehm/track.rb CHANGED
@@ -1,7 +1,3 @@
1
- require_relative 'client.rb'
2
- require_relative 'artwork.rb'
3
- require_relative 'path_control.rb'
4
-
5
1
  class Track
6
2
  attr_reader :hash
7
3
 
@@ -22,12 +18,8 @@ class Track
22
18
  Artwork.new(self)
23
19
  end
24
20
 
25
- def dl_url
26
- "#{@hash['stream_url']}?client_id=#{Client::CLIENT_ID}"
27
- end
28
-
29
21
  def file_name
30
- "#{artist} - #{title}.mp3".tr('/', '')
22
+ "#{name}.mp3".tr('/', '')
31
23
  end
32
24
 
33
25
  def file_path
@@ -38,6 +30,11 @@ class Track
38
30
  @hash['id'].to_s
39
31
  end
40
32
 
33
+ # Use in Get.dl and in Track.file_name
34
+ def name
35
+ artist + ' - ' + title
36
+ end
37
+
41
38
  def title
42
39
  if @hash['title'].include?('-')
43
40
  title = @hash['title'].split('-')
@@ -46,5 +43,8 @@ class Track
46
43
  @hash['title']
47
44
  end
48
45
  end
49
-
46
+
47
+ def url
48
+ "#{@hash['stream_url']}?client_id=#{Client::CLIENT_ID}"
49
+ end
50
50
  end
data/lib/nehm/user.rb CHANGED
@@ -1,20 +1,9 @@
1
1
  require 'json'
2
2
  require 'faraday'
3
- require 'paint'
4
- require_relative 'client.rb'
5
- require_relative 'config.rb'
6
- require_relative 'user_control.rb'
7
3
 
8
4
  class User
9
- def initialize(permalink = nil)
10
- client = Client.new
11
- @id =
12
- unless permalink.nil?
13
- user = client.get('/resolve', url: "https://soundcloud.com/#{permalink}")
14
- user.id
15
- else
16
- UserControl.default_id
17
- end
5
+ def initialize(id)
6
+ @id = id
18
7
  end
19
8
 
20
9
  def likes(count)
@@ -23,9 +12,8 @@ class User
23
12
  exit
24
13
  end
25
14
 
26
- client = Client.new
27
- likes = client.get("/users/#{@id}/favorites?limit=#{count}")
28
- likes.map { |like| Track.new(like) }
15
+ likes = Client.get("/users/#{@id}/favorites?limit=#{count}")
16
+ likes.map { |hash| Track.new(hash) }
29
17
  end
30
18
 
31
19
  # Post is last track or repost in profile
@@ -36,14 +24,12 @@ class User
36
24
  end
37
25
 
38
26
  conn = Faraday.new(url: 'https://api-v2.soundcloud.com/') do |faraday|
39
- faraday.request :url_encoded # form-encode POST params
40
27
  faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
41
28
  end
42
-
43
29
  response = conn.get("/profile/soundcloud:users:#{@id}?limit=#{count}&offset=0")
44
30
 
45
31
  parsed = JSON.parse(response.body)
46
32
  parsed = parsed['collection']
47
- parsed.map { |track| Track.new(track['track']) }
33
+ parsed.map { |hash| Track.new(hash['track']) }
48
34
  end
49
35
  end
@@ -1,12 +1,7 @@
1
- require 'highline'
2
- require 'paint'
3
- require_relative 'config.rb'
4
- require_relative 'client.rb'
5
-
6
1
  module UserControl
7
- def self.default_id
2
+ def self.default_user
8
3
  if UserControl.logged_in?
9
- Config[:default_id]
4
+ User.new(Config[:default_id])
10
5
  else
11
6
  puts Paint["You didn't logged in", :red]
12
7
  puts "Input #{Paint['nehm configure', :yellow]} to login"
@@ -14,18 +9,6 @@ module UserControl
14
9
  end
15
10
  end
16
11
 
17
- def self.user_exist?(url)
18
- Client.new.get('/resolve', url: url)
19
- rescue SoundCloud::ResponseError => e
20
- if e.message =~ /404/
21
- raise e
22
- else
23
- false
24
- end
25
- else
26
- true
27
- end
28
-
29
12
  def self.logged_in?
30
13
  Config.key?(:default_id)
31
14
  end
@@ -33,10 +16,9 @@ module UserControl
33
16
  def self.log_in
34
17
  loop do
35
18
  permalink = HighLine.new.ask('Please enter your permalink (last word in your profile url): ')
36
- client = Client.new
37
19
  url = "https://soundcloud.com/#{permalink}"
38
- if UserControl.user_exist?(url)
39
- user = client.get('/resolve', url: url)
20
+ if user_exist?(permalink)
21
+ user = Client.get('/resolve', url: url)
40
22
  Config[:default_id] = user.id
41
23
  Config[:permalink] = permalink
42
24
  puts Paint['Successfully logged in!', :green]
@@ -46,4 +28,29 @@ module UserControl
46
28
  end
47
29
  end
48
30
  end
31
+
32
+ def self.user(permalink)
33
+ if user_exist?(permalink)
34
+ user = Client.get('/resolve', url: "https://soundcloud.com/#{permalink}")
35
+ User.new(user.id)
36
+ else
37
+ puts Paint['Invalid permalink. Please enter correct permalink', :red]
38
+ exit
39
+ end
40
+ end
41
+
42
+ module_function
43
+
44
+ def user_exist?(permalink)
45
+ Client.get('/resolve', url: "https://soundcloud.com/#{permalink}")
46
+
47
+ rescue SoundCloud::ResponseError => e
48
+ if e.message =~ /404/
49
+ false
50
+ else
51
+ raise e
52
+ end
53
+ else
54
+ true
55
+ end
49
56
  end
data/lib/nehm/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Nehm
2
- VERSION = '1.1'
2
+ VERSION = '1.2.1'
3
3
  end
data/nehm.gemspec CHANGED
@@ -4,20 +4,20 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'nehm/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = 'nehm'
8
- spec.version = Nehm::VERSION
9
- spec.authors = ['Albert Nigmatzianov']
10
- spec.email = ['albertnigma@gmail.com']
7
+ spec.name = 'nehm'
8
+ spec.version = Nehm::VERSION
9
+ spec.authors = ['Albert Nigmatzianov']
10
+ spec.email = ['albertnigma@gmail.com']
11
11
 
12
- spec.summary = %q{ Convenient way to get tracks from SoundCloud via terminal }
13
- spec.description = %q{ nehm is a console tool, which downloads, sets IDv3 tags and adds to your iTunes library your SoundCloud posts or likes in convenient way. See homepage for instructions }
14
- spec.homepage = 'http://www.github.com/bogem/nehm'
15
- spec.license = 'MIT'
12
+ spec.summary = %q{ Convenient way to get tracks from SoundCloud via terminal }
13
+ spec.description = %q{ nehm is a console tool, which downloads, sets IDv3 tags and adds to your iTunes library your SoundCloud posts or likes in convenient way. See homepage for instructions }
14
+ spec.homepage = 'http://www.github.com/bogem/nehm'
15
+ spec.license = 'MIT'
16
16
 
17
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = 'bin'
19
- spec.executables = 'nehm'
20
- spec.require_paths = ['lib']
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = 'bin'
19
+ spec.executables = 'nehm'
20
+ spec.require_paths = ['lib']
21
21
  spec.required_ruby_version = '>= 1.9'
22
22
 
23
23
  spec.add_development_dependency 'bundler', '>= 1.10.5'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nehm
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.1'
4
+ version: 1.2.1
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-07-22 00:00:00.000000000 Z
11
+ date: 2015-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -117,11 +117,11 @@ files:
117
117
  - lib/nehm/client.rb
118
118
  - lib/nehm/config.rb
119
119
  - lib/nehm/configure.rb
120
+ - lib/nehm/get.rb
120
121
  - lib/nehm/help.rb
121
122
  - lib/nehm/os.rb
122
123
  - lib/nehm/path_control.rb
123
124
  - lib/nehm/track.rb
124
- - lib/nehm/track_utils.rb
125
125
  - lib/nehm/user.rb
126
126
  - lib/nehm/user_control.rb
127
127
  - lib/nehm/version.rb