Refactored srt exporting to have less logic client side and implemented color.

This commit is contained in:
scepheo 2014-08-17 11:36:37 +00:00
parent b91180d6a0
commit 0f1ead706b
3 changed files with 77 additions and 52 deletions

View File

@ -44,5 +44,60 @@ namespace BizHawk.Client.Common
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();
}
}
}

View File

@ -54,5 +54,17 @@ namespace BizHawk.Client.Common
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();
}
}
}

View File

@ -171,6 +171,7 @@ namespace BizHawk.Client.EmuHawk
private void Export_Click(object sender, EventArgs e)
{
// Get file to save as
var form = new SaveFileDialog();
form.AddExtension = true;
form.Filter = "SubRip Files (*.srt)|*.srt|All files (*.*)|*.*";
@ -183,6 +184,7 @@ namespace BizHawk.Client.EmuHawk
if (result != System.Windows.Forms.DialogResult.OK)
return;
// Fetch fps
var system = _selectedMovie.HeaderEntries[HeaderKeys.PLATFORM];
var pal = _selectedMovie.HeaderEntries.ContainsKey(HeaderKeys.PAL)
&& _selectedMovie.HeaderEntries[HeaderKeys.PAL] == "1";
@ -205,59 +207,15 @@ namespace BizHawk.Client.EmuHawk
return;
}
int index = 0;
// Create string and write to file
var str = _selectedMovie.Subtitles.ToSubRip(fps);
File.WriteAllText(fileName, str);
var sb = new StringBuilder();
foreach (var subtitle in _selectedMovie.Subtitles)
{
// 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());
// Display success
MessageBox.Show(
string.Format("Subtitles succesfully exported to {0}.", fileName),
"Success"
);
}
}
}