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)