#!/usr/bin/env ruby # Copyright (C) 2013, Eric Wong and all contributors # License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt) # # WARNING: totally unstable API, use dtas-ctl for scripting (but the protocol # itself is also unstable, but better than this one probably). require 'dtas/unix_client' require 'yaml' require 'shellwords' def get_track_ids(c) track_ids = c.req("tl tracks") # we could get more, but SEQPACKET limits size... track_ids = track_ids.split(/ /) track_ids.shift track_ids end c = DTAS::UNIXClient.new case cmd = ARGV[0] when "cat" get_track_ids(c).each do |track_id| res = c.req("tl get #{track_id}") res.sub!(/\A1 /, '') puts res end when "clear" get_track_ids(c).each do |track_id| puts "#{track_id} " << c.req("tl remove #{track_id}") end when "addhead" ARGV.shift ARGV.reverse.each do |path| path = File.expand_path(path.b) res = c.req(%W(tl add #{path})) puts "#{path} #{res}" end when "addtail" ARGV.shift track_ids = get_track_ids(c) last_id = track_ids.pop ARGV.each do |path| path = File.expand_path(path.b) req = %W(tl add #{path}) req << last_id.to_s if last_id res = c.req(req) puts "#{path} #{res}" last_id = res if res =~ /\A\d+\z/ end when "reto" fixed = ARGV.delete("-F") ignorecase = ARGV.delete("-i") re = ARGV[1] time = ARGV[2] re = Regexp.quote(re) if fixed re = ignorecase ? %r{#{re}}i : %r{#{re}} get_track_ids(c).each do |track_id| res = c.req("tl get #{track_id}") res.sub!(/\A1 /, '') if re =~ res req = %W(tl goto #{track_id}) req << time if time res = c.req(req) puts res exit(res == "OK") end end warn "#{re.inspect} not found" exit 1 else # act like dtas-ctl for now... puts c.req([ "tl", *ARGV ]) end