lib/vlcraptor.rb in vlcraptor-0.2.0 vs lib/vlcraptor.rb in vlcraptor-0.3.0
- old
+ new
@@ -1,9 +1,11 @@
# frozen_string_literal: true
+require "curses"
require "rainbow"
require_relative "vlcraptor/player"
+require_relative "vlcraptor/player_controller"
require_relative "vlcraptor/preferences"
require_relative "vlcraptor/queue"
require_relative "vlcraptor/notifiers"
module Vlcraptor
@@ -13,10 +15,14 @@
def self.crossfade(value)
Vlcraptor::Preferences.new[:crossfade] = value == "on"
end
+ def self.history
+ system("cat #{File.expand_path("~")}/.player_history")
+ end
+
def self.list
started = Vlcraptor::Preferences.new[:started]
offset = 0
Vlcraptor::Queue.each do |track|
array = []
@@ -40,86 +46,55 @@
def self.play
Vlcraptor::Preferences.new[:play] = true
end
def self.player
- player = Vlcraptor::Player.new
- queue = Vlcraptor::Queue.new
- preferences = Vlcraptor::Preferences.new
- notifiers = Vlcraptor::Notifiers.new(preferences)
- track = nil
- suspended = false
+ Curses.init_screen
+ Curses.start_color
+ Curses.curs_set(0)
+ Curses.noecho
- loop do
- sleep 0.2
+ Curses.init_pair(0, 0, 0) # white
+ Curses.init_pair(2, 2, 0) # green
+ Curses.init_pair(5, 5, 0) # magenta
+ Curses.init_pair(6, 6, 0) # cyan
+ Curses.init_pair(8, 8, 0) # grey
+ Curses.init_pair(9, 9, 0) # orange
+ Curses.init_pair(11, 11, 0) # yellow
- if preferences.pause?
- player.fadeout
- player.pause
- suspended = true
- notifiers.track_suspended
+ player_controller = Vlcraptor::PlayerController.new
+ window = Curses::Window.new(0, 0, 1, 2)
+ window.nodelay = true
- next
- end
+ loop do
+ window.setpos(0, 0)
- if preferences.stop?
- player.fadeout
- player.stop
- suspended = true
- notifiers.track_suspended
-
- next
+ player_controller.next.each do |pair|
+ window.attron(Curses.color_pair(pair.first)) { window << pair.last }
+ Curses.clrtoeol
+ window << "\n"
end
+ (window.maxy - window.cury).times { window.deleteln }
+ window.refresh
- if preferences.play?
- player.fadein
- suspended = false
- notifiers.track_resumed(track, player.time)
-
- next
+ case window.getch.to_s
+ when " "
+ pause
+ when "n"
+ skip
+ when "p"
+ play
+ when "s"
+ stop
+ when "q"
+ break
end
- next if suspended
-
- if player.playing?
- if preferences.skip?
- track = queue.next
- if track
- notifiers.track_started(track)
- player.crossfade(track[:path])
- else
- player.fadeout
- end
- next
- end
-
- if preferences.crossfade? && player.remaining < 5
- notifiers.track_finished(track)
- track = queue.next
- if track
- notifiers.track_started(track)
- player.crossfade(track[:path])
- end
- end
-
- notifiers.track_progress(track, player.remaining)
-
- next
- end
-
- next unless preferences.continue?
-
- notifiers.track_finished(track)
- track = queue.next
- next unless track
-
- notifiers.track_started(track)
- player.play(track[:path])
+ sleep 0.1
end
- rescue Interrupt
- notifiers.track_suspended
- player.cleanup
- puts "Exiting"
+ ensure
+ player_controller.cleanup
+ Curses.close_screen
end
def self.queue(paths)
paths.each do |path|
if File.file?(path)