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.
@@ -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: []