Moves some modules and files, adds save subtitles
This commit is contained in:
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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";
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
@@ -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 {
|
||||
|
||||
|
||||
}
|
||||
@@ -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";
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user