/* * Copyright (c) 2014 Dennis Fischer. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0+ * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: Dennis Fischer */ package de.chaosfisch.google.enddir; import com.google.common.io.Files; import de.chaosfisch.google.youtube.upload.Upload; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; import java.util.regex.Pattern; public class EnddirServiceImpl implements IEnddirService { private static final Logger LOGGER = LoggerFactory.getLogger(EnddirServiceImpl.class); private static final String VALID_FILE_NAMES = "[^a-zA-Z0-9\\._]+"; private static final Pattern VALID_FILE_NAMES_PATTERN = Pattern.compile(VALID_FILE_NAMES); @Override public void moveFileByUpload(final File fileToMove, final Upload upload) { final String fileName = getFileName(fileToMove, upload.getEnddir()); File endFile = null; for (int i = 0; 100 > i; i++) { endFile = new File(incrementFileName(fileName, i)); if (!endFile.exists()) { break; } } if (null == endFile) { LOGGER.error("Too many ambiguous files."); return; } try { Files.move(fileToMove, endFile); } catch (final IOException e) { LOGGER.debug("Failed moving file to {}", endFile); } } private String incrementFileName(final String fileName, final int increment) { if (0 == increment) { return fileName; } return String.format("%s_%d%s", Files.getNameWithoutExtension(fileName), increment, Files.getFileExtension(fileName)); } private String getFileName(final File fileToMove, final File enddir, final String name) { final String normalizedTitle = VALID_FILE_NAMES_PATTERN.matcher(name).replaceAll("_"); return String.format("%s/%s.%s", enddir.getAbsolutePath(), normalizedTitle, Files.getFileExtension(fileToMove.getName())); } private String getFileName(final File fileToMove, final File enddir) { return String.format("%s/%s", enddir.getAbsolutePath(), fileToMove.getName()); } }