Refactored srt exporting to have less logic client side and implemented color.
This commit is contained in:
parent
b91180d6a0
commit
0f1ead706b
|
@ -44,5 +44,60 @@ namespace BizHawk.Client.Common
|
||||||
|
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string ToSubRip(int index, double fps)
|
||||||
|
{
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
|
||||||
|
sb.Append(index.ToString());
|
||||||
|
sb.Append("\r\n");
|
||||||
|
|
||||||
|
// Frame timing
|
||||||
|
double start = (double)Frame;
|
||||||
|
double end = (double)(Frame + Duration);
|
||||||
|
|
||||||
|
int startTime = (int)(start * 1000 / fps);
|
||||||
|
int endTime = (int)(end * 1000 / fps);
|
||||||
|
|
||||||
|
var startString = string.Format(
|
||||||
|
"{0:d2}:{1:d2}:{2:d2},{3:d3}",
|
||||||
|
startTime / 3600000,
|
||||||
|
(startTime / 60000) % 60,
|
||||||
|
(startTime / 1000) % 60,
|
||||||
|
startTime % 1000
|
||||||
|
);
|
||||||
|
|
||||||
|
var endString = string.Format(
|
||||||
|
"{0:d2}:{1:d2}:{2:d2},{3:d3}",
|
||||||
|
endTime / 3600000,
|
||||||
|
(endTime / 60000) % 60,
|
||||||
|
(endTime / 1000) % 60,
|
||||||
|
endTime % 1000
|
||||||
|
);
|
||||||
|
|
||||||
|
sb.Append(startString);
|
||||||
|
sb.Append(" --> ");
|
||||||
|
sb.Append(endString);
|
||||||
|
sb.Append("\r\n");
|
||||||
|
|
||||||
|
// TODO: Positioning
|
||||||
|
|
||||||
|
// Color tag open
|
||||||
|
uint rgb = (Color & 0x00FFFFFF);
|
||||||
|
sb.Append("<font color=\"#");
|
||||||
|
sb.Append(rgb.ToString("X6"));
|
||||||
|
sb.Append("\">");
|
||||||
|
|
||||||
|
// Message text
|
||||||
|
sb.Append(Message);
|
||||||
|
|
||||||
|
// Color tag close
|
||||||
|
sb.Append("</font>\r\n");
|
||||||
|
|
||||||
|
// Seperator
|
||||||
|
sb.Append("\r\n");
|
||||||
|
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,5 +54,17 @@ namespace BizHawk.Client.Common
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string ToSubRip(double fps)
|
||||||
|
{
|
||||||
|
int index = 1;
|
||||||
|
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
|
||||||
|
foreach (var subtitle in this)
|
||||||
|
sb.Append(subtitle.ToSubRip(index++, fps));
|
||||||
|
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -171,6 +171,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
private void Export_Click(object sender, EventArgs e)
|
private void Export_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
// Get file to save as
|
||||||
var form = new SaveFileDialog();
|
var form = new SaveFileDialog();
|
||||||
form.AddExtension = true;
|
form.AddExtension = true;
|
||||||
form.Filter = "SubRip Files (*.srt)|*.srt|All files (*.*)|*.*";
|
form.Filter = "SubRip Files (*.srt)|*.srt|All files (*.*)|*.*";
|
||||||
|
@ -183,6 +184,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
if (result != System.Windows.Forms.DialogResult.OK)
|
if (result != System.Windows.Forms.DialogResult.OK)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// Fetch fps
|
||||||
var system = _selectedMovie.HeaderEntries[HeaderKeys.PLATFORM];
|
var system = _selectedMovie.HeaderEntries[HeaderKeys.PLATFORM];
|
||||||
var pal = _selectedMovie.HeaderEntries.ContainsKey(HeaderKeys.PAL)
|
var pal = _selectedMovie.HeaderEntries.ContainsKey(HeaderKeys.PAL)
|
||||||
&& _selectedMovie.HeaderEntries[HeaderKeys.PAL] == "1";
|
&& _selectedMovie.HeaderEntries[HeaderKeys.PAL] == "1";
|
||||||
|
@ -205,59 +207,15 @@ namespace BizHawk.Client.EmuHawk
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int index = 0;
|
// Create string and write to file
|
||||||
|
var str = _selectedMovie.Subtitles.ToSubRip(fps);
|
||||||
|
File.WriteAllText(fileName, str);
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
// Display success
|
||||||
|
MessageBox.Show(
|
||||||
foreach (var subtitle in _selectedMovie.Subtitles)
|
string.Format("Subtitles succesfully exported to {0}.", fileName),
|
||||||
{
|
"Success"
|
||||||
// Subtitle index
|
);
|
||||||
index++;
|
|
||||||
|
|
||||||
sb.Append(index.ToString());
|
|
||||||
sb.Append("\r\n");
|
|
||||||
|
|
||||||
// Frame timing
|
|
||||||
double start = (double)subtitle.Frame;
|
|
||||||
double end = (double)(subtitle.Frame + subtitle.Duration);
|
|
||||||
|
|
||||||
int startTime = (int)(start * 1000 / fps);
|
|
||||||
int endTime = (int)(end * 1000 / fps);
|
|
||||||
|
|
||||||
var startString = string.Format(
|
|
||||||
"{0:d2}:{1:d2}:{2:d2},{3:d3}",
|
|
||||||
startTime / 3600000,
|
|
||||||
(startTime / 60000) % 60,
|
|
||||||
(startTime / 1000) % 60,
|
|
||||||
startTime % 1000
|
|
||||||
);
|
|
||||||
|
|
||||||
var endString = string.Format(
|
|
||||||
"{0:d2}:{1:d2}:{2:d2},{3:d3}",
|
|
||||||
endTime / 3600000,
|
|
||||||
(endTime / 60000) % 60,
|
|
||||||
(endTime / 1000) % 60,
|
|
||||||
endTime % 1000
|
|
||||||
);
|
|
||||||
|
|
||||||
sb.Append(startString);
|
|
||||||
sb.Append(" --> ");
|
|
||||||
sb.Append(endString);
|
|
||||||
sb.Append("\r\n");
|
|
||||||
|
|
||||||
// TODO: Positioning
|
|
||||||
|
|
||||||
// TODO: Color
|
|
||||||
|
|
||||||
// Message text
|
|
||||||
sb.Append(subtitle.Message);
|
|
||||||
sb.Append("\r\n");
|
|
||||||
|
|
||||||
// Seperator
|
|
||||||
sb.Append("\r\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
File.WriteAllText(form.FileName, sb.ToString());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue