Class: SceneToolkit::CLI

Inherits:
Optitron::CLI
  • Object
show all
Defined in:
lib/scene_toolkit/cli.rb,
lib/scene_toolkit/cli/verify.rb,
lib/scene_toolkit/cli/helpers.rb,
lib/scene_toolkit/cli/playlists.rb,
lib/scene_toolkit/cli/auto_rename.rb

Defined Under Namespace

Classes: GoogleMatcher

Instance Method Summary collapse

Instance Method Details

#auto_rename(directory_string) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/scene_toolkit/cli/auto_rename.rb', line 29

def auto_rename(directory_string)
  each_release(directory_string) do |release|
    next if release.valid_name? and not release.name.downcase?

    if release.valid_name?
      release_name = release.name
    else
      release_name = release.heuristic_name
    end

    next if release_name.blank?

    match = nil
    matches = []
    [GoogleMatcher].each do |matcher|
      matches = matcher.match(release_name)
      if matches.one?
        match = matches.first
        break
      end
    end

    if match.present?
      heading(release, :green) { info "Renamed #{release.name} => #{match}" }
      release.rename!(match)
    elsif matches.any?
      heading(release, :yellow) do
        warn "Multiple matches found for #{release_name}"
        matches.each_with_index do |match, i|
          puts "    [#{i}] #{match}"
        end
        puts
        print "  Please enter the correct number (or anything else to skip): "
        begin
          choice = raw_stty_mode { Integer(STDIN.getc) }
          match = matches[choice] || raise(ArgumentError)
          puts choice
          info "Renamed #{release.name} => #{match}"
          release.rename!(match)
        rescue ArgumentError
          puts "skipped"
        end
      end
    else
      heading(release, :red) { error "No matches found for #{release_name}" }
    end
  end
end

#playlists(directory_string) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/scene_toolkit/cli/playlists.rb', line 8

def playlists(directory_string)
  each_release(directory_string) do |release|
    if release.valid_playlist?
      heading(release, :green) do
        info("Skipping. Playlist seems to be OK.")
      end
    else
      heading(release, :green) do
        print_errors(release)

        playlist_filename = release.heuristic_filename("m3u")
        playlist_path = File.join(release.path, playlist_filename)

        if File.exist?(playlist_path) and not params["force"]
          error "Playlist #{playlist_filename} already exists. Use --force to replace it."
        else
          info "Generating new playlist: #{playlist_filename}"
          File.open(playlist_path, "w") do |playlist_file|
            release.mp3_files.map { |f| File.basename(f) }.each do |mp3_file|
              playlist_file.puts mp3_file
            end
          end
        end
      end
    end
  end
end

#verify(directory_string) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/scene_toolkit/cli/verify.rb', line 15

def verify(directory_string)
  validations_to_exec = []
  SceneToolkit::Release.available_validations.each do |name|
    validations_to_exec << name if params.delete(name).eql?(true)
  end

  if validations_to_exec.none?
    validations_to_exec = SceneToolkit::Release::available_validations
  end

  invalid_target_directory = params.delete("move-invalid-to")
  unless invalid_target_directory.nil?
    raise ArgumentError.new("#{invalid_target_directory.inspect} does not exist") unless File.directory?(invalid_target_directory)
  end

  valid_target_directory = params.delete("move-valid-to")
  unless valid_target_directory.nil?
    raise ArgumentError.new("#{valid_target_directory.inspect} does not exist") unless File.directory?(valid_target_directory)
  end

  release_count = 0
  valid_releases = 0
  invalid_releases = 0

  each_release(directory_string) do |release|
    release_count += 1
    if release.valid?(validations_to_exec, params)
      valid_releases += 1
      if not params["hide-valid"] or not valid_target_directory.nil?
        heading(release, :green) do
          print_errors(release)
          print_warnings(release)
          unless valid_target_directory.nil?
            move_release(release, valid_target_directory)
          end
        end
      end
    else
      invalid_releases += 1
      heading(release, :red) do
        print_errors(release)
        print_warnings(release)
        unless invalid_target_directory.nil?
          move_release(release, invalid_target_directory)
        end
      end
    end
  end

  puts "#{valid_releases} of #{release_count} releases valid"
  puts "#{invalid_releases} of #{release_count} releases invalid"
end