class VideoFile

Constants

SPLITS

Attributes

date[RW]
episode_name[RW]
episode_number[RW]
extension[RW]
filename[RW]
format[RW]
orig_show[RW]
production_code[RW]
rename_by_date[RW]
season[RW]

Public Class Methods

new(filename) click to toggle source
# File lib/tv_renamer/renamer.rb, line 31
def initialize(filename)
  @filename = filename
  @extension ||= @filename.split('.').pop
  @show_pieces = Array.new

  cleaned_filename = @filename.delete("[]").gsub(" - ", " ").gsub(/\([-\w]+\)/, '')

  if date_match = cleaned_filename.match(/\d\d\.\d\d\.\d{4}/)
    @date = Date.parse(date_match[0].gsub('.', '/')).strftime("%d %b %y")

    # remove leading zeros
    @date = @date[1..-1] if @date[0..0] == '0'

    # remove date from filename to prevent matching parts of date as season or episode number
    cleaned_filename = [date_match.pre_match, date_match.post_match].join('[date]')
  end

  SPLITS.each do |char|
    clear_variables

    pieces = remove_extension(cleaned_filename).split(char)

    parse_showname(pieces) if pieces.length > 1

    break if parsed_ok?
  end
end

Public Instance Methods

clear_variables() click to toggle source
# File lib/tv_renamer/renamer.rb, line 59
def clear_variables
  @orig_show = @show = @season = @episode_name = @episode_number = @production_code = @date = nil
  @show_pieces = Array.new
end
parse_showname(pieces) click to toggle source
# File lib/tv_renamer/renamer.rb, line 68
def parse_showname(pieces)
  date = false
  pieces.each do |piece|
    if match = piece.match(/^[sS]([0-9]{1,2})[eE]([0-9]{1,3})$/)
      @season = match[1]
      @episode_number = match[2]
      if(@season[0].chr == '0') then @season.delete!("0") end
      if(@episode_number[0].chr == '0') then @episode_number.delete!("0") end
      break
    elsif match = piece.match(/^[sS]([0-9]{1,2})$/)
      @season = match[1]
      if(@season[0].chr == '0') then @season.delete!("0") end
      if(@episode_number) then break end
    elsif match = piece.match(/^[eE]([0-9]{1,3})$/)
      @episode_number = match[1]
      if(@episode_number[0].chr == '0') then @episode_number.delete!("0") end
      if(@season) then break end
    elsif match = piece.match(/^([0-9]{1,2})[xX]([0-9]{1,3})$/)
      @season = match[1]
      @episode_number = match[2]
      if(@season[0].chr == '0') then @season.delete!("0") end
      if(@episode_number[0].chr == '0') then @episode_number.delete!("0") end
      break
    elsif
    (
      (match = piece.match(/^[0-9]{3,4}$/)) and
      !(
          show_name_from_tokens.downcase == "the" || # Work around for "The 4400"
          show_name_from_tokens.downcase == "sealab" || # Work around for "Sealab 2021"
          (show_name_from_tokens.downcase == "knight rider" and match.to_s == "2008") || # Work around for "Knight Rider 2008"
          (show_name_from_tokens.downcase == "90210" and match.to_s == "90210") # Work around for 90210
      )
    )
      piece = match.to_s
      if piece.length == 3
        @season = piece[0].chr
        @episode_number = piece[1..2]
        if(@episode_number[0].chr == '0') then @episode_number.delete!("0") end
      else
        @season = piece[0..1]
        @episode_number = piece[2..3]
        if(@season[0].chr == '0') then @season.delete!("0") end
        if(@episode_number[0].chr == '0') then @episode_number.delete!("0") end
      end

      break
    elsif piece == "[date]"
      date = true
    else
      if !date
        if !@orig_show
          @show_pieces.push camelize(piece)
        end
      end
    end
  end
end
parsed_ok?() click to toggle source
# File lib/tv_renamer/renamer.rb, line 64
def parsed_ok?
  show && ((@episode_number && @season) || (@rename_by_date && @date))
end
show() click to toggle source
# File lib/tv_renamer/renamer.rb, line 18
def show
  @orig_show ||= show_name_from_tokens
  @show ? @show : @orig_show
end
show=(show) click to toggle source
# File lib/tv_renamer/renamer.rb, line 23
def show=(show)
  @show = show
end
to_s() click to toggle source
# File lib/tv_renamer/renamer.rb, line 27
def to_s
  [show, @season, @episode_number, @date, @production_code, @episode_name].join(' : ')
end

Private Instance Methods

camelize(string) click to toggle source
# File lib/tv_renamer/renamer.rb, line 129
def camelize(string)
  string[0] = string[0].chr.upcase
  string
end
remove_extension(file) click to toggle source
# File lib/tv_renamer/renamer.rb, line 134
def remove_extension(file)
  file.gsub(".#{@extension}", '')
end
show_name_from_tokens() click to toggle source
# File lib/tv_renamer/renamer.rb, line 138
def show_name_from_tokens
  @show_pieces.join ' '
end