1#!/usr/local/bin/perl -w 2 3use strict; 4no warnings; 5 6use English; 7use Cwd; 8use MP3::Tag; 9use File::Find; 10use File::Basename qw(&basename &dirname); 11 12use File::Copy; 13 14# $0 = location of scipt either full or relative, usefull to determine scripts location 15our $prog_dir = $0; 16if(-l $prog_dir) # if its a link find real file 17{ 18 $prog_dir = readlink($prog_dir); 19} 20$prog_dir =~ s/\\/\//g; 21# remove script name from $dir and then we "should" have a nice path to our scripts 22$prog_dir =~ s/^(.*)\/(.*?)$/$1/; 23 24# mems libs 25require "$prog_dir/libs/fixname.pm"; 26require "$prog_dir/libs/run_namefix.pm"; 27require "$prog_dir/libs/misc.pm"; 28require "$prog_dir/libs/config.pm"; 29require "$prog_dir/libs/global_variables.pm"; 30require "$prog_dir/libs/nf_print.pm"; 31 32require "$prog_dir/libs/dir.pm"; 33require "$prog_dir/libs/mp3.pm"; 34require "$prog_dir/libs/filter.pm"; 35require "$prog_dir/libs/undo.pm"; 36require "$prog_dir/libs/html.pm"; 37 38require "$prog_dir/libs/cli/help.pm"; 39require "$prog_dir/libs/cli/print.pm"; 40 41#-------------------------------------------------------------------------------------------------------------- 42# load config file if it exists 43#-------------------------------------------------------------------------------------------------------------- 44 45 46if(-f $main::config_file) 47{ 48 do $main::config_file; # executes config file 49} 50 51if($main::ZERO_LOG) 52{ 53 &clog; 54} 55 56&plog(1, "**** namefix.pl $main::version start *************************************************"); 57&plog(4, "main: \$prog_dir = \"$prog_dir\""); 58 59$main::CLI = 1; # set cli mode flag 60 61#-------------------------------------------------------------------------------------------------------------- 62# CLI Variables 63#-------------------------------------------------------------------------------------------------------------- 64 65my @tmp = (); 66my $text = ""; 67 68#------------------------------------------------------------------------------------------------------------- 69# 1st run check 70#------------------------------------------------------------------------------------------------------------- 71 72if(!-f $main::config_file) 73{ 74 &cli_print("No config file found, Creating.", "<MSG>"); 75 &save_config; 76} 77 78if(!-f $main::casing_file) 79{ 80 &cli_print("No Special Word Casing file found, Creating.", "<MSG>"); 81 &save_file($main::casing_file, join("\n", @main::word_casing_arr)); 82} 83 84if(!-f $main::killwords_file) 85{ 86 &cli_print("No Kill Words file found, Creating.", "<MSG>"); 87 &save_file($main::killwords_file, join("\n", @main::kill_words_arr)); 88} 89 90if(!-f $main::killpat_file) 91{ 92 &cli_print("No Kill Patterns file found, Creating.", "<MSG>"); 93 &save_file($main::killpat_file, join("\n", @main::kill_patterns_arr)); 94} 95 96#------------------------------------------------------------------------------------------------------------- 97# Startup options 98#------------------------------------------------------------------------------------------------------------- 99 100$main::dir = $ARGV[$#ARGV]; 101 102if(-d $main::dir) 103{ 104 chdir $main::dir; 105 $main::dir = cwd(); 106 107 if(!-d $main::dir) 108 { 109 plog(0, "main: $main::dir is not a directory, cowardly refusing to process it"); 110 exit 0; 111 } 112 else 113 { 114 pop @ARGV; 115 } 116} 117else 118{ 119 $main::dir = cwd; 120} 121 122#-------------------------------------------------------------------------------------------------------------- 123# Parse Options 124#-------------------------------------------------------------------------------------------------------------- 125 126$main::advance = 1; # since general cleanup is an option, enable advanced mode by default 127 # and have the general cleanup option turn it off. 128 129$main::ERROR_STDOUT = 1; 130 131for(@ARGV) 132{ 133 # found a short option, process it 134 if($_ !~ /^--/ && $_ =~ /^-/ ) 135 { 136 &proc_short_opts($_); 137 next; 138 } 139 140 if($_ eq "--help") 141 { 142 &cli_help("help"); 143 exit 0; 144 } 145 if($_ eq "--help-short") 146 { 147 &cli_help("short"); 148 exit 0; 149 } 150 if($_ eq "--help-long") 151 { 152 &cli_help("log"); 153 exit 0; 154 } 155 if($_ eq "--help-misc") 156 { 157 &cli_help("misc"); 158 exit 0; 159 } 160 if($_ eq "--help-adv") 161 { 162 &cli_help("adv"); 163 exit 0; 164 } 165 elsif($_ eq "--help-mp3") 166 { 167 &cli_help("mp3"); 168 exit 0; 169 } 170 elsif($_ eq "--help-trunc") 171 { 172 &cli_help("trunc"); 173 exit 0; 174 } 175 elsif($_ eq "--help-enum") 176 { 177 &cli_help("enum"); 178 exit 0; 179 } 180 elsif($_ eq "--help-doc") 181 { 182 &cli_help("doc"); 183 exit 0; 184 } 185 elsif($_ eq "--help-debug") 186 { 187 &cli_help("debug"); 188 exit 0; 189 } 190 elsif($_ eq "--help-hacks") 191 { 192 &cli_help("hacks"); 193 exit 0; 194 } 195 196 elsif($_ eq "--help-all") 197 { 198 &cli_help("all"); 199 exit 0; 200 } 201 202 ##################### 203 # Main Options 204 ##################### 205 206 elsif($_ eq "--cleanup" || $_ eq "--clean" ) 207 { 208 $main::advance = 0; 209 } 210 elsif($_ eq "--rename" || $_ eq "--ren") 211 { 212 $main::testmode = 0; 213 } 214 elsif($_ eq "--case") 215 { 216 $main::case = 1; 217 } 218 elsif($_ eq "--spaces") 219 { 220 $main::spaces = 1; 221 } 222 elsif($_ eq "--dots") 223 { 224 $main::dot2space = 1; 225 } 226 elsif($_ eq "--regexp") 227 { 228 $main::disable_regexp = 0; 229 } 230 elsif(/---remove=(.*)/ || /--rm=(.*)/) 231 { 232 $main::replace = 1; 233 $main::rpwold = $1; 234 } 235 elsif(/--replace=(.*)/ | /--rp=(.*)/) 236 { 237 if(!$main::replace) 238 { 239 plog(0, "main: option replace present but remove option not"); 240 exit; 241 } 242 $main::rpwnew = $1; 243 } 244 elsif(/--append-front=(.*)/ || /--af=(.*)/ ) 245 { 246 $main::front_a = 1; 247 $main::faw = $1; 248 } 249 elsif(/--end-front=(.*)/ || /--ea=(.*)/ ) 250 { 251 $main::end_a = 1; 252 $main::eaw = $1; 253 } 254 elsif($_ eq "--rm-words") 255 { 256 $main::kill_cwords = 1; 257 } 258 259 elsif($_ eq "--rm-pat") 260 { 261 $main::kill_sp_patterns = 1; 262 } 263 elsif($_ eq "--case-sp") 264 { 265 $main::sp_word = 1; 266 } 267 elsif($_ eq "--fs-fix") 268 { 269 $main::fat32fix = 1; 270 } 271 272 ##################### 273 # Advanced Options 274 ##################### 275 276 elsif($_ eq "--undo") 277 { 278 $main::UNDO = 1; 279 } 280 281 elsif($_ eq "--recr") 282 { 283 $main::recr = 1; 284 } 285 elsif($_ eq "--dir") 286 { 287 $main::proc_dirs = 1; 288 } 289 290 elsif($_ eq "--overwrite") 291 { 292 $main::overwrite = 1; 293 } 294 elsif($_ eq "--all-files") 295 { 296 $main::ig_type = 1; 297 } 298 elsif(/--filt=(.*)/) 299 { 300 $main::filter_string = $1; 301 } 302 elsif($_ eq "--filt-regexp") 303 { 304 $main::filter_use_re = 1; 305 } 306 elsif(/--space-char=(.*)/ || /--spc=(.*)/) 307 { 308 $main::space_character = $1; 309 } 310 elsif(/--media-types=(.*)/ || /--mt=(.*)/) 311 { 312 $main::file_ext_2_proc = $1; 313 } 314 315 ####################### 316 # Truncate options 317 ###################### 318 319 elsif(/-trunc=(.*)/) 320 { 321 $main::truncate = 1; 322 $main::truncate_to = $1; 323 324 } 325 elsif(/--trunc-pat=(.*)/) 326 { 327 $main::truncate_style = $1; 328 } 329 elsif(/--trunc-ins=(.*)/) 330 { 331 $main::trunc_char = $1; 332 } 333 334 ######################## 335 # Enumerate Options 336 ######################## 337 338 elsif($_ eq "--enum") 339 { 340 $main::enum = 1; 341 } 342 elsif(/--enum-style=(.*)/) 343 { 344 $main::enum_opt = $1; 345 } 346 elsif(/--enum-zero-pad=(.*)/) 347 { 348 $main::enum_pad = 1; 349 $main::enum_pad_zeros = $1; 350 } 351 352 ##################### 353 # Misc Options 354 ##################### 355 356 elsif($_ eq "--int") 357 { 358 $main::intr_char = 1; 359 } 360 361 elsif($_ eq "--scene" || $_ eq "--sc") 362 { 363 $main::scene = 1; 364 } 365 366 elsif($_ eq "--unscene" || $_ eq "--usc") 367 { 368 $main::unscene = 1; 369 } 370 371 elsif($_ eq "--uc-all" || $_ eq "--uc") 372 { 373 $main::uc_all = 1; 374 } 375 376 elsif($_ eq "--lc-all" || $_ eq "--lc") 377 { 378 $main::lc_all = 1; 379 } 380 381 elsif($_ eq "--rm-nc" || $_ eq "--rmc") 382 { 383 $main::sp_char = 1; 384 } 385 elsif($_ eq "--rm-starting-digits" || $_ eq "--rsd") 386 { 387 $main::digits = 1; 388 } 389 elsif($_ eq "--rm-all-digits" || $_ eq "--rad") 390 { 391 $main::rm_digits = 1; 392 } 393 elsif($_ eq "--pad-hyphen" || $_ eq "--ph") 394 { 395 $main::pad_dash = 1; 396 } 397 elsif($_ eq "--pad-num" || $_ eq "--pn") 398 { 399 $main::pad_digits = 1; 400 } 401 elsif($_ eq "--pad-num-w0" || $_ eq "--p0") 402 { 403 $main::pad_digits_w_zero = 1; 404 } 405 elsif($_ eq "--pad-nnnn-wx" || $_ eq "--px") 406 { 407 $main::split_dddd = 1; 408 } 409 410 ##################### 411 # Hacks Options 412 ##################### 413 414 elsif($_ eq "--html") 415 { 416 $main::HTML_HACK = 1; 417 } 418 elsif(/--browser=(.*)/) 419 { 420 $main::browser = $1; 421 } 422 423 ##################### 424 # MP3 Options 425 ##################### 426 427 elsif($_ eq "--id3-guess") 428 { 429 $main::id3_mode = 1; 430 $main::id3_guess_tag = 1; 431 } 432 elsif($_ eq "--id3-overwrite") 433 { 434 $main::id3_mode = 1; 435 $main::id3_force_guess_tag = 1; 436 } 437 elsif($_ eq "--id3-rm-v1") 438 { 439 $main::id3_mode = 1; 440 $main::id3v1_rm = 1; 441 } 442 elsif($_ eq "--id3-rm-v2") 443 { 444 $main::id3_mode = 1; 445 $main::id3v2_rm = 1; 446 } 447 elsif(/--id3-art=(.*)/) 448 { 449 $main::id3_mode = 1; 450 $main::id3_art_set = 1; 451 $main::id3_art_str = $1; 452 } 453 elsif(/--id3-tit=(.*)/) 454 { 455 $main::id3_mode = 1; 456 $main:: = $1; 457 } 458 elsif(/--id3-tra=(.*)/) 459 { 460 $main::id3_mode = 1; 461 $main:: = $1; 462 } 463 elsif(/--id3-alb=(.*)/) 464 { 465 $main::id3_mode = 1; 466 $main::id3_alb_set = 1; 467 $main::id3_alb_str = $1; 468 } 469 elsif(/--id3-gen=(.*)/) 470 { 471 $main::id3_mode = 1; 472 $main::id3_gen_set = 1; 473 $main::id3_gen_str = $1; 474 } 475 elsif(/--id3-yer=(.*)/) 476 { 477 $main::id3_mode = 1; 478 $main::id3_year_set = 1; 479 $main::id3_year_str = $1; 480 } 481 elsif(/--id3-com=(.*)/) 482 { 483 $main::id3_mode = 1; 484 $main::id3_com_set = 1; 485 $main::id3_com_str = $1; 486 } 487 488 ########################## 489 490 elsif(/--debug=(.*)/) 491 { 492 $main::debug = $1; 493 } 494 elsif($_ eq "--debug-stdout") 495 { 496 $main::LOG_STDOUT = 1; 497 } 498 499 ############################# 500 # Document options 501 ############################# 502 503 504 elsif($_ eq "--changelog") 505 { 506 $text = join("", &readf($main::changelog)); 507 print "$text\n\n"; 508 exit 1; 509 } 510 elsif($_ eq "--about") 511 { 512 $text = join("", &readf($main::about)); 513 print "$text\n\n"; 514 exit 1; 515 } 516 elsif($_ eq "--todo") 517 { 518 $text = join("", &readf($main::todo)); 519 print "$text\n\n"; 520 exit 1; 521 } 522 elsif($_ eq "--thanks") 523 { 524 $text = join("", &readf($main::thanks)); 525 print "$text\n\n"; 526 exit 1; 527 } 528 elsif($_ eq "--links") 529 { 530 $text = join("", &readf($main::links)); 531 print "$text\n\n"; 532 exit 1; 533 } 534 elsif(/--editor=(.*)/) 535 { 536 $main::editor = $1; 537 } 538 elsif($_ eq "--ed-config") 539 { 540 system("$main::editor $main::config_file"); 541 exit 1; 542 } 543 544 elsif($_ eq "--ed-spcase") 545 { 546 system("$main::editor $main::casing_file"); 547 exit 1; 548 } 549 elsif($_ eq "--ed-rmwords") 550 { 551 system("$main::editor $main::killwords_file"); 552 exit 1; 553 } 554 elsif($_ eq "--ed-rmpat") 555 { 556 system("$main::editor $main::killpat_file"); 557 exit 1; 558 } 559 elsif($_ eq "--show-log") 560 { 561 $text = join("", &readf($main::log_file)); 562 print "$text\n\n"; 563 exit 1; 564 } 565 566 ############################# 567 # Save config options 568 ############################# 569 570 elsif($_ eq "--save-options" || $_ eq "--save-opt" || $_ eq "--save-config") 571 { 572 &save_config; 573 &cli_print("Options Saved, exiting", "<MSG>"); 574 exit 1; 575 } 576 else 577 { 578 &plog(0, "main: unkown long option \"$_\", cowardly refusing to run."); 579 exit 0; 580 } 581} 582 583 584#-------------------------------------------------------------------------------------------------------------- 585# Main 586#-------------------------------------------------------------------------------------------------------------- 587 588if(!$main::testmode && !$main::UNDO) 589{ 590 &clear_undo; 591 $main::undo_dir = $main::dir; 592 &save_file($main::undo_dir_file, $main::dir); 593} 594 595# set main dir, run fixname..... 596print "*** Processing dir: $main::dir\n"; 597 598&save_file($main::html_file, " "); # clear html file 599 600&html("<table border=1>"); 601&html("<TR><TD colspan=2><b>Before</b></TD><TD colspan=2><b>After</b></TD></TR>"); 602 603 604if($main::UNDO) 605{ 606 @main::undo_pre = &readf($main::undo_pre_file); 607 @main::undo_cur = &readf($main::undo_cur_file); 608 @tmp = &readf($main::undo_dir_file); 609 $main::undo_dir = $tmp[0]; 610 &undo_rename; 611} 612else 613{ 614 &run_namefix; 615} 616 617&html("</table>"); 618 619if($main::HTML_HACK) 620{ 621 system("$main::browser $main::html_file"); 622} 623 624#-------------------------------------------------------------------------------------------------------------- 625# End 626#-------------------------------------------------------------------------------------------------------------- 627 628sub proc_short_opts 629{ 630 my $string = shift; 631 my @tmp = split(undef, $string); 632 633 for(@tmp) 634 { 635 #print "tmp = \"$_\"\n"; 636 if(/h/) 637 { 638 &cli_help("short"); 639 } 640 elsif($_ eq "-") { next; } 641 elsif($_ eq "!") { $main::testmode = 0; } 642 643 elsif($_ eq "c") { $main::case = 1; } 644 elsif($_ eq "g") { $main::advance = 0; } 645 elsif($_ eq "o") { $main::dot2space = 1; } 646 elsif($_ eq "p") { $main::spaces = 1; } 647 elsif($_ eq "s") { $main::scene = 1; } 648 elsif($_ eq "u") { $main::unscene = 1; } 649 elsif($_ eq "x") { $main::disable_regexp = 0; } 650 651 elsif($_ eq "0") { $main::pad_digits_w_zero = 1; } 652 elsif($_ eq "A") { $main::ig_type = 1; } 653 elsif($_ eq "C") { $main::sp_word = 1; } 654 elsif($_ eq "D") { $main::proc_dirs = 1; } 655 elsif($_ eq "F") { $main::fat32fix = 1; } 656 elsif($_ eq "H") { $main::pad_dash = 1; } 657 elsif($_ eq "K") { $main::kill_cwords = 1; } 658 elsif($_ eq "L") { $main::lc_all = 1; } 659 elsif($_ eq "N") { $main::pad_digits = 1; } 660 elsif($_ eq "P") { $main::kill_sp_patterns = 1; } 661 elsif($_ eq "U") { $main::uc_all = 1; } 662 663 else 664 { 665 &plog(0, "main: unkown short option \"$_\", cowardly refusing to run."); 666 exit 0; 667 } 668 } 669} 670 671