| Chunk |
|---|
| Conflicting content |
|---|
private static final String KEY_PROXY_SERVER_PORT = "proxy"; private static final String KEY_RENDERER_DEFAULT = "renderer_default"; private static final String KEY_RENDERER_FORCE_DEFAULT = "renderer_force_default"; <<<<<<< HEAD private static final String KEY_RESUMABLE = "resume"; private static final String KEY_MIN_PLAY_TIME = "min_playtime"; private static final String KEY_MIN_PLAY_TIME_WEB = "min_playtime_web"; private static final String KEY_MIN_PLAY_TIME_FILE = "min_playtime_file"; ======= private static final String KEY_RUN_WIZARD = "run_wizard"; >>>>>>> 151e8780025de7aac682428a44883565f067fdad private static final String KEY_SEARCH_FOLDER = "search_folder"; private static final String KEY_SEARCH_RECURSE = "search_recurse"; private static final String KEY_SERVER_HOSTNAME = "hostname"; |
| Solution content |
|---|
private static final String KEY_PROXY_SERVER_PORT = "proxy"; private static final String KEY_RENDERER_DEFAULT = "renderer_default"; private static final String KEY_RENDERER_FORCE_DEFAULT = "renderer_force_default"; private static final String KEY_RESUMABLE = "resume"; private static final String KEY_MIN_PLAY_TIME = "min_playtime"; private static final String KEY_MIN_PLAY_TIME_WEB = "min_playtime_web"; private static final String KEY_MIN_PLAY_TIME_FILE = "min_playtime_file"; private static final String KEY_RUN_WIZARD = "run_wizard"; private static final String KEY_SEARCH_FOLDER = "search_folder"; private static final String KEY_SEARCH_RECURSE = "search_recurse"; private static final String KEY_SERVER_HOSTNAME = "hostname"; |
| File |
|---|
| PmsConfiguration.java |
| Developer's decision |
|---|
| Concatenation |
| Kind of conflict |
|---|
| Attribute |
| Chunk |
|---|
| Conflicting content |
|---|
import net.pms.dlna.DLNAResource; import net.pms.dlna.InputFile; import net.pms.formats.Format; <<<<<<< HEAD import net.pms.formats.v2.SubtitleType; ======= >>>>>>> 151e8780025de7aac682428a44883565f067fdad import net.pms.formats.v2.SubtitleUtils; import net.pms.io.OutputParams; import net.pms.io.PipeIPCProcess; |
| Solution content |
|---|
import net.pms.dlna.DLNAResource; import net.pms.dlna.InputFile; import net.pms.formats.Format; import net.pms.formats.v2.SubtitleUtils; import net.pms.io.OutputParams; import net.pms.io.PipeIPCProcess; |
| File |
|---|
| FFMpegVideo.java |
| Developer's decision |
|---|
| Version 2 |
| Kind of conflict |
|---|
| Import |
| Chunk |
|---|
| Conflicting content |
|---|
if (extSubs != null) {
StringBuilder s = new StringBuilder();
<<<<<<< HEAD
if (params.sid.getType() == SubtitleType.SUBRIP && params.timeseek > 0) {
// dirty stuff here
try {
externalSubtitlesFileName = SubtitleUtils.dumpSrtTc(externalSubtitlesFileName, params.timeseek);
} catch (Exception e) {
LOGGER.debug("Couldn't trim subs file " + externalSubtitlesFileName + " error " + e);
}
}
CharacterIterator it = new StringCharacterIterator(externalSubtitlesFileName);
=======
CharacterIterator it = new StringCharacterIterator(extSubs);
>>>>>>> 151e8780025de7aac682428a44883565f067fdad
for (char ch = it.first(); ch != CharacterIterator.DONE; ch = it.next()) {
switch (ch) { |
| Solution content |
|---|
if (extSubs != null) {
StringBuilder s = new StringBuilder();
if (params.sid.getType() == SubtitleType.SUBRIP && params.timeseek > 0) {
// dirty stuff here
try {
extSubs = SubtitleUtils.dumpSrtTc(extSubs, params.timeseek);
} catch (Exception e) {
LOGGER.debug("Couldn't trim subs file " + extSubs + " error " + e);
}
}
CharacterIterator it = new StringCharacterIterator(extSubs);
for (char ch = it.first(); ch != CharacterIterator.DONE; ch = it.next()) {
switch (ch) { |
| File |
|---|
| FFMpegVideo.java |
| Developer's decision |
|---|
| Manual |
| Kind of conflict |
|---|
| Comment |
| Chunk |
|---|
| Conflicting content |
|---|
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; <<<<<<< HEAD ======= import java.io.IOException; >>>>>>> 151e8780025de7aac682428a44883565f067fdad import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.HashMap; |
| Solution content |
|---|
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.HashMap; |
| File |
|---|
| SubtitleUtils.java |
| Developer's decision |
|---|
| Version 2 |
| Kind of conflict |
|---|
| Import |
| Chunk |
|---|
| Conflicting content |
|---|
import java.util.HashMap; import java.util.Map; import net.pms.PMS; <<<<<<< HEAD import net.pms.dlna.DLNAMediaInfo; ======= import net.pms.configuration.PmsConfiguration; >>>>>>> 151e8780025de7aac682428a44883565f067fdad import net.pms.dlna.DLNAMediaSubtitle; import net.pms.util.StringUtil; import org.apache.commons.lang.StringUtils; |
| Solution content |
|---|
import java.util.HashMap; import java.util.Map; import net.pms.PMS; import net.pms.configuration.PmsConfiguration; import net.pms.dlna.DLNAMediaInfo; import net.pms.dlna.DLNAMediaSubtitle; import net.pms.util.StringUtil; import org.apache.commons.lang.StringUtils; |
| File |
|---|
| SubtitleUtils.java |
| Developer's decision |
|---|
| Concatenation |
| Kind of conflict |
|---|
| Import |
| Chunk |
|---|
| Conflicting content |
|---|
import net.pms.util.StringUtil;
import org.apache.commons.lang.StringUtils;
import static org.apache.commons.lang.StringUtils.isBlank;
<<<<<<< HEAD
import org.codehaus.plexus.util.StringUtils;
=======
import static org.apache.commons.lang.StringUtils.isNotBlank;
>>>>>>> 151e8780025de7aac682428a44883565f067fdad
import static org.mozilla.universalchardet.Constants.*;
public class SubtitleUtils { |
| Solution content |
|---|
import net.pms.util.StringUtil;
import org.apache.commons.lang.StringUtils;
import static org.apache.commons.lang.StringUtils.isBlank;
import static org.apache.commons.lang.StringUtils.isNotBlank;
import static org.mozilla.universalchardet.Constants.*;
public class SubtitleUtils { |
| File |
|---|
| SubtitleUtils.java |
| Developer's decision |
|---|
| Version 2 |
| Kind of conflict |
|---|
| Import |
| Chunk |
|---|
| Conflicting content |
|---|
skip = false;
}
return fileCharsetToMencoderSubcpOptionMap.get(dlnaMediaSubtitle.getExternalFileCharacterSet());
}
<<<<<<< HEAD
continue;
public static String dumpSrtTc(String in0, double timeseek) throws Exception {
File in = new File(in0);
File out = new File(PMS.getConfiguration().getDataFile(in.getName() +
"_" + System.currentTimeMillis() + "_tc.srt"));
out.delete();
String cp = PMS.getConfiguration().getMencoderSubCp();
BufferedWriter w;
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(in), cp))) {
w = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(out)));
String line;
boolean skip = false;
int n = 1;
while ((line = reader.readLine()) != null) {
try {
Integer.parseInt(line);
continue;
} catch (NumberFormatException e1) {
}
if (StringUtils.isEmpty(line) ) {
if (!skip) {
w.write("\n");
}
continue;
}
if (skip) {
continue;
}
if (line .contains("-->")) {
String startTime = line.substring(0, line.indexOf("-->") - 1).replaceAll(",", ".");
String endTime = line.substring(line.indexOf("-->") + 4).replaceAll(",", ".");
Double start = DLNAMediaInfo.parseDurationString(startTime);
Double stop = DLNAMediaInfo.parseDurationString(endTime);
if (timeseek > start) {
skip = true;
continue;
}
w.write(String.valueOf(n++));
w.write("\n");
w.write(DLNAMediaInfo.getDurationString(start - timeseek));
w.write(" --> ");
w.write(DLNAMediaInfo.getDurationString(stop - timeseek));
w.write("\n");
continue;
}
w.write(line);
w.write("\n");
}
}
w.flush();
w.close();
PMS.get().addTempFile(out, 2 * 24 * 3600 * 1000); /* 2 days only */
return out.getAbsolutePath();
=======
/**
* Converts external subtitles file in SRT format to SSA/ASS format
* @param SrtFile Subtitles file in SRT format
* @param configuration UMS settings
* @return Converted subtitles file in SSA/ASS format
* @throws IOException
*/
public static File ConvertSrtToAss(String SrtFile, PmsConfiguration configuration) throws IOException {
String dir = configuration.getDataFile(SUB_DIR);
File path = new File(dir);
if (!path.exists()) {
path.mkdirs();
}
File outputSubs = new File(path.getAbsolutePath() + File.separator + new File(SrtFile).getName() + "_EXT.ass");
BufferedWriter output;
BufferedReader input;
try {
if (isBlank(configuration.getSubtitlesCodepage())) {
input = new BufferedReader(new InputStreamReader(new FileInputStream(SrtFile)));
} else {
input = new BufferedReader(new InputStreamReader(new FileInputStream(SrtFile), configuration.getSubtitlesCodepage()));
}
output = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputSubs)));
String line;
output.write("[Script Info]\n");
output.write("ScriptType: v4.00+\n");
output.write("\n");
output.write("[V4+ Styles]\n");
output.write("Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding\n");
StringBuilder s = new StringBuilder();
s.append("Style: Default,");
if (!configuration.getFont().isEmpty()) {
s.append(configuration.getFont()).append(",");
} else {
s.append("Arial,");
}
s.append(Integer.toString((int) (14 * Double.parseDouble(configuration.getAssScale())))).append(",");
String primaryColour = Integer.toHexString(configuration.getSubsColor());
primaryColour = primaryColour.substring(6, 8) + primaryColour.substring(4, 6) + primaryColour.substring(2, 4);
s.append("&H").append(primaryColour).append(",");
s.append("&Hffffff,");
s.append("&H0,");
s.append("&H0,");
s.append("0,");
s.append("0,");
s.append("0,");
s.append("1,");
s.append(configuration.getAssOutline()).append(",");
s.append(configuration.getAssShadow()).append(",");
s.append("2,");
s.append("10,");
s.append("10,");
s.append("20,");
s.append("0,");
s.append("0");
output.write(s.toString() + "\n");
output.write("\n");
output.write("[Events]\n");
output.write("Format: Layer, Start, End, Style, Text\n");
String startTime;
String endTime;
while ((line = input.readLine()) != null) {
if (line.contains("-->")) {
startTime = line.substring(0, line.indexOf("-->") - 1).replaceAll(",", ".");
endTime = line.substring(line.indexOf("-->") + 4).replaceAll(",", ".");
startTime = StringUtil.convertTimeToString(StringUtil.convertStringToTime(startTime), StringUtil.ASS_FORMAT);
endTime = StringUtil.convertTimeToString(StringUtil.convertStringToTime(endTime), StringUtil.ASS_FORMAT);
s = new StringBuilder();
s.append("Dialogue: 0,");
s.append(startTime).append(",");
s.append(endTime).append(",");
s.append("Default").append(",");
s.append(convertTags(input.readLine()));
if (isNotBlank(line = input.readLine())) {
s.append("\\N");
s.append(convertTags(line));
}
output.write(s.toString() + "\n");
}
}
} finally { }
input.close();
output.flush();
output.close();
PMS.get().addTempFile(outputSubs, 2 * 24 * 3600 * 1000);
return outputSubs;
}
private static String convertTags(String text) {
String tag;
StringBuilder sb = new StringBuilder();
String[] tmp = text.split("<");
for (String s : tmp) {
if (s.startsWith("/") && s.indexOf(">") == 2) {
tag = s.substring(1, 2);
sb.append("{\\").append(tag).append("0}").append(s.substring(3));
} else if (s.indexOf(">") == 1) {
tag = s.substring(0, 1);
sb.append("{\\").append(tag).append("1}").append(s.substring(2));
} else {
sb.append(s);
}
}
return sb.toString();
}
/**
* Applies timeseeking to subtitles file in SSA/ASS format
* @param SrtFile Subtitles file in SSA/ASS format
* @param timeseek Time stamp value
* @return Converted subtitles file
* @throws IOException
*/
public static File applyTimeSeeking(File SrtFile, double timeseek) throws IOException {
Double startTime;
Double endTime;
String line;
File outputSubs = new File(tempFile(SrtFile.getName() + System.currentTimeMillis()));
BufferedWriter output;
try (BufferedReader input = new BufferedReader(new InputStreamReader(new FileInputStream(SrtFile)))) {
output = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputSubs)));
while ((line = input.readLine()) != null) {
if (line.startsWith("Dialogue:")) {
String[] tempStr = line.split(",");
startTime = StringUtil.convertStringToTime(tempStr[1]);
endTime = StringUtil.convertStringToTime(tempStr[2]);;
if (startTime >= timeseek) {
tempStr[1] = StringUtil.convertTimeToString(startTime - timeseek, StringUtil.ASS_FORMAT);
tempStr[2] = StringUtil.convertTimeToString(endTime - timeseek, StringUtil.ASS_FORMAT);
} else {
}
output.write(StringUtils.join(tempStr, ",") + "\n");
} else {
output.write(line + "\n");
}
}
}
output.flush();
output.close();
PMS.get().addTempFile(outputSubs, 2 * 24 * 3600 * 1000);
return outputSubs;
}
public static String tempFile(String name) {
String dir = PMS.getConfiguration().getDataFile(TEMP_DIR);
File path = new File(dir);
if (!path.exists()) {
path.mkdirs();
}
return path.getAbsolutePath() + File.separator + name + ".tmp";
>>>>>>> 151e8780025de7aac682428a44883565f067fdad
}
} |
| Solution content |
|---|
"_" + System.currentTimeMillis() + "_tc.srt"));
}
return fileCharsetToMencoderSubcpOptionMap.get(dlnaMediaSubtitle.getExternalFileCharacterSet());
}
/**
* Converts external subtitles file in SRT format to SSA/ASS format
* @param SrtFile Subtitles file in SRT format
* @param configuration UMS settings
* @return Converted subtitles file in SSA/ASS format
* @throws IOException
*/
public static File ConvertSrtToAss(String SrtFile, PmsConfiguration configuration) throws IOException {
String dir = configuration.getDataFile(SUB_DIR);
File path = new File(dir);
if (!path.exists()) {
path.mkdirs();
}
File outputSubs = new File(path.getAbsolutePath() + File.separator + new File(SrtFile).getName() + "_EXT.ass");
BufferedWriter output;
BufferedReader input;
try {
if (isBlank(configuration.getSubtitlesCodepage())) {
input = new BufferedReader(new InputStreamReader(new FileInputStream(SrtFile)));
} else {
input = new BufferedReader(new InputStreamReader(new FileInputStream(SrtFile), configuration.getSubtitlesCodepage()));
}
output = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputSubs)));
String line;
output.write("[Script Info]\n");
output.write("ScriptType: v4.00+\n");
output.write("\n");
output.write("[V4+ Styles]\n");
output.write("Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding\n");
StringBuilder s = new StringBuilder();
s.append("Style: Default,");
if (!configuration.getFont().isEmpty()) {
s.append(configuration.getFont()).append(",");
} else {
s.append("Arial,");
}
s.append(Integer.toString((int) (14 * Double.parseDouble(configuration.getAssScale())))).append(",");
String primaryColour = Integer.toHexString(configuration.getSubsColor());
primaryColour = primaryColour.substring(6, 8) + primaryColour.substring(4, 6) + primaryColour.substring(2, 4);
s.append("&H").append(primaryColour).append(",");
s.append("&Hffffff,");
s.append("&H0,");
s.append("&H0,");
s.append("0,");
s.append("0,");
s.append("0,");
s.append("1,");
s.append(configuration.getAssOutline()).append(",");
s.append(configuration.getAssShadow()).append(",");
s.append("2,");
s.append("10,");
s.append("10,");
s.append("20,");
s.append("0,");
s.append("0");
output.write(s.toString() + "\n");
output.write("\n");
output.write("[Events]\n");
output.write("Format: Layer, Start, End, Style, Text\n");
String startTime;
String endTime;
while ((line = input.readLine()) != null) {
if (line.contains("-->")) {
out.delete();
startTime = line.substring(0, line.indexOf("-->") - 1).replaceAll(",", ".");
endTime = line.substring(line.indexOf("-->") + 4).replaceAll(",", ".");
startTime = StringUtil.convertTimeToString(StringUtil.convertStringToTime(startTime), StringUtil.ASS_FORMAT);
endTime = StringUtil.convertTimeToString(StringUtil.convertStringToTime(endTime), StringUtil.ASS_FORMAT);
s = new StringBuilder();
s.append("Dialogue: 0,");
s.append(startTime).append(",");
s.append(endTime).append(",");
s.append("Default").append(",");
s.append(convertTags(input.readLine()));
if (isNotBlank(line = input.readLine())) {
s.append("\\N");
s.append(convertTags(line));
}
output.write(s.toString() + "\n");
}
}
} finally { }
input.close();
output.flush();
output.close();
PMS.get().addTempFile(outputSubs, 2 * 24 * 3600 * 1000);
return outputSubs;
}
private static String convertTags(String text) {
String tag;
StringBuilder sb = new StringBuilder();
String[] tmp = text.split("<");
for (String s : tmp) {
if (s.startsWith("/") && s.indexOf(">") == 2) {
tag = s.substring(1, 2);
sb.append("{\\").append(tag).append("0}").append(s.substring(3));
} else if (s.indexOf(">") == 1) {
tag = s.substring(0, 1);
sb.append("{\\").append(tag).append("1}").append(s.substring(2));
} else {
sb.append(s);
}
}
return sb.toString();
}
/**
* Applies timeseeking to subtitles file in SSA/ASS format
* @param SrtFile Subtitles file in SSA/ASS format
* @param timeseek Time stamp value
* @return Converted subtitles file
* @throws IOException
*/
public static File applyTimeSeeking(File SrtFile, double timeseek) throws IOException {
Double startTime;
Double endTime;
String line;
File outputSubs = new File(tempFile(SrtFile.getName() + System.currentTimeMillis()));
BufferedWriter output;
try (BufferedReader input = new BufferedReader(new InputStreamReader(new FileInputStream(SrtFile)))) {
output = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputSubs)));
while ((line = input.readLine()) != null) {
if (line.startsWith("Dialogue:")) {
String[] tempStr = line.split(",");
startTime = StringUtil.convertStringToTime(tempStr[1]);
endTime = StringUtil.convertStringToTime(tempStr[2]);;
if (startTime >= timeseek) {
tempStr[1] = StringUtil.convertTimeToString(startTime - timeseek, StringUtil.ASS_FORMAT);
tempStr[2] = StringUtil.convertTimeToString(endTime - timeseek, StringUtil.ASS_FORMAT);
} else {
continue;
}
output.write(StringUtils.join(tempStr, ",") + "\n");
} else {
output.write(line + "\n");
}
}
}
output.flush();
output.close();
PMS.get().addTempFile(outputSubs, 2 * 24 * 3600 * 1000);
return outputSubs;
}
public static String tempFile(String name) {
String dir = PMS.getConfiguration().getDataFile(TEMP_DIR);
File path = new File(dir);
if (!path.exists()) {
path.mkdirs();
}
return path.getAbsolutePath() + File.separator + name + ".tmp";
}
public static String dumpSrtTc(String in0, double timeseek) throws Exception {
File in = new File(in0);
File out = new File(PMS.getConfiguration().getDataFile(in.getName() +
String cp = PMS.getConfiguration().getMencoderSubCp();
BufferedWriter w;
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(in), cp))) {
w = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(out)));
String line;
boolean skip = false;
int n = 1;
while ((line = reader.readLine()) != null) {
try {
Integer.parseInt(line);
continue;
} catch (NumberFormatException e1) {
}
if (StringUtils.isEmpty(line) ) {
if (!skip) {
w.write("\n");
}
skip = false;
continue;
}
if (skip) {
continue;
}
if (line .contains("-->")) {
String startTime = line.substring(0, line.indexOf("-->") - 1).replaceAll(",", ".");
String endTime = line.substring(line.indexOf("-->") + 4).replaceAll(",", ".");
Double start = DLNAMediaInfo.parseDurationString(startTime);
Double stop = DLNAMediaInfo.parseDurationString(endTime);
if (timeseek > start) {
skip = true;
continue;
}
w.write(String.valueOf(n++));
w.write("\n");
w.write(DLNAMediaInfo.getDurationString(start - timeseek));
w.write(" --> ");
w.write(DLNAMediaInfo.getDurationString(stop - timeseek));
w.write("\n");
continue;
}
w.write(line);
w.write("\n");
}
}
w.flush();
w.close();
PMS.get().addTempFile(out, 2 * 24 * 3600 * 1000); /* 2 days only */
return out.getAbsolutePath();
}
} |
| File |
|---|
| SubtitleUtils.java |
| Developer's decision |
|---|
| Concatenation |
| Kind of conflict |
|---|
| Comment |
| If statement |
| Method declaration |
| Method invocation |
| Method signature |
| Return statement |
| Variable |