]> git.llucax.com Git - personal/documentos.git/blob - mp3_labels/procesar.php
Se agrega el mini sistema de generación automática de etiquetas de CDs de MP3.
[personal/documentos.git] / mp3_labels / procesar.php
1 #!/usr/bin/php4 -qC
2 <?php
3
4 require_once 'HTML/Template/Sigma.php';
5
6 define('X_BASE', 60);
7 define('X_COL2', 205);
8 define('Y_BASE', 65);
9 define('Y_MAX', 310);
10 define('PUNTOS', 10);
11
12 if ($argc < 2) {
13     $name = basename($argv[0]);
14     echo "Modo de uso:\n";
15     echo "  $name <volumen> [<directorio>] [<filename>]\n\n";
16     echo "Por defecto se usa el directorio actual y se guarda el resultado en MP3_<volumen>.glabels\n";
17     exit;
18 }
19
20 $numero = $argv[1];
21 $dir = @$argv[2] ? $argv[2] : '.';
22 $filename = @$argv[3] ? $argv[3] : "MP3_$numero.glabels";
23 $template = 'Template.MP3.glabels';
24 $template_dir = '/home/luca/mp3_labels';
25
26 $datos = array();
27 $d = dir($dir);
28 while (($f = $d->read()) !== false) {
29     if (is_dir("$dir/$f") and $f != '.' and $f != '..') {
30         $d2 = dir("$dir/$f");
31         while (($f2 = $d2->read()) !== false) {
32             if (is_dir("$dir/$f/$f2") and $f2 != '.' and $f2 != '..') {
33                 $is_album = false;
34                 $d3 = dir("$dir/$f/$f2");
35                 while (($f3 = $d3->read()) !== false) {
36                     if (preg_match('/\.mp3$/i', $f3)) {
37                         $is_album = true;
38                     }
39                 }
40                 if ($is_album) {
41                     if (preg_match('/(\d{4}) - (.*)/', $f2, $m)) {
42                         $datos[ucwords($f)][] = ucwords("$m[2] [$m[1]]");
43                     } else {
44                         $datos[ucwords($f)][] = ucwords($f2);
45                     }
46                 }
47             }
48         }
49     }
50 }
51
52 if ($datos) {
53
54     $tpl =& new HTML_Template_Sigma($template_dir);
55     $tpl->loadTemplateFile($template);
56     $tpl->setGlobalVariable(array(
57         'N'      => $numero,
58         'PUNTOS' => PUNTOS,
59     ));
60
61     $x = X_BASE;
62     $y = Y_BASE;
63     ksort($datos);
64     foreach ($datos as $artista => $albums) {
65         if ($y > Y_MAX and !@$col2) {
66             $x = X_COL2;
67             $y = Y_BASE;
68             $col2 = true;
69         }
70         $tpl->setVariable(array(
71             'X'           => $x,
72             'TEXTO_Y'     => $y,
73             'LINEA_Y'     => $y + PUNTOS - 1,
74             'LINEA_ANCHO' => strlen($artista) * 6,
75             'ARTISTA'     => translate($artista),
76         ));
77         sort($albums);
78         for ($i = 0; $i < count($albums); $i++) {
79             // assign data
80             $tpl->setVariable('ALBUM', translate($albums[$i]));
81             // process the block
82             $tpl->parse('ALBUMS');
83         }
84         $y += PUNTOS * ($i + 2);
85         $tpl->parse('ARTISTAS');
86     }
87
88     $results = $tpl->get();
89
90     $fo = fopen($filename, 'w');
91     fputs($fo, $results);
92     fclose($fo);
93 }
94
95 function translate($str) {
96     static $tabla = array();
97     if (!@$tabla) {
98         $tabla = get_html_translation_table(HTML_ENTITIES);
99         array_shift($tabla);
100         foreach ($tabla as $char => $void) {
101             $tabla[$char] = '&#' . ord($char) . ';';
102         }
103     }
104     return strtr($str, $tabla);
105 }
106
107 ?>