vnehm 1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|