#!/usr/local/bin/perl
#!/usr/bin/perl
#!/bin/perl
# ヽ(京)ノ
use DirHandle;
use constant MINUTE => 60;
use constant HOUR => 60 * MINUTE;
use constant DAY => 24 * HOUR;
use Fatal qw( open sysopen close seek );
# ISO 6429
use Term::ANSIColor qw(:constants);
$Term::ANSIColor::AUTORESET = 1;
do 'config.pl';
do "$ENV{HOME}/autoytb.conf";
$DLDIR ||= '/tmp/';
$base = $DLDIR;
$playlist = 'playlist.pls';
$t = time;
$d = new DirHandle $base;
if (defined $d) {
while (defined($_ = $d->read)) {
print "\n";
next if(/^\.\.?$/); # . .. ignore
next unless(-d "$base$_"); # dir only
print GREEN " --- playlist maker* $_";
if(-f "$base$_/$playlist" ) {
($write_time)=(stat("$base$_/$playlist"))[9];
printf(GREEN . " --- exist($base$_/$playlist), " . CYAN . "%u days ago", ($t - $write_time)/DAY);
next if(($t - $write_time)/DAY<2); # 2day?
}
print YELLOW " => do";
&make_playlist("$base$_/");
}
undef $d;
}
# DIR のみ取り出す
sub make_playlist
{
($dir) = @_;
my %fhash = ();
# ファイル...
my $d = new DirHandle $dir;
if (defined $d) {
while (defined($_ = $d->read)) {
next if(/^\.\.?$/); # . .. ignore
next unless(-f "$dir$_"); # file only
next unless(/\.(avi|mpeg|flv|wmv|divx?|rm|asf|mov|mp4|3gp|mp3|aac|wma|swf)$/i); # . .. ignore
my $file = $_;
# 日本語数字 適当に対応
s/1/1/g;
s/2/2/g;
s/3/3/g;
s/4/4/g;
s/5/5/g;
s/6/6/g;
s/7/7/g;
s/8/8/g;
s/9/9/g;
s/0/0/g;
# 漢数字('A`) 日本語のややこしさここに極まり('A`)
# 二桁以上はこんな感じにしとこう
# e.g.:三千五百八十九 => 3589
s/一(十|捨|百|珀|千|阡|万|萬)?/1/g; s/壱(十|捨|百|珀|千|阡|万|萬)?/1/g;
s/弌(十|捨|百|珀|千|阡|万|萬)?/1/g; s/壹(十|捨|百|珀|千|阡|万|萬)?/1/g;
s/二(十|捨|百|珀|千|阡|万|萬)?/2/g; s/弐(十|捨|百|珀|千|阡|万|萬)?/2/g;
s/貮(十|捨|百|珀|千|阡|万|萬)?/2/g; s/貳(十|捨|百|珀|千|阡|万|萬)?/2/g;
s/三(十|捨|百|珀|千|阡|万|萬)?/3/g; s/参(十|捨|百|珀|千|阡|万|萬)?/3/g;
s/四(十|捨|百|珀|千|阡|万|萬)?/4/g; s/肆(十|捨|百|珀|千|阡|万|萬)?/4/g;
s/五(十|捨|百|珀|千|阡|万|萬)?/5/g; s/伍(十|捨|百|珀|千|阡|万|萬)?/5/g;
s/六(十|捨|百|珀|千|阡|万|萬)?/6/g; s/陸(十|捨|百|珀|千|阡|万|萬)?/6/g;
s/七(十|捨|百|珀|千|阡|万|萬)?/7/g; s/漆(十|捨|百|珀|千|阡|万|萬)?/7/g;
s/貭(十|捨|百|珀|千|阡|万|萬)?/7/g; s/質(十|捨|百|珀|千|阡|万|萬)?/7/g;
s/八(十|捨|百|珀|千|阡|万|萬)?/8/g; s/捌(十|捨|百|珀|千|阡|万|萬)?/8/g;
s/九(十|捨|百|珀|千|阡|万|萬)?/9/g; s/玖(十|捨|百|珀|千|阡|万|萬)?/9/g;
s/〇/0/g; s/零/0/g;
s/十 /10/g; s/捨/10/g;
s/百/100/g; s/珀/100/g;
s/千/1000/g; s/阡/1000/g;
s/万/10000/g; s/萬/10000/g;
# おまえらも結構ややこしいぜ
s/①/_1_/g;
s/②/_2_/g;
s/③/_3_/g;
s/④/_4_/g;
s/⑤/_5_/g;
s/⑥/_6_/g;
s/⑦/_7_/g;
s/⑧/_8_/g;
s/⑨/_9_/g;
s/⑩/_10_/g;
s/⑪/_11_/g;
s/⑫/_12_/g;
s/⑬/_13_/g;
s/⑭/_14_/g;
s/⑮/_15_/g;
s/⑯/_16_/g;
s/⑰/_17_/g;
s/⑱/_18_/g;
s/⑲/_19_/g;
s/⑳/_20_/g;
# フェイク
s/FIN(AL)?/_9999999999_/ig;
s/END/_99999999_/ig;
# s/OP(enn)?(ing)?/_0_/ig;
# s/En?d(ing)?/_9999999_/ig;
# 数値だけ抜き出し
while(1)
{
/(\d+)/ or last;
$fhash{$file} .= sprintf( "%032d", $1);
$_ = $';
}
# 最後にファイル名添加して微妙な物を選別できる幼にする
$fhash{$file} .= $file;
}
undef $d;
}
# 数値のみでソーティング
@keys = sort { $fhash{$a} cmp $fhash{$b} } keys %fhash;
$entry=$#keys+1;
# ファイルがなければ次へ
unless(@keys)
{
unlink "$dir$playlist" or do print RED "$dir$playlist ($!)." and do print GREEN "=>ok.";
return;
}
print GREEN " => make";
# playlist.pls として保存 nkfパイプ
open PLS, "| nkf --cp932 -s > \'$dir$playlist$$.work\'" or die $!;
# plsファイル生成
print PLS <<"_PLAYLIST_";
[playlist]
NumberOfEntries=$entry
Version=2
_PLAYLIST_
$cnt = 1;
foreach(@keys)
{
print PLS "File$cnt=$_\n";
$cnt ++;
}
close PLS;
rename "$dir$playlist$$.work","$dir$playlist" or die $!;
print GREEN " => done.";
return;
};
;