Z poziomu interfejsu XBMC znalezienie takich nieprawidłowości było niemożliwe.
Większość moich filmów ma poprawne nazwy katalogów więc pomyślełem że mogę użyć nazwy katalogu do weryfikcaji tego co XBMC przypisał do danego pliku na dysku.
XBMC składuje swoje dane w sqlite i ma ładny opis co gdzie leży. W związku z tym napisałem króciutki programik do weryfikacji mapowań XBMC:
require 'rubygems'
require 'sqlite3'
STOPWORDS = [ "the", "ii", "iii", "iv", "v", "vi", "3d"]
WHITELIST = YAML.load_file(ENV['HOME'] + '/bin/xbmc-verify.yml')
def detect_movie(title, path)
words = title.downcase.gsub(/[^a-z0-9]+/, " ").gsub(/ +/, " ").split(" ")
words.delete_if { |w| STOPWORDS.include? w }
dir = path.downcase
included = words.collect { |w| dir.include?(w) ? true : nil }.compact
included.length == words.length
end
db = SQLite3::Database.new ENV['HOME'] + "/.xbmc/userdata/Database/MyVideos34.db"
db.execute("select c00, c16, strPath from movieview" ) do |row|
next if WHITELIST.include? File.basename(row[2])
unless detect_movie(row[0], row[2]) or detect_movie(row[1], row[2])
movie_title = row[1]
movie_title << " (#{row[0]})" if row[0] != row[1]
puts "!!! #{movie_title} - #{row[2]}"
end
end