--- shobo_cal.rb 2012-02-03 22:21:32.000000000 +0900 +++ shobo_cal_mod.rb 2015-04-14 02:32:25.763538169 +0900 @@ -23,81 +23,16 @@ require 'rexml/document' require 'scanf' require 'rubygems' -require 'sqlite3' - -FOLTIA_DB = "/server/data/foltia/foltia.sqlite" -FOLTIA_ENCODING="EUC-JP" -FOLTIA_EPG_SUBTITLE_MAX = 48 SHOBOCAL_DB_URL="http://cal.syoboi.jp/db.php?Command=TitleLookup&TID=%d&Fields=Title,SubTitles" FILENAME_FROM = 'a-zA-Z!?:;/\|,*"><' FILENAME_TO = 'a-zA-Z!?:;/¥|,*' - -class DBHolder - def initialize() - @db = SQLite3::Database.new(FOLTIA_DB); - end - def getRaw - return @db - end - def close - @db.close - @@obj = nil - end - def self.getInstance() - unless defined?(@@obj) - @@obj = DBHolder.new - end - return @@obj; - end -end - -class FileIndexRemover - def initialize() - end - def remove(filename) - DBHolder.getInstance.getRaw.execute("DELETE FROM foltia_m2pfiles WHERE m2pfilename = ?", filename.to_s) - end - - def self.getInstance() - unless defined?(@@obj) - @@obj = FileIndexRemover.new - end - return @@obj; - end -end - -class EpgResolver - def initialize() - db = DBHolder.getInstance.getRaw - @SubTitles = Hash.new(); - - station_hash = Hash.new - db.execute("select * from foltia_station") {|row| - station_hash[row[0].to_i] = row[9].to_i - } - db.execute("select * from foltia_subtitle where tid=0") {|row| - key = row[5].to_s+"-"+station_hash[row[2].to_i].to_s; - subtitle = row[4].force_encoding(FOLTIA_ENCODING).encode('UTF-8').tr(FILENAME_FROM, FILENAME_TO); - @SubTitles[key] = subtitle; - } - @SubTitles.freeze - end - def getTitle(data, time, channel) - return @SubTitles[data.to_s+time.to_s+"-"+channel.to_s]; - end - - def self.getInstance() - unless defined?(@@obj) - @@obj = EpgResolver.new - end - return @@obj; - end -end +TITLENAME_FROM = '!?:;/\|,*"><' +TITLENAME_TO = '!?:;/¥|,*' class Title - def initialize(db, title_number) + def initialize(title_number) @SubTitles = Array.new; @TitleNumber = title_number uri = URI.parse(sprintf(SHOBOCAL_DB_URL,title_number)); @@ -116,7 +51,8 @@ return @SubTitles.size end def getTitle - return @Title + # ファイル名に使用できない文字を全角に変換しています。 + return @Title.tr(TITLENAME_FROM, TITLENAME_TO) end def getSubTitle(num) return @SubTitles[num] @@ -129,7 +65,7 @@ end def check(title) unless @TitleBank.has_key? title - @TitleBank[title] = Title.new(@DB, title) + @TitleBank[title] = Title.new(title) end end protected :check @@ -236,31 +172,22 @@ file_info["stid"] = file_info["stid"].rjust([2,digits_of_stid].max,"0"); #話数のパディング←Vistaだとしなくてもうまくソート出来た気がするけど… renamed_title = info[:out_format].format( file_info.merge({"title" => title, "subtitle" => subtitle})) - else - renamed_title = EpgResolver.getInstance.getTitle(file_info["date"],file_info["time"],file_info["channel"]) - if renamed_title.size > FOLTIA_EPG_SUBTITLE_MAX - renamed_title = renamed_title[0..(FOLTIA_EPG_SUBTITLE_MAX-1)]; - end - renamed_title = file_info["date"]+"-"+file_info["time"]+"-"+file_info["channel"]+" "+renamed_title+"."+file_info["ext"] - end - - renamed_path = File::join(File::dirname(filename),renamed_title) - puts "\"#{filename}\" => \"#{renamed_path}\"" - unless info[:dry_run] - if info[:dont_ask] || !FileTest.exist?(renamed_path) - FileIndexRemover.getInstance.remove(basename); - File::rename(filename, renamed_path) - else - accepted = false - while !accepted - print "\"#{renamed_path}\" overwrite? [y/n]: " - $stdout.flush() - buf = ($stdin.gets).strip - accepted = ( buf == "n" || buf == "y" ) - end - if buf == "y" - FileIndexRemover.getInstance.remove(basename); + renamed_path = File::join(File::dirname(filename),renamed_title) + puts "\"#{filename}\" => \"#{renamed_path}\"" + unless info[:dry_run] + if info[:dont_ask] || !FileTest.exist?(renamed_path) File::rename(filename, renamed_path) + else + accepted = false + while !accepted + print "\"#{renamed_path}\" overwrite? [y/n]: " + $stdout.flush() + buf = ($stdin.gets).strip + accepted = ( buf == "n" || buf == "y" ) + end + if buf == "y" + File::rename(filename, renamed_path) + end end end end