Moves some modules and files, adds save subtitles

This commit is contained in:
Guillaume Tâche
2024-08-06 20:03:19 +02:00
parent 5efdaa6f63
commit c2efb71195
117 changed files with 989 additions and 353 deletions

View File

@@ -0,0 +1,20 @@
package com.github.gtache.autosubtitle.modules.subtitle.impl;
import com.github.gtache.autosubtitle.subtitle.converter.SubtitleConverter;
import com.github.gtache.autosubtitle.subtitle.converter.impl.SRTSubtitleConverter;
import dagger.Binds;
import dagger.Module;
import dagger.multibindings.IntoMap;
import dagger.multibindings.StringKey;
/**
* Dagger module for subtitles
*/
@Module
public interface SubtitleModule {
@Binds
@IntoMap
@StringKey("srt")
SubtitleConverter bindsSubtitleConverter(final SRTSubtitleConverter converter);
}

View File

@@ -1,16 +0,0 @@
package com.github.gtache.autosubtitle.modules.subtitles.impl;
import com.github.gtache.autosubtitle.subtitle.SubtitleConverter;
import com.github.gtache.autosubtitle.subtitle.impl.SRTSubtitleConverter;
import dagger.Binds;
import dagger.Module;
/**
* Dagger module for subtitle converter
*/
@Module
public interface ConverterModule {
@Binds
SubtitleConverter bindsSubtitleConverter(final SRTSubtitleConverter converter);
}

View File

@@ -0,0 +1,79 @@
package com.github.gtache.autosubtitle.subtitle.converter.impl;
import com.github.gtache.autosubtitle.Translator;
import com.github.gtache.autosubtitle.subtitle.Subtitle;
import com.github.gtache.autosubtitle.subtitle.SubtitleCollection;
import com.github.gtache.autosubtitle.subtitle.converter.ParseException;
import com.github.gtache.autosubtitle.subtitle.converter.SubtitleConverter;
import com.github.gtache.autosubtitle.subtitle.impl.SubtitleCollectionImpl;
import com.github.gtache.autosubtitle.subtitle.impl.SubtitleImpl;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.Arrays;
import java.util.Comparator;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import static java.util.Objects.requireNonNull;
/**
* Converts subtitles to SRT format
*/
@Singleton
public class SRTSubtitleConverter implements SubtitleConverter {
private final Translator translator;
@Inject
SRTSubtitleConverter(final Translator translator) {
this.translator = requireNonNull(translator);
}
public String format(final SubtitleCollection collection) {
final var subtitles = collection.subtitles().stream().sorted(Comparator.comparing(Subtitle::start).thenComparing(Subtitle::end)).toList();
return IntStream.range(0, subtitles.size()).mapToObj(i -> {
final var subtitle = subtitles.get(i);
return (i + 1) + "\n" +
subtitle.start() + " --> " + subtitle.end() + "\n" +
subtitle.content();
}).collect(Collectors.joining("\n\n"));
}
@Override
public SubtitleCollection parse(final String content) throws ParseException {
try {
final var elements = content.split("\n\n");
final var subtitles = Arrays.stream(elements).filter(element -> !element.isBlank()).map(element -> {
final var lines = element.split("\n");
final var time = lines[1];
final var timeSplit = time.split(" --> ");
final var startTimeStr = timeSplit[0];
final var endTimeStr = timeSplit[1];
final var start = parseTime(startTimeStr);
final var end = parseTime(endTimeStr);
final var text = String.join(" ", Arrays.stream(lines).skip(2).toList());
return new SubtitleImpl(text, start, end, null, null);
}).toList();
final var text = subtitles.stream().map(Subtitle::content).collect(Collectors.joining(" "));
return new SubtitleCollectionImpl(content, subtitles, translator.getLanguage(text));
} catch (final Exception e) {
throw new ParseException(e);
}
}
private static long parseTime(final String timeStr) {
final var split = timeStr.split(":");
final var hours = Integer.parseInt(split[0]);
final var minutes = Integer.parseInt(split[1]);
final var secondsSplit = split[2].split(",");
final var seconds = Integer.parseInt(secondsSplit[0]);
final var millis = Integer.parseInt(secondsSplit[1]);
return (hours * 3600L + minutes * 60L + seconds) * 1000 + millis;
}
@Override
public String formatName() {
return "srt";
}
}

View File

@@ -1,8 +1,8 @@
package com.github.gtache.autosubtitle.subtitle.impl;
package com.github.gtache.autosubtitle.subtitle.extractor.impl;
import com.github.gtache.autosubtitle.subtitle.ExtractEvent;
import com.github.gtache.autosubtitle.subtitle.SubtitleExtractor;
import com.github.gtache.autosubtitle.subtitle.SubtitleExtractorListener;
import com.github.gtache.autosubtitle.subtitle.extractor.ExtractEvent;
import com.github.gtache.autosubtitle.subtitle.extractor.SubtitleExtractor;
import com.github.gtache.autosubtitle.subtitle.extractor.SubtitleExtractorListener;
import java.util.HashSet;
import java.util.Set;

View File

@@ -1,10 +1,10 @@
package com.github.gtache.autosubtitle.subtitle.impl;
package com.github.gtache.autosubtitle.subtitle.extractor.impl;
import com.github.gtache.autosubtitle.subtitle.ExtractEvent;
import com.github.gtache.autosubtitle.subtitle.extractor.ExtractEvent;
/**
* Implementation of {@link ExtractEvent}
*/
public record ExtractEventImpl(String message, double progress) implements ExtractEvent {
}

View File

@@ -1,37 +0,0 @@
package com.github.gtache.autosubtitle.subtitle.impl;
import com.github.gtache.autosubtitle.subtitle.Subtitle;
import com.github.gtache.autosubtitle.subtitle.SubtitleCollection;
import com.github.gtache.autosubtitle.subtitle.SubtitleConverter;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.Comparator;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
/**
* Converts subtitles to SRT format
*/
@Singleton
public class SRTSubtitleConverter implements SubtitleConverter {
@Inject
SRTSubtitleConverter() {
}
public String convert(final SubtitleCollection collection) {
final var subtitles = collection.subtitles().stream().sorted(Comparator.comparing(Subtitle::start).thenComparing(Subtitle::end)).toList();
return IntStream.range(0, subtitles.size()).mapToObj(i -> {
final var subtitle = subtitles.get(i);
return (i + 1) + "\n" +
subtitle.start() + " --> " + subtitle.end() + "\n" +
subtitle.content();
}).collect(Collectors.joining("\n\n"));
}
@Override
public String formatName() {
return "srt";
}
}

View File

@@ -14,5 +14,7 @@ module com.github.gtache.autosubtitle.core {
exports com.github.gtache.autosubtitle.modules.impl;
exports com.github.gtache.autosubtitle.modules.setup.impl;
exports com.github.gtache.autosubtitle.modules.subtitles.impl;
exports com.github.gtache.autosubtitle.subtitle.extractor.impl;
exports com.github.gtache.autosubtitle.subtitle.converter.impl;
exports com.github.gtache.autosubtitle.modules.subtitle.impl;
}