vnehm 1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -0,0 +1,3 @@
1
+ module Vnehm
2
+ VERSION = '1.1'.freeze
3
+ 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: []