000001002003004005006007008009010011012013014015016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
package br.com.hkp.whatsappwebfix;
import static br.com.hkp.whatsappwebfix.global.Global.EMOJIS_DIRNAME;
import br.com.hkp.whatsappwebfix.gui.ProgressFrame;
import static br.com.hkp.whatsappwebfix.util.FileTools.writeTextFile;
import br.com.hkp.whatsappwebfix.util.Normalizer;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.TreeMap;
public final class NormalizeFilenames
{
private static final String STYLE =
" <style>\n" +
" th\n" +
" {\n" +
" padding:10px\n" +
" }\n" +
" td, th\n" +
" {\n" +
" text-align: left;\n" +
" }\n" +
" tr:nth-child(even)\n" +
" {\n" +
" background-color: #dddddd;\n" +
" }\n" +
" </style>\n";
private static final String HEAD =
"<!DOCTYPE html>\n" +
"<html lang=\"pt-br\">\n" +
"<head>\n" +
" <meta charset=\"UTF-8\">\n" +
" <title>Log</title>\n" + STYLE +
"</head>\n" +
"<body>\n" +
" <table>\n" +
" <tr>\n" +
" <th>Emoji</th>\n" +
" <th>Nome Original</th>\n" +
" <th>Normalizado</th>\n" +
" </tr>\n" +
" <tbody>\n";
private static final String FOOTER =
" </tbody>\n" +
" </table>\n" +
"</body>\n" +
"</html>";
public void normalize(final File dir) throws IOException
{
ProgressFrame normalizeFrame =
new ProgressFrame("Normalizando...", 700, 450);
File[] fileList = dir.listFiles(new EmojiFileFilter());
normalizeFrame.setVisible(true);
if (fileList.length == 0)
{
normalizeFrame.setTitle("Arquivos n\u00e3o encontrados");
normalizeFrame.setSize(375, 120);
normalizeFrame.println
(
"\n\n Nenhum arquivo com imagem de emoji encontrado!"
);
return;
}
normalizeFrame.setProgressBarVisible(fileList.length);
File newDir = new File(dir.getAbsolutePath()+ '/' + EMOJIS_DIRNAME);
String newDirName = newDir.getAbsolutePath();
if (!newDir.exists()) newDir.mkdirs();
int barValue = 0;
TreeMap<String, String> map = new TreeMap<>();
for (File file: fileList)
{
String filename = file.getName();
String normalizedFilename =
Normalizer.filenameToCodepoints(filename) + ".png";
map.put(filename, normalizedFilename);
File newName = new File(newDirName + '/' + normalizedFilename);
normalizeFrame.println
(
filename + " \u21e8 " + EMOJIS_DIRNAME + '/' + newName.getName()
);
file.renameTo(newName);
normalizeFrame.setProgressBarValue(++barValue);
}
normalizeFrame.setTitle("Gravando arquivo de log...");
barValue = 0;
StringBuilder sb = new StringBuilder(map.size() * 300);
sb.append(HEAD).append("\n");
for(String filename: map.keySet())
{
String normalizedFilename = map.get(filename);
sb.append(" <tr>\n");
sb.append(" <td><img src=\"").append(normalizedFilename).
append("\"></td>\n");
sb.append(" <td>").append(filename).append("</td>\n");
sb.append(" <td>").append(normalizedFilename).
append("</td>\n");
sb.append(" </tr>\n");
normalizeFrame.setProgressBarValue(++barValue);
}
sb.append(FOOTER).append("\n");
writeTextFile(newDirName + "/_emoji-list.html", sb.toString());
normalizeFrame.setTitle(barValue + " arquivos normalizados");
java.awt.Toolkit.getDefaultToolkit().beep();
}
private final class EmojiFileFilter implements FilenameFilter
{
@Override
public boolean accept(File dir, String filename)
{
return filename.matches(".+_[0-9a-f\\-_]+\\.png");
}
}
}