package org.lodder.subtools.multisubdownloader.actions;
import java.io.File;
import java.io.IOException;
import org.lodder.subtools.multisubdownloader.lib.library.FilenameLibraryBuilder;
import org.lodder.subtools.multisubdownloader.lib.library.LibraryActionType;
import org.lodder.subtools.multisubdownloader.lib.library.LibraryOtherFileActionType;
import org.lodder.subtools.multisubdownloader.lib.library.PathLibraryBuilder;
import org.lodder.subtools.multisubdownloader.settings.model.LibrarySettings;
import org.lodder.subtools.sublibrary.DetectLanguage;
import org.lodder.subtools.sublibrary.Manager;
import org.lodder.subtools.sublibrary.model.Release;
import org.lodder.subtools.sublibrary.util.Files;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class RenameAction {
private LibrarySettings librarySettings;
private Manager manager;
private static final Logger LOGGER = LoggerFactory.getLogger(RenameAction.class);
public RenameAction(LibrarySettings librarySettings, Manager manager) {
this.librarySettings = librarySettings;
this.manager =manager;
}
public void rename(File f, Release release) {
String filename = "";
switch (librarySettings.getLibraryAction()) {
case MOVE:
filename = f.getName();
break;
case MOVEANDRENAME:
filename = getNewFilename(f, release);
break;
case NOTHING:
filename = f.getName();
break;
case RENAME:
filename = getNewFilename(f, release);
break;
default:
break;
}
LOGGER.trace("rename: filename [{}]", filename);
PathLibraryBuilder pathLibraryBuilder = new PathLibraryBuilder(librarySettings, manager);
final File newDir = new File(pathLibraryBuilder.build(release));
boolean status = true;
if (!newDir.exists()) {
LOGGER.debug("Creating dir [{}]", newDir.getAbsolutePath());
status = newDir.mkdirs();
}
LOGGER.trace("rename: newDir [{}]", newDir);
if (status) {
final File file = new File(release.getPath(), release.getFilename());
try {
if (librarySettings.getLibraryAction().equals(LibraryActionType.MOVE)
|| librarySettings.getLibraryAction().equals(LibraryActionType.MOVEANDRENAME)) {
LOGGER.info("Moving [{}] to the library folder [{}] , this might take a while... ", filename, newDir);
Files.move(file, new File(newDir, filename));
} else {
LOGGER.info("Moving [{}] to the library folder [{}] , this might take a while... ", filename, release.getPath());
Files.move(file, new File(release.getPath(), filename));
}
if (!librarySettings.getLibraryOtherFileAction().equals(LibraryOtherFileActionType.NOTHING)) {
CleanAction cleanAction = new CleanAction(librarySettings);
cleanAction.cleanUpFiles(release, newDir, filename);
}
File[] listFiles = release.getPath().listFiles();
if (librarySettings.isLibraryRemoveEmptyFolders() && listFiles != null
&& listFiles.length == 0) {
boolean isDeleted = release.getPath().delete();
if (isDeleted){
//do nothing
}
}
} catch (IOException e) {
LOGGER.error("Unsuccessfull in moving the file to the libary", e);
}
}
}
private String getNewFilename(File f, Release release) {
String filename = "";
FilenameLibraryBuilder filenameLibraryBuilder = new FilenameLibraryBuilder(librarySettings, manager);
filename = filenameLibraryBuilder.build(release);
if (release.getExtension().equals("srt")) {
String languageCode = "";
try {
if (librarySettings.isLibraryIncludeLanguageCode()) {
languageCode = DetectLanguage.execute(f);
}
} catch (final Exception e) {
LOGGER.error("Unable to detect language, leaving language code blank", e);
}
filename = filenameLibraryBuilder.buildSubtitle(release, filename, languageCode, 0);
}
return filename;
}
}