lib/vlcraptor.rb in vlcraptor-0.1.0 vs lib/vlcraptor.rb in vlcraptor-0.2.0

- old
+ new

@@ -1,8 +1,147 @@ # frozen_string_literal: true -require_relative "vlcraptor/version" +require "rainbow" +require_relative "vlcraptor/player" +require_relative "vlcraptor/preferences" +require_relative "vlcraptor/queue" +require_relative "vlcraptor/notifiers" module Vlcraptor - class Error < StandardError; end - # Your code goes here... + def self.autoplay(value) + Vlcraptor::Preferences.new[:autoplay] = value == "on" + end + + def self.crossfade(value) + Vlcraptor::Preferences.new[:crossfade] = value == "on" + end + + def self.list + started = Vlcraptor::Preferences.new[:started] + offset = 0 + Vlcraptor::Queue.each do |track| + array = [] + array << Time.at(started + offset).strftime("%I:%M:%S") if started + array += [Rainbow(track[:title]).green, "by", Rainbow(track[:artist]).yellow] + array += ["from", Rainbow(track[:album]).cyan] if (track[:album] || "").length.positive? + if track[:length] + mins = track[:length] / 60 + secs = track[:length] % 60 + array << "(#{mins} minutes and #{secs} seconds)" + end + puts array.join(" ") + offset += track[:length] + end + end + + def self.pause + Vlcraptor::Preferences.new[:pause] = true + end + + 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 + + loop do + sleep 0.2 + + if preferences.pause? + player.fadeout + player.pause + suspended = true + notifiers.track_suspended + + next + end + + if preferences.stop? + player.fadeout + player.stop + suspended = true + notifiers.track_suspended + + next + end + + if preferences.play? + player.fadein + suspended = false + notifiers.track_resumed(track, player.time) + + next + 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]) + end + rescue Interrupt + notifiers.track_suspended + player.cleanup + puts "Exiting" + end + + def self.queue(paths) + paths.each do |path| + if File.file?(path) + Vlcraptor::Queue.add(path) + else + Dir.glob("#{path}/**/*.*").each do |child_path| + Vlcraptor::Queue.add(child_path) + end + end + end + end + + def self.scrobble(value) + Vlcraptor::Preferences.new[:scrobble] = value == "on" + end + + def self.skip + Vlcraptor::Preferences.new[:skip] = true + end + + def self.stop + Vlcraptor::Preferences.new[:stop] = true + end end