vnehm 1.1
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 +7 -0
- data/.gitignore +12 -0
- data/CHANGELOG.md +8 -0
- data/Gemfile +4 -0
- data/LICENSE +19 -0
- data/README.md +84 -0
- data/Rakefile +70 -0
- data/bin/vnehm +14 -0
- data/lib/vnehm/applescript.rb +29 -0
- data/lib/vnehm/applescripts/add_track_to_playlist.applescript +11 -0
- data/lib/vnehm/applescripts/list_of_playlists.applescript +3 -0
- data/lib/vnehm/applescripts/music_master_library.applescript +3 -0
- data/lib/vnehm/cfg.rb +47 -0
- data/lib/vnehm/client.rb +54 -0
- data/lib/vnehm/command.rb +108 -0
- data/lib/vnehm/command_manager.rb +57 -0
- data/lib/vnehm/commands/configure_command.rb +46 -0
- data/lib/vnehm/commands/dl_command.rb +36 -0
- data/lib/vnehm/commands/get_command.rb +53 -0
- data/lib/vnehm/commands/help_command.rb +85 -0
- data/lib/vnehm/commands/list_command.rb +50 -0
- data/lib/vnehm/commands/search_command.rb +67 -0
- data/lib/vnehm/commands/version_command.rb +23 -0
- data/lib/vnehm/menu.rb +78 -0
- data/lib/vnehm/option_parser.rb +29 -0
- data/lib/vnehm/os.rb +13 -0
- data/lib/vnehm/path_manager.rb +49 -0
- data/lib/vnehm/playlist.rb +24 -0
- data/lib/vnehm/playlist_manager.rb +66 -0
- data/lib/vnehm/token_manager.rb +33 -0
- data/lib/vnehm/track.rb +51 -0
- data/lib/vnehm/track_manager.rb +86 -0
- data/lib/vnehm/tracks_view_command.rb +88 -0
- data/lib/vnehm/ui.rb +52 -0
- data/lib/vnehm/version.rb +3 -0
- data/lib/vnehm.rb +79 -0
- data/vnehm.gemspec +29 -0
- metadata +141 -0
@@ -0,0 +1,88 @@
|
|
1
|
+
module Vnehm
|
2
|
+
class TracksViewCommand < Command
|
3
|
+
|
4
|
+
DEFAULT_LIMIT = 10
|
5
|
+
|
6
|
+
DEFAULT_OFFSET = 0
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
super
|
10
|
+
end
|
11
|
+
|
12
|
+
def execute
|
13
|
+
setup_environment
|
14
|
+
|
15
|
+
old_offset = @offset
|
16
|
+
|
17
|
+
@queue = []
|
18
|
+
@track_manager = TrackManager.new(@options)
|
19
|
+
|
20
|
+
tracks = get_tracks
|
21
|
+
UI.term 'У Вас ещё нет аудиозаписей' if tracks.nil?
|
22
|
+
|
23
|
+
loop do
|
24
|
+
# If offset changed, update list of tracks
|
25
|
+
unless old_offset == @offset
|
26
|
+
tracks = get_tracks
|
27
|
+
old_offset = @offset
|
28
|
+
end
|
29
|
+
|
30
|
+
if tracks.nil?
|
31
|
+
prev_page
|
32
|
+
next
|
33
|
+
end
|
34
|
+
|
35
|
+
show_menu(tracks)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
protected
|
40
|
+
|
41
|
+
def get_tracks; end
|
42
|
+
|
43
|
+
def show_menu(tracks)
|
44
|
+
UI.menu do |menu|
|
45
|
+
menu.header = 'Введите номер аудиозаписи, чтобы добавить в очередь'.green
|
46
|
+
|
47
|
+
ids = @queue.map(&:id) # Get ids of tracks in queue
|
48
|
+
tracks.each do |track|
|
49
|
+
track_info = "#{track.full_name} | #{track.duration}"
|
50
|
+
|
51
|
+
if ids.include? track.id
|
52
|
+
menu.choice(:added, track_info)
|
53
|
+
else
|
54
|
+
menu.choice(:inc, track_info) { add_track_to_queue(track) }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
menu.newline
|
59
|
+
|
60
|
+
menu.choice('d', 'Скачать аудиозаписи из очереди'.green.freeze) { download_tracks_from_queue; UI.term }
|
61
|
+
menu.choice('n', 'Следующая страница'.magenta.freeze) { next_page }
|
62
|
+
menu.choice('p', 'Предыдущая страница'.magenta.freeze) { prev_page }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def setup_environment
|
67
|
+
@limit = @options[:limit] ? @options[:limit].to_i : DEFAULT_LIMIT
|
68
|
+
@offset = @options[:offset] ? @options[:offset].to_i : DEFAULT_OFFSET
|
69
|
+
end
|
70
|
+
|
71
|
+
def add_track_to_queue(track)
|
72
|
+
@queue << track
|
73
|
+
end
|
74
|
+
|
75
|
+
def download_tracks_from_queue
|
76
|
+
@track_manager.process_tracks(@queue)
|
77
|
+
end
|
78
|
+
|
79
|
+
def next_page
|
80
|
+
@offset += @limit
|
81
|
+
end
|
82
|
+
|
83
|
+
def prev_page
|
84
|
+
@offset -= @limit if @offset >= @limit
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
end
|
data/lib/vnehm/ui.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'vnehm/menu'
|
2
|
+
|
3
|
+
module Vnehm
|
4
|
+
module UI
|
5
|
+
|
6
|
+
##
|
7
|
+
# This constant used to set delay between user operation
|
8
|
+
# Because it's more comfortable to have a small delay
|
9
|
+
# between interactions
|
10
|
+
|
11
|
+
SLEEP_PERIOD = 0.7
|
12
|
+
|
13
|
+
def self.ask(arg = nil)
|
14
|
+
say arg if arg
|
15
|
+
$stdin.gets.chomp
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.error(msg)
|
19
|
+
puts "#{msg}\n".red
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.menu(&block)
|
23
|
+
Menu.new(&block)
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.newline
|
27
|
+
puts
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.say(msg)
|
31
|
+
puts msg
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.sleep
|
35
|
+
Kernel.sleep(SLEEP_PERIOD)
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.success(msg)
|
39
|
+
puts msg.green
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.term(msg = nil)
|
43
|
+
puts msg.red if msg
|
44
|
+
raise VnehmExit
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.warning(msg)
|
48
|
+
puts "#{msg}".yellow
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
data/lib/vnehm.rb
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'colored'
|
2
|
+
|
3
|
+
require 'vnehm/cfg'
|
4
|
+
require 'vnehm/client'
|
5
|
+
require 'vnehm/command_manager'
|
6
|
+
require 'vnehm/os'
|
7
|
+
require 'vnehm/path_manager'
|
8
|
+
require 'vnehm/playlist_manager'
|
9
|
+
require 'vnehm/track_manager'
|
10
|
+
require 'vnehm/ui'
|
11
|
+
|
12
|
+
module Vnehm
|
13
|
+
|
14
|
+
class VnehmExit < SystemExit; end
|
15
|
+
|
16
|
+
def self.start(args)
|
17
|
+
begin
|
18
|
+
init unless initialized?
|
19
|
+
|
20
|
+
if args.empty?
|
21
|
+
UI.say HELP
|
22
|
+
UI.term
|
23
|
+
end
|
24
|
+
|
25
|
+
CommandManager.run(args)
|
26
|
+
rescue StandardError, Timeout::Error => ex
|
27
|
+
Vnehm::UI.term "Ошибка во время исполнения ... (#{ex.class})\n #{ex}"
|
28
|
+
rescue Interrupt
|
29
|
+
rescue VnehmExit
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
HELP = <<-EOF
|
34
|
+
#{'vnehm'.green} - это консольная утилита, которая скачивает (и добавляет в Вашу библиотеку iTunes) аудиозаписи из ВКонтакте
|
35
|
+
|
36
|
+
#{'Доступные команды:'.yellow}
|
37
|
+
#{'get'.green} Загрузка и добавление треков из VK в Вашу библиотеку iTunes
|
38
|
+
#{'dl'.green} Загрузка Ваших аудиозаписей из VK
|
39
|
+
#{'configure'.green} Настройка приложения
|
40
|
+
#{'help'.green} Показ справки для определенной команды
|
41
|
+
#{'list'.green} Вывод списка Ваших аудиозаписей из VK и загрузка выбранных треков
|
42
|
+
#{'search'.green} Поиск, вывод и загрузка определенных аудиозаписей по запросу
|
43
|
+
#{'version'.green} Вывод версии приложения
|
44
|
+
|
45
|
+
Используйте #{'vnehm help КОМАНДА'.yellow}, чтобы узнать подробнее об определенной команде
|
46
|
+
|
47
|
+
Команды и аргументы (но НЕ опции) могут быть сокращены, насколько они могут быть однозначны
|
48
|
+
Например, #{'nehm g'.magenta} может быть сокращением для #{'nehm get'.magenta}
|
49
|
+
EOF
|
50
|
+
|
51
|
+
module_function
|
52
|
+
|
53
|
+
def init
|
54
|
+
UI.say 'Прежде чем использовать vnehm, Вам нужно его настроить:'
|
55
|
+
Cfg.create unless Cfg.exist?
|
56
|
+
|
57
|
+
PathManager.set_dl_path
|
58
|
+
UI.newline
|
59
|
+
|
60
|
+
if OS.mac?
|
61
|
+
PlaylistManager.set_playlist
|
62
|
+
UI.newline
|
63
|
+
end
|
64
|
+
|
65
|
+
UI.say 'Теперь Вам нужно авторизоваться'
|
66
|
+
UI.say 'Для этого следуйте инструкциям ниже:'
|
67
|
+
TokenManager.authorize
|
68
|
+
UI.newline
|
69
|
+
|
70
|
+
UI.success "Теперь вы можете использовать vnehm!"
|
71
|
+
UI.newline
|
72
|
+
UI.sleep
|
73
|
+
end
|
74
|
+
|
75
|
+
def initialized?
|
76
|
+
Cfg.exist?
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
data/vnehm.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'vnehm/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'vnehm'
|
8
|
+
spec.version = Vnehm::VERSION
|
9
|
+
spec.authors = ['Albert Nigmatzianov']
|
10
|
+
spec.email = ['albertnigma@gmail.com']
|
11
|
+
|
12
|
+
spec.summary = 'Convenient way to download tracks (and add to iTunes) from VKontakte via terminal'
|
13
|
+
spec.description = 'vnehm - это консольная утилита, которая скачивает (и добавляет в Вашу библиотеку iTunes) аудиозаписи из ВКонтакте
|
14
|
+
'
|
15
|
+
spec.homepage = 'http://www.github.com/bogem/vnehm'
|
16
|
+
spec.license = 'MIT'
|
17
|
+
|
18
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(Rakefile)/}) }
|
19
|
+
spec.bindir = 'bin'
|
20
|
+
spec.executables = 'vnehm'
|
21
|
+
spec.require_paths = ['lib']
|
22
|
+
spec.required_ruby_version = '>= 2.0.0'
|
23
|
+
spec.post_install_message = 'Не забудьте установить Taglib из пакетного менеджера Вашей ОС!'
|
24
|
+
|
25
|
+
spec.add_dependency 'certifi'
|
26
|
+
spec.add_dependency 'colored'
|
27
|
+
spec.add_dependency 'taglib-ruby', '>= 0.7.0'
|
28
|
+
spec.add_dependency 'vkontakte_api', '~> 1.4'
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vnehm
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '1.1'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Albert Nigmatzianov
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-11-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: certifi
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: colored
|
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'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: taglib-ruby
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.7.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.7.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: vkontakte_api
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.4'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.4'
|
69
|
+
description: 'vnehm - это консольная утилита, которая скачивает (и добавляет в Вашу
|
70
|
+
библиотеку iTunes) аудиозаписи из ВКонтакте
|
71
|
+
|
72
|
+
'
|
73
|
+
email:
|
74
|
+
- albertnigma@gmail.com
|
75
|
+
executables:
|
76
|
+
- vnehm
|
77
|
+
extensions: []
|
78
|
+
extra_rdoc_files: []
|
79
|
+
files:
|
80
|
+
- ".gitignore"
|
81
|
+
- CHANGELOG.md
|
82
|
+
- Gemfile
|
83
|
+
- LICENSE
|
84
|
+
- README.md
|
85
|
+
- Rakefile
|
86
|
+
- bin/vnehm
|
87
|
+
- lib/vnehm.rb
|
88
|
+
- lib/vnehm/applescript.rb
|
89
|
+
- lib/vnehm/applescripts/add_track_to_playlist.applescript
|
90
|
+
- lib/vnehm/applescripts/list_of_playlists.applescript
|
91
|
+
- lib/vnehm/applescripts/music_master_library.applescript
|
92
|
+
- lib/vnehm/cfg.rb
|
93
|
+
- lib/vnehm/client.rb
|
94
|
+
- lib/vnehm/command.rb
|
95
|
+
- lib/vnehm/command_manager.rb
|
96
|
+
- lib/vnehm/commands/configure_command.rb
|
97
|
+
- lib/vnehm/commands/dl_command.rb
|
98
|
+
- lib/vnehm/commands/get_command.rb
|
99
|
+
- lib/vnehm/commands/help_command.rb
|
100
|
+
- lib/vnehm/commands/list_command.rb
|
101
|
+
- lib/vnehm/commands/search_command.rb
|
102
|
+
- lib/vnehm/commands/version_command.rb
|
103
|
+
- lib/vnehm/menu.rb
|
104
|
+
- lib/vnehm/option_parser.rb
|
105
|
+
- lib/vnehm/os.rb
|
106
|
+
- lib/vnehm/path_manager.rb
|
107
|
+
- lib/vnehm/playlist.rb
|
108
|
+
- lib/vnehm/playlist_manager.rb
|
109
|
+
- lib/vnehm/token_manager.rb
|
110
|
+
- lib/vnehm/track.rb
|
111
|
+
- lib/vnehm/track_manager.rb
|
112
|
+
- lib/vnehm/tracks_view_command.rb
|
113
|
+
- lib/vnehm/ui.rb
|
114
|
+
- lib/vnehm/version.rb
|
115
|
+
- vnehm.gemspec
|
116
|
+
homepage: http://www.github.com/bogem/vnehm
|
117
|
+
licenses:
|
118
|
+
- MIT
|
119
|
+
metadata: {}
|
120
|
+
post_install_message: Не забудьте установить Taglib из пакетного менеджера Вашей ОС!
|
121
|
+
rdoc_options: []
|
122
|
+
require_paths:
|
123
|
+
- lib
|
124
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: 2.0.0
|
129
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
|
+
requirements:
|
131
|
+
- - ">="
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
requirements: []
|
135
|
+
rubyforge_project:
|
136
|
+
rubygems_version: 2.5.0
|
137
|
+
signing_key:
|
138
|
+
specification_version: 4
|
139
|
+
summary: Convenient way to download tracks (and add to iTunes) from VKontakte via
|
140
|
+
terminal
|
141
|
+
test_files: []
|