mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-11-22 03:02:35 +01:00
A failsafe for network synchronization of subtitle
git-svn-id: https://subtitleedit.googlecode.com/svn/trunk@209 99eadd0c-20b8-1223-b5c4-2a2b2df33de2
This commit is contained in:
parent
e18f350936
commit
f50bb051b0
@ -7375,10 +7375,11 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
SubtitleListview1.SelectedIndexChanged -= SubtitleListview1_SelectedIndexChanged;
|
||||
string message = string.Empty;
|
||||
|
||||
int numberOfLines = 0;
|
||||
List<SeNetworkService.SeUpdate> updates = null;
|
||||
try
|
||||
{
|
||||
updates = _networkSession.GetUpdates(out message);
|
||||
updates = _networkSession.GetUpdates(out message, out numberOfLines);
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
@ -7541,6 +7542,18 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
}
|
||||
}
|
||||
}
|
||||
if (numberOfLines != _subtitle.Paragraphs.Count)
|
||||
{
|
||||
_subtitle = _networkSession.ReloadSubtitle();
|
||||
SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
|
||||
UpdateListviewWithUserLogEntries();
|
||||
_networkSession.LastSubtitle = new Subtitle(_subtitle);
|
||||
_oldSelectedParagraph = null;
|
||||
SubtitleListview1.SelectedIndexChanged += SubtitleListview1_SelectedIndexChanged;
|
||||
_networkSession.TimerStart();
|
||||
RefreshSelectedParagraph();
|
||||
return;
|
||||
}
|
||||
if (deleteIndices.Count > 0)
|
||||
{
|
||||
deleteIndices.Sort();
|
||||
@ -7564,8 +7577,6 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
doReFill = true;
|
||||
}
|
||||
_networkSession.CheckForAndSubmitUpdates(updates); // updates only (no inserts/deletes)
|
||||
|
||||
//TODO: do some compare lines count... and reload if no match!
|
||||
}
|
||||
else
|
||||
{
|
||||
|
32
src/Forms/NetworkJoin.Designer.cs
generated
32
src/Forms/NetworkJoin.Designer.cs
generated
@ -43,7 +43,7 @@
|
||||
// labelStatus
|
||||
//
|
||||
this.labelStatus.AutoSize = true;
|
||||
this.labelStatus.Location = new System.Drawing.Point(35, 197);
|
||||
this.labelStatus.Location = new System.Drawing.Point(35, 173);
|
||||
this.labelStatus.Name = "labelStatus";
|
||||
this.labelStatus.Size = new System.Drawing.Size(59, 13);
|
||||
this.labelStatus.TabIndex = 18;
|
||||
@ -60,13 +60,13 @@
|
||||
//
|
||||
// labelWebServiceUrl
|
||||
//
|
||||
this.labelWebServiceUrl.AutoSize = true;
|
||||
this.labelWebServiceUrl.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.labelWebServiceUrl.Location = new System.Drawing.Point(9, 138);
|
||||
this.labelWebServiceUrl.Location = new System.Drawing.Point(2, 112);
|
||||
this.labelWebServiceUrl.Name = "labelWebServiceUrl";
|
||||
this.labelWebServiceUrl.Size = new System.Drawing.Size(81, 13);
|
||||
this.labelWebServiceUrl.Size = new System.Drawing.Size(92, 21);
|
||||
this.labelWebServiceUrl.TabIndex = 16;
|
||||
this.labelWebServiceUrl.Text = "Web service url";
|
||||
this.labelWebServiceUrl.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
||||
//
|
||||
// comboBoxWebServiceUrl
|
||||
//
|
||||
@ -74,7 +74,7 @@
|
||||
this.comboBoxWebServiceUrl.Items.AddRange(new object[] {
|
||||
"http://www.nikse.dk/se/SeService.asmx",
|
||||
"http://nikse555.brinkster.net/SeService.asmx"});
|
||||
this.comboBoxWebServiceUrl.Location = new System.Drawing.Point(96, 131);
|
||||
this.comboBoxWebServiceUrl.Location = new System.Drawing.Point(96, 107);
|
||||
this.comboBoxWebServiceUrl.Name = "comboBoxWebServiceUrl";
|
||||
this.comboBoxWebServiceUrl.Size = new System.Drawing.Size(290, 21);
|
||||
this.comboBoxWebServiceUrl.TabIndex = 2;
|
||||
@ -82,7 +82,7 @@
|
||||
// buttonCancel
|
||||
//
|
||||
this.buttonCancel.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.buttonCancel.Location = new System.Drawing.Point(311, 173);
|
||||
this.buttonCancel.Location = new System.Drawing.Point(311, 149);
|
||||
this.buttonCancel.Name = "buttonCancel";
|
||||
this.buttonCancel.Size = new System.Drawing.Size(75, 21);
|
||||
this.buttonCancel.TabIndex = 4;
|
||||
@ -92,7 +92,7 @@
|
||||
//
|
||||
// textBoxUserName
|
||||
//
|
||||
this.textBoxUserName.Location = new System.Drawing.Point(96, 79);
|
||||
this.textBoxUserName.Location = new System.Drawing.Point(96, 55);
|
||||
this.textBoxUserName.Name = "textBoxUserName";
|
||||
this.textBoxUserName.Size = new System.Drawing.Size(290, 20);
|
||||
this.textBoxUserName.TabIndex = 0;
|
||||
@ -100,7 +100,7 @@
|
||||
// buttonJoin
|
||||
//
|
||||
this.buttonJoin.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.buttonJoin.Location = new System.Drawing.Point(230, 173);
|
||||
this.buttonJoin.Location = new System.Drawing.Point(230, 149);
|
||||
this.buttonJoin.Name = "buttonJoin";
|
||||
this.buttonJoin.Size = new System.Drawing.Size(75, 21);
|
||||
this.buttonJoin.TabIndex = 3;
|
||||
@ -110,36 +110,36 @@
|
||||
//
|
||||
// labelUserName
|
||||
//
|
||||
this.labelUserName.AutoSize = true;
|
||||
this.labelUserName.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.labelUserName.Location = new System.Drawing.Point(35, 82);
|
||||
this.labelUserName.Location = new System.Drawing.Point(-1, 55);
|
||||
this.labelUserName.Name = "labelUserName";
|
||||
this.labelUserName.Size = new System.Drawing.Size(55, 13);
|
||||
this.labelUserName.Size = new System.Drawing.Size(91, 20);
|
||||
this.labelUserName.TabIndex = 11;
|
||||
this.labelUserName.Text = "Username";
|
||||
this.labelUserName.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
||||
//
|
||||
// textBoxSessionKey
|
||||
//
|
||||
this.textBoxSessionKey.Location = new System.Drawing.Point(96, 105);
|
||||
this.textBoxSessionKey.Location = new System.Drawing.Point(96, 81);
|
||||
this.textBoxSessionKey.Name = "textBoxSessionKey";
|
||||
this.textBoxSessionKey.Size = new System.Drawing.Size(290, 20);
|
||||
this.textBoxSessionKey.TabIndex = 1;
|
||||
//
|
||||
// labelSessionKey
|
||||
//
|
||||
this.labelSessionKey.AutoSize = true;
|
||||
this.labelSessionKey.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.labelSessionKey.Location = new System.Drawing.Point(35, 108);
|
||||
this.labelSessionKey.Location = new System.Drawing.Point(2, 81);
|
||||
this.labelSessionKey.Name = "labelSessionKey";
|
||||
this.labelSessionKey.Size = new System.Drawing.Size(25, 13);
|
||||
this.labelSessionKey.Size = new System.Drawing.Size(88, 20);
|
||||
this.labelSessionKey.TabIndex = 19;
|
||||
this.labelSessionKey.Text = "Key";
|
||||
this.labelSessionKey.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
||||
//
|
||||
// NetworkJoin
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(408, 214);
|
||||
this.ClientSize = new System.Drawing.Size(408, 191);
|
||||
this.Controls.Add(this.textBoxSessionKey);
|
||||
this.Controls.Add(this.labelSessionKey);
|
||||
this.Controls.Add(this.labelStatus);
|
||||
|
19
src/Forms/NetworkLogAndInfo.Designer.cs
generated
19
src/Forms/NetworkLogAndInfo.Designer.cs
generated
@ -49,13 +49,13 @@
|
||||
//
|
||||
// labelSessionKey
|
||||
//
|
||||
this.labelSessionKey.AutoSize = true;
|
||||
this.labelSessionKey.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.labelSessionKey.Location = new System.Drawing.Point(87, 19);
|
||||
this.labelSessionKey.Location = new System.Drawing.Point(12, 19);
|
||||
this.labelSessionKey.Name = "labelSessionKey";
|
||||
this.labelSessionKey.Size = new System.Drawing.Size(64, 13);
|
||||
this.labelSessionKey.Size = new System.Drawing.Size(139, 17);
|
||||
this.labelSessionKey.TabIndex = 21;
|
||||
this.labelSessionKey.Text = "Session key";
|
||||
this.labelSessionKey.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
||||
//
|
||||
// labelLog
|
||||
//
|
||||
@ -75,6 +75,7 @@
|
||||
this.textBoxLog.Multiline = true;
|
||||
this.textBoxLog.Name = "textBoxLog";
|
||||
this.textBoxLog.ReadOnly = true;
|
||||
this.textBoxLog.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
|
||||
this.textBoxLog.Size = new System.Drawing.Size(543, 179);
|
||||
this.textBoxLog.TabIndex = 4;
|
||||
//
|
||||
@ -92,13 +93,13 @@
|
||||
//
|
||||
// labelWebServiceUrl
|
||||
//
|
||||
this.labelWebServiceUrl.AutoSize = true;
|
||||
this.labelWebServiceUrl.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.labelWebServiceUrl.Location = new System.Drawing.Point(70, 71);
|
||||
this.labelWebServiceUrl.Location = new System.Drawing.Point(12, 71);
|
||||
this.labelWebServiceUrl.Name = "labelWebServiceUrl";
|
||||
this.labelWebServiceUrl.Size = new System.Drawing.Size(81, 13);
|
||||
this.labelWebServiceUrl.Size = new System.Drawing.Size(139, 17);
|
||||
this.labelWebServiceUrl.TabIndex = 29;
|
||||
this.labelWebServiceUrl.Text = "Web service url";
|
||||
this.labelWebServiceUrl.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
||||
//
|
||||
// textBoxUserName
|
||||
//
|
||||
@ -110,13 +111,13 @@
|
||||
//
|
||||
// labelUserName
|
||||
//
|
||||
this.labelUserName.AutoSize = true;
|
||||
this.labelUserName.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.labelUserName.Location = new System.Drawing.Point(96, 45);
|
||||
this.labelUserName.Location = new System.Drawing.Point(12, 45);
|
||||
this.labelUserName.Name = "labelUserName";
|
||||
this.labelUserName.Size = new System.Drawing.Size(55, 13);
|
||||
this.labelUserName.Size = new System.Drawing.Size(139, 17);
|
||||
this.labelUserName.TabIndex = 28;
|
||||
this.labelUserName.Text = "Username";
|
||||
this.labelUserName.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
||||
//
|
||||
// textBoxWebServiceUrl
|
||||
//
|
||||
|
18
src/Forms/NetworkStart.Designer.cs
generated
18
src/Forms/NetworkStart.Designer.cs
generated
@ -71,13 +71,13 @@
|
||||
//
|
||||
// labelUserName
|
||||
//
|
||||
this.labelUserName.AutoSize = true;
|
||||
this.labelUserName.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.labelUserName.Location = new System.Drawing.Point(36, 86);
|
||||
this.labelUserName.Location = new System.Drawing.Point(2, 86);
|
||||
this.labelUserName.Name = "labelUserName";
|
||||
this.labelUserName.Size = new System.Drawing.Size(55, 13);
|
||||
this.labelUserName.Size = new System.Drawing.Size(89, 13);
|
||||
this.labelUserName.TabIndex = 3;
|
||||
this.labelUserName.Text = "Username";
|
||||
this.labelUserName.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
||||
//
|
||||
// comboBoxWebServiceUrl
|
||||
//
|
||||
@ -92,13 +92,13 @@
|
||||
//
|
||||
// labelWebServiceUrl
|
||||
//
|
||||
this.labelWebServiceUrl.AutoSize = true;
|
||||
this.labelWebServiceUrl.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.labelWebServiceUrl.Location = new System.Drawing.Point(10, 112);
|
||||
this.labelWebServiceUrl.Location = new System.Drawing.Point(2, 109);
|
||||
this.labelWebServiceUrl.Name = "labelWebServiceUrl";
|
||||
this.labelWebServiceUrl.Size = new System.Drawing.Size(81, 13);
|
||||
this.labelWebServiceUrl.Size = new System.Drawing.Size(89, 16);
|
||||
this.labelWebServiceUrl.TabIndex = 8;
|
||||
this.labelWebServiceUrl.Text = "Web service url";
|
||||
this.labelWebServiceUrl.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
||||
//
|
||||
// labelInfo
|
||||
//
|
||||
@ -120,13 +120,13 @@
|
||||
//
|
||||
// labelSessionKey
|
||||
//
|
||||
this.labelSessionKey.AutoSize = true;
|
||||
this.labelSessionKey.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.labelSessionKey.Location = new System.Drawing.Point(26, 60);
|
||||
this.labelSessionKey.Location = new System.Drawing.Point(-1, 60);
|
||||
this.labelSessionKey.Name = "labelSessionKey";
|
||||
this.labelSessionKey.Size = new System.Drawing.Size(65, 13);
|
||||
this.labelSessionKey.Size = new System.Drawing.Size(92, 17);
|
||||
this.labelSessionKey.TabIndex = 11;
|
||||
this.labelSessionKey.Text = "Session Key";
|
||||
this.labelSessionKey.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
||||
//
|
||||
// textBoxSessionKey
|
||||
//
|
||||
|
@ -140,17 +140,33 @@ namespace Nikse.SubtitleEdit.Logic.Networking
|
||||
_timerWebService.Start();
|
||||
}
|
||||
|
||||
public List<SeNetworkService.SeUpdate> GetUpdates(out string message)
|
||||
public List<SeNetworkService.SeUpdate> GetUpdates(out string message, out int numberOfLines)
|
||||
{
|
||||
List<SeNetworkService.SeUpdate> list = new List<SeNetworkService.SeUpdate>();
|
||||
DateTime newUpdateTime;
|
||||
var updates = _seWs.GetUpdates(SessionId, CurrentUser.UserName, _seWsLastUpdate, out message, out newUpdateTime);
|
||||
var updates = _seWs.GetUpdates(SessionId, CurrentUser.UserName, _seWsLastUpdate, out message, out newUpdateTime, out numberOfLines);
|
||||
foreach (var update in updates)
|
||||
list.Add(update);
|
||||
_seWsLastUpdate = newUpdateTime;
|
||||
return list;
|
||||
}
|
||||
|
||||
public Subtitle ReloadSubtitle()
|
||||
{
|
||||
Subtitle.Paragraphs.Clear();
|
||||
string tempFileName;
|
||||
DateTime updateTime;
|
||||
var sequences = _seWs.GetSubtitle(SessionId, out tempFileName, out updateTime);
|
||||
FileName = tempFileName;
|
||||
_seWsLastUpdate = updateTime;
|
||||
if (sequences != null)
|
||||
{
|
||||
foreach (var sequence in sequences)
|
||||
Subtitle.Paragraphs.Add(new Paragraph(HttpUtility.HtmlDecode(sequence.Text).Replace("<br />", Environment.NewLine), sequence.StartMilliseconds, sequence.EndMilliseconds));
|
||||
}
|
||||
return Subtitle;
|
||||
}
|
||||
|
||||
private void ReloadFromWs()
|
||||
{
|
||||
if (_seWs != null)
|
||||
|
@ -1,7 +1,7 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.1
|
||||
// Runtime Version:4.0.30319.208
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
@ -9,7 +9,7 @@
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//
|
||||
// This source code was auto-generated by Microsoft.VSDesigner, Version 4.0.30319.1.
|
||||
// This source code was auto-generated by Microsoft.VSDesigner, Version 4.0.30319.208.
|
||||
//
|
||||
#pragma warning disable 1591
|
||||
|
||||
@ -359,13 +359,14 @@ namespace Nikse.SubtitleEdit.SeNetworkService {
|
||||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetUpdates", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
public SeUpdate[] GetUpdates(string sessionId, string userName, System.DateTime lastUpdateTime, out string message, out System.DateTime newUpdateTime) {
|
||||
public SeUpdate[] GetUpdates(string sessionId, string userName, System.DateTime lastUpdateTime, out string message, out System.DateTime newUpdateTime, out int numberOfLines) {
|
||||
object[] results = this.Invoke("GetUpdates", new object[] {
|
||||
sessionId,
|
||||
userName,
|
||||
lastUpdateTime});
|
||||
message = ((string)(results[1]));
|
||||
newUpdateTime = ((System.DateTime)(results[2]));
|
||||
numberOfLines = ((int)(results[3]));
|
||||
return ((SeUpdate[])(results[0]));
|
||||
}
|
||||
|
||||
@ -472,7 +473,7 @@ namespace Nikse.SubtitleEdit.SeNetworkService {
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1")]
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.208")]
|
||||
[System.SerializableAttribute()]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
@ -529,7 +530,7 @@ namespace Nikse.SubtitleEdit.SeNetworkService {
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1")]
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.208")]
|
||||
[System.SerializableAttribute()]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
@ -622,7 +623,7 @@ namespace Nikse.SubtitleEdit.SeNetworkService {
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1")]
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.208")]
|
||||
[System.SerializableAttribute()]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
@ -882,6 +883,14 @@ namespace Nikse.SubtitleEdit.SeNetworkService {
|
||||
return ((System.DateTime)(this.results[2]));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public int numberOfLines {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((int)(this.results[3]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
|
@ -161,6 +161,7 @@
|
||||
<s:element minOccurs="0" maxOccurs="1" name="GetUpdatesResult" type="tns:ArrayOfSeUpdate" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="message" type="s:string" />
|
||||
<s:element minOccurs="1" maxOccurs="1" name="newUpdateTime" type="s:dateTime" />
|
||||
<s:element minOccurs="1" maxOccurs="1" name="numberOfLines" type="s:int" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
|
Loading…
Reference in New Issue
Block a user