diff --git a/client/src/main/java/ctbrec/ui/JavaFxModel.java b/client/src/main/java/ctbrec/ui/JavaFxModel.java index d021a648..432bcf53 100644 --- a/client/src/main/java/ctbrec/ui/JavaFxModel.java +++ b/client/src/main/java/ctbrec/ui/JavaFxModel.java @@ -49,6 +49,11 @@ public class JavaFxModel implements Model { delegate.setName(name); } + @Override + public String getSanitizedNamed() { + return delegate.getSanitizedNamed(); + } + @Override public String getPreview() { return delegate.getPreview(); diff --git a/client/src/main/java/ctbrec/ui/RecordedModelsTab.java b/client/src/main/java/ctbrec/ui/RecordedModelsTab.java index bc90a159..a751084b 100644 --- a/client/src/main/java/ctbrec/ui/RecordedModelsTab.java +++ b/client/src/main/java/ctbrec/ui/RecordedModelsTab.java @@ -349,7 +349,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener { .peek(fxm -> { for (Recording recording : recordings) { if(recording.getStatus() == Recording.State.RECORDING && - recording.getModelName().equals(fxm.getName())) + recording.getModelName().equals(fxm.getSanitizedNamed())) { fxm.getRecordingProperty().set(true); break; diff --git a/common/src/main/java/ctbrec/AbstractModel.java b/common/src/main/java/ctbrec/AbstractModel.java index 6f34272c..3daf29fd 100644 --- a/common/src/main/java/ctbrec/AbstractModel.java +++ b/common/src/main/java/ctbrec/AbstractModel.java @@ -66,6 +66,12 @@ public abstract class AbstractModel implements Model { this.displayName = name; } + @Override + public String getSanitizedNamed() { + String sanitizedName = getName(); + return sanitizedName.replace(' ', '_').replace('\\', '_').replace('/', '_'); + } + @Override public String getPreview() { return preview; diff --git a/common/src/main/java/ctbrec/Config.java b/common/src/main/java/ctbrec/Config.java index 085ab8ba..cffa030c 100644 --- a/common/src/main/java/ctbrec/Config.java +++ b/common/src/main/java/ctbrec/Config.java @@ -137,16 +137,16 @@ public class Config { File dirForRecording = getDirForRecording(model); SimpleDateFormat sdf = new SimpleDateFormat(RECORDING_DATE_FORMAT); String startTime = sdf.format(new Date()); - File targetFile = new File(dirForRecording, model.getName() + '_' + startTime + ".ts"); + File targetFile = new File(dirForRecording, model.getSanitizedNamed() + '_' + startTime + ".ts"); return targetFile; } private File getDirForRecording(Model model) { switch(getSettings().recordingsDirStructure) { case ONE_PER_MODEL: - return new File(getSettings().recordingsDir, model.getName()); + return new File(getSettings().recordingsDir, model.getSanitizedNamed()); case ONE_PER_RECORDING: - File modelDir = new File(getSettings().recordingsDir, model.getName()); + File modelDir = new File(getSettings().recordingsDir, model.getSanitizedNamed()); SimpleDateFormat sdf = new SimpleDateFormat(RECORDING_DATE_FORMAT); String startTime = sdf.format(new Date()); return new File(modelDir, startTime); diff --git a/common/src/main/java/ctbrec/Model.java b/common/src/main/java/ctbrec/Model.java index 1569fff8..fe9a4448 100644 --- a/common/src/main/java/ctbrec/Model.java +++ b/common/src/main/java/ctbrec/Model.java @@ -46,6 +46,11 @@ public interface Model extends Comparable { public void setName(String name); + /** + * Returns a name, which is safe to use with the filesystem + */ + public String getSanitizedNamed(); + public String getPreview(); public void setPreview(String preview); diff --git a/common/src/main/java/ctbrec/recorder/Recorder.java b/common/src/main/java/ctbrec/recorder/Recorder.java index 2eee050f..0a578ce1 100644 --- a/common/src/main/java/ctbrec/recorder/Recorder.java +++ b/common/src/main/java/ctbrec/recorder/Recorder.java @@ -59,7 +59,7 @@ public interface Recorder { List recordings = getRecordings(); return getModels().stream().filter(m -> { for (Recording recording : recordings) { - if (recording.getStatus() == Recording.State.RECORDING && recording.getModelName().equals(m.getName())) { + if (recording.getStatus() == Recording.State.RECORDING && recording.getModelName().equals(m.getSanitizedNamed())) { return true; } } diff --git a/common/src/main/java/ctbrec/recorder/download/HlsDownload.java b/common/src/main/java/ctbrec/recorder/download/HlsDownload.java index 11a0d67c..2207c4b6 100644 --- a/common/src/main/java/ctbrec/recorder/download/HlsDownload.java +++ b/common/src/main/java/ctbrec/recorder/download/HlsDownload.java @@ -58,7 +58,7 @@ public class HlsDownload extends AbstractHlsDownload { super.model = model; SimpleDateFormat sdf = new SimpleDateFormat(Config.RECORDING_DATE_FORMAT); String startTime = sdf.format(new Date()); - Path modelDir = FileSystems.getDefault().getPath(config.getSettings().recordingsDir, model.getName()); + Path modelDir = FileSystems.getDefault().getPath(config.getSettings().recordingsDir, model.getSanitizedNamed()); downloadDir = FileSystems.getDefault().getPath(modelDir.toString(), startTime); if(!model.isOnline()) { diff --git a/common/src/main/java/ctbrec/sites/fc2live/Fc2Model.java b/common/src/main/java/ctbrec/sites/fc2live/Fc2Model.java index 00dcf236..91b6eaec 100644 --- a/common/src/main/java/ctbrec/sites/fc2live/Fc2Model.java +++ b/common/src/main/java/ctbrec/sites/fc2live/Fc2Model.java @@ -394,4 +394,9 @@ public class Fc2Model extends AbstractModel { public void writeSiteSpecificData(JsonWriter writer) throws IOException { writer.name("id").value(id); } + + @Override + public String getSanitizedNamed() { + return id; + } }