mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-11-25 04:33:04 +01:00
Working on collaboration via the internet on a subtitle (Networking) - Initial version
git-svn-id: https://subtitleedit.googlecode.com/svn/trunk@181 99eadd0c-20b8-1223-b5c4-2a2b2df33de2
This commit is contained in:
parent
e3fd45f1e7
commit
ef870f8d30
@ -14,12 +14,15 @@ namespace Nikse.SubtitleEdit.Controls
|
||||
public const int ColumnIndexDuration = 3;
|
||||
public const int ColumnIndexText = 4;
|
||||
public const int ColumnIndexTextAlternate = 5;
|
||||
public int ColumnIndexExtra = 5;
|
||||
|
||||
private int _firstVisibleIndex = -1;
|
||||
private string _lineSeparatorString = " || ";
|
||||
public string SubtitleFontName = "Tahoma";
|
||||
public bool SubtitleFontBold = false;
|
||||
public int SubtitleFontSize = 8;
|
||||
public bool IsAlternateTextColumnVisible { get; private set; }
|
||||
public bool IsExtraColumnVisible { get; private set; }
|
||||
|
||||
public int FirstVisibleIndex
|
||||
{
|
||||
@ -62,36 +65,40 @@ namespace Nikse.SubtitleEdit.Controls
|
||||
GridLines = true;
|
||||
}
|
||||
|
||||
public void AddAlternateTextColumn(string text)
|
||||
public void ShowAlternateTextColumn(string text)
|
||||
{
|
||||
if (!IsColumTextAlternateActive)
|
||||
if (!IsAlternateTextColumnVisible)
|
||||
{
|
||||
Columns.Add(new ColumnHeader { Text = text, Width = -2 });
|
||||
ColumnIndexExtra = ColumnIndexTextAlternate + 1;
|
||||
if (IsExtraColumnVisible)
|
||||
{
|
||||
Columns.Insert(ColumnIndexTextAlternate, new ColumnHeader { Text = text, Width = -2 });
|
||||
}
|
||||
else
|
||||
{
|
||||
Columns.Add(new ColumnHeader { Text = text, Width = -2 });
|
||||
}
|
||||
|
||||
int length = Columns[ColumnIndexNumber].Width + Columns[ColumnIndexStart].Width + Columns[ColumnIndexEnd].Width + Columns[ColumnIndexDuration].Width;
|
||||
int lengthAvailable = this.Width - length;
|
||||
Columns[ColumnIndexText].Width = (lengthAvailable / 2) - 15;
|
||||
Columns[ColumnIndexTextAlternate].Width = -2;
|
||||
|
||||
IsAlternateTextColumnVisible = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void RemoveAlternateTextColumn()
|
||||
public void HideAlternateTextColumn()
|
||||
{
|
||||
if (IsColumTextAlternateActive)
|
||||
if (IsAlternateTextColumnVisible)
|
||||
{
|
||||
IsAlternateTextColumnVisible = false;
|
||||
Columns.RemoveAt(ColumnIndexTextAlternate);
|
||||
ColumnIndexExtra = ColumnIndexTextAlternate;
|
||||
SubtitleListView_Resize(null, null);
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsColumTextAlternateActive
|
||||
{
|
||||
get
|
||||
{
|
||||
return Columns.Count - 1 >= ColumnIndexTextAlternate;
|
||||
}
|
||||
}
|
||||
|
||||
void SubtitleListView_Resize(object sender, EventArgs e)
|
||||
{
|
||||
int width = 0;
|
||||
@ -303,6 +310,85 @@ namespace Nikse.SubtitleEdit.Controls
|
||||
Items[index].SubItems[ColumnIndexText].Text = text.Replace(Environment.NewLine, _lineSeparatorString);
|
||||
}
|
||||
|
||||
public void SetTimeAndText(int index, Paragraph paragraph)
|
||||
{
|
||||
if (index >= 0 && index < Items.Count)
|
||||
{
|
||||
ListViewItem item = Items[index];
|
||||
item.SubItems[ColumnIndexStart].Text = paragraph.StartTime.ToString();
|
||||
item.SubItems[ColumnIndexEnd].Text = paragraph.EndTime.ToString();
|
||||
item.SubItems[ColumnIndexDuration].Text = string.Format("{0},{1:000}", paragraph.Duration.Seconds, paragraph.Duration.Milliseconds);
|
||||
Items[index].SubItems[ColumnIndexText].Text = paragraph.Text.Replace(Environment.NewLine, _lineSeparatorString);
|
||||
}
|
||||
}
|
||||
|
||||
public void ShowExtraColumn(string title)
|
||||
{
|
||||
if (!IsExtraColumnVisible)
|
||||
{
|
||||
if (IsAlternateTextColumnVisible)
|
||||
ColumnIndexExtra = ColumnIndexTextAlternate + 1;
|
||||
else
|
||||
ColumnIndexExtra = ColumnIndexTextAlternate;
|
||||
|
||||
Columns.Add(new ColumnHeader { Text = title, Width = 80 });
|
||||
|
||||
int length = Columns[ColumnIndexNumber].Width + Columns[ColumnIndexStart].Width + Columns[ColumnIndexEnd].Width + Columns[ColumnIndexDuration].Width;
|
||||
int lengthAvailable = this.Width - length;
|
||||
|
||||
if (IsAlternateTextColumnVisible)
|
||||
{
|
||||
int part = lengthAvailable / 5;
|
||||
Columns[ColumnIndexText].Width = part * 2;
|
||||
Columns[ColumnIndexTextAlternate].Width = part * 2;
|
||||
Columns[ColumnIndexTextAlternate].Width = part;
|
||||
}
|
||||
else
|
||||
{
|
||||
int part = lengthAvailable / 6;
|
||||
Columns[ColumnIndexText].Width = part * 4;
|
||||
Columns[ColumnIndexTextAlternate].Width = part * 2;
|
||||
}
|
||||
IsExtraColumnVisible = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void HideExtraColumn()
|
||||
{
|
||||
if (IsExtraColumnVisible)
|
||||
{
|
||||
IsExtraColumnVisible = false;
|
||||
Columns.RemoveAt(ColumnIndexExtra);
|
||||
SubtitleListView_Resize(null, null);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetExtraText(int index, string text, Color color)
|
||||
{
|
||||
if (index >= 0 && index < Items.Count)
|
||||
{
|
||||
if (IsAlternateTextColumnVisible)
|
||||
ColumnIndexExtra = ColumnIndexTextAlternate + 1;
|
||||
else
|
||||
ColumnIndexExtra = ColumnIndexTextAlternate;
|
||||
if (!IsExtraColumnVisible)
|
||||
{
|
||||
ShowExtraColumn(string.Empty);
|
||||
}
|
||||
if (Items[index].SubItems.Count <= ColumnIndexExtra)
|
||||
Items[index].SubItems.Add(new ListViewItem.ListViewSubItem());
|
||||
if (Items[index].SubItems.Count <= ColumnIndexExtra)
|
||||
Items[index].SubItems.Add(new ListViewItem.ListViewSubItem());
|
||||
Items[index].SubItems[ColumnIndexExtra].Text = text;
|
||||
|
||||
|
||||
Items[index].UseItemStyleForSubItems = false;
|
||||
Items[index].SubItems[ColumnIndexExtra].BackColor = Color.AntiqueWhite;
|
||||
Items[index].SubItems[ColumnIndexExtra].ForeColor = color;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void SetAlternateText(int index, string text)
|
||||
{
|
||||
if (index >= 0 && index < Items.Count && Columns.Count >= ColumnIndexTextAlternate + 1)
|
||||
@ -406,7 +492,7 @@ namespace Nikse.SubtitleEdit.Controls
|
||||
Columns[ColumnIndexNumber].Width = 45;
|
||||
Columns[ColumnIndexEnd].Width = 80;
|
||||
Columns[ColumnIndexDuration].Width = 55;
|
||||
if (IsColumTextAlternateActive)
|
||||
if (IsAlternateTextColumnVisible)
|
||||
{
|
||||
Columns[ColumnIndexText].Width = 250;
|
||||
Columns[ColumnIndexTextAlternate].Width = -2;
|
||||
|
@ -21,7 +21,6 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
buttonPreview.Text = Configuration.Settings.Language.General.Preview;
|
||||
buttonOK.Text = Configuration.Settings.Language.General.OK;
|
||||
buttonCancel.Text = Configuration.Settings.Language.General.Cancel;
|
||||
|
||||
}
|
||||
|
||||
public List<Paragraph> TypewriterParagraphs
|
||||
|
159
src/Forms/Main.Designer.cs
generated
159
src/Forms/Main.Designer.cs
generated
@ -33,6 +33,7 @@
|
||||
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
|
||||
this.labelStatus = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.toolStripSelected = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.toolStripStatusNetworking = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
|
||||
this.toolStripButtonFileNew = new System.Windows.Forms.ToolStripButton();
|
||||
this.toolStripButtonFileOpen = new System.Windows.Forms.ToolStripButton();
|
||||
@ -138,12 +139,19 @@
|
||||
this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.changeLanguageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItemNetworking = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.startServerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.joinSessionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.chatToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.showSessionKeyLogToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.leaveSessionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.helpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tabControlSubtitle = new System.Windows.Forms.TabControl();
|
||||
this.tabPage1 = new System.Windows.Forms.TabPage();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.labelCharactersPerSecond = new System.Windows.Forms.Label();
|
||||
this.labelAutoDuration = new System.Windows.Forms.Label();
|
||||
this.panelSingleLine = new System.Windows.Forms.Panel();
|
||||
this.labelTextLineTotal = new System.Windows.Forms.Label();
|
||||
@ -217,7 +225,7 @@
|
||||
this.panelVideoPlayer = new System.Windows.Forms.Panel();
|
||||
this.labelSubtitle = new System.Windows.Forms.Label();
|
||||
this.mediaPlayer = new Nikse.SubtitleEdit.Controls.VideoPlayerContainer();
|
||||
this.checkBoxSyncListViewWithVideWhilePlaying = new System.Windows.Forms.CheckBox();
|
||||
this.checkBoxSyncListViewWithVideoWhilePlaying = new System.Windows.Forms.CheckBox();
|
||||
this.labelVideoInfo = new System.Windows.Forms.Label();
|
||||
this.trackBarWaveFormPosition = new System.Windows.Forms.TrackBar();
|
||||
this.panelWaveFormControls = new System.Windows.Forms.Panel();
|
||||
@ -284,7 +292,7 @@
|
||||
this.buttonAdjustSecForward1 = new System.Windows.Forms.Button();
|
||||
this.numericUpDownSecAdjust1 = new System.Windows.Forms.NumericUpDown();
|
||||
this.buttonAdjustSecBack1 = new System.Windows.Forms.Button();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.labelVideoPosition2 = new System.Windows.Forms.Label();
|
||||
this.buttonAdjustGoToPosAndPause = new System.Windows.Forms.Button();
|
||||
this.buttonAdjustPlayBefore = new System.Windows.Forms.Button();
|
||||
this.timeUpDownVideoPositionAdjust = new Nikse.SubtitleEdit.Controls.TimeUpDown();
|
||||
@ -301,7 +309,6 @@
|
||||
this.mergeWithNextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.toolStripMenuItemWaveFormPlaySelection = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.labelCharactersPerSecond = new System.Windows.Forms.Label();
|
||||
this.statusStrip1.SuspendLayout();
|
||||
this.toolStrip1.SuspendLayout();
|
||||
this.menuStrip1.SuspendLayout();
|
||||
@ -336,7 +343,8 @@
|
||||
this.statusStrip1.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.labelStatus,
|
||||
this.toolStripSelected});
|
||||
this.toolStripSelected,
|
||||
this.toolStripStatusNetworking});
|
||||
this.statusStrip1.Location = new System.Drawing.Point(0, 658);
|
||||
this.statusStrip1.Name = "statusStrip1";
|
||||
this.statusStrip1.Size = new System.Drawing.Size(1502, 25);
|
||||
@ -354,11 +362,22 @@
|
||||
//
|
||||
this.toolStripSelected.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
|
||||
this.toolStripSelected.Name = "toolStripSelected";
|
||||
this.toolStripSelected.Size = new System.Drawing.Size(787, 20);
|
||||
this.toolStripSelected.Size = new System.Drawing.Size(570, 20);
|
||||
this.toolStripSelected.Spring = true;
|
||||
this.toolStripSelected.Text = "toolStripSelected";
|
||||
this.toolStripSelected.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
//
|
||||
// toolStripStatusNetworking
|
||||
//
|
||||
this.toolStripStatusNetworking.Image = global::Nikse.SubtitleEdit.Properties.Resources.connect;
|
||||
this.toolStripStatusNetworking.Name = "toolStripStatusNetworking";
|
||||
this.toolStripStatusNetworking.Padding = new System.Windows.Forms.Padding(50, 0, 0, 0);
|
||||
this.toolStripStatusNetworking.Size = new System.Drawing.Size(217, 20);
|
||||
this.toolStripStatusNetworking.Text = "toolStripStatusNetworking";
|
||||
this.toolStripStatusNetworking.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
this.toolStripStatusNetworking.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage;
|
||||
this.toolStripStatusNetworking.Click += new System.EventHandler(this.toolStripStatusNetworking_Click);
|
||||
//
|
||||
// toolStrip1
|
||||
//
|
||||
this.toolStrip1.AutoSize = false;
|
||||
@ -652,6 +671,7 @@
|
||||
this.toolStripMenuItemSyncronization,
|
||||
this.toolStripMenuItemAutoTranslate,
|
||||
this.optionsToolStripMenuItem,
|
||||
this.toolStripMenuItemNetworking,
|
||||
this.helpToolStripMenuItem});
|
||||
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
|
||||
this.menuStrip1.Name = "menuStrip1";
|
||||
@ -1277,6 +1297,54 @@
|
||||
this.changeLanguageToolStripMenuItem.Text = "Change language...";
|
||||
this.changeLanguageToolStripMenuItem.Click += new System.EventHandler(this.ChangeLanguageToolStripMenuItemClick);
|
||||
//
|
||||
// toolStripMenuItemNetworking
|
||||
//
|
||||
this.toolStripMenuItemNetworking.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.startServerToolStripMenuItem,
|
||||
this.joinSessionToolStripMenuItem,
|
||||
this.chatToolStripMenuItem,
|
||||
this.showSessionKeyLogToolStripMenuItem,
|
||||
this.leaveSessionToolStripMenuItem});
|
||||
this.toolStripMenuItemNetworking.Name = "toolStripMenuItemNetworking";
|
||||
this.toolStripMenuItemNetworking.Size = new System.Drawing.Size(82, 20);
|
||||
this.toolStripMenuItemNetworking.Text = "Networking";
|
||||
this.toolStripMenuItemNetworking.DropDownOpening += new System.EventHandler(this.toolStripMenuItemNetworking_DropDownOpening);
|
||||
//
|
||||
// startServerToolStripMenuItem
|
||||
//
|
||||
this.startServerToolStripMenuItem.Name = "startServerToolStripMenuItem";
|
||||
this.startServerToolStripMenuItem.Size = new System.Drawing.Size(215, 22);
|
||||
this.startServerToolStripMenuItem.Text = "Start new session";
|
||||
this.startServerToolStripMenuItem.Click += new System.EventHandler(this.startServerToolStripMenuItem_Click);
|
||||
//
|
||||
// joinSessionToolStripMenuItem
|
||||
//
|
||||
this.joinSessionToolStripMenuItem.Name = "joinSessionToolStripMenuItem";
|
||||
this.joinSessionToolStripMenuItem.Size = new System.Drawing.Size(215, 22);
|
||||
this.joinSessionToolStripMenuItem.Text = "Join session";
|
||||
this.joinSessionToolStripMenuItem.Click += new System.EventHandler(this.joinSessionToolStripMenuItem_Click);
|
||||
//
|
||||
// chatToolStripMenuItem
|
||||
//
|
||||
this.chatToolStripMenuItem.Name = "chatToolStripMenuItem";
|
||||
this.chatToolStripMenuItem.Size = new System.Drawing.Size(215, 22);
|
||||
this.chatToolStripMenuItem.Text = "Chat";
|
||||
this.chatToolStripMenuItem.Click += new System.EventHandler(this.chatToolStripMenuItem_Click);
|
||||
//
|
||||
// showSessionKeyLogToolStripMenuItem
|
||||
//
|
||||
this.showSessionKeyLogToolStripMenuItem.Name = "showSessionKeyLogToolStripMenuItem";
|
||||
this.showSessionKeyLogToolStripMenuItem.Size = new System.Drawing.Size(215, 22);
|
||||
this.showSessionKeyLogToolStripMenuItem.Text = "Show session info and log";
|
||||
this.showSessionKeyLogToolStripMenuItem.Click += new System.EventHandler(this.showSessionKeyLogToolStripMenuItem_Click);
|
||||
//
|
||||
// leaveSessionToolStripMenuItem
|
||||
//
|
||||
this.leaveSessionToolStripMenuItem.Name = "leaveSessionToolStripMenuItem";
|
||||
this.leaveSessionToolStripMenuItem.Size = new System.Drawing.Size(215, 22);
|
||||
this.leaveSessionToolStripMenuItem.Text = "Leave session";
|
||||
this.leaveSessionToolStripMenuItem.Click += new System.EventHandler(this.leaveSessionToolStripMenuItem_Click);
|
||||
//
|
||||
// helpToolStripMenuItem
|
||||
//
|
||||
this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
@ -1290,14 +1358,14 @@
|
||||
//
|
||||
this.helpToolStripMenuItem1.Name = "helpToolStripMenuItem1";
|
||||
this.helpToolStripMenuItem1.ShortcutKeys = System.Windows.Forms.Keys.F1;
|
||||
this.helpToolStripMenuItem1.Size = new System.Drawing.Size(118, 22);
|
||||
this.helpToolStripMenuItem1.Size = new System.Drawing.Size(152, 22);
|
||||
this.helpToolStripMenuItem1.Text = "Help";
|
||||
this.helpToolStripMenuItem1.Click += new System.EventHandler(this.HelpToolStripMenuItem1Click);
|
||||
//
|
||||
// aboutToolStripMenuItem
|
||||
//
|
||||
this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
|
||||
this.aboutToolStripMenuItem.Size = new System.Drawing.Size(118, 22);
|
||||
this.aboutToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
|
||||
this.aboutToolStripMenuItem.Text = "About";
|
||||
this.aboutToolStripMenuItem.Click += new System.EventHandler(this.AboutToolStripMenuItemClick);
|
||||
//
|
||||
@ -1356,6 +1424,16 @@
|
||||
this.groupBox1.TabIndex = 1;
|
||||
this.groupBox1.TabStop = false;
|
||||
//
|
||||
// labelCharactersPerSecond
|
||||
//
|
||||
this.labelCharactersPerSecond.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.labelCharactersPerSecond.Location = new System.Drawing.Point(1170, 12);
|
||||
this.labelCharactersPerSecond.Name = "labelCharactersPerSecond";
|
||||
this.labelCharactersPerSecond.Size = new System.Drawing.Size(177, 13);
|
||||
this.labelCharactersPerSecond.TabIndex = 31;
|
||||
this.labelCharactersPerSecond.Text = "labelCharactersPerSecond";
|
||||
this.labelCharactersPerSecond.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
//
|
||||
// labelAutoDuration
|
||||
//
|
||||
this.labelAutoDuration.AutoSize = true;
|
||||
@ -1471,9 +1549,9 @@
|
||||
//
|
||||
// buttonAutoBreak
|
||||
//
|
||||
this.buttonAutoBreak.Location = new System.Drawing.Point(136, 75);
|
||||
this.buttonAutoBreak.Location = new System.Drawing.Point(139, 75);
|
||||
this.buttonAutoBreak.Name = "buttonAutoBreak";
|
||||
this.buttonAutoBreak.Size = new System.Drawing.Size(57, 21);
|
||||
this.buttonAutoBreak.Size = new System.Drawing.Size(64, 21);
|
||||
this.buttonAutoBreak.TabIndex = 4;
|
||||
this.buttonAutoBreak.Text = "Auto br";
|
||||
this.buttonAutoBreak.UseVisualStyleBackColor = true;
|
||||
@ -1481,9 +1559,9 @@
|
||||
//
|
||||
// buttonPrevious
|
||||
//
|
||||
this.buttonPrevious.Location = new System.Drawing.Point(6, 75);
|
||||
this.buttonPrevious.Location = new System.Drawing.Point(7, 75);
|
||||
this.buttonPrevious.Name = "buttonPrevious";
|
||||
this.buttonPrevious.Size = new System.Drawing.Size(57, 21);
|
||||
this.buttonPrevious.Size = new System.Drawing.Size(64, 21);
|
||||
this.buttonPrevious.TabIndex = 2;
|
||||
this.buttonPrevious.Text = "< Prev ";
|
||||
this.buttonPrevious.UseVisualStyleBackColor = true;
|
||||
@ -1491,9 +1569,9 @@
|
||||
//
|
||||
// buttonNext
|
||||
//
|
||||
this.buttonNext.Location = new System.Drawing.Point(69, 75);
|
||||
this.buttonNext.Location = new System.Drawing.Point(73, 75);
|
||||
this.buttonNext.Name = "buttonNext";
|
||||
this.buttonNext.Size = new System.Drawing.Size(57, 21);
|
||||
this.buttonNext.Size = new System.Drawing.Size(64, 21);
|
||||
this.buttonNext.TabIndex = 3;
|
||||
this.buttonNext.Text = "Next >";
|
||||
this.buttonNext.UseVisualStyleBackColor = true;
|
||||
@ -1955,7 +2033,7 @@
|
||||
this.groupBoxVideo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.groupBoxVideo.Controls.Add(this.panelVideoPlayer);
|
||||
this.groupBoxVideo.Controls.Add(this.checkBoxSyncListViewWithVideWhilePlaying);
|
||||
this.groupBoxVideo.Controls.Add(this.checkBoxSyncListViewWithVideoWhilePlaying);
|
||||
this.groupBoxVideo.Controls.Add(this.labelVideoInfo);
|
||||
this.groupBoxVideo.Controls.Add(this.trackBarWaveFormPosition);
|
||||
this.groupBoxVideo.Controls.Add(this.panelWaveFormControls);
|
||||
@ -2008,15 +2086,15 @@
|
||||
this.mediaPlayer.DragDrop += new System.Windows.Forms.DragEventHandler(this.mediaPlayer_DragDrop);
|
||||
this.mediaPlayer.DragEnter += new System.Windows.Forms.DragEventHandler(this.mediaPlayer_DragEnter);
|
||||
//
|
||||
// checkBoxSyncListViewWithVideWhilePlaying
|
||||
// checkBoxSyncListViewWithVideoWhilePlaying
|
||||
//
|
||||
this.checkBoxSyncListViewWithVideWhilePlaying.AutoSize = true;
|
||||
this.checkBoxSyncListViewWithVideWhilePlaying.Location = new System.Drawing.Point(561, 11);
|
||||
this.checkBoxSyncListViewWithVideWhilePlaying.Name = "checkBoxSyncListViewWithVideWhilePlaying";
|
||||
this.checkBoxSyncListViewWithVideWhilePlaying.Size = new System.Drawing.Size(207, 17);
|
||||
this.checkBoxSyncListViewWithVideWhilePlaying.TabIndex = 1;
|
||||
this.checkBoxSyncListViewWithVideWhilePlaying.Text = "Sync listview with movie when playing";
|
||||
this.checkBoxSyncListViewWithVideWhilePlaying.UseVisualStyleBackColor = true;
|
||||
this.checkBoxSyncListViewWithVideoWhilePlaying.AutoSize = true;
|
||||
this.checkBoxSyncListViewWithVideoWhilePlaying.Location = new System.Drawing.Point(561, 11);
|
||||
this.checkBoxSyncListViewWithVideoWhilePlaying.Name = "checkBoxSyncListViewWithVideoWhilePlaying";
|
||||
this.checkBoxSyncListViewWithVideoWhilePlaying.Size = new System.Drawing.Size(207, 17);
|
||||
this.checkBoxSyncListViewWithVideoWhilePlaying.TabIndex = 1;
|
||||
this.checkBoxSyncListViewWithVideoWhilePlaying.Text = "Sync listview with movie when playing";
|
||||
this.checkBoxSyncListViewWithVideoWhilePlaying.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// labelVideoInfo
|
||||
//
|
||||
@ -2640,7 +2718,7 @@
|
||||
this.tabPageAdjust.Controls.Add(this.buttonAdjustSecForward1);
|
||||
this.tabPageAdjust.Controls.Add(this.numericUpDownSecAdjust1);
|
||||
this.tabPageAdjust.Controls.Add(this.buttonAdjustSecBack1);
|
||||
this.tabPageAdjust.Controls.Add(this.label4);
|
||||
this.tabPageAdjust.Controls.Add(this.labelVideoPosition2);
|
||||
this.tabPageAdjust.Controls.Add(this.buttonAdjustGoToPosAndPause);
|
||||
this.tabPageAdjust.Controls.Add(this.buttonAdjustPlayBefore);
|
||||
this.tabPageAdjust.Controls.Add(this.timeUpDownVideoPositionAdjust);
|
||||
@ -2827,14 +2905,14 @@
|
||||
this.buttonAdjustSecBack1.UseVisualStyleBackColor = true;
|
||||
this.buttonAdjustSecBack1.Click += new System.EventHandler(this.buttonAdjustSecBack_Click);
|
||||
//
|
||||
// label4
|
||||
// labelVideoPosition2
|
||||
//
|
||||
this.label4.AutoSize = true;
|
||||
this.label4.Location = new System.Drawing.Point(9, 219);
|
||||
this.label4.Name = "label4";
|
||||
this.label4.Size = new System.Drawing.Size(77, 13);
|
||||
this.label4.TabIndex = 12;
|
||||
this.label4.Text = "Video position:";
|
||||
this.labelVideoPosition2.AutoSize = true;
|
||||
this.labelVideoPosition2.Location = new System.Drawing.Point(9, 219);
|
||||
this.labelVideoPosition2.Name = "labelVideoPosition2";
|
||||
this.labelVideoPosition2.Size = new System.Drawing.Size(77, 13);
|
||||
this.labelVideoPosition2.TabIndex = 12;
|
||||
this.labelVideoPosition2.Text = "Video position:";
|
||||
//
|
||||
// buttonAdjustGoToPosAndPause
|
||||
//
|
||||
@ -2950,16 +3028,6 @@
|
||||
this.toolStripMenuItemWaveFormPlaySelection.Text = "Play selection";
|
||||
this.toolStripMenuItemWaveFormPlaySelection.Click += new System.EventHandler(this.toolStripMenuItemWaveFormPlaySelection_Click);
|
||||
//
|
||||
// labelCharactersPerSecond
|
||||
//
|
||||
this.labelCharactersPerSecond.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.labelCharactersPerSecond.Location = new System.Drawing.Point(1170, 12);
|
||||
this.labelCharactersPerSecond.Name = "labelCharactersPerSecond";
|
||||
this.labelCharactersPerSecond.Size = new System.Drawing.Size(177, 13);
|
||||
this.labelCharactersPerSecond.TabIndex = 31;
|
||||
this.labelCharactersPerSecond.Text = "labelCharactersPerSecond";
|
||||
this.labelCharactersPerSecond.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
//
|
||||
// Main
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
@ -3239,7 +3307,7 @@
|
||||
private System.Windows.Forms.NumericUpDown numericUpDownSec1;
|
||||
private System.Windows.Forms.Button buttonForward1;
|
||||
private System.Windows.Forms.Label labelCreateTip;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.Label labelVideoPosition2;
|
||||
private Controls.TimeUpDown timeUpDownVideoPositionAdjust;
|
||||
private System.Windows.Forms.Button buttonAdjustSecForward1;
|
||||
private System.Windows.Forms.NumericUpDown numericUpDownSecAdjust1;
|
||||
@ -3250,7 +3318,7 @@
|
||||
private System.Windows.Forms.Button buttonAdjustSecForward2;
|
||||
private System.Windows.Forms.NumericUpDown numericUpDownSecAdjust2;
|
||||
private System.Windows.Forms.Button buttonAdjustSecBack2;
|
||||
private System.Windows.Forms.CheckBox checkBoxSyncListViewWithVideWhilePlaying;
|
||||
private System.Windows.Forms.CheckBox checkBoxSyncListViewWithVideoWhilePlaying;
|
||||
private System.Windows.Forms.Label label5;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.Label label6;
|
||||
@ -3301,6 +3369,13 @@
|
||||
private System.Windows.Forms.ToolStripMenuItem colorToolStripMenuItem1;
|
||||
private System.Windows.Forms.ToolStripMenuItem fontNameToolStripMenuItem;
|
||||
private System.Windows.Forms.Label labelCharactersPerSecond;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemNetworking;
|
||||
private System.Windows.Forms.ToolStripMenuItem startServerToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem joinSessionToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusNetworking;
|
||||
private System.Windows.Forms.ToolStripMenuItem leaveSessionToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem showSessionKeyLogToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem chatToolStripMenuItem;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7,14 +7,14 @@ using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Web;
|
||||
using System.Windows.Forms;
|
||||
using System.Xml;
|
||||
using Nikse.SubtitleEdit.Controls;
|
||||
using Nikse.SubtitleEdit.Logic;
|
||||
using Nikse.SubtitleEdit.Logic.BluRaySup;
|
||||
using Nikse.SubtitleEdit.Logic.Enums;
|
||||
using Nikse.SubtitleEdit.Logic.SubtitleFormats;
|
||||
using Nikse.SubtitleEdit.Logic.VideoPlayers;
|
||||
using Nikse.SubtitleEdit.Logic.VobSub;
|
||||
using Nikse.SubtitleEdit.Logic.BluRaySup;
|
||||
using Nikse.SubtitleEdit.Logic.Networking;
|
||||
|
||||
namespace Nikse.SubtitleEdit.Forms
|
||||
{
|
||||
@ -72,6 +72,8 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
System.Windows.Forms.Timer _timerAutoSave = new Timer();
|
||||
string _textAutoSave;
|
||||
|
||||
NikseWebServiceSession _networkSession;
|
||||
NetworkChat _networkChat = null;
|
||||
|
||||
private bool AutoRepeatContinueOn
|
||||
{
|
||||
@ -92,7 +94,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
if (versionInfo.Length >= 3 && versionInfo[2] != "0")
|
||||
_title += "." + versionInfo[2];
|
||||
}
|
||||
return _title;
|
||||
return _title + " Beta";
|
||||
}
|
||||
}
|
||||
|
||||
@ -139,6 +141,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
|
||||
SetLanguage(Configuration.Settings.General.Language);
|
||||
|
||||
toolStripStatusNetworking.Visible = false;
|
||||
labelTextLineLengths.Text = string.Empty;
|
||||
labelCharactersPerSecond.Text = string.Empty;
|
||||
labelTextLineTotal.Text = string.Empty;
|
||||
@ -149,6 +152,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
timeUpDownStartTime.TimeCode = new TimeCode(0, 0, 0, 0);
|
||||
checkBoxAutoRepeatOn.Checked = Configuration.Settings.General.AutoRepeatOn;
|
||||
checkBoxAutoContinue.Checked = Configuration.Settings.General.AutoContinueOn;
|
||||
checkBoxSyncListViewWithVideoWhilePlaying.Checked = Configuration.Settings.General.SyncListViewWithVideoWhilePlaying;
|
||||
|
||||
SetFormatToSubRip();
|
||||
|
||||
@ -617,7 +621,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
tabPageTranslate.Text = _language.VideoControls.Translate;
|
||||
tabPageCreate.Text = _language.VideoControls.Create;
|
||||
tabPageAdjust.Text = _language.VideoControls.Adjust;
|
||||
checkBoxSyncListViewWithVideWhilePlaying.Text = _language.VideoControls.SelectCurrentElementWhilePlaying;
|
||||
checkBoxSyncListViewWithVideoWhilePlaying.Text = _language.VideoControls.SelectCurrentElementWhilePlaying;
|
||||
if (_videoFileName == null)
|
||||
labelVideoInfo.Text = Configuration.Settings.Language.General.NoVideoLoaded;
|
||||
|
||||
@ -646,6 +650,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
buttonForward1.Text = _language.VideoControls.SecondsForwardShort;
|
||||
buttonForward2.Text = _language.VideoControls.SecondsForwardShort;
|
||||
labelVideoPosition.Text = _language.VideoControls.VideoPosition;
|
||||
labelVideoPosition2.Text = _language.VideoControls.VideoPosition;
|
||||
labelCreateTip.Text = _language.VideoControls.CreateTip;
|
||||
|
||||
buttonSetStartAndOffsetRest.Text = _language.VideoControls.SetstartTimeAndOffsetOfRest;
|
||||
@ -1910,9 +1915,11 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
{
|
||||
int line = _findHelper.SelectedIndex;
|
||||
int pos = _findHelper.SelectedPosition;
|
||||
bool success = _findHelper.Success;
|
||||
_findHelper = replaceDialog.GetFindDialogHelper(_subtitleListViewIndex);
|
||||
_findHelper.SelectedIndex = line;
|
||||
_findHelper.SelectedPosition = pos;
|
||||
_findHelper.Success = success;
|
||||
}
|
||||
int replaceCount = 0;
|
||||
bool searchStringFound = true;
|
||||
@ -2009,7 +2016,12 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
else if (!replaceDialog.FindOnly) // replace once only
|
||||
{
|
||||
string msg = string.Empty;
|
||||
if (textBoxListViewText.SelectionLength == _findHelper.FindTextLength)
|
||||
if (_findHelper.FindType == FindType.RegEx && _findHelper.Success)
|
||||
{
|
||||
textBoxListViewText.SelectedText = _findHelper.ReplaceText;
|
||||
msg = _language.OneReplacementMade + " ";
|
||||
}
|
||||
else if (textBoxListViewText.SelectionLength == _findHelper.FindTextLength)
|
||||
{
|
||||
textBoxListViewText.SelectedText = _findHelper.ReplaceText;
|
||||
msg = _language.OneReplacementMade + " ";
|
||||
@ -2543,7 +2555,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
}
|
||||
ShowSource();
|
||||
|
||||
SubtitleListview1.AddAlternateTextColumn(Configuration.Settings.Language.General.OriginalText);
|
||||
SubtitleListview1.ShowAlternateTextColumn(Configuration.Settings.Language.General.OriginalText);
|
||||
SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
|
||||
|
||||
RestoreSubtitleListviewIndexes();
|
||||
@ -2629,7 +2641,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
startIndex = result.IndexOf(key, startIndex + key.Length);
|
||||
}
|
||||
ShowSource();
|
||||
SubtitleListview1.AddAlternateTextColumn(Configuration.Settings.Language.General.OriginalText);
|
||||
SubtitleListview1.ShowAlternateTextColumn(Configuration.Settings.Language.General.OriginalText);
|
||||
SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
|
||||
ShowStatus(_language.TranslationFromSwedishToDanishComplete);
|
||||
SubtitleListview1.SelectIndexAndEnsureVisible(firstSelectedIndex);
|
||||
@ -2845,10 +2857,10 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
mergeAfterToolStripMenuItem.Visible = true;
|
||||
mergeBeforeToolStripMenuItem.Visible = true;
|
||||
splitLineToolStripMenuItem.Visible = true;
|
||||
typeEffectToolStripMenuItem.Visible = true;
|
||||
toolStripSeparator7.Visible = true;
|
||||
karokeeEffectToolStripMenuItem.Visible = true;
|
||||
toolStripSeparatorAdvancedFunctions.Visible = true;
|
||||
typeEffectToolStripMenuItem.Visible = _networkSession == null;
|
||||
karokeeEffectToolStripMenuItem.Visible = _networkSession == null;
|
||||
toolStripSeparatorAdvancedFunctions.Visible = _networkSession == null;
|
||||
showSelectedLinesEarlierlaterToolStripMenuItem.Visible = true;
|
||||
visualSyncSelectedLinesToolStripMenuItem.Visible = true;
|
||||
googleTranslateSelectedLinesToolStripMenuItem.Visible = true;
|
||||
@ -2977,24 +2989,35 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
indexes.Add(item.Index);
|
||||
int firstIndex = SubtitleListview1.SelectedItems[0].Index;
|
||||
|
||||
int startNumber = _subtitle.Paragraphs[0].Number;
|
||||
indexes.Reverse();
|
||||
foreach (int i in indexes)
|
||||
if (_networkSession != null)
|
||||
{
|
||||
_subtitle.Paragraphs.RemoveAt(i);
|
||||
_networkSession.TimerStop();
|
||||
NetworkGetSendUpdates(indexes, 0, null);
|
||||
}
|
||||
_subtitle.Renumber(startNumber);
|
||||
SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
|
||||
if (SubtitleListview1.FirstVisibleIndex == 0)
|
||||
SubtitleListview1.FirstVisibleIndex = - 1;
|
||||
if (SubtitleListview1.Items.Count > firstIndex)
|
||||
else
|
||||
{
|
||||
SubtitleListview1.SelectIndexAndEnsureVisible(firstIndex);
|
||||
}
|
||||
else if (SubtitleListview1.Items.Count > 0)
|
||||
{
|
||||
SubtitleListview1.SelectIndexAndEnsureVisible(SubtitleListview1.Items.Count-1);
|
||||
int startNumber = _subtitle.Paragraphs[0].Number;
|
||||
indexes.Reverse();
|
||||
foreach (int i in indexes)
|
||||
{
|
||||
_subtitle.Paragraphs.RemoveAt(i);
|
||||
if (_networkSession != null && _networkSession.LastSubtitle != null && i < _networkSession.LastSubtitle.Paragraphs.Count)
|
||||
_networkSession.LastSubtitle.Paragraphs.RemoveAt(i);
|
||||
}
|
||||
_subtitle.Renumber(startNumber);
|
||||
SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
|
||||
if (SubtitleListview1.FirstVisibleIndex == 0)
|
||||
SubtitleListview1.FirstVisibleIndex = -1;
|
||||
if (SubtitleListview1.Items.Count > firstIndex)
|
||||
{
|
||||
SubtitleListview1.SelectIndexAndEnsureVisible(firstIndex);
|
||||
}
|
||||
else if (SubtitleListview1.Items.Count > 0)
|
||||
{
|
||||
SubtitleListview1.SelectIndexAndEnsureVisible(SubtitleListview1.Items.Count - 1);
|
||||
}
|
||||
}
|
||||
|
||||
ShowStatus(statusText);
|
||||
ShowSource();
|
||||
_change = true;
|
||||
@ -3043,11 +3066,18 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
newParagraph.EndTime.TotalMilliseconds = 3000;
|
||||
}
|
||||
|
||||
_subtitle.Paragraphs.Insert(firstSelectedIndex, newParagraph);
|
||||
|
||||
_subtitleListViewIndex = -1;
|
||||
_subtitle.Renumber(startNumber);
|
||||
SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
|
||||
if (_networkSession != null)
|
||||
{
|
||||
_networkSession.TimerStop();
|
||||
NetworkGetSendUpdates(new List<int>(), firstSelectedIndex, newParagraph);
|
||||
}
|
||||
else
|
||||
{
|
||||
_subtitle.Paragraphs.Insert(firstSelectedIndex, newParagraph);
|
||||
_subtitleListViewIndex = -1;
|
||||
_subtitle.Renumber(startNumber);
|
||||
SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
|
||||
}
|
||||
SubtitleListview1.SelectIndexAndEnsureVisible(firstSelectedIndex);
|
||||
ShowSource();
|
||||
ShowStatus(_language.LineInserted);
|
||||
@ -3097,10 +3127,17 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
newParagraph.EndTime.TotalMilliseconds = 3000;
|
||||
}
|
||||
|
||||
_subtitle.Paragraphs.Insert(firstSelectedIndex, newParagraph);
|
||||
|
||||
_subtitle.Renumber(startNumber);
|
||||
SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
|
||||
if (_networkSession != null)
|
||||
{
|
||||
_networkSession.TimerStop();
|
||||
NetworkGetSendUpdates(new List<int>(), firstSelectedIndex, newParagraph);
|
||||
}
|
||||
else
|
||||
{
|
||||
_subtitle.Paragraphs.Insert(firstSelectedIndex, newParagraph);
|
||||
_subtitle.Renumber(startNumber);
|
||||
SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
|
||||
}
|
||||
SubtitleListview1.SelectIndexAndEnsureVisible(firstSelectedIndex);
|
||||
ShowSource();
|
||||
ShowStatus(_language.LineInserted);
|
||||
@ -3353,8 +3390,6 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
currentParagraph.EndTime.TotalMilliseconds = middle;
|
||||
newParagraph.StartTime.TotalMilliseconds = currentParagraph.EndTime.TotalMilliseconds + 1;
|
||||
|
||||
_subtitle.Paragraphs.Insert(firstSelectedIndex + 1, newParagraph);
|
||||
|
||||
|
||||
string[] lines = currentParagraph.Text.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
|
||||
if (lines.Length == 2)
|
||||
@ -3373,8 +3408,17 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
}
|
||||
}
|
||||
|
||||
_subtitle.Renumber(startNumber);
|
||||
SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
|
||||
if (_networkSession != null)
|
||||
{
|
||||
_networkSession.TimerStop();
|
||||
NetworkGetSendUpdates(new List<int>(), firstSelectedIndex, newParagraph);
|
||||
}
|
||||
else
|
||||
{
|
||||
_subtitle.Paragraphs.Insert(firstSelectedIndex + 1, newParagraph);
|
||||
_subtitle.Renumber(startNumber);
|
||||
SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
|
||||
}
|
||||
SubtitleListview1.SelectIndexAndEnsureVisible(firstSelectedIndex);
|
||||
ShowSource();
|
||||
ShowStatus(_language.LineSplitted);
|
||||
@ -3403,16 +3447,24 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
prevParagraph.Text += Environment.NewLine + currentParagraph.Text.Replace(Environment.NewLine, " ");
|
||||
prevParagraph.Text = Utilities.AutoBreakLine(prevParagraph.Text);
|
||||
|
||||
|
||||
// prevParagraph.EndTime.TotalMilliseconds = prevParagraph.EndTime.TotalMilliseconds + currentParagraph.Duration.TotalMilliseconds;
|
||||
prevParagraph.EndTime.TotalMilliseconds = currentParagraph.EndTime.TotalMilliseconds;
|
||||
|
||||
_subtitle.Paragraphs.Remove(currentParagraph);
|
||||
|
||||
_subtitle.Renumber(startNumber);
|
||||
SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
|
||||
SubtitleListview1.Items[firstSelectedIndex-1].Selected = true;
|
||||
SubtitleListview1.SelectIndexAndEnsureVisible(firstSelectedIndex-1);
|
||||
if (_networkSession != null)
|
||||
{
|
||||
_networkSession.TimerStop();
|
||||
List<int> deleteIndices = new List<int>();
|
||||
deleteIndices.Add(_subtitle.GetIndex(currentParagraph));
|
||||
NetworkGetSendUpdates(deleteIndices, 0, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
_subtitle.Paragraphs.Remove(currentParagraph);
|
||||
_subtitle.Renumber(startNumber);
|
||||
SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
|
||||
SubtitleListview1.Items[firstSelectedIndex-1].Selected = true;
|
||||
}
|
||||
SubtitleListview1.SelectIndexAndEnsureVisible(firstSelectedIndex - 1);
|
||||
ShowSource();
|
||||
ShowStatus(_language.LinesMerged);
|
||||
SubtitleListview1.SelectedIndexChanged += SubtitleListview1_SelectedIndexChanged;
|
||||
@ -3444,13 +3496,23 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
//currentParagraph.EndTime.TotalMilliseconds = currentParagraph.EndTime.TotalMilliseconds + nextParagraph.Duration.TotalMilliseconds; //nextParagraph.EndTime;
|
||||
currentParagraph.EndTime.TotalMilliseconds = nextParagraph.EndTime.TotalMilliseconds;
|
||||
|
||||
_subtitle.Paragraphs.Remove(nextParagraph);
|
||||
|
||||
_subtitle.Renumber(startNumber);
|
||||
SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
|
||||
SubtitleListview1.SelectIndexAndEnsureVisible(firstSelectedIndex);
|
||||
if (_networkSession != null)
|
||||
{
|
||||
_networkSession.TimerStop();
|
||||
_networkSession.UpdateLine(_subtitle.GetIndex(currentParagraph), currentParagraph);
|
||||
List<int> deleteIndices = new List<int>();
|
||||
deleteIndices.Add(_subtitle.GetIndex(nextParagraph));
|
||||
NetworkGetSendUpdates(deleteIndices, 0, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
_subtitle.Paragraphs.Remove(nextParagraph);
|
||||
_subtitle.Renumber(startNumber);
|
||||
SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
|
||||
}
|
||||
ShowSource();
|
||||
ShowStatus(_language.LinesMerged);
|
||||
SubtitleListview1.SelectIndexAndEnsureVisible(firstSelectedIndex);
|
||||
SubtitleListview1.SelectedIndexChanged += SubtitleListview1_SelectedIndexChanged;
|
||||
RefreshSelectedParagraph();
|
||||
_change = true;
|
||||
@ -3582,6 +3644,18 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_networkSession != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
_networkSession.TimerStop();
|
||||
_networkSession.Leave();
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
if (Configuration.Settings.General.StartRememberPositionAndSize && WindowState != FormWindowState.Minimized)
|
||||
{
|
||||
Configuration.Settings.General.StartPosition = Left + ";" + Top;
|
||||
@ -3594,6 +3668,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
|
||||
Configuration.Settings.General.AutoRepeatOn = checkBoxAutoRepeatOn.Checked;
|
||||
Configuration.Settings.General.AutoContinueOn = checkBoxAutoContinue.Checked;
|
||||
Configuration.Settings.General.SyncListViewWithVideoWhilePlaying = checkBoxSyncListViewWithVideoWhilePlaying.Checked;
|
||||
|
||||
if (!string.IsNullOrEmpty(_fileName))
|
||||
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex);
|
||||
@ -4404,6 +4479,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
{
|
||||
if (mediaPlayer.VideoPlayer != null)
|
||||
{
|
||||
_endSeconds = -1;
|
||||
mediaPlayer.TooglePlayPause();
|
||||
e.SuppressKeyPress = true;
|
||||
}
|
||||
@ -5018,7 +5094,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
toolStripSeparatorInsertUnicodeCharacter.Visible = true;
|
||||
}
|
||||
|
||||
if (SubtitleListview1.IsColumTextAlternateActive)
|
||||
if (SubtitleListview1.IsAlternateTextColumnVisible)
|
||||
{
|
||||
toolStripMenuItemTranslationMode.ShortcutKeys = Keys.None;
|
||||
toolStripMenuItemTranslationMode.ShortcutKeyDisplayString = string.Empty;
|
||||
@ -5195,9 +5271,9 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
|
||||
private void toolStripMenuItemTranslationMode_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (SubtitleListview1.IsColumTextAlternateActive)
|
||||
if (SubtitleListview1.IsAlternateTextColumnVisible)
|
||||
{
|
||||
SubtitleListview1.RemoveAlternateTextColumn();
|
||||
SubtitleListview1.HideAlternateTextColumn();
|
||||
_subtitleAlternate = new Subtitle();
|
||||
}
|
||||
else
|
||||
@ -5244,7 +5320,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
_subtitleAlternate.CalculateFrameNumbersFromTimeCodes(CurrentFrameRate);
|
||||
|
||||
|
||||
SubtitleListview1.AddAlternateTextColumn(Configuration.Settings.Language.General.OriginalText);
|
||||
SubtitleListview1.ShowAlternateTextColumn(Configuration.Settings.Language.General.OriginalText);
|
||||
SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
|
||||
}
|
||||
|
||||
@ -5445,7 +5521,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
panelVideoPlayer.Width = w; // this.Width - (panelVideoPlayer.Left + 34);
|
||||
|
||||
labelVideoInfo.TextAlign = ContentAlignment.TopLeft;
|
||||
labelVideoInfo.Left = checkBoxSyncListViewWithVideWhilePlaying.Left + checkBoxSyncListViewWithVideWhilePlaying.Width + 10;
|
||||
labelVideoInfo.Left = checkBoxSyncListViewWithVideoWhilePlaying.Left + checkBoxSyncListViewWithVideoWhilePlaying.Width + 10;
|
||||
}
|
||||
}
|
||||
else if (AudioWaveForm.Visible)
|
||||
@ -5453,7 +5529,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
AudioWaveForm.Left = tabControlButtons.Left + tabControlButtons.Width + 5;
|
||||
AudioWaveForm.Width = this.Width - (AudioWaveForm.Left + 34);
|
||||
}
|
||||
checkBoxSyncListViewWithVideWhilePlaying.Left = tabControlButtons.Left + tabControlButtons.Width + 5;
|
||||
checkBoxSyncListViewWithVideoWhilePlaying.Left = tabControlButtons.Left + tabControlButtons.Width + 5;
|
||||
panelWaveFormControls.Left = AudioWaveForm.Left;
|
||||
trackBarWaveFormPosition.Left = panelWaveFormControls.Left + panelWaveFormControls.Width + 5;
|
||||
trackBarWaveFormPosition.Width = AudioWaveForm.Left + AudioWaveForm.Width - trackBarWaveFormPosition.Left + 5;
|
||||
@ -5866,7 +5942,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
|
||||
// mediaPlayer.RefreshProgressBar();
|
||||
// Utilities.ShowSubtitle(_subtitle.Paragraphs, labelSubtitle, mediaPlayer.VideoPlayer);
|
||||
if (AutoRepeatContinueOn && !checkBoxSyncListViewWithVideWhilePlaying.Checked)
|
||||
if (AutoRepeatContinueOn) // && (_endSeconds == -1 && !checkBoxSyncListViewWithVideoWhilePlaying.Checked))
|
||||
{
|
||||
if (_endSeconds >= 0 && mediaPlayer.CurrentPosition > _endSeconds && checkBoxAutoRepeatOn.Checked)
|
||||
{
|
||||
@ -5904,7 +5980,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
timeUpDownVideoPositionAdjust.TimeCode = new TimeCode(TimeSpan.FromMilliseconds(mediaPlayer.CurrentPosition * 1000.0));
|
||||
mediaPlayer.RefreshProgressBar();
|
||||
int index = Utilities.ShowSubtitle(_subtitle.Paragraphs, labelSubtitle, mediaPlayer.VideoPlayer);
|
||||
if (index != -1 && checkBoxSyncListViewWithVideWhilePlaying.Checked)
|
||||
if (index != -1 && checkBoxSyncListViewWithVideoWhilePlaying.Checked)
|
||||
{
|
||||
if ((DateTime.Now.Ticks - _lastTextKeyDownTicks) > 10000 * 700) // only if last typed char was entered > 700 milliseconds
|
||||
{
|
||||
@ -6019,6 +6095,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
|
||||
private void buttonStop_Click_1(object sender, EventArgs e)
|
||||
{
|
||||
_endSeconds = -1;
|
||||
timerAutoContinue.Stop();
|
||||
mediaPlayer.Pause();
|
||||
labelStatus.Text = string.Empty;
|
||||
@ -6083,7 +6160,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
if (toolStripButtonToogleVideo.Checked && !AudioWaveForm.Visible)
|
||||
{
|
||||
labelVideoInfo.TextAlign = ContentAlignment.TopLeft;
|
||||
labelVideoInfo.Left = checkBoxSyncListViewWithVideWhilePlaying.Left + checkBoxSyncListViewWithVideWhilePlaying.Width + 10;
|
||||
labelVideoInfo.Left = checkBoxSyncListViewWithVideoWhilePlaying.Left + checkBoxSyncListViewWithVideoWhilePlaying.Width + 10;
|
||||
}
|
||||
|
||||
Refresh();
|
||||
@ -6789,5 +6866,375 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
public void SetSubtitle(Subtitle subtitle, string message)
|
||||
{
|
||||
_subtitle = subtitle;
|
||||
SubtitleListview1.Fill(subtitle);
|
||||
_change = true;
|
||||
ShowStatus(message);
|
||||
}
|
||||
|
||||
|
||||
private void startServerToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
_networkSession = new NikseWebServiceSession(_subtitle, _subtitleAlternate, TimerWebServiceTick, OnUpdateUserLogEntries);
|
||||
NetworkStart networkNew = new NetworkStart();
|
||||
networkNew.Initialize(_networkSession, _fileName);
|
||||
if (networkNew.ShowDialog(this) == DialogResult.OK)
|
||||
{
|
||||
_networkSession.Log(_networkSession.CurrentUser.UserName + ": Started session " + _networkSession.SessionId + " at " + DateTime.Now.ToLongTimeString());
|
||||
toolStripStatusNetworking.Visible = true;
|
||||
toolStripStatusNetworking.Text = "Network mode";
|
||||
EnableDisableControlsNotWorkingInNetworkMode(false);
|
||||
SubtitleListview1.ShowExtraColumn("User/action");
|
||||
}
|
||||
else
|
||||
{
|
||||
_networkSession = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void joinSessionToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
_networkSession = new NikseWebServiceSession(_subtitle, _subtitleAlternate, TimerWebServiceTick, OnUpdateUserLogEntries);
|
||||
NetworkJoin networkJoin = new NetworkJoin();
|
||||
networkJoin.Initialize(_networkSession);
|
||||
|
||||
if (networkJoin.ShowDialog(this) == DialogResult.OK)
|
||||
{
|
||||
_subtitle = _networkSession.Subtitle;
|
||||
_subtitleAlternate = _networkSession.OriginalSubtitle;
|
||||
if (_subtitleAlternate != null && _subtitleAlternate.Paragraphs.Count > 0)
|
||||
SubtitleListview1.ShowAlternateTextColumn(Configuration.Settings.Language.General.OriginalText);
|
||||
_fileName = networkJoin.FileName;
|
||||
Text = Title + " - " + _fileName;
|
||||
this.Text = Title;
|
||||
toolStripStatusNetworking.Visible = true;
|
||||
toolStripStatusNetworking.Text = "Network mode";
|
||||
EnableDisableControlsNotWorkingInNetworkMode(false);
|
||||
_networkSession.Log(_networkSession.CurrentUser.UserName + ": Joined session " + _networkSession.SessionId + " at " + DateTime.Now.ToLongTimeString());
|
||||
SubtitleListview1.ShowExtraColumn("User/action");
|
||||
_subtitleListViewIndex = -1;
|
||||
_oldSelectedParagraph = null;
|
||||
SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
|
||||
SubtitleListview1.SelectIndexAndEnsureVisible(0);
|
||||
_change = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
_networkSession = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void EnableDisableControlsNotWorkingInNetworkMode(bool enabled)
|
||||
{
|
||||
//Top menu
|
||||
newToolStripMenuItem.Enabled = enabled;
|
||||
openToolStripMenuItem.Enabled = enabled;
|
||||
reopenToolStripMenuItem.Enabled = enabled;
|
||||
toolStripMenuItemOpenContainingFolder.Enabled = enabled;
|
||||
toolStripMenuItemCompare.Enabled = enabled;
|
||||
toolStripMenuItemImportDvdSubtitles.Enabled = enabled;
|
||||
toolStripMenuItemSubIdx.Enabled = enabled;
|
||||
toolStripMenuItemImportBluRaySup.Enabled = enabled;
|
||||
matroskaImportStripMenuItem.Enabled = enabled;
|
||||
toolStripMenuItemManualAnsi.Enabled = enabled;
|
||||
toolStripMenuItemImportText.Enabled = enabled;
|
||||
toolStripMenuItemImportTimeCodes.Enabled = enabled;
|
||||
|
||||
showHistoryforUndoToolStripMenuItem.Enabled = enabled;
|
||||
multipleReplaceToolStripMenuItem.Enabled = enabled;
|
||||
|
||||
toolsToolStripMenuItem.Enabled = enabled;
|
||||
|
||||
toolStripMenuItemSyncronization.Enabled = enabled;
|
||||
|
||||
toolStripMenuItemAutoTranslate.Enabled = enabled;
|
||||
|
||||
//Toolbar
|
||||
toolStripButtonFileNew.Enabled = enabled;
|
||||
toolStripButtonFileOpen.Enabled = enabled;
|
||||
toolStripButtonVisualSync.Enabled = enabled;
|
||||
|
||||
// textbox source
|
||||
textBoxSource.ReadOnly = !enabled;
|
||||
}
|
||||
|
||||
internal void TimerWebServiceTick(object sender, EventArgs e)
|
||||
{
|
||||
if (_networkSession == null)
|
||||
return;
|
||||
|
||||
List<int> insertIndices = new List<int>();
|
||||
List<int> deleteIndices = new List<int>();
|
||||
|
||||
NetworkGetSendUpdates(deleteIndices, 0, null);
|
||||
}
|
||||
|
||||
private void NetworkGetSendUpdates(List<int> deleteIndices, int insertIndex, Paragraph insertParagraph)
|
||||
{
|
||||
_networkSession.TimerStop();
|
||||
|
||||
bool doReFill = false;
|
||||
bool updateListViewStatus = false;
|
||||
SubtitleListview1.SelectedIndexChanged -= SubtitleListview1_SelectedIndexChanged;
|
||||
string message;
|
||||
var updates = _networkSession.GetUpdates(out message);
|
||||
if (message == "OK")
|
||||
{
|
||||
foreach (var update in updates)
|
||||
{
|
||||
if (update.User.Ip != _networkSession.CurrentUser.Ip || update.User.UserName != _networkSession.CurrentUser.UserName)
|
||||
{
|
||||
if (update.Action == "USR")
|
||||
{
|
||||
_networkSession.Users.Add(update.User);
|
||||
if (_networkChat != null && !_networkChat.IsDisposed)
|
||||
{
|
||||
_networkChat.AddUser(update.User);
|
||||
}
|
||||
_networkSession.Log("New user: " + update.User.UserName + " (" + update.User.Ip + ")");
|
||||
}
|
||||
else if (update.Action == "MSG")
|
||||
{
|
||||
_networkSession.ChatLog.Add(new NikseWebServiceSession.ChatEntry() { User = update.User, Message = update.Text });
|
||||
if (_networkChat == null || _networkChat.IsDisposed)
|
||||
{
|
||||
_networkChat = new NetworkChat();
|
||||
_networkChat.Initialize(_networkSession);
|
||||
_networkChat.Show(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
_networkChat.AddChatMessage(update.User, update.Text);
|
||||
}
|
||||
_networkSession.Log("Message: " + update.User.UserName + " (" + update.User.Ip + "): " + update.Text);
|
||||
}
|
||||
else if (update.Action == "DEL")
|
||||
{
|
||||
doReFill = true;
|
||||
_subtitle.Paragraphs.RemoveAt(update.Index);
|
||||
if (_networkSession.LastSubtitle != null)
|
||||
_networkSession.LastSubtitle.Paragraphs.RemoveAt(update.Index);
|
||||
_networkSession.Log("Delete: " + update.User.UserName + " (" + update.User.Ip + "): Index=" + update.Index.ToString());
|
||||
_networkSession.AdjustUpdateLogToDelete(update.Index);
|
||||
_change = true;
|
||||
|
||||
if (deleteIndices.Count > 0)
|
||||
{
|
||||
for (int i = deleteIndices.Count - 1; i >= 0; i--)
|
||||
{
|
||||
int index = deleteIndices[i];
|
||||
if (index == update.Index)
|
||||
deleteIndices.RemoveAt(i);
|
||||
else if (index > update.Index)
|
||||
deleteIndices[i] = index - 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (insertIndex > update.Index)
|
||||
insertIndex--;
|
||||
}
|
||||
else if (update.Action == "INS")
|
||||
{
|
||||
doReFill = true;
|
||||
Paragraph p = new Paragraph(update.Text, update.StartMilliseconds, update.EndMilliseconds);
|
||||
_subtitle.Paragraphs.Insert(update.Index, p);
|
||||
if (_networkSession.LastSubtitle != null)
|
||||
_networkSession.LastSubtitle.Paragraphs.Insert(update.Index, new Paragraph(p));
|
||||
_networkSession.Log("Insert: " + update.User.UserName + " (" + update.User.Ip + "): Index=" + update.Index.ToString() + ", Text=" + update.Text.Replace(Environment.NewLine, Configuration.Settings.General.ListViewLineSeparatorString));
|
||||
_networkSession.AddToWsUserLog(update.User, update.Index, update.Action, false);
|
||||
updateListViewStatus = true;
|
||||
_networkSession.AdjustUpdateLogToInsert(update.Index);
|
||||
_change = true;
|
||||
|
||||
if (deleteIndices.Count > 0)
|
||||
{
|
||||
for (int i = deleteIndices.Count - 1; i >= 0; i--)
|
||||
{
|
||||
int index = deleteIndices[i];
|
||||
if (index > update.Index)
|
||||
deleteIndices[i] = index +1;
|
||||
}
|
||||
}
|
||||
if (insertIndex > update.Index)
|
||||
insertIndex++;
|
||||
}
|
||||
else if (update.Action == "UPD")
|
||||
{
|
||||
updateListViewStatus = true;
|
||||
Paragraph p = _subtitle.GetParagraphOrDefault(update.Index);
|
||||
if (p != null)
|
||||
{
|
||||
p.StartTime.TotalMilliseconds = update.StartMilliseconds;
|
||||
p.EndTime.TotalMilliseconds = update.EndMilliseconds;
|
||||
p.Text = update.Text;
|
||||
SubtitleListview1.SetTimeAndText(update.Index, p);
|
||||
_networkSession.AddToWsUserLog(update.User, update.Index, update.Action, true);
|
||||
updateListViewStatus = true;
|
||||
}
|
||||
if (_networkSession.LastSubtitle != null)
|
||||
{
|
||||
p = _networkSession.LastSubtitle.GetParagraphOrDefault(update.Index);
|
||||
if (p != null)
|
||||
{
|
||||
p.StartTime.TotalMilliseconds = update.StartMilliseconds;
|
||||
p.EndTime.TotalMilliseconds = update.EndMilliseconds;
|
||||
p.Text = update.Text;
|
||||
}
|
||||
}
|
||||
_change = true;
|
||||
}
|
||||
else if (update.Action == "BYE")
|
||||
{
|
||||
if (_networkChat != null && !_networkChat.IsDisposed)
|
||||
_networkChat.RemoveUser(update.User);
|
||||
|
||||
SeNetworkService.SeUser removeUser = null;
|
||||
foreach (var user in _networkSession.Users)
|
||||
{
|
||||
if (user.UserName == update.User.UserName)
|
||||
{
|
||||
removeUser = user;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (removeUser != null)
|
||||
_networkSession.Users.Remove(removeUser);
|
||||
|
||||
_networkSession.Log("Bye: " + update.User.UserName + " (" + update.User.Ip + ")");
|
||||
}
|
||||
else
|
||||
{
|
||||
_networkSession.Log("UNKNOWN ACTION: " + update.Action + " by " + update.User.UserName + " (" + update.User.Ip + ")");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (deleteIndices.Count > 0)
|
||||
{
|
||||
deleteIndices.Sort();
|
||||
deleteIndices.Reverse();
|
||||
foreach (int i in deleteIndices)
|
||||
{
|
||||
_subtitle.Paragraphs.RemoveAt(i);
|
||||
if (_networkSession != null && _networkSession.LastSubtitle != null && i < _networkSession.LastSubtitle.Paragraphs.Count)
|
||||
_networkSession.LastSubtitle.Paragraphs.RemoveAt(i);
|
||||
}
|
||||
|
||||
_networkSession.DeleteLines(deleteIndices);
|
||||
doReFill = true;
|
||||
}
|
||||
if (insertIndex >= 0 && insertParagraph != null)
|
||||
{
|
||||
_subtitle.Paragraphs.Insert(insertIndex, insertParagraph);
|
||||
if (_networkSession != null && _networkSession.LastSubtitle != null && insertIndex < _networkSession.LastSubtitle.Paragraphs.Count)
|
||||
_networkSession.LastSubtitle.Paragraphs.Insert(insertIndex, insertParagraph);
|
||||
_networkSession.InsertLine(insertIndex, insertParagraph);
|
||||
doReFill = true;
|
||||
}
|
||||
|
||||
_networkSession.CheckForAndSubmitUpdates(updates); // updates only (no inserts/deletes)
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show(message);
|
||||
leaveSessionToolStripMenuItem_Click(null, null);
|
||||
SubtitleListview1.SelectedIndexChanged += SubtitleListview1_SelectedIndexChanged;
|
||||
return;
|
||||
}
|
||||
if (doReFill)
|
||||
{
|
||||
_subtitle.Renumber(1);
|
||||
SubtitleListview1.Fill(_subtitle);
|
||||
UpdateListviewwithUserLogEntries();
|
||||
if (_oldSelectedParagraph != null)
|
||||
{
|
||||
Paragraph p = _subtitle.GetFirstAlike(_oldSelectedParagraph);
|
||||
if (p != null)
|
||||
{
|
||||
_subtitleListViewIndex = _subtitle.GetIndex(p);
|
||||
SubtitleListview1.SelectIndexAndEnsureVisible(_subtitleListViewIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (updateListViewStatus)
|
||||
{
|
||||
UpdateListviewwithUserLogEntries();
|
||||
}
|
||||
_networkSession.LastSubtitle = new Subtitle(_subtitle);
|
||||
SubtitleListview1.SelectedIndexChanged += SubtitleListview1_SelectedIndexChanged;
|
||||
_networkSession.TimerStart();
|
||||
}
|
||||
|
||||
private void UpdateListviewwithUserLogEntries()
|
||||
{
|
||||
SubtitleListview1.BeginUpdate();
|
||||
foreach (UpdateLogEntry entry in _networkSession.UpdateLog)
|
||||
SubtitleListview1.SetExtraText(entry.Index, entry.ToString(), Utilities.GetColorFromUserName(entry.UserName));
|
||||
SubtitleListview1.EndUpdate();
|
||||
}
|
||||
|
||||
private void leaveSessionToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (_networkSession != null)
|
||||
{
|
||||
_networkSession.TimerStop();
|
||||
_networkSession.Leave();
|
||||
}
|
||||
if (_networkChat != null && !_networkChat.IsDisposed)
|
||||
{
|
||||
_networkChat.Close();
|
||||
_networkChat = null;
|
||||
}
|
||||
_networkSession = null;
|
||||
EnableDisableControlsNotWorkingInNetworkMode(true);
|
||||
toolStripStatusNetworking.Visible = false;
|
||||
SubtitleListview1.HideExtraColumn();
|
||||
_networkChat = null;
|
||||
}
|
||||
|
||||
private void toolStripMenuItemNetworking_DropDownOpening(object sender, EventArgs e)
|
||||
{
|
||||
startServerToolStripMenuItem.Visible = _networkSession == null;
|
||||
joinSessionToolStripMenuItem.Visible = _networkSession == null;
|
||||
showSessionKeyLogToolStripMenuItem.Visible = _networkSession != null;
|
||||
leaveSessionToolStripMenuItem.Visible = _networkSession != null;
|
||||
chatToolStripMenuItem.Visible = _networkSession != null;
|
||||
}
|
||||
|
||||
internal void OnUpdateUserLogEntries(object sender, EventArgs e)
|
||||
{
|
||||
UpdateListviewwithUserLogEntries();
|
||||
}
|
||||
|
||||
private void toolStripStatusNetworking_Click(object sender, EventArgs e)
|
||||
{
|
||||
showSessionKeyLogToolStripMenuItem_Click(null, null);
|
||||
}
|
||||
|
||||
private void showSessionKeyLogToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
NetworkLogAndInfo networkLog = new NetworkLogAndInfo();
|
||||
networkLog.Initialize(_networkSession);
|
||||
networkLog.ShowDialog(this);
|
||||
}
|
||||
|
||||
private void chatToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (_networkSession != null)
|
||||
{
|
||||
if (_networkChat == null || _networkChat.IsDisposed)
|
||||
{
|
||||
_networkChat = new NetworkChat();
|
||||
_networkChat.Initialize(_networkSession);
|
||||
_networkChat.Show(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
_networkChat.WindowState = FormWindowState.Normal;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -291,47 +291,47 @@
|
||||
<data name="toolStripButtonReplace.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAlySURBVFhH1VcJVJNXGo1TrTsokLDpBEERAgjIIpsEERGE
|
||||
iEIwQEIICcEIAgKuiAYstCJqK2gRcUppqxWFoowoLi2olUWigGVAGSkDlTq2FatFhbLcvmfV2lar9vTM
|
||||
OfOfc8+/5Hvv3u9+33v5fwbj//FwWvX5+P+Z7qkxrSOnRpaFs8NKs3VCS1rNZSUwlhTBLLwYYxcXf8kU
|
||||
HtljKCld6rRq718vyjDiiPsMaTG845VD6zIbsSu/C5VH7+NyBVBf2Y+ystt4O68dYWHV/SbhR8AWlS76
|
||||
S5yxsVGNMJEUHrQIK0L62y04vq8bH+28isRVJZBKd4I7R4EAfyWysy/g7OFv0NkANFXfx6ylpTAXFZ7Q
|
||||
jSwd8+eFcCuGm4kP3PGQld0v2PkV8nddBd8vFXqTXMC0Ffax2Uv62Y5C6Dr5/qirS6DnDFcXGf5V2YWb
|
||||
XwIblTW9ptwPBu2Fx9T+lAgTYf4+x6XFPft3diIpqgCWlgJMc+YOctyXfmPlzi+3c3bd7uDAWe7g6rbJ
|
||||
2i2ghDNPdn2agwDmlnxseaMM14gbSiLCKPj9s08LgI3NiFtsI69uLy/ec4UZ8HO5JoK9yHqrEVvWHQOb
|
||||
Le439F3ZM9PFpzhgwZx4kWhxeFpaWkRdXV36ucrKrIaGhl35e7asmO3ht8PQUdxjwuEMJK8pQt15gCNW
|
||||
Duj75QZQMhWDMaJnlh6+s7VGt60tblpb3/qdCBubyBHTA3MRu7oCaek1cHKPA2eu7L67m1tSeJhAtnr1
|
||||
ypANG5J8Ljc1JPx2cFVV1WY/npfMjCu+Y+ciR8knX2P/of9CnZdzg8HAsPz1CdiR+RZOJCfhq/JydBsY
|
||||
YEgkGvureXQDtgZbhiiH3sm8AlnE+5hmH9fr7O3/sVwaFpqamsR7990s94K9e23r62s8B3/8cd/Tg+/c
|
||||
6T5wqLBQ4bs4NNvAbiGi5ftx7HA/bOSne97ZGvt9wYEC0PiMrZtxIiYa3RPVHt7/WoDXm1s5MuXAts2N
|
||||
cPBIxHQPye2oiEBJauoGn4KC3Y7HPz1iVlFRYUBsZ3V2dk6lgwcHB8vpubu7O+m9D/J4q+IiBTM95F9Z
|
||||
24cOvbcbKFw2H4WZ3MEdWTuwb9+H2Jieho8TY9AxlZH1OwHa85IbRYoirI8/AkuPmAdu/tJjycmJ/L27
|
||||
d7ueLy83aauu1r506RKzqalJo729fgI9X1GptFrJszMnTkzZv7fANjMz1Xt+0IoCDStB72cKN9xKNQJa
|
||||
1gFFPKRnbEHG9m0oCfU6/swmZM9LgyL6KGIVB2BiGfsgSCzZsm1bxoKjR0tsWlpa9Jqv12rW19dPaG2t
|
||||
USPk424StLa2kusqjba2au3qykrT7LwcN0F0UuSehTq4mmpFNock9B32w+33ech6YwPy1vJ3PnsFcLnD
|
||||
9eYkIXbFaURHHYORUxQSVkQIc3Ky3apPVppeI7bfvl0/gZJ2VlWNJsQjKUg5xlJRV66otM5fvMjeeXj/
|
||||
rC/CR1S3KGc8Ib++m4fzoYyew+Hqi/9wX2Bz10O+rBSrEqphx43qkyriknNzc53O1JyZoiJWE6h3AWMA
|
||||
1Qg6EemH4e3t7aNaWj4fT11o/k+d7oUlwz9tTzHve5w5Ja+WjMMFAcPphZuS1uyYJr5kH9bEqzCPt7vf
|
||||
R7yiODd3l1PNmV8EEBFPBNAJ29srHgpovXSMeVHAKKlPMX/wNHmdjAFNLnfwheQ0gOm4fBuXmzOYEFOF
|
||||
gOBSeAg23j30cabbyZNHTWnnd3x/eSKtPc2anF+nJejqUo3pOHduYl0Qo/hKivG9p8lVUgZWR2zGMIeE
|
||||
opcSwHKNDjHlrB+Ijf4M0dEd4AflQ6hYl3P6dPHM5uZm3ebaWs22NpU67QNae9KY49tUp9QvBDEO/pa8
|
||||
LpyBjOV5sF+o7NVyUSS9lADG1JiR+tw48EUfYdkyFSJkHfAT/qN3x643PM+eOmXc0HCN1dxcq0mXH228
|
||||
70ndLwY+Tc4DrXktId8gfRsS2Slo2Mf2jrdbq/lyAkiUnmPUXP3ZcRCJD2KZ4iYi5Y3wFOfdF69Sbuq6
|
||||
XG7S2to4qeHaeVbDjWusBkqe+th2Hr7e44daUvO14mSEhddA2y0ehoaT61+a/HGgvkvMAWNu6r0wSRkU
|
||||
S69DLm9GiEw55ClM+5avSN0uz8z1VgmGlX2ptOjFF2Sdl/DQlbsItaTmSaJ1EEvOwcY7E8FRa+FoNWXQ
|
||||
wtjgk1cTQfYEfUdFj5n3yh9CRIWQhH+OiMhmiKTKIT/poQf5Ijs0byTr/PK6n8nzFqGONlxoCoTCk5gx
|
||||
Lx36zlHYGCvAodzNMDacNGAx3WjTK4lgs5WjdJzi/knLsTAgH4HCMgQL63BItABXUix/ISeZ10UwkBL6
|
||||
JhYv2Q+WSwKsfBOxKFQC4UJnrIkORFbaWrD1mf2caYbBrySCBuvMUngznaPv6jin38nh2g42byTba8Mv
|
||||
mV8gmUv9V8CCm3ZHjxM1oKercyNYFAsfcSLm+/oj0IeLlYoQJCdEwGCS9oDh5Mm2ryyCDjgrGn7gaopZ
|
||||
3xPyPYtQJVUDhxMzoOf63od6LisTmIHKcfpaGhmamprfcj2W3PUKWg6uCxf+Xi6IjxRALvIDk8nsYzIZ
|
||||
Oq8k4mII4+Q1pWHP0+SNEWN7IGd4/Gai1x66xmQG6mmPvmvr4PC1h38YHG1nwG++M+LkgeB7z4GREfuW
|
||||
rq4ufWkd9kIhbVvtDneVRJOav4XeYtJwJPP64NH36oQMTzKYEo4kUCfQoquYYBKBvoaamqfOxIk3p0+f
|
||||
1uk6zwe21qbwmeuEmHA+5rrMhDVnKn0hoWP/WETXQRFyMpVDVOmN/FDUho3+oSqI4UVu6R/SuEfElNSI
|
||||
wIxgJoEdgdPrr73mp6Wl8QWLxeq2m2UPK3Nj+HrORvxSAaZM1gVLQyOOxI16rgsbQh3nRwZY4X7HGTRV
|
||||
Kge+O65ATShD+ihzaiHd4WjWj8ltKDGBO8ECAn+CRC01tSYmU6PP1soc1hbG4PPcYW5iAG2W5olH7j1b
|
||||
g6v136lNOJqx4N8dHwRsvZrjo//IMmo9FTCRgDaUAYEpgTWBA4EbwXyChQQiKmL8+FGNetpMGDCZtyZP
|
||||
0r6rT67Jcw4BLcOzj1ksxozn/PQ38nw4wehHGdD60zJMIZhOYEFgRUAdocuOlsR+zJgxvpN1mBWaLM0i
|
||||
1tixNIaOf3EjPlfhz4MpqCO0J2g9qTP0I5V+FVHQa9or9BWc/k7jaAJPjp8Ar13oIUjaZDAAAAAASUVO
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAlySURBVFhH1VcJVJNXGo1TrTsqkLDpBAERAgjIIpsEERGE
|
||||
iEIwQEIICcEIAgKuiAYstCJqK2oBcUppqxWFoowoLi2olUWigGVAGSkDlTq2FatFhbLcvmfV2lar9vTM
|
||||
OfOfc8+/5Hv/vd/9vvfyfgbj//FwWvX5+P+ZbqOY1pFGkWXh7LDSndqhJa3mshIYS4pgFl6MsYuLv2QK
|
||||
j+wxkJQudVq1968XZRBxxH2GtBje8cqhdZmN2J3fhcqj93G5Aqiv7EdZ2W28ndeOsLDqfpPwI2CLShf9
|
||||
Jc7Y2KhGmEgKD1qEFSH97RYc39eNj3ZdReKqEkilu8Cdo0CAvxI7d17A2cPfoLMBaKq+j1lLS2EuKjyh
|
||||
E1k65s8L4VYMNxMfuOMhK7tfsOsr5O++Cr5fKnQnu4BpK+xjs5f0sx2F0HHy/VFHh0DXGa4uMvyrsgs3
|
||||
vwQ2Kmt6TbkfDNoLj6n9KREmwvx9jkuLe/bv6kRSVAEsLQWY5swd5Lgv/cbKnV9u5+y63cGBs9zB1W2T
|
||||
tVtACWee7Po0BwHMLfnY8kYZrhE3lESEYfD7Z58WABubEbfYhl7dXl685wrT5+dyTQR7kfVWI7asOwY2
|
||||
W9xv4LuyZ6aLT3HAgjnxItHi8LS0tIi6urr0c5WVWQ0NDbvz92xZMdvDb4eBo7jHhMMZSF5ThLrzAEes
|
||||
HNDzyw2gZCoGY0TPLF18Z2uNbltb3LS2vvU7ETY2kSOmB+YidnUF0tJr4OQeB85c2X13N7ek8DCBbPXq
|
||||
lSEbNiT5XG5qSPjt4Kqqqs1+PC+ZGVd8x85FjpJPvsb+Q//FBF72DQYDw/LXJ2BH5ls4kZyEr8rL0a2v
|
||||
jyGRaOyv3qMTsDXYMkQ59E7mFcgi3sc0+7heZ2//j+XSsNDU1CTeu+9muRfs3WtbX1/jOfjjj/ueHnzn
|
||||
TveBQ4WFCt/FoTv17RYiWr4fxw73w0Z+uuedrbHfFxwoAI3P2LoZJ2Ki0T1J7eH9rwV4vbmVI1MObNvc
|
||||
CAePREz3kNyOigiUpKZu8CkoyHE8/ukRs4qKCn1iO6uzs9OIDh4cHCyn5+7u7qT3PsjjrYqLFMz0kH9l
|
||||
bR869F4OULhsPgozuYM7snZg374PsTE9DR8nxqDDiJH1OwFa85IbRYoirI8/AkuPmAdu/tJjycmJ/L05
|
||||
Oa7ny8tN2qqrtS5dusRsampSb2+vn0jPV1QqzVby7MyJE1P37y2wzcxM9Z4ftKJA3UrQ+5nCDbdSDYGW
|
||||
dUARD+kZW5CxfRtKQr2OP7MJ2fPSoIg+iljFAZhYxj4IEku2bNuWseDo0RKblpYW3ebrtRr19fUTW1tr
|
||||
1Aj5uJsEra2t5LpKva2tWqu6stJ0Z162myA6KXLPQm1cTbUii0MS+g774fb7PGS9sQF5a/m7nj0DuNzh
|
||||
unOSELviNKKjjsHQKQoJKyKE2dk73apPVppeI7bfvl0/kZJ2VlWNJsQjKUg5xlJRV66oNM9fvMjedXj/
|
||||
rC/CR1S3KGc8Ib+ew8P5UEbP4fAJi/9wXWBz10O+rBSrEqphx43qkyriknNzc53O1JyZqiJWE0zoAsYA
|
||||
qhH0RaQfhre3t49qafl8PHWh+T91OheWDP+0PcW873HmlLxaMg4XBAynFy5KmrNjmviSfVgTr8I8Xk6/
|
||||
j3hFcW7ubqeaM78IICKeCKAvbG+veCig9dIx5kUBo6Q+xfzB0+R1MgY0uNzBF5LTAKbj8m1cbvZgQkwV
|
||||
AoJL4SHYePfQx5luJ08eNaWd3/H95Um09jRrcn6dlqCrSzWm49y5SXVBjOIrKcb3niZXSRlYHbEZwxwS
|
||||
il5KAMs1OsSUs34gNvozREd3gB+UD6FiXfbp08Uzm5ubdZprazXa2lQTaB/Q2pPGHN+mOjXhQhDj4G/J
|
||||
68IZyFieB/uFyl5NF0XSSwlgGMWM1OPGgS/6CMuWqRAh64Cf8B+9O3a/4Xn21CnjhoZrrObmWg06/Wjj
|
||||
fU/qfjHwaXIeaM1rCfkG6duQyE5B3T62d7zdWo2XE0CidB2j5urNjoNIfBDLFDcRKW+EpzjvvniVclPX
|
||||
5XKT1tbGyQ3XzrMablxjNVDy1Me28/D1Hj/UkpqvFScjLLwGWm7xMDCYUv/S5I8D9VxiDhhzU++FScqg
|
||||
WHodcnkzQmTKIU9h2rd8Rep2eWaut0owrOxLpUUvviDzvISHrtxFqCU1TxKtg1hyDjbemQiOWgtHq6mD
|
||||
Fsb6n7yaCLIm6Dkqesy8V/4QIiqEJPxzREQ2QyRVDvlJDz3IF9mheSOZ55fX/Uyetwh1tOFCUyAUnsSM
|
||||
eenQc47CxlgBDuVuhrHB5AGL6YabXkkEm60cpe0U909ajoUB+QgUliFYWIdDogW4kmL5CznJvC6CgZTQ
|
||||
N7F4yX6wXBJg5ZuIRaESCBc6Y010ILLS1oKtx+znTDMIfiURNFh7lsKb6Rx9V9s5/U4213aweSNZXht+
|
||||
yfwCyVzqvwIW3LQ7upyoAV0d7RvBolj4iBMx39cfgT5crFSEIDkhAvqTtQYMpkyxfWURdMBZ0fADV1PM
|
||||
+p6Q71mEKqkaOJyYAV3X9z7UdVmZwAxUjtPTVM/Q0ND4luux5K5X0HJwXbjw93JBfKQAcpEfmExmH5PJ
|
||||
0H4lERdDGCevKQ16niZvjBjbAznD4zcveu2ha0xmoK7W6Lu2Dg5fe/iHwdF2BvzmOyNOHgi+9xwYGrJv
|
||||
6ejo0E3rsBcKadtqd7irJJrU/C30FpOGI5nXB4++VydkeJLBlHAkwQQCTTqLCSYT6KmrqXlqT5p0c/r0
|
||||
aZ2u83xga20Kn7lOiAnnY67LTFhzjOiGhI79YxFdB0Vkg6kcokpv5IeiNmz0D1VBDC9yS/+Qxj0ipqSG
|
||||
BGYEMwnsCJxef+01P01N9S9YLFa33Sx7WJkbw9dzNuKXCjB1ig5Y6upxJG7Uc13YEOo4PzLACvc7zqCp
|
||||
Ujnw3XEFakIZ0keZUwvpCkezfkxuQ4kJ3AkWEPgTJGqqqTUxmep9tlbmsLYwBp/nDnMTfWixNE48cu/Z
|
||||
Glyt/05twtGMBf/u+CBg69VsH71HllHrqYBJBLSh9AlMCawJHAjcCOYTLCQQURHjx49q1NViQp/JvDVl
|
||||
stZdPXJNnnMIaBmefcxiMWY856e/kefDCUY/yoDWn5ZhKsF0AgsCKwLqCJ12tCT2Y8aM8Z2izazQYGkU
|
||||
scaOpTF0/Isb8bkKfx5MQR2hPUHrSZ2hH6n0q4iCXtNeoVtw+juNowk8OX4CWVnn/d52HkoAAAAASUVO
|
||||
RK5CYII=
|
||||
</value>
|
||||
</data>
|
||||
|
@ -128,10 +128,21 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
else if (searchType == Configuration.Settings.Language.MultipleReplace.RegularExpression)
|
||||
{
|
||||
Regex regex = new Regex(findWhat);
|
||||
if (regex.IsMatch(newText))
|
||||
var match = regex.Match(newText);
|
||||
if (match.Success)
|
||||
{
|
||||
hit = true;
|
||||
newText = regex.Replace(newText, replaceWith);
|
||||
|
||||
string groupName = Utilities.GetRegExGroup(findWhat);
|
||||
if (groupName != null && match.Groups[groupName] != null && match.Groups[groupName].Success)
|
||||
{
|
||||
newText = newText.Remove(match.Groups[groupName].Index, match.Groups[groupName].Length);
|
||||
newText = newText.Insert(match.Groups[groupName].Index, replaceWith);
|
||||
}
|
||||
else
|
||||
{
|
||||
newText = regex.Replace(newText, replaceWith);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
162
src/Forms/NetworkChat.Designer.cs
generated
Normal file
162
src/Forms/NetworkChat.Designer.cs
generated
Normal file
@ -0,0 +1,162 @@
|
||||
namespace Nikse.SubtitleEdit.Forms
|
||||
{
|
||||
partial class NetworkChat
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NetworkChat));
|
||||
this.listViewChat = new System.Windows.Forms.ListView();
|
||||
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.imageListUsers = new System.Windows.Forms.ImageList(this.components);
|
||||
this.listViewUsers = new System.Windows.Forms.ListView();
|
||||
this.columnHeaderNick = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.textBoxChat = new System.Windows.Forms.TextBox();
|
||||
this.buttonSendChat = new System.Windows.Forms.Button();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// listViewChat
|
||||
//
|
||||
this.listViewChat.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.listViewChat.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||
this.columnHeader1,
|
||||
this.columnHeader4});
|
||||
this.listViewChat.Location = new System.Drawing.Point(3, 107);
|
||||
this.listViewChat.Name = "listViewChat";
|
||||
this.listViewChat.Size = new System.Drawing.Size(274, 239);
|
||||
this.listViewChat.SmallImageList = this.imageListUsers;
|
||||
this.listViewChat.TabIndex = 3;
|
||||
this.listViewChat.UseCompatibleStateImageBehavior = false;
|
||||
this.listViewChat.View = System.Windows.Forms.View.Details;
|
||||
//
|
||||
// columnHeader1
|
||||
//
|
||||
this.columnHeader1.Text = "Username";
|
||||
this.columnHeader1.Width = 82;
|
||||
//
|
||||
// columnHeader4
|
||||
//
|
||||
this.columnHeader4.Text = "Text";
|
||||
this.columnHeader4.Width = 188;
|
||||
//
|
||||
// imageListUsers
|
||||
//
|
||||
this.imageListUsers.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListUsers.ImageStream")));
|
||||
this.imageListUsers.TransparentColor = System.Drawing.Color.Transparent;
|
||||
this.imageListUsers.Images.SetKeyName(0, "person.jpg");
|
||||
this.imageListUsers.Images.SetKeyName(1, "person2.jpg");
|
||||
this.imageListUsers.Images.SetKeyName(2, "Person3.jpg");
|
||||
this.imageListUsers.Images.SetKeyName(3, "Person4.jpg");
|
||||
this.imageListUsers.Images.SetKeyName(4, "Person5.jpg");
|
||||
this.imageListUsers.Images.SetKeyName(5, "Person6.jpg");
|
||||
this.imageListUsers.Images.SetKeyName(6, "Person7.jpg");
|
||||
this.imageListUsers.Images.SetKeyName(7, "Person8.jpg");
|
||||
//
|
||||
// listViewUsers
|
||||
//
|
||||
this.listViewUsers.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.listViewUsers.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||
this.columnHeaderNick,
|
||||
this.columnHeader2});
|
||||
this.listViewUsers.Location = new System.Drawing.Point(2, 2);
|
||||
this.listViewUsers.Name = "listViewUsers";
|
||||
this.listViewUsers.Size = new System.Drawing.Size(275, 103);
|
||||
this.listViewUsers.SmallImageList = this.imageListUsers;
|
||||
this.listViewUsers.TabIndex = 2;
|
||||
this.listViewUsers.UseCompatibleStateImageBehavior = false;
|
||||
this.listViewUsers.View = System.Windows.Forms.View.Details;
|
||||
//
|
||||
// columnHeaderNick
|
||||
//
|
||||
this.columnHeaderNick.Text = "Username";
|
||||
this.columnHeaderNick.Width = 178;
|
||||
//
|
||||
// columnHeader2
|
||||
//
|
||||
this.columnHeader2.Text = "IP";
|
||||
this.columnHeader2.Width = 93;
|
||||
//
|
||||
// textBoxChat
|
||||
//
|
||||
this.textBoxChat.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.textBoxChat.Location = new System.Drawing.Point(3, 352);
|
||||
this.textBoxChat.Multiline = true;
|
||||
this.textBoxChat.Name = "textBoxChat";
|
||||
this.textBoxChat.Size = new System.Drawing.Size(188, 46);
|
||||
this.textBoxChat.TabIndex = 0;
|
||||
this.textBoxChat.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBoxChat_KeyDown);
|
||||
//
|
||||
// buttonSendChat
|
||||
//
|
||||
this.buttonSendChat.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonSendChat.Location = new System.Drawing.Point(197, 375);
|
||||
this.buttonSendChat.Name = "buttonSendChat";
|
||||
this.buttonSendChat.Size = new System.Drawing.Size(75, 23);
|
||||
this.buttonSendChat.TabIndex = 1;
|
||||
this.buttonSendChat.Text = "Send message";
|
||||
this.buttonSendChat.UseVisualStyleBackColor = true;
|
||||
this.buttonSendChat.Click += new System.EventHandler(this.buttonSendChat_Click);
|
||||
//
|
||||
// NetworkChat
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(281, 402);
|
||||
this.Controls.Add(this.listViewChat);
|
||||
this.Controls.Add(this.listViewUsers);
|
||||
this.Controls.Add(this.textBoxChat);
|
||||
this.Controls.Add(this.buttonSendChat);
|
||||
this.KeyPreview = true;
|
||||
this.MaximizeBox = false;
|
||||
this.MinimumSize = new System.Drawing.Size(200, 300);
|
||||
this.Name = "NetworkChat";
|
||||
this.ShowIcon = false;
|
||||
this.Text = "NetworkChat";
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.ListView listViewChat;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader1;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader4;
|
||||
private System.Windows.Forms.ListView listViewUsers;
|
||||
private System.Windows.Forms.ColumnHeader columnHeaderNick;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader2;
|
||||
private System.Windows.Forms.TextBox textBoxChat;
|
||||
private System.Windows.Forms.Button buttonSendChat;
|
||||
private System.Windows.Forms.ImageList imageListUsers;
|
||||
}
|
||||
}
|
95
src/Forms/NetworkChat.cs
Normal file
95
src/Forms/NetworkChat.cs
Normal file
@ -0,0 +1,95 @@
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
using Nikse.SubtitleEdit.Logic;
|
||||
using Nikse.SubtitleEdit.Logic.Networking;
|
||||
|
||||
namespace Nikse.SubtitleEdit.Forms
|
||||
{
|
||||
public partial class NetworkChat : Form
|
||||
{
|
||||
Logic.Networking.NikseWebServiceSession _networkSession;
|
||||
|
||||
public NetworkChat()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
internal void Initialize(Nikse.SubtitleEdit.Logic.Networking.NikseWebServiceSession networkSession)
|
||||
{
|
||||
_networkSession = networkSession;
|
||||
Text = "Chat - " + _networkSession.CurrentUser.UserName;
|
||||
|
||||
listViewUsers.Items.Clear();
|
||||
foreach (var user in _networkSession.Users)
|
||||
{
|
||||
AddUser(user);
|
||||
}
|
||||
|
||||
listViewChat.Items.Clear();
|
||||
foreach (var message in _networkSession.ChatLog)
|
||||
{
|
||||
AddChatMessage(message.User, message.Message);
|
||||
listViewChat.EnsureVisible(listViewChat.Items.Count - 1);
|
||||
}
|
||||
}
|
||||
|
||||
private void buttonSendChat_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (textBoxChat.Text.Trim().Length > 0)
|
||||
{
|
||||
_networkSession.SendChatMessage(textBoxChat.Text.Trim());
|
||||
AddChatMessage(_networkSession.CurrentUser, textBoxChat.Text.Trim());
|
||||
listViewChat.EnsureVisible(listViewChat.Items.Count - 1);
|
||||
_networkSession.ChatLog.Add(new NikseWebServiceSession.ChatEntry() { User = _networkSession.CurrentUser, Message = textBoxChat.Text.Trim() });
|
||||
}
|
||||
textBoxChat.Text = string.Empty;
|
||||
textBoxChat.Focus();
|
||||
}
|
||||
|
||||
public void AddChatMessage(SeNetworkService.SeUser user, string message)
|
||||
{
|
||||
ListViewItem item = new ListViewItem(user.UserName);
|
||||
item.Tag = _networkSession.CurrentUser;
|
||||
item.ForeColor = Utilities.GetColorFromUserName(user.UserName);
|
||||
item.ImageIndex = Utilities.GetNumber0To7FromUserName(user.UserName);
|
||||
item.SubItems.Add(new ListViewItem.ListViewSubItem(item, message));
|
||||
listViewChat.Items.Add(item);
|
||||
}
|
||||
|
||||
private void textBoxChat_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (e.KeyCode == Keys.Enter && e.Modifiers == Keys.None)
|
||||
{
|
||||
e.SuppressKeyPress = true;
|
||||
buttonSendChat_Click(null, null);
|
||||
}
|
||||
}
|
||||
|
||||
internal void AddUser(SeNetworkService.SeUser user)
|
||||
{
|
||||
ListViewItem item = new ListViewItem(user.UserName);
|
||||
item.Tag = user;
|
||||
item.ForeColor = Utilities.GetColorFromUserName(user.UserName);
|
||||
if (DateTime.Now.Month == 12 && DateTime.Now.Day >= 23 && DateTime.Now.Day <= 25)
|
||||
item.ImageIndex = 7;
|
||||
else
|
||||
item.ImageIndex = Utilities.GetNumber0To7FromUserName(user.UserName);
|
||||
item.SubItems.Add(new ListViewItem.ListViewSubItem(item, user.Ip));
|
||||
listViewUsers.Items.Add(item);
|
||||
}
|
||||
|
||||
internal void RemoveUser(SeNetworkService.SeUser user)
|
||||
{
|
||||
ListViewItem removeItem = null;
|
||||
foreach (ListViewItem item in listViewUsers.Items)
|
||||
{
|
||||
if ((item.Tag as SeNetworkService.SeUser).UserName == user.UserName)
|
||||
{
|
||||
removeItem = item;
|
||||
}
|
||||
}
|
||||
if (removeItem != null)
|
||||
listViewUsers.Items.Remove(removeItem);
|
||||
}
|
||||
}
|
||||
}
|
208
src/Forms/NetworkChat.resx
Normal file
208
src/Forms/NetworkChat.resx
Normal file
@ -0,0 +1,208 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="imageListUsers.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<data name="imageListUsers.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAo
|
||||
EgAAAk1TRnQBSQFMAgEBCAEAAcgBAAHIAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
||||
AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
|
||||
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
|
||||
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
|
||||
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
|
||||
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
|
||||
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
|
||||
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
|
||||
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
|
||||
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
|
||||
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
|
||||
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
|
||||
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
|
||||
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
|
||||
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
|
||||
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
|
||||
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
|
||||
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
|
||||
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
|
||||
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
|
||||
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
|
||||
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
|
||||
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
|
||||
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
|
||||
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
|
||||
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
|
||||
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
|
||||
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
|
||||
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8ABQAE9AH/
|
||||
AfMB9AHiAvQB8wX0AfYBdAEjAUQDIwF0AZoBIwFEAiMBRAF0AfYB/wHzAf8B8wHxAfAB7AHqARIB7AEH
|
||||
AfAC9AL2AfQB/wH0AbwBBwJuAXQBbwFuAY4BvAHvAfIB/wH2AfQBmAFyAeoBbQFyAZECmAGRAXIBbQHq
|
||||
AXIBmAH0ARsBbgFzAZkDdAEkASoBUgJ0AZkBcwFuAcMB/wH2Av8B8wHvAesB7AHrAewB9wj/AfMB7QEV
|
||||
ASMBRAFFAR4BRAEHAf8B9AL2AfMBcgGRAZ0BmAG7AZECwgGRAbsBmAGdAZEBcgHCAfYBbgFzApkBeQJ6
|
||||
AVIBegF0AZkBmgFzAW4B9gH0AfYC/wG8Ae0B9wEHAfcB6wHqAQcC/wL0AfYC9AH/Ae8B7QF0AW8BFgGU
|
||||
AW4BBwH0Af8C9gH/Ae0DnQGYAe0C9AGRAZgDnQGSAf8B8wG8AW4BSgF0AZoDdAF5AZoBdAFLAW0BvAH0
|
||||
A/8B8QHsAesB9wHvAfcB6wEUARIB8AP/BPYBmQKUAhYClAG9ARsD9gH/AQgBmAKdAZgBcgKYAXIBmAKd
|
||||
AZgBCAP/AvYBRAF0AXkCdAGaAXQBRAL2A/8B9AH/Ae8BkgH3Ae8BvAHvAuwBbQHsAvMB9gH/AfYBvQGU
|
||||
AW8CRgFAAUYCQAHpAW8BvQH2A/8BCAG7ApgBHAKZARwCmAG7AQgE/wH0AfYBbgKZAZoDmQFuAfYBGwT/
|
||||
AfQBkgHtAeoBDgJtAREBEwHtAW0B9AP/AfYBlAJGAekBRgLjAUYCQAFGAb0B9gH0Av8C9AEIAZkBcwIc
|
||||
AXMBmQEIAvQC/wP2ARsBbgKZAnMCmQFuARsD9gL/AbwB7wHrARQBDgLrAQ8BDgFtAewBvAH/AfMB/wH0
|
||||
ARYBRgFHARcBlAK9ARYBQAIgAW8BvQP/AfQB9gEbAZkBSgFzAXQBSgGZARsB9gH0Av8BdANEAW4CmQJz
|
||||
ApkBbgNEAZMC/wIHAUMBFAHqAu8B6wEQAREB9wGSBP8BFgFGARcBlAGZArwBGwFvAUYB6QEWBP8B9AH2
|
||||
AkQBbgKTAXMBRAFKAfYD/wEjAXQBeQF0AZkBHASZARwBmQF5AnQBIwL/AbwD7QHvAf8B9AHvAuwB6gHv
|
||||
BP8BvQJvApkCCAEbAb0CRQG9AfQE/wH2AUoBRAGTApoBkwFEAUoE/wEjAZkBdASZAlEEmQF5AZkBIwL/
|
||||
AbwB7wG8AvQC/wHxAQcB9wHrAQcB9AL/AfQB/wEaARwBmQEHAfcB7wEbARoBbgG9AfQF/wH2AW0BRASa
|
||||
AUQBSgH2A/8BmQFKAXQCSwGaAUsCeQFLAZoBUQFLAXQBSgGZAv8B8QHvAbwC9AHxAbwB8AHvAe0B7AHw
|
||||
BP8C9gEbARoDBwG9ARoBvQL2BP8B9AH2AW4BRAGTAZkCmgFEAW4B9gP/AfYBGwH2AcMBSgGZAZoBeQF6
|
||||
AZoBeQFKAcMB9gEbAfYD/wG8Ae8BvAHxAfACvAH3AewB7wHzAv8B9AH/AfQC9gG8AZMBGgGUAZMBvQH2
|
||||
ARsB9gH0A/8B9AH2ARwBRAFLAXQBmQGTAUoBHAH2Bf8B8wH2AUsBmQEjAZoBegEjAZkBSgH2AfQB/wH0
|
||||
AfYC/wHyAQcB7wK8Au8CkgHwBP8B9AL/AfQB7wEaAZkDvQEaAfMC/wH0A/8B9gEbAW4BSwJuAUsBbgEb
|
||||
AfYG/wH0AUoBmQSaAZkBSgHzBP8B9gL/AfIBvAEHAe8C9wHvAbwJ/wEHARoBmgEaAb0BbgGTAv8C9gP/
|
||||
AvYBmQJvAUsBbgGTAfYH/wH2AZkBSgOZARwBSgGZAvYB9AL/AfYE/wHzAvEB8gP/AfYB/wL0Av8B9AH/
|
||||
Ab0CkwJvAUQBvQL/AfQB9gP/AvYBwwGTAm8BkwEbAfYF/wP2AcMBmQFuAkoBbgGZAcMC9gL/AfYC/wH2
|
||||
Bf8B9AH/AfQB/wH2Af8B9gb/Ab0ClAFvAb0B/wHeAf8C9gP/AfEBvAEHAbwDBwG8AfME/wP2BMMCoAHC
|
||||
A8MD9gESAQABDgEPAg4BIgGZAXQBCwIOAQABDwEOAesB/wGuAYYBxwOGA6YChgHHAaYBrgP/AfIB8QH0
|
||||
Af8B8AHvAf8B8wHwAQcB8AH0Av8B9gEcAXMJUAFyAXMBHAH2Af8CAAIPAUMBIgGZAZoBIgEAAQ8BDgEA
|
||||
AQ4C9AFmAq0BiwStAc8BiwOtAWYD/wG8AfEC8wH3Aa4BCQL0AfIBvAL/AfYBwwFyAXgBnwGZAZ8BfQJ+
|
||||
AX0BnwGZAZ8BeAFyAcMB9AHqAUMBDgEVASIBSgEaAZoBSwELAQABQwEOAewC/wGRAbMBrQK0BIsDtAGL
|
||||
Aa4D/wG8AfEB9AHdAZEBrgEJAfQB3QG8AfMC/wH0AcIBeAFXBHgCVwR4AVcBeAHCAv8B9AFtARIBQwFz
|
||||
ApoBcwEiAesB7AP/AfQB8AGLAa4BtQGLAbUCGQG1Aa4CtAGLAbsB9AL/AfEBvAEZAd0BtQGuARkC3QG1
|
||||
BP8BwgGfAlAIVwJQAZ8BwgH/AfQB9gHrASIBSgF0ApoBmQFKAcMC9gT/Ae8B7QLsAfMBGwHxAfIBbQHs
|
||||
AW0B8AT/AfQBBwPdAa4D3QEZBP8BGwHDAXgCUQFQAVcBLwEwAVcBUAFRAXMBeAHDARsC/wEcAUoBRAEj
|
||||
AXQBmgGZAUsBRAFLAcMB9gL/AfMB9AG8AW0BbgGTBBoBkwHsAeoC/wH0A/8B8QG8AfMB9AEHAf8B8wEH
|
||||
Af8B9AH/AfMB/wH0Af8B9AEIAXMBUQF5AuUBeQFRAXgBCAH0Af8C9AH/AkQBSgFLAZkBGgGZAZoBSwEj
|
||||
AXMB9gT/Ab0BbgFEASMBRAEaAZoCIwFFAXQBGwP/AfYC/wEHAbwB8AG8AQcB7wHzAv8B9AP/AfQB/wH2
|
||||
AXkBWAF6AuUBegFYAXkB9gH/AfQD/wFzAUoBIwGZA5oBmQF0AUoBcwH2BP8B9gF0AiQESwIkAZkB9gP/
|
||||
AvYBGwGZAxoBwwGZARwC9gP/AvYB/wH2AVIBWAR6AlgB9gH0Af8B9AL/AcMBdAEpBZoBeQFKAXMB9gT/
|
||||
AfYBmgIkAUsCmQFLASQBIwHDAfYD/wL2AZMBGgGZBJoBmQHDAvYC/wH2Av8BFQEiAQMBWAF6AaACegFK
|
||||
ASIB/wH0AfYC/wH2AcMBSwSaAaABmgFLAXMBwwX/ARoCKgF6ApoBdAErASoBwwT/AfYBGgFuAUsBUQF0
|
||||
AnkBmgF0ARoC9gX/ARUB6gFEAiIBmQIaARUBFAHyAf8B9AH/AfYCwwFRAZkBdAKaAcMBmgFLAZkBwwX/
|
||||
AcMBJAEqBJoBKwEkAcME/wH0ARoBbgRLAXkBmgF0ARoB9gb/AewBEgHtAewBbQEUARwB6gFtARUBvAT/
|
||||
AfYBwwNLAXQBoAHDAXQBSgHDAfYF/wH2ASQBTASaASoBJAH2BP8B9gEaAUoEdANLAcMB9gX/AfMBvAET
|
||||
AewB9wGSAewBEgEUAe0BEgX/AvYBcwFKASkBUgGgAZoBcwF0AvYF/wH2AksBmgOUAUUBSwH2A/8B9AL2
|
||||
ARwEmQGaAXQBcwHDAfMB9AL/AfQD/wHtARIB7AG8Ae8BFAHqARQB9wT/AfQB/wH2AZkCSwFRAXQCSwHD
|
||||
AfYG/wH2AXQDSwFvAUsBRQFzAfYE/wL2ARsBHAGZAZoBGgIcAbwB9gb/AfQB/wH0AQcBbQEPARQB7AEH
|
||||
AbwI/wEbAXQESwEcAfYH/wH2ARoBdAFuA0sBcwGZAfYE/wT2ARoCmQEaAfQB9gEbBf8B9AH/CPYB/wHz
|
||||
Af8B9AH/AfQC/wL2AcMBeQFSAXQCwwH2Av8B8wT/AvYBmQF0Am8BdAEaAvYB9AL/AUIBTQE+BwABPgMA
|
||||
ASgDAAFAAwABMAMAAQEBAAEBBQABgAEBFgAD//8AggAL
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
178
src/Forms/NetworkJoin.Designer.cs
generated
Normal file
178
src/Forms/NetworkJoin.Designer.cs
generated
Normal file
@ -0,0 +1,178 @@
|
||||
namespace Nikse.SubtitleEdit.Forms
|
||||
{
|
||||
partial class NetworkJoin
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.labelStatus = new System.Windows.Forms.Label();
|
||||
this.labelInfo = new System.Windows.Forms.Label();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.comboBoxWebServiceUrl = new System.Windows.Forms.ComboBox();
|
||||
this.buttonCancel = new System.Windows.Forms.Button();
|
||||
this.textBoxUserName = new System.Windows.Forms.TextBox();
|
||||
this.buttonConnect = new System.Windows.Forms.Button();
|
||||
this.labelGoToLine = new System.Windows.Forms.Label();
|
||||
this.textBoxSessionKey = new System.Windows.Forms.TextBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// labelStatus
|
||||
//
|
||||
this.labelStatus.AutoSize = true;
|
||||
this.labelStatus.Location = new System.Drawing.Point(35, 205);
|
||||
this.labelStatus.Name = "labelStatus";
|
||||
this.labelStatus.Size = new System.Drawing.Size(59, 13);
|
||||
this.labelStatus.TabIndex = 18;
|
||||
this.labelStatus.Text = "labelStatus";
|
||||
//
|
||||
// labelInfo
|
||||
//
|
||||
this.labelInfo.AutoSize = true;
|
||||
this.labelInfo.Location = new System.Drawing.Point(12, 9);
|
||||
this.labelInfo.Name = "labelInfo";
|
||||
this.labelInfo.Size = new System.Drawing.Size(200, 26);
|
||||
this.labelInfo.TabIndex = 17;
|
||||
this.labelInfo.Text = "Start new session where multiple persons\r\ncan edit in same subtitle file.\r\n";
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.label1.Location = new System.Drawing.Point(9, 138);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(81, 13);
|
||||
this.label1.TabIndex = 16;
|
||||
this.label1.Text = "Web service url";
|
||||
//
|
||||
// comboBoxWebServiceUrl
|
||||
//
|
||||
this.comboBoxWebServiceUrl.FormattingEnabled = true;
|
||||
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.Name = "comboBoxWebServiceUrl";
|
||||
this.comboBoxWebServiceUrl.Size = new System.Drawing.Size(290, 21);
|
||||
this.comboBoxWebServiceUrl.TabIndex = 2;
|
||||
//
|
||||
// buttonCancel
|
||||
//
|
||||
this.buttonCancel.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.buttonCancel.Location = new System.Drawing.Point(311, 173);
|
||||
this.buttonCancel.Name = "buttonCancel";
|
||||
this.buttonCancel.Size = new System.Drawing.Size(75, 21);
|
||||
this.buttonCancel.TabIndex = 4;
|
||||
this.buttonCancel.Text = "C&ancel";
|
||||
this.buttonCancel.UseVisualStyleBackColor = true;
|
||||
this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click);
|
||||
//
|
||||
// textBoxUserName
|
||||
//
|
||||
this.textBoxUserName.Location = new System.Drawing.Point(96, 79);
|
||||
this.textBoxUserName.Name = "textBoxUserName";
|
||||
this.textBoxUserName.Size = new System.Drawing.Size(290, 20);
|
||||
this.textBoxUserName.TabIndex = 0;
|
||||
//
|
||||
// buttonConnect
|
||||
//
|
||||
this.buttonConnect.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.buttonConnect.Location = new System.Drawing.Point(230, 173);
|
||||
this.buttonConnect.Name = "buttonConnect";
|
||||
this.buttonConnect.Size = new System.Drawing.Size(75, 21);
|
||||
this.buttonConnect.TabIndex = 3;
|
||||
this.buttonConnect.Text = "&Join";
|
||||
this.buttonConnect.UseVisualStyleBackColor = true;
|
||||
this.buttonConnect.Click += new System.EventHandler(this.buttonConnect_Click);
|
||||
//
|
||||
// labelGoToLine
|
||||
//
|
||||
this.labelGoToLine.AutoSize = true;
|
||||
this.labelGoToLine.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.labelGoToLine.Location = new System.Drawing.Point(35, 82);
|
||||
this.labelGoToLine.Name = "labelGoToLine";
|
||||
this.labelGoToLine.Size = new System.Drawing.Size(55, 13);
|
||||
this.labelGoToLine.TabIndex = 11;
|
||||
this.labelGoToLine.Text = "Username";
|
||||
//
|
||||
// textBoxSessionKey
|
||||
//
|
||||
this.textBoxSessionKey.Location = new System.Drawing.Point(96, 105);
|
||||
this.textBoxSessionKey.Name = "textBoxSessionKey";
|
||||
this.textBoxSessionKey.Size = new System.Drawing.Size(290, 20);
|
||||
this.textBoxSessionKey.TabIndex = 1;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.label2.Location = new System.Drawing.Point(35, 108);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(25, 13);
|
||||
this.label2.TabIndex = 19;
|
||||
this.label2.Text = "Key";
|
||||
//
|
||||
// NetworkJoin
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(408, 242);
|
||||
this.Controls.Add(this.textBoxSessionKey);
|
||||
this.Controls.Add(this.label2);
|
||||
this.Controls.Add(this.labelStatus);
|
||||
this.Controls.Add(this.labelInfo);
|
||||
this.Controls.Add(this.label1);
|
||||
this.Controls.Add(this.comboBoxWebServiceUrl);
|
||||
this.Controls.Add(this.buttonCancel);
|
||||
this.Controls.Add(this.textBoxUserName);
|
||||
this.Controls.Add(this.buttonConnect);
|
||||
this.Controls.Add(this.labelGoToLine);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||
this.KeyPreview = true;
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "NetworkJoin";
|
||||
this.Text = "Join network session";
|
||||
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.NetworkJoin_KeyDown);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Label labelStatus;
|
||||
private System.Windows.Forms.Label labelInfo;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.ComboBox comboBoxWebServiceUrl;
|
||||
private System.Windows.Forms.Button buttonCancel;
|
||||
private System.Windows.Forms.TextBox textBoxUserName;
|
||||
private System.Windows.Forms.Button buttonConnect;
|
||||
private System.Windows.Forms.Label labelGoToLine;
|
||||
private System.Windows.Forms.TextBox textBoxSessionKey;
|
||||
private System.Windows.Forms.Label label2;
|
||||
}
|
||||
}
|
83
src/Forms/NetworkJoin.cs
Normal file
83
src/Forms/NetworkJoin.cs
Normal file
@ -0,0 +1,83 @@
|
||||
using System;
|
||||
using System.Net;
|
||||
using System.Windows.Forms;
|
||||
using Nikse.SubtitleEdit.Logic;
|
||||
|
||||
namespace Nikse.SubtitleEdit.Forms
|
||||
{
|
||||
public partial class NetworkJoin : Form
|
||||
{
|
||||
|
||||
Logic.Networking.NikseWebServiceSession _networkSession;
|
||||
public string FileName { get; set;}
|
||||
|
||||
public NetworkJoin()
|
||||
{
|
||||
InitializeComponent();
|
||||
labelStatus.Text = string.Empty;
|
||||
}
|
||||
|
||||
internal void Initialize(Logic.Networking.NikseWebServiceSession networkSession)
|
||||
{
|
||||
_networkSession = networkSession;
|
||||
|
||||
textBoxSessionKey.Text = Configuration.Settings.NetworkSettings.SessionKey;
|
||||
if (textBoxSessionKey.Text.Trim().Length < 2)
|
||||
textBoxSessionKey.Text = Guid.NewGuid().ToString().Replace("-", string.Empty);
|
||||
|
||||
comboBoxWebServiceUrl.Text = Configuration.Settings.NetworkSettings.WebServiceUrl;
|
||||
textBoxUserName.Text = Configuration.Settings.NetworkSettings.UserName;
|
||||
if (textBoxUserName.Text.Trim().Length < 2)
|
||||
textBoxUserName.Text = Dns.GetHostName();
|
||||
}
|
||||
|
||||
private void buttonConnect_Click(object sender, EventArgs e)
|
||||
{
|
||||
Configuration.Settings.NetworkSettings.SessionKey = textBoxSessionKey.Text;
|
||||
Configuration.Settings.NetworkSettings.WebServiceUrl = comboBoxWebServiceUrl.Text;
|
||||
Configuration.Settings.NetworkSettings.UserName = textBoxUserName.Text;
|
||||
|
||||
buttonConnect.Enabled = false;
|
||||
buttonCancel.Enabled = false;
|
||||
textBoxUserName.Enabled = false;
|
||||
comboBoxWebServiceUrl.Enabled = false;
|
||||
labelStatus.Text = string.Format("Connecting to {0}...", comboBoxWebServiceUrl.Text);
|
||||
Refresh();
|
||||
|
||||
try
|
||||
{
|
||||
string message;
|
||||
_networkSession.Join(comboBoxWebServiceUrl.Text, textBoxUserName.Text, textBoxSessionKey.Text, out message);
|
||||
if (message == "OK")
|
||||
{
|
||||
DialogResult = DialogResult.OK;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show(message);
|
||||
}
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
MessageBox.Show(exception.Message);
|
||||
}
|
||||
buttonConnect.Enabled = true;
|
||||
buttonCancel.Enabled = true;
|
||||
textBoxUserName.Enabled = true;
|
||||
comboBoxWebServiceUrl.Enabled = true;
|
||||
labelStatus.Text = string.Empty;
|
||||
}
|
||||
|
||||
private void buttonCancel_Click(object sender, EventArgs e)
|
||||
{
|
||||
DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
|
||||
private void NetworkJoin_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (e.KeyCode == Keys.Escape)
|
||||
DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
}
|
||||
}
|
120
src/Forms/NetworkJoin.resx
Normal file
120
src/Forms/NetworkJoin.resx
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
168
src/Forms/NetworkLogAndInfo.Designer.cs
generated
Normal file
168
src/Forms/NetworkLogAndInfo.Designer.cs
generated
Normal file
@ -0,0 +1,168 @@
|
||||
namespace Nikse.SubtitleEdit.Forms
|
||||
{
|
||||
partial class NetworkLogAndInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.textBoxSessionKey = new System.Windows.Forms.TextBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.labelLog = new System.Windows.Forms.Label();
|
||||
this.textBoxLog = new System.Windows.Forms.TextBox();
|
||||
this.buttonConnect = new System.Windows.Forms.Button();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.textBoxUserName = new System.Windows.Forms.TextBox();
|
||||
this.labelGoToLine = new System.Windows.Forms.Label();
|
||||
this.textBoxWebServiceUrl = new System.Windows.Forms.TextBox();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// textBoxSessionKey
|
||||
//
|
||||
this.textBoxSessionKey.Location = new System.Drawing.Point(157, 16);
|
||||
this.textBoxSessionKey.Name = "textBoxSessionKey";
|
||||
this.textBoxSessionKey.ReadOnly = true;
|
||||
this.textBoxSessionKey.Size = new System.Drawing.Size(290, 20);
|
||||
this.textBoxSessionKey.TabIndex = 1;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.label2.Location = new System.Drawing.Point(87, 19);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(64, 13);
|
||||
this.label2.TabIndex = 21;
|
||||
this.label2.Text = "Session key";
|
||||
//
|
||||
// labelLog
|
||||
//
|
||||
this.labelLog.AutoSize = true;
|
||||
this.labelLog.Location = new System.Drawing.Point(9, 109);
|
||||
this.labelLog.Name = "labelLog";
|
||||
this.labelLog.Size = new System.Drawing.Size(28, 13);
|
||||
this.labelLog.TabIndex = 24;
|
||||
this.labelLog.Text = "Log:";
|
||||
//
|
||||
// textBoxLog
|
||||
//
|
||||
this.textBoxLog.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.textBoxLog.Location = new System.Drawing.Point(12, 125);
|
||||
this.textBoxLog.Multiline = true;
|
||||
this.textBoxLog.Name = "textBoxLog";
|
||||
this.textBoxLog.ReadOnly = true;
|
||||
this.textBoxLog.Size = new System.Drawing.Size(543, 179);
|
||||
this.textBoxLog.TabIndex = 4;
|
||||
//
|
||||
// buttonConnect
|
||||
//
|
||||
this.buttonConnect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonConnect.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.buttonConnect.Location = new System.Drawing.Point(480, 310);
|
||||
this.buttonConnect.Name = "buttonConnect";
|
||||
this.buttonConnect.Size = new System.Drawing.Size(75, 21);
|
||||
this.buttonConnect.TabIndex = 0;
|
||||
this.buttonConnect.Text = "&OK";
|
||||
this.buttonConnect.UseVisualStyleBackColor = true;
|
||||
this.buttonConnect.Click += new System.EventHandler(this.buttonConnect_Click);
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.label1.Location = new System.Drawing.Point(70, 71);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(81, 13);
|
||||
this.label1.TabIndex = 29;
|
||||
this.label1.Text = "Web service url";
|
||||
//
|
||||
// textBoxUserName
|
||||
//
|
||||
this.textBoxUserName.Location = new System.Drawing.Point(157, 42);
|
||||
this.textBoxUserName.Name = "textBoxUserName";
|
||||
this.textBoxUserName.ReadOnly = true;
|
||||
this.textBoxUserName.Size = new System.Drawing.Size(290, 20);
|
||||
this.textBoxUserName.TabIndex = 2;
|
||||
//
|
||||
// labelGoToLine
|
||||
//
|
||||
this.labelGoToLine.AutoSize = true;
|
||||
this.labelGoToLine.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.labelGoToLine.Location = new System.Drawing.Point(96, 45);
|
||||
this.labelGoToLine.Name = "labelGoToLine";
|
||||
this.labelGoToLine.Size = new System.Drawing.Size(55, 13);
|
||||
this.labelGoToLine.TabIndex = 28;
|
||||
this.labelGoToLine.Text = "Username";
|
||||
//
|
||||
// textBoxWebServiceUrl
|
||||
//
|
||||
this.textBoxWebServiceUrl.Location = new System.Drawing.Point(157, 68);
|
||||
this.textBoxWebServiceUrl.Name = "textBoxWebServiceUrl";
|
||||
this.textBoxWebServiceUrl.ReadOnly = true;
|
||||
this.textBoxWebServiceUrl.Size = new System.Drawing.Size(290, 20);
|
||||
this.textBoxWebServiceUrl.TabIndex = 3;
|
||||
//
|
||||
// NetworkLogAndInfo
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(565, 337);
|
||||
this.Controls.Add(this.textBoxWebServiceUrl);
|
||||
this.Controls.Add(this.label1);
|
||||
this.Controls.Add(this.textBoxUserName);
|
||||
this.Controls.Add(this.labelGoToLine);
|
||||
this.Controls.Add(this.buttonConnect);
|
||||
this.Controls.Add(this.labelLog);
|
||||
this.Controls.Add(this.textBoxLog);
|
||||
this.Controls.Add(this.textBoxSessionKey);
|
||||
this.Controls.Add(this.label2);
|
||||
this.KeyPreview = true;
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.MinimumSize = new System.Drawing.Size(500, 350);
|
||||
this.Name = "NetworkLogAndInfo";
|
||||
this.ShowIcon = false;
|
||||
this.Text = "Network session info and log";
|
||||
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.NetworkLogAndInfo_KeyDown);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TextBox textBoxSessionKey;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.Label labelLog;
|
||||
private System.Windows.Forms.TextBox textBoxLog;
|
||||
private System.Windows.Forms.Button buttonConnect;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.TextBox textBoxUserName;
|
||||
private System.Windows.Forms.Label labelGoToLine;
|
||||
private System.Windows.Forms.TextBox textBoxWebServiceUrl;
|
||||
}
|
||||
}
|
32
src/Forms/NetworkLogAndInfo.cs
Normal file
32
src/Forms/NetworkLogAndInfo.cs
Normal file
@ -0,0 +1,32 @@
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Nikse.SubtitleEdit.Forms
|
||||
{
|
||||
public partial class NetworkLogAndInfo : Form
|
||||
{
|
||||
public NetworkLogAndInfo()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
internal void Initialize(Logic.Networking.NikseWebServiceSession _networkSession)
|
||||
{
|
||||
textBoxSessionKey.Text = _networkSession.SessionId;
|
||||
textBoxUserName.Text = _networkSession.CurrentUser.UserName;
|
||||
textBoxWebServiceUrl.Text = _networkSession.WebServiceUrl;
|
||||
textBoxLog.Text = _networkSession.GetLog();
|
||||
}
|
||||
|
||||
private void buttonConnect_Click(object sender, EventArgs e)
|
||||
{
|
||||
DialogResult = DialogResult.OK;
|
||||
}
|
||||
|
||||
private void NetworkLogAndInfo_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (e.KeyCode == Keys.Escape)
|
||||
DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
}
|
||||
}
|
120
src/Forms/NetworkLogAndInfo.resx
Normal file
120
src/Forms/NetworkLogAndInfo.resx
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
177
src/Forms/NetworkStart.Designer.cs
generated
Normal file
177
src/Forms/NetworkStart.Designer.cs
generated
Normal file
@ -0,0 +1,177 @@
|
||||
namespace Nikse.SubtitleEdit.Forms
|
||||
{
|
||||
partial class NetworkStart
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.buttonCancel = new System.Windows.Forms.Button();
|
||||
this.textBoxUserName = new System.Windows.Forms.TextBox();
|
||||
this.buttonConnect = new System.Windows.Forms.Button();
|
||||
this.labelGoToLine = new System.Windows.Forms.Label();
|
||||
this.comboBoxWebServiceUrl = new System.Windows.Forms.ComboBox();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.labelInfo = new System.Windows.Forms.Label();
|
||||
this.labelStatus = new System.Windows.Forms.Label();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.textBoxSessionKey = new System.Windows.Forms.TextBox();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// buttonCancel
|
||||
//
|
||||
this.buttonCancel.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.buttonCancel.Location = new System.Drawing.Point(312, 147);
|
||||
this.buttonCancel.Name = "buttonCancel";
|
||||
this.buttonCancel.Size = new System.Drawing.Size(75, 21);
|
||||
this.buttonCancel.TabIndex = 4;
|
||||
this.buttonCancel.Text = "C&ancel";
|
||||
this.buttonCancel.UseVisualStyleBackColor = true;
|
||||
this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click);
|
||||
//
|
||||
// textBoxUserName
|
||||
//
|
||||
this.textBoxUserName.Location = new System.Drawing.Point(97, 83);
|
||||
this.textBoxUserName.Name = "textBoxUserName";
|
||||
this.textBoxUserName.Size = new System.Drawing.Size(290, 20);
|
||||
this.textBoxUserName.TabIndex = 1;
|
||||
//
|
||||
// buttonConnect
|
||||
//
|
||||
this.buttonConnect.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.buttonConnect.Location = new System.Drawing.Point(231, 147);
|
||||
this.buttonConnect.Name = "buttonConnect";
|
||||
this.buttonConnect.Size = new System.Drawing.Size(75, 21);
|
||||
this.buttonConnect.TabIndex = 3;
|
||||
this.buttonConnect.Text = "&Start";
|
||||
this.buttonConnect.UseVisualStyleBackColor = true;
|
||||
this.buttonConnect.Click += new System.EventHandler(this.buttonOK_Click);
|
||||
//
|
||||
// labelGoToLine
|
||||
//
|
||||
this.labelGoToLine.AutoSize = true;
|
||||
this.labelGoToLine.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.labelGoToLine.Location = new System.Drawing.Point(36, 86);
|
||||
this.labelGoToLine.Name = "labelGoToLine";
|
||||
this.labelGoToLine.Size = new System.Drawing.Size(55, 13);
|
||||
this.labelGoToLine.TabIndex = 3;
|
||||
this.labelGoToLine.Text = "Username";
|
||||
//
|
||||
// comboBoxWebServiceUrl
|
||||
//
|
||||
this.comboBoxWebServiceUrl.FormattingEnabled = true;
|
||||
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(97, 109);
|
||||
this.comboBoxWebServiceUrl.Name = "comboBoxWebServiceUrl";
|
||||
this.comboBoxWebServiceUrl.Size = new System.Drawing.Size(290, 21);
|
||||
this.comboBoxWebServiceUrl.TabIndex = 2;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.label1.Location = new System.Drawing.Point(10, 112);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(81, 13);
|
||||
this.label1.TabIndex = 8;
|
||||
this.label1.Text = "Web service url";
|
||||
//
|
||||
// labelInfo
|
||||
//
|
||||
this.labelInfo.AutoSize = true;
|
||||
this.labelInfo.Location = new System.Drawing.Point(13, 13);
|
||||
this.labelInfo.Name = "labelInfo";
|
||||
this.labelInfo.Size = new System.Drawing.Size(200, 26);
|
||||
this.labelInfo.TabIndex = 9;
|
||||
this.labelInfo.Text = "Start new session where multiple persons\r\ncan edit in same subtitle file.\r\n";
|
||||
//
|
||||
// labelStatus
|
||||
//
|
||||
this.labelStatus.AutoSize = true;
|
||||
this.labelStatus.Location = new System.Drawing.Point(36, 179);
|
||||
this.labelStatus.Name = "labelStatus";
|
||||
this.labelStatus.Size = new System.Drawing.Size(59, 13);
|
||||
this.labelStatus.TabIndex = 10;
|
||||
this.labelStatus.Text = "labelStatus";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||
this.label2.Location = new System.Drawing.Point(26, 60);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(65, 13);
|
||||
this.label2.TabIndex = 11;
|
||||
this.label2.Text = "Session Key";
|
||||
//
|
||||
// textBoxSessionKey
|
||||
//
|
||||
this.textBoxSessionKey.Location = new System.Drawing.Point(97, 57);
|
||||
this.textBoxSessionKey.Name = "textBoxSessionKey";
|
||||
this.textBoxSessionKey.Size = new System.Drawing.Size(290, 20);
|
||||
this.textBoxSessionKey.TabIndex = 0;
|
||||
//
|
||||
// NetworkStart
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(414, 201);
|
||||
this.Controls.Add(this.textBoxSessionKey);
|
||||
this.Controls.Add(this.label2);
|
||||
this.Controls.Add(this.labelStatus);
|
||||
this.Controls.Add(this.labelInfo);
|
||||
this.Controls.Add(this.label1);
|
||||
this.Controls.Add(this.comboBoxWebServiceUrl);
|
||||
this.Controls.Add(this.buttonCancel);
|
||||
this.Controls.Add(this.textBoxUserName);
|
||||
this.Controls.Add(this.buttonConnect);
|
||||
this.Controls.Add(this.labelGoToLine);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "NetworkStart";
|
||||
this.Text = "Start network session";
|
||||
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.NetworkNew_KeyDown);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Button buttonCancel;
|
||||
private System.Windows.Forms.TextBox textBoxUserName;
|
||||
private System.Windows.Forms.Button buttonConnect;
|
||||
private System.Windows.Forms.Label labelGoToLine;
|
||||
private System.Windows.Forms.ComboBox comboBoxWebServiceUrl;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label labelInfo;
|
||||
private System.Windows.Forms.Label labelStatus;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.TextBox textBoxSessionKey;
|
||||
}
|
||||
}
|
86
src/Forms/NetworkStart.cs
Normal file
86
src/Forms/NetworkStart.cs
Normal file
@ -0,0 +1,86 @@
|
||||
using System;
|
||||
using System.Net;
|
||||
using System.Windows.Forms;
|
||||
using Nikse.SubtitleEdit.Logic;
|
||||
|
||||
namespace Nikse.SubtitleEdit.Forms
|
||||
{
|
||||
public partial class NetworkStart : Form
|
||||
{
|
||||
|
||||
Logic.Networking.NikseWebServiceSession _networkSession;
|
||||
string _fileName;
|
||||
|
||||
public NetworkStart()
|
||||
{
|
||||
InitializeComponent();
|
||||
labelStatus.Text = string.Empty;
|
||||
}
|
||||
|
||||
internal void Initialize(Logic.Networking.NikseWebServiceSession networkSession, string fileName)
|
||||
{
|
||||
_networkSession = networkSession;
|
||||
_fileName = fileName;
|
||||
|
||||
textBoxSessionKey.Text = Configuration.Settings.NetworkSettings.SessionKey;
|
||||
if (textBoxSessionKey.Text.Trim().Length < 2)
|
||||
textBoxSessionKey.Text = Guid.NewGuid().ToString().Replace("-", string.Empty);
|
||||
|
||||
comboBoxWebServiceUrl.Text = Configuration.Settings.NetworkSettings.WebServiceUrl;
|
||||
textBoxUserName.Text = Configuration.Settings.NetworkSettings.UserName;
|
||||
if (textBoxUserName.Text.Trim().Length < 2)
|
||||
textBoxUserName.Text = Dns.GetHostName();
|
||||
}
|
||||
|
||||
private void buttonOK_Click(object sender, EventArgs e)
|
||||
{
|
||||
Configuration.Settings.NetworkSettings.SessionKey = textBoxSessionKey.Text;
|
||||
Configuration.Settings.NetworkSettings.WebServiceUrl = comboBoxWebServiceUrl.Text;
|
||||
Configuration.Settings.NetworkSettings.UserName = textBoxUserName.Text;
|
||||
|
||||
buttonConnect.Enabled = false;
|
||||
buttonCancel.Enabled = false;
|
||||
textBoxSessionKey.Enabled = false;
|
||||
textBoxUserName.Enabled = false;
|
||||
comboBoxWebServiceUrl.Enabled = false;
|
||||
labelStatus.Text = string.Format("Connecting to {0}...", comboBoxWebServiceUrl.Text);
|
||||
Refresh();
|
||||
|
||||
try
|
||||
{
|
||||
string message;
|
||||
_networkSession.StartServer(comboBoxWebServiceUrl.Text, textBoxSessionKey.Text, textBoxUserName.Text, _fileName, out message);
|
||||
if (message != "OK")
|
||||
{
|
||||
MessageBox.Show(message);
|
||||
}
|
||||
else
|
||||
{
|
||||
DialogResult = DialogResult.OK;
|
||||
return;
|
||||
}
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
MessageBox.Show(exception.Message);
|
||||
}
|
||||
buttonConnect.Enabled = true;
|
||||
buttonCancel.Enabled = true;
|
||||
textBoxSessionKey.Enabled = false;
|
||||
textBoxUserName.Enabled = true;
|
||||
comboBoxWebServiceUrl.Enabled = true;
|
||||
labelStatus.Text = string.Empty;
|
||||
}
|
||||
|
||||
private void buttonCancel_Click(object sender, EventArgs e)
|
||||
{
|
||||
DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
|
||||
private void NetworkNew_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (e.KeyCode == Keys.Escape)
|
||||
DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
}
|
||||
}
|
120
src/Forms/NetworkStart.resx
Normal file
120
src/Forms/NetworkStart.resx
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
BIN
src/Icons/connect.png
Normal file
BIN
src/Icons/connect.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 748 B |
@ -11,6 +11,7 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
readonly Regex _regEx;
|
||||
int _findTextLenght;
|
||||
|
||||
public bool Success { get; set; }
|
||||
public FindType FindType { get; set; }
|
||||
public int SelectedIndex { get; set; }
|
||||
public int SelectedPosition { get; set; }
|
||||
@ -80,6 +81,12 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
Match match = _regEx.Match(text, startIndex);
|
||||
if (match.Success)
|
||||
{
|
||||
string groupName = Utilities.GetRegExGroup(_findText);
|
||||
if (groupName != null && match.Groups[groupName] != null && match.Groups[groupName].Success)
|
||||
{
|
||||
_findTextLenght = match.Groups[groupName].Length;
|
||||
return match.Groups[groupName].Index;
|
||||
}
|
||||
_findTextLenght = match.Length;
|
||||
return match.Index;
|
||||
}
|
||||
@ -91,6 +98,7 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
|
||||
public bool FindNext(Subtitle subtitle, int startIndex, int position)
|
||||
{
|
||||
Success = false;
|
||||
int index = 0;
|
||||
if (position < 0)
|
||||
position = 0;
|
||||
@ -103,6 +111,7 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
{
|
||||
SelectedIndex = index;
|
||||
SelectedPosition = pos;
|
||||
Success = true;
|
||||
return true;
|
||||
}
|
||||
position = 0;
|
||||
@ -137,6 +146,7 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
|
||||
public bool FindNext(TextBox textBox, int startIndex)
|
||||
{
|
||||
Success = false;
|
||||
startIndex++;
|
||||
if (startIndex < textBox.Text.Length)
|
||||
{
|
||||
@ -145,8 +155,18 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
Match match = _regEx.Match(textBox.Text, startIndex);
|
||||
if (match.Success)
|
||||
{
|
||||
_findTextLenght = match.Length;
|
||||
SelectedIndex = match.Index;
|
||||
string groupName = Utilities.GetRegExGroup(_findText);
|
||||
if (groupName != null && match.Groups[groupName] != null && match.Groups[groupName].Success)
|
||||
{
|
||||
_findTextLenght = match.Groups[groupName].Length;
|
||||
SelectedIndex = match.Groups[groupName].Index;
|
||||
}
|
||||
else
|
||||
{
|
||||
_findTextLenght = match.Length;
|
||||
SelectedIndex = match.Index;
|
||||
}
|
||||
Success = true;
|
||||
}
|
||||
return match.Success;
|
||||
}
|
||||
|
@ -38,6 +38,10 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
public LanguageStructure.MatroskaSubtitleChooser MatroskaSubtitleChooser;
|
||||
public LanguageStructure.MergeShortLines MergedShortLines;
|
||||
public LanguageStructure.MultipleReplace MultipleReplace;
|
||||
public LanguageStructure.NetworkChat NetworkChat;
|
||||
public LanguageStructure.NetworkJoin NetworkJoin;
|
||||
public LanguageStructure.NetworkLogAndInfo NetworkLogAndInfo;
|
||||
public LanguageStructure.NetworkStart NetworkStart;
|
||||
public LanguageStructure.RemoveTextFromHearImpaired RemoveTextFromHearImpaired;
|
||||
public LanguageStructure.ReplaceDialog ReplaceDialog;
|
||||
public LanguageStructure.SetMinimumDisplayTimeBetweenParagraphs SetMinimumDisplayTimeBetweenParagraphs;
|
||||
@ -886,6 +890,26 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
SearchType = "Search type",
|
||||
};
|
||||
|
||||
NetworkChat = new LanguageStructure.NetworkChat
|
||||
{
|
||||
Title = "",
|
||||
};
|
||||
|
||||
NetworkJoin = new LanguageStructure.NetworkJoin
|
||||
{
|
||||
Title = "",
|
||||
};
|
||||
|
||||
NetworkLogAndInfo = new LanguageStructure.NetworkLogAndInfo
|
||||
{
|
||||
Title = "",
|
||||
};
|
||||
|
||||
NetworkStart = new LanguageStructure.NetworkStart
|
||||
{
|
||||
Title = "",
|
||||
};
|
||||
|
||||
RemoveTextFromHearImpaired = new LanguageStructure.RemoveTextFromHearImpaired
|
||||
{
|
||||
Title = "Remove text for hearing impaired",
|
||||
|
@ -826,6 +826,27 @@
|
||||
public string Enabled { get; set; }
|
||||
public string SearchType { get; set; }
|
||||
}
|
||||
|
||||
public class NetworkChat
|
||||
{
|
||||
public string Title { get; set; }
|
||||
}
|
||||
|
||||
public class NetworkJoin
|
||||
{
|
||||
public string Title { get; set; }
|
||||
}
|
||||
|
||||
public class NetworkLogAndInfo
|
||||
{
|
||||
public string Title { get; set; }
|
||||
}
|
||||
|
||||
public class NetworkStart
|
||||
{
|
||||
public string Title { get; set; }
|
||||
}
|
||||
|
||||
public class RemoveTextFromHearImpaired
|
||||
{
|
||||
public string Title { get; set; }
|
||||
|
286
src/Logic/Networking/NikseWebServiceSession.cs
Normal file
286
src/Logic/Networking/NikseWebServiceSession.cs
Normal file
@ -0,0 +1,286 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Nikse.SubtitleEdit.Logic.Networking
|
||||
{
|
||||
public class NikseWebServiceSession
|
||||
{
|
||||
public class ChatEntry
|
||||
{
|
||||
public SeNetworkService.SeUser User { get; set; }
|
||||
public string Message { get; set; }
|
||||
}
|
||||
|
||||
public event EventHandler OnUpdateTimerTick;
|
||||
public event EventHandler OnUpdateUserLogEntries;
|
||||
|
||||
System.Windows.Forms.Timer _timerWebService;
|
||||
public List<UpdateLogEntry> UpdateLog = new List<UpdateLogEntry>();
|
||||
public List<ChatEntry> ChatLog = new List<ChatEntry>();
|
||||
SeNetworkService.SeService _seWs;
|
||||
DateTime _seWsLastUpdate = DateTime.Now.AddYears(-1);
|
||||
public SeNetworkService.SeUser CurrentUser { get; set; }
|
||||
public Subtitle LastSubtitle = null;
|
||||
public Subtitle Subtitle;
|
||||
public Subtitle OriginalSubtitle;
|
||||
public string SessionId;
|
||||
public string FileName;
|
||||
public List<SeNetworkService.SeUser> Users;
|
||||
public StringBuilder _log;
|
||||
|
||||
public string WebServiceUrl
|
||||
{
|
||||
get
|
||||
{
|
||||
return _seWs.Url;
|
||||
}
|
||||
}
|
||||
|
||||
public NikseWebServiceSession(Subtitle subtitle, Subtitle originalSubtitle, EventHandler onUpdateTimerTick, EventHandler onUpdateUserLogEntries)
|
||||
{
|
||||
Subtitle = subtitle;
|
||||
OriginalSubtitle = originalSubtitle;
|
||||
_timerWebService = new System.Windows.Forms.Timer();
|
||||
_timerWebService.Interval = 5000;
|
||||
_timerWebService.Tick += new EventHandler(TimerWebServiceTick);
|
||||
_log = new StringBuilder();
|
||||
OnUpdateTimerTick = onUpdateTimerTick;
|
||||
OnUpdateUserLogEntries = onUpdateUserLogEntries;
|
||||
}
|
||||
|
||||
public void StartServer(string webServiceUrl, string sessionKey, string userName, string fileName, out string message)
|
||||
{
|
||||
SessionId = sessionKey;
|
||||
var list = new List<SeNetworkService.SeSequence>();
|
||||
foreach (Paragraph p in Subtitle.Paragraphs)
|
||||
{
|
||||
list.Add(new SeNetworkService.SeSequence()
|
||||
{
|
||||
StartMilliseconds = (int)p.StartTime.TotalMilliseconds,
|
||||
EndMilliseconds = (int)p.EndTime.TotalMilliseconds,
|
||||
Text = p.Text
|
||||
});
|
||||
}
|
||||
|
||||
var originalSubtitle = new List<SeNetworkService.SeSequence>();
|
||||
if (OriginalSubtitle != null)
|
||||
{
|
||||
foreach (Paragraph p in OriginalSubtitle.Paragraphs)
|
||||
{
|
||||
originalSubtitle.Add(new SeNetworkService.SeSequence()
|
||||
{
|
||||
StartMilliseconds = (int)p.StartTime.TotalMilliseconds,
|
||||
EndMilliseconds = (int)p.EndTime.TotalMilliseconds,
|
||||
Text = p.Text
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
_seWs = new SeNetworkService.SeService();
|
||||
_seWs.Url = webServiceUrl;
|
||||
_seWs.Proxy = Utilities.GetProxy();
|
||||
SeNetworkService.SeUser user = _seWs.Start(sessionKey, userName, list.ToArray(), originalSubtitle.ToArray(), fileName, out message);
|
||||
CurrentUser = user;
|
||||
Users = new List<SeNetworkService.SeUser>();
|
||||
Users.Add(user);
|
||||
if (message == "OK")
|
||||
_timerWebService.Start();
|
||||
}
|
||||
|
||||
public bool Join(string webServiceUrl, string userName, string sessionKey, out string message)
|
||||
{
|
||||
SessionId = sessionKey;
|
||||
_seWs = new SeNetworkService.SeService();
|
||||
_seWs.Url = webServiceUrl;
|
||||
_seWs.Proxy = Utilities.GetProxy();
|
||||
Users = new List<SeNetworkService.SeUser>();
|
||||
var users = _seWs.Join(sessionKey, userName, out message);
|
||||
if (message != "OK")
|
||||
return false;
|
||||
|
||||
string tempFileName;
|
||||
DateTime updateTime;
|
||||
Subtitle = new Subtitle();
|
||||
foreach (var sequence in _seWs.GetSubtitle(sessionKey, out tempFileName, out updateTime))
|
||||
Subtitle.Paragraphs.Add(new Paragraph(sequence.Text, sequence.StartMilliseconds, sequence.EndMilliseconds));
|
||||
FileName = tempFileName;
|
||||
|
||||
OriginalSubtitle = new Subtitle();
|
||||
var sequences = _seWs.GetOriginalSubtitle(sessionKey);
|
||||
if (sequences != null)
|
||||
{
|
||||
foreach (var sequence in sequences)
|
||||
OriginalSubtitle.Paragraphs.Add(new Paragraph(sequence.Text, sequence.StartMilliseconds, sequence.EndMilliseconds));
|
||||
}
|
||||
|
||||
SessionId = sessionKey;
|
||||
CurrentUser = users[users.Length - 1]; // me
|
||||
foreach (var user in users)
|
||||
Users.Add(user);
|
||||
ReloadFromWs();
|
||||
_timerWebService.Start();
|
||||
return true;
|
||||
}
|
||||
|
||||
void TimerWebServiceTick(object sender, EventArgs e)
|
||||
{
|
||||
if (OnUpdateTimerTick != null)
|
||||
OnUpdateTimerTick.Invoke(sender, e);
|
||||
}
|
||||
|
||||
public void TimerStop()
|
||||
{
|
||||
_timerWebService.Stop();
|
||||
}
|
||||
|
||||
public void TimerStart()
|
||||
{
|
||||
_timerWebService.Start();
|
||||
}
|
||||
|
||||
public IEnumerable<SeNetworkService.SeUpdate> GetUpdates(out string message)
|
||||
{
|
||||
DateTime newUpdateTime;
|
||||
var updates = _seWs.GetUpdates(SessionId, CurrentUser.UserName, _seWsLastUpdate, out message, out newUpdateTime);
|
||||
_seWsLastUpdate = newUpdateTime;
|
||||
return updates;
|
||||
}
|
||||
|
||||
private void ReloadFromWs()
|
||||
{
|
||||
if (_seWs != null)
|
||||
{
|
||||
Subtitle = new Logic.Subtitle();
|
||||
var sequences = _seWs.GetSubtitle(SessionId, out FileName, out _seWsLastUpdate);
|
||||
foreach (var sequence in sequences)
|
||||
{
|
||||
Paragraph p = new Paragraph(sequence.Text, sequence.StartMilliseconds, sequence.EndMilliseconds);
|
||||
Subtitle.Paragraphs.Add(p);
|
||||
}
|
||||
Subtitle.Renumber(1);
|
||||
LastSubtitle = new Subtitle(Subtitle);
|
||||
}
|
||||
}
|
||||
|
||||
public void Log(string text)
|
||||
{
|
||||
string timestamp = DateTime.Now.ToLongTimeString();
|
||||
_log.AppendLine(timestamp + ": " + text.TrimEnd() .Replace(Environment.NewLine, Configuration.Settings.General.ListViewLineSeparatorString));
|
||||
}
|
||||
|
||||
public string GetLog()
|
||||
{
|
||||
return _log.ToString();
|
||||
}
|
||||
|
||||
public void SendChatMessage(string message)
|
||||
{
|
||||
_seWs.SendMessage(SessionId, message, CurrentUser);
|
||||
}
|
||||
|
||||
internal void UpdateLine(int index, Paragraph paragraph)
|
||||
{
|
||||
_seWs.UpdateLine(SessionId, index, new SeNetworkService.SeSequence()
|
||||
{
|
||||
StartMilliseconds = (int)paragraph.StartTime.TotalMilliseconds,
|
||||
EndMilliseconds = (int)paragraph.EndTime.TotalMilliseconds,
|
||||
Text = paragraph.Text
|
||||
}, CurrentUser);
|
||||
AddToWsUserLog(CurrentUser, index, "UPD", true);
|
||||
}
|
||||
|
||||
public void CheckForAndSubmitUpdates(IEnumerable<SeNetworkService.SeUpdate> updates)
|
||||
{
|
||||
// check for changes in text/time codes (not insert/delete)
|
||||
if (LastSubtitle != null)
|
||||
{
|
||||
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
|
||||
{
|
||||
Paragraph last = LastSubtitle.GetParagraphOrDefault(i);
|
||||
Paragraph current = Subtitle.GetParagraphOrDefault(i);
|
||||
if (last != null && current != null)
|
||||
{
|
||||
if (last.StartTime.TotalMilliseconds != current.StartTime.TotalMilliseconds ||
|
||||
last.EndTime.TotalMilliseconds != current.EndTime.TotalMilliseconds ||
|
||||
last.Text != current.Text)
|
||||
{
|
||||
UpdateLine(i, current);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void AddToWsUserLog(SeNetworkService.SeUser user, int pos, string action, bool updateUI)
|
||||
{
|
||||
for (int i = 0; i < UpdateLog.Count; i++)
|
||||
{
|
||||
if (UpdateLog[i].Index == pos)
|
||||
{
|
||||
UpdateLog.RemoveAt(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
UpdateLog.Add(new UpdateLogEntry(0, user.UserName, pos, action));
|
||||
if (updateUI && OnUpdateUserLogEntries != null)
|
||||
OnUpdateUserLogEntries.Invoke(null, null);
|
||||
}
|
||||
|
||||
|
||||
internal void Leave()
|
||||
{
|
||||
try
|
||||
{
|
||||
_seWs.Leave(SessionId, CurrentUser.UserName);
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
internal void DeleteLines(List<int> indices)
|
||||
{
|
||||
_seWs.DeleteLines(SessionId, indices.ToArray(), CurrentUser);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
foreach (int index in indices)
|
||||
{
|
||||
sb.Append(index + ", ");
|
||||
AdjustUpdateLogToDelete(index);
|
||||
}
|
||||
Log("Delete line: " + sb.ToString().Trim().TrimEnd(','));
|
||||
}
|
||||
|
||||
internal void InsertLine(int index, Paragraph newParagraph)
|
||||
{
|
||||
_seWs.InsertLine(SessionId, index, (int)newParagraph.StartTime.TotalMilliseconds, (int)newParagraph.EndTime.TotalMilliseconds, newParagraph.Text, CurrentUser);
|
||||
Log("Insert line at " + index.ToString() + ": " + newParagraph.ToString());
|
||||
}
|
||||
|
||||
internal void AdjustUpdateLogToInsert(int index)
|
||||
{
|
||||
foreach (var logEntry in UpdateLog)
|
||||
{
|
||||
if (logEntry.Index >= index)
|
||||
logEntry.Index++;
|
||||
}
|
||||
}
|
||||
|
||||
internal void AdjustUpdateLogToDelete(int index)
|
||||
{
|
||||
UpdateLogEntry removeThis = null;
|
||||
foreach (var logEntry in UpdateLog)
|
||||
{
|
||||
if (logEntry.Index == index)
|
||||
removeThis = logEntry;
|
||||
else if (logEntry.Index > index)
|
||||
logEntry.Index--;
|
||||
}
|
||||
if (removeThis != null)
|
||||
UpdateLog.Remove(removeThis);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
28
src/Logic/Networking/UpdateLogEntry.cs
Normal file
28
src/Logic/Networking/UpdateLogEntry.cs
Normal file
@ -0,0 +1,28 @@
|
||||
using System;
|
||||
|
||||
namespace Nikse.SubtitleEdit.Logic.Networking
|
||||
{
|
||||
public class UpdateLogEntry
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string UserName { get; set; }
|
||||
public int Index { get; set; }
|
||||
public DateTime OccuredAt { get; set; }
|
||||
public string Action { get; set; }
|
||||
|
||||
public UpdateLogEntry(int id, string userName, int index, string action)
|
||||
{
|
||||
Id = id;
|
||||
UserName = userName;
|
||||
Index = index;
|
||||
OccuredAt = DateTime.Now;
|
||||
Action = action;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("{0:00}:{1:00}:{2:00} {3}: {4}", OccuredAt.Hour, OccuredAt.Minute, OccuredAt.Second, UserName, Action);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -320,6 +320,8 @@ namespace Nikse.SubtitleEdit.Logic.OCR
|
||||
// uppercase I or 1 inside lowercase word (will be replaced by lowercase L)
|
||||
word = FixIor1InsideLowerCaseWord(word);
|
||||
|
||||
word = FixLowerCaseLInsideUpperCaseWord(word); // eg. SCARLETTl => SCARLETTI
|
||||
|
||||
// Retry word replace list
|
||||
foreach (string from in _wordReplaceList.Keys)
|
||||
{
|
||||
@ -340,6 +342,17 @@ namespace Nikse.SubtitleEdit.Logic.OCR
|
||||
if (startEndEndsWithNumber.IsMatch(word))
|
||||
return word;
|
||||
|
||||
if (word.Contains("1") ||
|
||||
word.Contains("2") ||
|
||||
word.Contains("3") ||
|
||||
word.Contains("4") ||
|
||||
word.Contains("5") ||
|
||||
word.Contains("6") ||
|
||||
word.Contains("7") ||
|
||||
word.Contains("8") ||
|
||||
word.Contains("9"))
|
||||
return word;
|
||||
|
||||
var hexNumber = new Regex(@"^#?[\dABDEFabcdef]+$");
|
||||
if (hexNumber.IsMatch(word))
|
||||
return word;
|
||||
@ -392,6 +405,16 @@ namespace Nikse.SubtitleEdit.Logic.OCR
|
||||
if (startEndEndsWithNumber.IsMatch(word))
|
||||
return word;
|
||||
|
||||
if (word.Contains("2") ||
|
||||
word.Contains("3") ||
|
||||
word.Contains("4") ||
|
||||
word.Contains("5") ||
|
||||
word.Contains("6") ||
|
||||
word.Contains("7") ||
|
||||
word.Contains("8") ||
|
||||
word.Contains("9"))
|
||||
return word;
|
||||
|
||||
var hexNumber = new Regex(@"^#?[\dABDEFabcdef]+$");
|
||||
if (hexNumber.IsMatch(word))
|
||||
return word;
|
||||
@ -418,6 +441,18 @@ namespace Nikse.SubtitleEdit.Logic.OCR
|
||||
return word;
|
||||
}
|
||||
|
||||
public static string FixLowerCaseLInsideUpperCaseWord(string word)
|
||||
{
|
||||
if (word.Length > 3 && word.Replace("l", string.Empty).ToUpper() == word.Replace("l", string.Empty))
|
||||
{
|
||||
if (!word.Contains("<") && !word.Contains(">") && !word.Contains("'"))
|
||||
{
|
||||
word = word.Replace("l", "I");
|
||||
}
|
||||
}
|
||||
return word;
|
||||
}
|
||||
|
||||
private string FixCommenOcrLineErrors(string input, string lastLine)
|
||||
{
|
||||
input = FixOcrErrorsViaHardcodedRules(input, lastLine);
|
||||
|
@ -232,6 +232,7 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
public int DefaultAdjustMilliseconds { get; set; }
|
||||
public bool AutoRepeatOn { get; set; }
|
||||
public bool AutoContinueOn { get; set; }
|
||||
public bool SyncListViewWithVideoWhilePlaying { get; set; }
|
||||
public int AutoBackupSeconds { get; set; }
|
||||
|
||||
public GeneralSettings()
|
||||
@ -275,6 +276,7 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
DefaultAdjustMilliseconds = 1000;
|
||||
AutoRepeatOn = true;
|
||||
AutoContinueOn = false;
|
||||
SyncListViewWithVideoWhilePlaying = false;
|
||||
AutoBackupSeconds = 0;
|
||||
}
|
||||
}
|
||||
@ -333,6 +335,20 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
public string SearchType { get; set; }
|
||||
}
|
||||
|
||||
public class NetworkSettings
|
||||
{
|
||||
public string UserName { get; set; }
|
||||
public string WebServiceUrl { get; set; }
|
||||
public string SessionKey { get; set; }
|
||||
|
||||
public NetworkSettings()
|
||||
{
|
||||
UserName = string.Empty;
|
||||
SessionKey = "DemoSession"; // TODO - leave blank or use guid
|
||||
WebServiceUrl = "http://www.nikse.dk/se/SeService.asmx";
|
||||
}
|
||||
}
|
||||
|
||||
public class Settings
|
||||
{
|
||||
public RecentFilesSettings RecentFiles { get; set; }
|
||||
@ -344,6 +360,7 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
public FixCommonErrorsSettings CommonErrors { get; set; }
|
||||
public VobSubOcrSettings VobSubOcr { get; set; }
|
||||
public VideoControlsSettings VideoControls { get; set; }
|
||||
public NetworkSettings NetworkSettings { get; set; }
|
||||
|
||||
[XmlArrayItem("MultipleSearchAndReplaceItem")]
|
||||
public List<MultipleSearchAndReplaceSetting> MultipleSearchAndReplaceList { get; set; }
|
||||
@ -362,6 +379,7 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
CommonErrors = new FixCommonErrorsSettings();
|
||||
VobSubOcr = new VobSubOcrSettings();
|
||||
VideoControls = new VideoControlsSettings();
|
||||
NetworkSettings = new Logic.NetworkSettings();
|
||||
MultipleSearchAndReplaceList = new List<MultipleSearchAndReplaceSetting>();
|
||||
Language = new Language();
|
||||
}
|
||||
@ -430,6 +448,8 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
settings.VobSubOcr = new VobSubOcrSettings();
|
||||
if (settings.MultipleSearchAndReplaceList == null)
|
||||
settings.MultipleSearchAndReplaceList = new List<MultipleSearchAndReplaceSetting>();
|
||||
if (settings.NetworkSettings == null)
|
||||
settings.NetworkSettings = new NetworkSettings();
|
||||
|
||||
return settings;
|
||||
}
|
||||
@ -582,6 +602,9 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
subNode = node.SelectSingleNode("AutoRepeatOn");
|
||||
if (subNode != null)
|
||||
settings.General.AutoRepeatOn = Convert.ToBoolean(subNode.InnerText);
|
||||
subNode = node.SelectSingleNode("SyncListViewWithVideoWhilePlaying");
|
||||
if (subNode != null)
|
||||
settings.General.SyncListViewWithVideoWhilePlaying = Convert.ToBoolean(subNode.InnerText);
|
||||
subNode = node.SelectSingleNode("AutoContinueOn");
|
||||
if (subNode != null)
|
||||
settings.General.AutoContinueOn = Convert.ToBoolean(subNode.InnerText);
|
||||
@ -766,6 +789,20 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
if (subNode != null)
|
||||
settings.VideoControls.WaveFormTextColor = Color.FromArgb(int.Parse(subNode.InnerText));
|
||||
|
||||
settings.NetworkSettings = new NetworkSettings();
|
||||
node = doc.DocumentElement.SelectSingleNode("NetworkSettings");
|
||||
if (node != null)
|
||||
{
|
||||
subNode = node.SelectSingleNode("SessionKey");
|
||||
if (subNode != null)
|
||||
settings.NetworkSettings.SessionKey = subNode.InnerText;
|
||||
subNode = node.SelectSingleNode("UserName");
|
||||
if (subNode != null)
|
||||
settings.NetworkSettings.UserName = subNode.InnerText;
|
||||
subNode = node.SelectSingleNode("WebServiceUrl");
|
||||
if (subNode != null)
|
||||
settings.NetworkSettings.WebServiceUrl = subNode.InnerText;
|
||||
}
|
||||
|
||||
settings.VobSubOcr = new Nikse.SubtitleEdit.Logic.VobSubOcrSettings();
|
||||
node = doc.DocumentElement.SelectSingleNode("VobSubOcr");
|
||||
@ -870,6 +907,7 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
textWriter.WriteElementString("DefaultAdjustMilliseconds", settings.General.DefaultAdjustMilliseconds.ToString());
|
||||
textWriter.WriteElementString("AutoRepeatOn", settings.General.AutoRepeatOn.ToString());
|
||||
textWriter.WriteElementString("AutoContinueOn", settings.General.AutoContinueOn.ToString());
|
||||
textWriter.WriteElementString("SyncListViewWithVideoWhilePlaying", settings.General.SyncListViewWithVideoWhilePlaying.ToString());
|
||||
textWriter.WriteElementString("AutoBackupSeconds", settings.General.AutoBackupSeconds.ToString());
|
||||
textWriter.WriteEndElement();
|
||||
|
||||
@ -936,7 +974,6 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
textWriter.WriteElementString("CustomSearchText", settings.VideoControls.CustomSearchText);
|
||||
textWriter.WriteElementString("CustomSearchUrl", settings.VideoControls.CustomSearchUrl);
|
||||
textWriter.WriteElementString("LastActiveTab", settings.VideoControls.LastActiveTab);
|
||||
|
||||
textWriter.WriteElementString("WaveFormDrawGrid", settings.VideoControls.WaveFormDrawGrid.ToString());
|
||||
textWriter.WriteElementString("WaveFormGridColor", settings.VideoControls.WaveFormGridColor.ToArgb().ToString());
|
||||
textWriter.WriteElementString("WaveFormColor", settings.VideoControls.WaveFormColor.ToArgb().ToString());
|
||||
@ -945,6 +982,12 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
textWriter.WriteElementString("WaveFormTextColor", settings.VideoControls.WaveFormTextColor.ToArgb().ToString());
|
||||
textWriter.WriteEndElement();
|
||||
|
||||
textWriter.WriteStartElement("NetworkSettings", "");
|
||||
textWriter.WriteElementString("SessionKey", settings.NetworkSettings.SessionKey);
|
||||
textWriter.WriteElementString("UserName", settings.NetworkSettings.UserName);
|
||||
textWriter.WriteElementString("WebServiceUrl", settings.NetworkSettings.WebServiceUrl);
|
||||
textWriter.WriteEndElement();
|
||||
|
||||
textWriter.WriteStartElement("VobSubOcr", "");
|
||||
textWriter.WriteElementString("XOrMorePixelsMakesSpace", settings.VobSubOcr.XOrMorePixelsMakesSpace.ToString());
|
||||
textWriter.WriteElementString("AllowDifferenceInPercent", settings.VobSubOcr.AllowDifferenceInPercent.ToString());
|
||||
|
@ -301,6 +301,18 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
return _paragraphs.IndexOf(p);
|
||||
}
|
||||
|
||||
internal Paragraph GetFirstAlike(Paragraph p)
|
||||
{
|
||||
foreach (Paragraph item in _paragraphs)
|
||||
{
|
||||
if (p.StartTime.TotalMilliseconds == item.StartTime.TotalMilliseconds &&
|
||||
p.EndTime.TotalMilliseconds == item.EndTime.TotalMilliseconds &&
|
||||
p.Text == item.Text)
|
||||
return item;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
internal Paragraph GetFirstParagraphByLineNumber(int number)
|
||||
{
|
||||
foreach (Paragraph p in _paragraphs)
|
||||
|
@ -12,6 +12,7 @@ using Nikse.SubtitleEdit.Controls;
|
||||
using Nikse.SubtitleEdit.Forms;
|
||||
using Nikse.SubtitleEdit.Logic.SubtitleFormats;
|
||||
using Nikse.SubtitleEdit.Logic.VideoPlayers;
|
||||
using System.Drawing;
|
||||
|
||||
namespace Nikse.SubtitleEdit.Logic
|
||||
{
|
||||
@ -289,6 +290,38 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
int splitPos = -1;
|
||||
int mid = s.Length / 2;
|
||||
|
||||
// try to find " - " with uppercase letter after (dialogue)
|
||||
if (splitPos == -1 && s.Contains(" - "))
|
||||
{
|
||||
for (int j = 0; j < 40; j++)
|
||||
{
|
||||
if (mid + j + 4 < s.Length)
|
||||
{
|
||||
if (s[mid + j] == '-' && s[mid + j + 1] == ' ' && s[mid + j- 1] == ' ')
|
||||
{
|
||||
string rest = s.Substring(mid + j + 1).TrimStart();
|
||||
if (rest.Length > 0 && (rest.Substring(0, 1) == rest.Substring(0, 1).ToUpper()))
|
||||
{
|
||||
splitPos = mid + j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (mid - (j + 1) > 4)
|
||||
{
|
||||
if (s[mid - j] == '-' && s[mid - j + 1] == ' ' && s[mid - j - 1] == ' ')
|
||||
{
|
||||
string rest = s.Substring(mid - j + 1).TrimStart();
|
||||
if (rest.Length > 0 && (rest.Substring(0, 1) == rest.Substring(0, 1).ToUpper()))
|
||||
{
|
||||
splitPos = mid - j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (splitPos == -1)
|
||||
{
|
||||
for (int j = 0; j < 15; j++)
|
||||
@ -757,6 +790,10 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
if (count > bestCount)
|
||||
return "vi"; // Vietnamese
|
||||
|
||||
count = GetCount(text, "是的", "是啊", "好吧", "好的", "亲爱的", "早上好");
|
||||
if (count > bestCount)
|
||||
return "zh"; // Chinese (simplified) - not tested...
|
||||
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
@ -1330,5 +1367,72 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
return s;
|
||||
}
|
||||
|
||||
internal static Color GetColorFromUserName(string userName)
|
||||
{
|
||||
if (string.IsNullOrEmpty(userName))
|
||||
return System.Drawing.Color.Pink;
|
||||
|
||||
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(userName);
|
||||
long number = 0;
|
||||
foreach (byte b in buffer)
|
||||
number += b;
|
||||
|
||||
switch (number % 20)
|
||||
{
|
||||
case 0: return Color.Red;
|
||||
case 1: return Color.Blue;
|
||||
case 2: return Color.Green;
|
||||
case 3: return Color.DarkCyan;
|
||||
case 4: return Color.DarkGreen;
|
||||
case 5: return Color.DarkBlue;
|
||||
case 6: return Color.DarkTurquoise;
|
||||
case 7: return Color.DarkViolet;
|
||||
case 8: return Color.DeepPink;
|
||||
case 9: return Color.DodgerBlue;
|
||||
case 10: return Color.ForestGreen;
|
||||
case 11: return Color.Fuchsia;
|
||||
case 12: return Color.DarkOrange;
|
||||
case 13: return Color.GreenYellow;
|
||||
case 14: return Color.IndianRed;
|
||||
case 15: return Color.Indigo;
|
||||
case 16: return Color.LawnGreen;
|
||||
case 17: return Color.LightBlue;
|
||||
case 18: return Color.DarkGoldenrod;
|
||||
case 19: return Color.Magenta;
|
||||
case 20: return Color.Maroon;
|
||||
default:
|
||||
return Color.Black;
|
||||
}
|
||||
}
|
||||
|
||||
internal static int GetNumber0To7FromUserName(string userName)
|
||||
{
|
||||
if (string.IsNullOrEmpty(userName))
|
||||
return 0;
|
||||
|
||||
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(userName);
|
||||
long number = 0;
|
||||
foreach (byte b in buffer)
|
||||
number += b;
|
||||
|
||||
return (int)(number % 8);
|
||||
}
|
||||
|
||||
internal static string GetRegExGroup( string regEx)
|
||||
{
|
||||
int start = regEx.IndexOf("(?<");
|
||||
if (start >= 0 && regEx.IndexOf(")", start) > start)
|
||||
{
|
||||
int end = regEx.IndexOf(">", start);
|
||||
if (end > start)
|
||||
{
|
||||
start += 3;
|
||||
string group = regEx.Substring(start, end - start);
|
||||
return group;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -31,4 +31,4 @@ using System.Runtime.InteropServices;
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
[assembly: AssemblyVersion("3.0.0.*")]
|
||||
[assembly: AssemblyVersion("3.0.1.*")]
|
||||
|
15
src/Properties/Resources.Designer.cs
generated
15
src/Properties/Resources.Designer.cs
generated
@ -22,7 +22,7 @@ namespace Nikse.SubtitleEdit.Properties {
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
public class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
@ -36,7 +36,7 @@ namespace Nikse.SubtitleEdit.Properties {
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
public static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Nikse.SubtitleEdit.Properties.Resources", typeof(Resources).Assembly);
|
||||
@ -51,7 +51,7 @@ namespace Nikse.SubtitleEdit.Properties {
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
public static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
@ -60,7 +60,14 @@ namespace Nikse.SubtitleEdit.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap Donate {
|
||||
public static System.Drawing.Bitmap connect {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("connect", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
public static System.Drawing.Bitmap Donate {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("Donate", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
|
@ -117,8 +117,12 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="Donate" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Icons\Donate.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="connect" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Icons\connect.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
10
src/Properties/Settings.Designer.cs
generated
10
src/Properties/Settings.Designer.cs
generated
@ -32,5 +32,15 @@ namespace Nikse.SubtitleEdit.Properties {
|
||||
return ((string)(this["SubtitleEdit_MicrosoftTranslationService_SoapService"]));
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.WebServiceUrl)]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("http://localhost:2782/se/SeService.asmx")]
|
||||
public string SubtitleEdit_SeNetworkService_SeService {
|
||||
get {
|
||||
return ((string)(this["SubtitleEdit_SeNetworkService_SeService"]));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,5 +5,8 @@
|
||||
<Setting Name="SubtitleEdit_MicrosoftTranslationService_SoapService" Type="(Web Service URL)" Scope="Application">
|
||||
<Value Profile="(Default)">http://api.microsofttranslator.com/V2/soap.svc</Value>
|
||||
</Setting>
|
||||
<Setting Name="SubtitleEdit_SeNetworkService_SeService" Type="(Web Service URL)" Scope="Application">
|
||||
<Value Profile="(Default)">http://localhost:2782/se/SeService.asmx</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
@ -219,6 +219,30 @@
|
||||
<Compile Include="Forms\GetDictionaries.Designer.cs">
|
||||
<DependentUpon>GetDictionaries.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Forms\NetworkChat.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\NetworkChat.Designer.cs">
|
||||
<DependentUpon>NetworkChat.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Forms\NetworkJoin.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\NetworkJoin.Designer.cs">
|
||||
<DependentUpon>NetworkJoin.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Forms\NetworkLogAndInfo.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\NetworkLogAndInfo.Designer.cs">
|
||||
<DependentUpon>NetworkLogAndInfo.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Forms\NetworkStart.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\NetworkStart.Designer.cs">
|
||||
<DependentUpon>NetworkStart.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Forms\SetSyncPoint.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
@ -419,6 +443,12 @@
|
||||
<Compile Include="Logic\FastBitmap.cs" />
|
||||
<Compile Include="Logic\IfoParser.cs" />
|
||||
<Compile Include="Logic\Language.cs" />
|
||||
<Compile Include="Logic\Networking\NikseWebServiceSession.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Logic\Networking\UpdateLogEntry.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Logic\OCR\ModiLanguage.cs" />
|
||||
<Compile Include="Logic\OCR\OcrAlphabet.cs" />
|
||||
<Compile Include="Logic\OCR\OcrCharacter.cs" />
|
||||
@ -437,6 +467,7 @@
|
||||
<Compile Include="Logic\FindReplaceDialogHelper.cs" />
|
||||
<Compile Include="Logic\HistoryItem.cs" />
|
||||
<Compile Include="Logic\StripableText.cs" />
|
||||
<Compile Include="Logic\SubtitleFormats\QuickTimeText.cs" />
|
||||
<Compile Include="Logic\SubtitleFormats\SonyDVDArchitectWithLineNumbers.cs" />
|
||||
<Compile Include="Logic\SubtitleFormats\Ebu.cs" />
|
||||
<Compile Include="Logic\SubtitleFormats\SonyDVDArchitect.cs" />
|
||||
@ -505,6 +536,11 @@
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Reference.map</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Web References\SeNetworkService\Reference.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Reference.map</DependentUpon>
|
||||
</Compile>
|
||||
<EmbeddedResource Include="Controls\TimeUpDown.resx">
|
||||
<DependentUpon>TimeUpDown.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
@ -568,6 +604,18 @@
|
||||
<DependentUpon>GetDictionaries.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\NetworkChat.resx">
|
||||
<DependentUpon>NetworkChat.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\NetworkJoin.resx">
|
||||
<DependentUpon>NetworkJoin.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\NetworkLogAndInfo.resx">
|
||||
<DependentUpon>NetworkLogAndInfo.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\NetworkStart.resx">
|
||||
<DependentUpon>NetworkStart.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\SetSyncPoint.resx">
|
||||
<DependentUpon>SetSyncPoint.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
@ -683,6 +731,7 @@
|
||||
<EmbeddedResource Include="Resources\sr-Cyrl-CS.xml.zip" />
|
||||
<EmbeddedResource Include="Resources\sr-Latn-CS.xml.zip" />
|
||||
<EmbeddedResource Include="Resources\sv-SE.xml.zip" />
|
||||
<EmbeddedResource Include="Resources\zh-CHS.xml.zip" />
|
||||
<None Include="Web References\MicrosoftTranslationService\GetTranslationsResponse.datasource">
|
||||
<DependentUpon>Reference.map</DependentUpon>
|
||||
</None>
|
||||
@ -707,8 +756,24 @@
|
||||
<None Include="Web References\MicrosoftTranslationService\TranslateArrayResponse.datasource">
|
||||
<DependentUpon>Reference.map</DependentUpon>
|
||||
</None>
|
||||
<None Include="Web References\SeNetworkService\Reference.map">
|
||||
<Generator>MSDiscoCodeGenerator</Generator>
|
||||
<LastGenOutput>Reference.cs</LastGenOutput>
|
||||
</None>
|
||||
<None Include="Web References\SeNetworkService\SeSequence.datasource">
|
||||
<DependentUpon>Reference.map</DependentUpon>
|
||||
</None>
|
||||
<None Include="Web References\SeNetworkService\SeService.wsdl" />
|
||||
<None Include="Web References\SeNetworkService\SeUpdate.datasource">
|
||||
<DependentUpon>Reference.map</DependentUpon>
|
||||
</None>
|
||||
<None Include="Web References\SeNetworkService\SeUser.datasource">
|
||||
<DependentUpon>Reference.map</DependentUpon>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Resources\zh-CHS.xml" />
|
||||
<None Include="Web References\SeNetworkService\SeService.disco" />
|
||||
<None Include="DLLs\Interop.QuartzTypeLib.dll" />
|
||||
<None Include="DLLs\NHunspell.dll" />
|
||||
<None Include="DLLs\AxInterop.WMPLib.dll" />
|
||||
@ -766,6 +831,7 @@
|
||||
<None Include="Resources\it-IT.xml.zip" />
|
||||
<None Include="Resources\nl-NL.xml" />
|
||||
<None Include="Icons\Donate.gif" />
|
||||
<None Include="Icons\connect.png" />
|
||||
<Content Include="Icons\Find.png">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
@ -887,6 +953,17 @@
|
||||
<CachedAppSettingsObjectName>Settings</CachedAppSettingsObjectName>
|
||||
<CachedSettingsPropName>SubtitleEdit_MicrosoftTranslationService_SoapService</CachedSettingsPropName>
|
||||
</WebReferenceUrl>
|
||||
<WebReferenceUrl Include="http://localhost:2782/se/SeService.asmx">
|
||||
<UrlBehavior>Dynamic</UrlBehavior>
|
||||
<RelPath>Web References\SeNetworkService\</RelPath>
|
||||
<UpdateFromURL>http://localhost:2782/se/SeService.asmx</UpdateFromURL>
|
||||
<ServiceLocationURL>
|
||||
</ServiceLocationURL>
|
||||
<CachedDynamicPropName>
|
||||
</CachedDynamicPropName>
|
||||
<CachedAppSettingsObjectName>Settings</CachedAppSettingsObjectName>
|
||||
<CachedSettingsPropName>SubtitleEdit_SeNetworkService_SeService</CachedSettingsPropName>
|
||||
</WebReferenceUrl>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
|
956
src/Web References/SeNetworkService/Reference.cs
Normal file
956
src/Web References/SeNetworkService/Reference.cs
Normal file
@ -0,0 +1,956 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.1
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//
|
||||
// This source code was auto-generated by Microsoft.VSDesigner, Version 4.0.30319.1.
|
||||
//
|
||||
#pragma warning disable 1591
|
||||
|
||||
namespace Nikse.SubtitleEdit.SeNetworkService {
|
||||
using System;
|
||||
using System.Web.Services;
|
||||
using System.Diagnostics;
|
||||
using System.Web.Services.Protocols;
|
||||
using System.ComponentModel;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
[System.Web.Services.WebServiceBindingAttribute(Name="SeServiceSoap", Namespace="http://tempuri.org/")]
|
||||
public partial class SeService : System.Web.Services.Protocols.SoapHttpClientProtocol {
|
||||
|
||||
private System.Threading.SendOrPostCallback StartOperationCompleted;
|
||||
|
||||
private System.Threading.SendOrPostCallback JoinOperationCompleted;
|
||||
|
||||
private System.Threading.SendOrPostCallback LeaveOperationCompleted;
|
||||
|
||||
private System.Threading.SendOrPostCallback DeleteLinesOperationCompleted;
|
||||
|
||||
private System.Threading.SendOrPostCallback InsertLineOperationCompleted;
|
||||
|
||||
private System.Threading.SendOrPostCallback UpdateLineOperationCompleted;
|
||||
|
||||
private System.Threading.SendOrPostCallback SendMessageOperationCompleted;
|
||||
|
||||
private System.Threading.SendOrPostCallback GetUpdatesOperationCompleted;
|
||||
|
||||
private System.Threading.SendOrPostCallback GetSubtitleOperationCompleted;
|
||||
|
||||
private System.Threading.SendOrPostCallback GetOriginalSubtitleOperationCompleted;
|
||||
|
||||
private bool useDefaultCredentialsSetExplicitly;
|
||||
|
||||
/// <remarks/>
|
||||
public SeService() {
|
||||
this.Url = global::Nikse.SubtitleEdit.Properties.Settings.Default.SubtitleEdit_SeNetworkService_SeService;
|
||||
if ((this.IsLocalFileSystemWebService(this.Url) == true)) {
|
||||
this.UseDefaultCredentials = true;
|
||||
this.useDefaultCredentialsSetExplicitly = false;
|
||||
}
|
||||
else {
|
||||
this.useDefaultCredentialsSetExplicitly = true;
|
||||
}
|
||||
}
|
||||
|
||||
public new string Url {
|
||||
get {
|
||||
return base.Url;
|
||||
}
|
||||
set {
|
||||
if ((((this.IsLocalFileSystemWebService(base.Url) == true)
|
||||
&& (this.useDefaultCredentialsSetExplicitly == false))
|
||||
&& (this.IsLocalFileSystemWebService(value) == false))) {
|
||||
base.UseDefaultCredentials = false;
|
||||
}
|
||||
base.Url = value;
|
||||
}
|
||||
}
|
||||
|
||||
public new bool UseDefaultCredentials {
|
||||
get {
|
||||
return base.UseDefaultCredentials;
|
||||
}
|
||||
set {
|
||||
base.UseDefaultCredentials = value;
|
||||
this.useDefaultCredentialsSetExplicitly = true;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public event StartCompletedEventHandler StartCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
public event JoinCompletedEventHandler JoinCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
public event LeaveCompletedEventHandler LeaveCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
public event DeleteLinesCompletedEventHandler DeleteLinesCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
public event InsertLineCompletedEventHandler InsertLineCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
public event UpdateLineCompletedEventHandler UpdateLineCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
public event SendMessageCompletedEventHandler SendMessageCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
public event GetUpdatesCompletedEventHandler GetUpdatesCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
public event GetSubtitleCompletedEventHandler GetSubtitleCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
public event GetOriginalSubtitleCompletedEventHandler GetOriginalSubtitleCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/Start", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
public SeUser Start(string sessionKey, string userName, SeSequence[] subtitle, SeSequence[] originalSubtitle, string fileName, out string message) {
|
||||
object[] results = this.Invoke("Start", new object[] {
|
||||
sessionKey,
|
||||
userName,
|
||||
subtitle,
|
||||
originalSubtitle,
|
||||
fileName});
|
||||
message = ((string)(results[1]));
|
||||
return ((SeUser)(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void StartAsync(string sessionKey, string userName, SeSequence[] subtitle, SeSequence[] originalSubtitle, string fileName) {
|
||||
this.StartAsync(sessionKey, userName, subtitle, originalSubtitle, fileName, null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void StartAsync(string sessionKey, string userName, SeSequence[] subtitle, SeSequence[] originalSubtitle, string fileName, object userState) {
|
||||
if ((this.StartOperationCompleted == null)) {
|
||||
this.StartOperationCompleted = new System.Threading.SendOrPostCallback(this.OnStartOperationCompleted);
|
||||
}
|
||||
this.InvokeAsync("Start", new object[] {
|
||||
sessionKey,
|
||||
userName,
|
||||
subtitle,
|
||||
originalSubtitle,
|
||||
fileName}, this.StartOperationCompleted, userState);
|
||||
}
|
||||
|
||||
private void OnStartOperationCompleted(object arg) {
|
||||
if ((this.StartCompleted != null)) {
|
||||
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||
this.StartCompleted(this, new StartCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/Join", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
public SeUser[] Join(string sessionId, string userName, out string message) {
|
||||
object[] results = this.Invoke("Join", new object[] {
|
||||
sessionId,
|
||||
userName});
|
||||
message = ((string)(results[1]));
|
||||
return ((SeUser[])(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void JoinAsync(string sessionId, string userName) {
|
||||
this.JoinAsync(sessionId, userName, null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void JoinAsync(string sessionId, string userName, object userState) {
|
||||
if ((this.JoinOperationCompleted == null)) {
|
||||
this.JoinOperationCompleted = new System.Threading.SendOrPostCallback(this.OnJoinOperationCompleted);
|
||||
}
|
||||
this.InvokeAsync("Join", new object[] {
|
||||
sessionId,
|
||||
userName}, this.JoinOperationCompleted, userState);
|
||||
}
|
||||
|
||||
private void OnJoinOperationCompleted(object arg) {
|
||||
if ((this.JoinCompleted != null)) {
|
||||
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||
this.JoinCompleted(this, new JoinCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/Leave", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
public void Leave(string sessionId, string userName) {
|
||||
this.Invoke("Leave", new object[] {
|
||||
sessionId,
|
||||
userName});
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void LeaveAsync(string sessionId, string userName) {
|
||||
this.LeaveAsync(sessionId, userName, null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void LeaveAsync(string sessionId, string userName, object userState) {
|
||||
if ((this.LeaveOperationCompleted == null)) {
|
||||
this.LeaveOperationCompleted = new System.Threading.SendOrPostCallback(this.OnLeaveOperationCompleted);
|
||||
}
|
||||
this.InvokeAsync("Leave", new object[] {
|
||||
sessionId,
|
||||
userName}, this.LeaveOperationCompleted, userState);
|
||||
}
|
||||
|
||||
private void OnLeaveOperationCompleted(object arg) {
|
||||
if ((this.LeaveCompleted != null)) {
|
||||
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||
this.LeaveCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/DeleteLines", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
public bool DeleteLines(string sessionId, int[] indices, SeUser user) {
|
||||
object[] results = this.Invoke("DeleteLines", new object[] {
|
||||
sessionId,
|
||||
indices,
|
||||
user});
|
||||
return ((bool)(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void DeleteLinesAsync(string sessionId, int[] indices, SeUser user) {
|
||||
this.DeleteLinesAsync(sessionId, indices, user, null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void DeleteLinesAsync(string sessionId, int[] indices, SeUser user, object userState) {
|
||||
if ((this.DeleteLinesOperationCompleted == null)) {
|
||||
this.DeleteLinesOperationCompleted = new System.Threading.SendOrPostCallback(this.OnDeleteLinesOperationCompleted);
|
||||
}
|
||||
this.InvokeAsync("DeleteLines", new object[] {
|
||||
sessionId,
|
||||
indices,
|
||||
user}, this.DeleteLinesOperationCompleted, userState);
|
||||
}
|
||||
|
||||
private void OnDeleteLinesOperationCompleted(object arg) {
|
||||
if ((this.DeleteLinesCompleted != null)) {
|
||||
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||
this.DeleteLinesCompleted(this, new DeleteLinesCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/InsertLine", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
public bool InsertLine(string sessionId, int index, int startMilliseconds, int endMilliseconds, string text, SeUser user) {
|
||||
object[] results = this.Invoke("InsertLine", new object[] {
|
||||
sessionId,
|
||||
index,
|
||||
startMilliseconds,
|
||||
endMilliseconds,
|
||||
text,
|
||||
user});
|
||||
return ((bool)(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void InsertLineAsync(string sessionId, int index, int startMilliseconds, int endMilliseconds, string text, SeUser user) {
|
||||
this.InsertLineAsync(sessionId, index, startMilliseconds, endMilliseconds, text, user, null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void InsertLineAsync(string sessionId, int index, int startMilliseconds, int endMilliseconds, string text, SeUser user, object userState) {
|
||||
if ((this.InsertLineOperationCompleted == null)) {
|
||||
this.InsertLineOperationCompleted = new System.Threading.SendOrPostCallback(this.OnInsertLineOperationCompleted);
|
||||
}
|
||||
this.InvokeAsync("InsertLine", new object[] {
|
||||
sessionId,
|
||||
index,
|
||||
startMilliseconds,
|
||||
endMilliseconds,
|
||||
text,
|
||||
user}, this.InsertLineOperationCompleted, userState);
|
||||
}
|
||||
|
||||
private void OnInsertLineOperationCompleted(object arg) {
|
||||
if ((this.InsertLineCompleted != null)) {
|
||||
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||
this.InsertLineCompleted(this, new InsertLineCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/UpdateLine", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
public bool UpdateLine(string sessionId, int index, SeSequence sequence, SeUser user) {
|
||||
object[] results = this.Invoke("UpdateLine", new object[] {
|
||||
sessionId,
|
||||
index,
|
||||
sequence,
|
||||
user});
|
||||
return ((bool)(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void UpdateLineAsync(string sessionId, int index, SeSequence sequence, SeUser user) {
|
||||
this.UpdateLineAsync(sessionId, index, sequence, user, null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void UpdateLineAsync(string sessionId, int index, SeSequence sequence, SeUser user, object userState) {
|
||||
if ((this.UpdateLineOperationCompleted == null)) {
|
||||
this.UpdateLineOperationCompleted = new System.Threading.SendOrPostCallback(this.OnUpdateLineOperationCompleted);
|
||||
}
|
||||
this.InvokeAsync("UpdateLine", new object[] {
|
||||
sessionId,
|
||||
index,
|
||||
sequence,
|
||||
user}, this.UpdateLineOperationCompleted, userState);
|
||||
}
|
||||
|
||||
private void OnUpdateLineOperationCompleted(object arg) {
|
||||
if ((this.UpdateLineCompleted != null)) {
|
||||
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||
this.UpdateLineCompleted(this, new UpdateLineCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/SendMessage", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
public bool SendMessage(string sessionId, string text, SeUser user) {
|
||||
object[] results = this.Invoke("SendMessage", new object[] {
|
||||
sessionId,
|
||||
text,
|
||||
user});
|
||||
return ((bool)(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void SendMessageAsync(string sessionId, string text, SeUser user) {
|
||||
this.SendMessageAsync(sessionId, text, user, null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void SendMessageAsync(string sessionId, string text, SeUser user, object userState) {
|
||||
if ((this.SendMessageOperationCompleted == null)) {
|
||||
this.SendMessageOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSendMessageOperationCompleted);
|
||||
}
|
||||
this.InvokeAsync("SendMessage", new object[] {
|
||||
sessionId,
|
||||
text,
|
||||
user}, this.SendMessageOperationCompleted, userState);
|
||||
}
|
||||
|
||||
private void OnSendMessageOperationCompleted(object arg) {
|
||||
if ((this.SendMessageCompleted != null)) {
|
||||
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||
this.SendMessageCompleted(this, new SendMessageCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||
}
|
||||
}
|
||||
|
||||
/// <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) {
|
||||
object[] results = this.Invoke("GetUpdates", new object[] {
|
||||
sessionId,
|
||||
userName,
|
||||
lastUpdateTime});
|
||||
message = ((string)(results[1]));
|
||||
newUpdateTime = ((System.DateTime)(results[2]));
|
||||
return ((SeUpdate[])(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void GetUpdatesAsync(string sessionId, string userName, System.DateTime lastUpdateTime) {
|
||||
this.GetUpdatesAsync(sessionId, userName, lastUpdateTime, null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void GetUpdatesAsync(string sessionId, string userName, System.DateTime lastUpdateTime, object userState) {
|
||||
if ((this.GetUpdatesOperationCompleted == null)) {
|
||||
this.GetUpdatesOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetUpdatesOperationCompleted);
|
||||
}
|
||||
this.InvokeAsync("GetUpdates", new object[] {
|
||||
sessionId,
|
||||
userName,
|
||||
lastUpdateTime}, this.GetUpdatesOperationCompleted, userState);
|
||||
}
|
||||
|
||||
private void OnGetUpdatesOperationCompleted(object arg) {
|
||||
if ((this.GetUpdatesCompleted != null)) {
|
||||
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||
this.GetUpdatesCompleted(this, new GetUpdatesCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetSubtitle", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
public SeSequence[] GetSubtitle(string sessionId, out string fileName, out System.DateTime updateTime) {
|
||||
object[] results = this.Invoke("GetSubtitle", new object[] {
|
||||
sessionId});
|
||||
fileName = ((string)(results[1]));
|
||||
updateTime = ((System.DateTime)(results[2]));
|
||||
return ((SeSequence[])(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void GetSubtitleAsync(string sessionId) {
|
||||
this.GetSubtitleAsync(sessionId, null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void GetSubtitleAsync(string sessionId, object userState) {
|
||||
if ((this.GetSubtitleOperationCompleted == null)) {
|
||||
this.GetSubtitleOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetSubtitleOperationCompleted);
|
||||
}
|
||||
this.InvokeAsync("GetSubtitle", new object[] {
|
||||
sessionId}, this.GetSubtitleOperationCompleted, userState);
|
||||
}
|
||||
|
||||
private void OnGetSubtitleOperationCompleted(object arg) {
|
||||
if ((this.GetSubtitleCompleted != null)) {
|
||||
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||
this.GetSubtitleCompleted(this, new GetSubtitleCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetOriginalSubtitle", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
public SeSequence[] GetOriginalSubtitle(string sessionId) {
|
||||
object[] results = this.Invoke("GetOriginalSubtitle", new object[] {
|
||||
sessionId});
|
||||
return ((SeSequence[])(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void GetOriginalSubtitleAsync(string sessionId) {
|
||||
this.GetOriginalSubtitleAsync(sessionId, null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void GetOriginalSubtitleAsync(string sessionId, object userState) {
|
||||
if ((this.GetOriginalSubtitleOperationCompleted == null)) {
|
||||
this.GetOriginalSubtitleOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetOriginalSubtitleOperationCompleted);
|
||||
}
|
||||
this.InvokeAsync("GetOriginalSubtitle", new object[] {
|
||||
sessionId}, this.GetOriginalSubtitleOperationCompleted, userState);
|
||||
}
|
||||
|
||||
private void OnGetOriginalSubtitleOperationCompleted(object arg) {
|
||||
if ((this.GetOriginalSubtitleCompleted != null)) {
|
||||
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||
this.GetOriginalSubtitleCompleted(this, new GetOriginalSubtitleCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public new void CancelAsync(object userState) {
|
||||
base.CancelAsync(userState);
|
||||
}
|
||||
|
||||
private bool IsLocalFileSystemWebService(string url) {
|
||||
if (((url == null)
|
||||
|| (url == string.Empty))) {
|
||||
return false;
|
||||
}
|
||||
System.Uri wsUri = new System.Uri(url);
|
||||
if (((wsUri.Port >= 1024)
|
||||
&& (string.Compare(wsUri.Host, "localHost", System.StringComparison.OrdinalIgnoreCase) == 0))) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1")]
|
||||
[System.SerializableAttribute()]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/")]
|
||||
public partial class SeSequence {
|
||||
|
||||
private int indexField;
|
||||
|
||||
private int startMillisecondsField;
|
||||
|
||||
private int endMillisecondsField;
|
||||
|
||||
private string textField;
|
||||
|
||||
/// <remarks/>
|
||||
public int Index {
|
||||
get {
|
||||
return this.indexField;
|
||||
}
|
||||
set {
|
||||
this.indexField = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public int StartMilliseconds {
|
||||
get {
|
||||
return this.startMillisecondsField;
|
||||
}
|
||||
set {
|
||||
this.startMillisecondsField = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public int EndMilliseconds {
|
||||
get {
|
||||
return this.endMillisecondsField;
|
||||
}
|
||||
set {
|
||||
this.endMillisecondsField = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public string Text {
|
||||
get {
|
||||
return this.textField;
|
||||
}
|
||||
set {
|
||||
this.textField = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1")]
|
||||
[System.SerializableAttribute()]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/")]
|
||||
public partial class SeUpdate {
|
||||
|
||||
private System.DateTime timeField;
|
||||
|
||||
private SeUser userField;
|
||||
|
||||
private int indexField;
|
||||
|
||||
private int startMillisecondsField;
|
||||
|
||||
private int endMillisecondsField;
|
||||
|
||||
private string textField;
|
||||
|
||||
private string actionField;
|
||||
|
||||
/// <remarks/>
|
||||
public System.DateTime Time {
|
||||
get {
|
||||
return this.timeField;
|
||||
}
|
||||
set {
|
||||
this.timeField = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public SeUser User {
|
||||
get {
|
||||
return this.userField;
|
||||
}
|
||||
set {
|
||||
this.userField = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public int Index {
|
||||
get {
|
||||
return this.indexField;
|
||||
}
|
||||
set {
|
||||
this.indexField = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public int StartMilliseconds {
|
||||
get {
|
||||
return this.startMillisecondsField;
|
||||
}
|
||||
set {
|
||||
this.startMillisecondsField = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public int EndMilliseconds {
|
||||
get {
|
||||
return this.endMillisecondsField;
|
||||
}
|
||||
set {
|
||||
this.endMillisecondsField = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public string Text {
|
||||
get {
|
||||
return this.textField;
|
||||
}
|
||||
set {
|
||||
this.textField = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public string Action {
|
||||
get {
|
||||
return this.actionField;
|
||||
}
|
||||
set {
|
||||
this.actionField = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1")]
|
||||
[System.SerializableAttribute()]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/")]
|
||||
public partial class SeUser {
|
||||
|
||||
private string userNameField;
|
||||
|
||||
private string ipField;
|
||||
|
||||
private System.DateTime lastActivityField;
|
||||
|
||||
/// <remarks/>
|
||||
public string UserName {
|
||||
get {
|
||||
return this.userNameField;
|
||||
}
|
||||
set {
|
||||
this.userNameField = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public string Ip {
|
||||
get {
|
||||
return this.ipField;
|
||||
}
|
||||
set {
|
||||
this.ipField = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public System.DateTime LastActivity {
|
||||
get {
|
||||
return this.lastActivityField;
|
||||
}
|
||||
set {
|
||||
this.lastActivityField = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")]
|
||||
public delegate void StartCompletedEventHandler(object sender, StartCompletedEventArgs e);
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
public partial class StartCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||
|
||||
private object[] results;
|
||||
|
||||
internal StartCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
||||
base(exception, cancelled, userState) {
|
||||
this.results = results;
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public SeUser Result {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((SeUser)(this.results[0]));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public string message {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((string)(this.results[1]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")]
|
||||
public delegate void JoinCompletedEventHandler(object sender, JoinCompletedEventArgs e);
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
public partial class JoinCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||
|
||||
private object[] results;
|
||||
|
||||
internal JoinCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
||||
base(exception, cancelled, userState) {
|
||||
this.results = results;
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public SeUser[] Result {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((SeUser[])(this.results[0]));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public string message {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((string)(this.results[1]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")]
|
||||
public delegate void LeaveCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")]
|
||||
public delegate void DeleteLinesCompletedEventHandler(object sender, DeleteLinesCompletedEventArgs e);
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
public partial class DeleteLinesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||
|
||||
private object[] results;
|
||||
|
||||
internal DeleteLinesCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
||||
base(exception, cancelled, userState) {
|
||||
this.results = results;
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public bool Result {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((bool)(this.results[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")]
|
||||
public delegate void InsertLineCompletedEventHandler(object sender, InsertLineCompletedEventArgs e);
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
public partial class InsertLineCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||
|
||||
private object[] results;
|
||||
|
||||
internal InsertLineCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
||||
base(exception, cancelled, userState) {
|
||||
this.results = results;
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public bool Result {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((bool)(this.results[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")]
|
||||
public delegate void UpdateLineCompletedEventHandler(object sender, UpdateLineCompletedEventArgs e);
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
public partial class UpdateLineCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||
|
||||
private object[] results;
|
||||
|
||||
internal UpdateLineCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
||||
base(exception, cancelled, userState) {
|
||||
this.results = results;
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public bool Result {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((bool)(this.results[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")]
|
||||
public delegate void SendMessageCompletedEventHandler(object sender, SendMessageCompletedEventArgs e);
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
public partial class SendMessageCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||
|
||||
private object[] results;
|
||||
|
||||
internal SendMessageCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
||||
base(exception, cancelled, userState) {
|
||||
this.results = results;
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public bool Result {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((bool)(this.results[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")]
|
||||
public delegate void GetUpdatesCompletedEventHandler(object sender, GetUpdatesCompletedEventArgs e);
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
public partial class GetUpdatesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||
|
||||
private object[] results;
|
||||
|
||||
internal GetUpdatesCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
||||
base(exception, cancelled, userState) {
|
||||
this.results = results;
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public SeUpdate[] Result {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((SeUpdate[])(this.results[0]));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public string message {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((string)(this.results[1]));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public System.DateTime newUpdateTime {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((System.DateTime)(this.results[2]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")]
|
||||
public delegate void GetSubtitleCompletedEventHandler(object sender, GetSubtitleCompletedEventArgs e);
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
public partial class GetSubtitleCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||
|
||||
private object[] results;
|
||||
|
||||
internal GetSubtitleCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
||||
base(exception, cancelled, userState) {
|
||||
this.results = results;
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public SeSequence[] Result {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((SeSequence[])(this.results[0]));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public string fileName {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((string)(this.results[1]));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public System.DateTime updateTime {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((System.DateTime)(this.results[2]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")]
|
||||
public delegate void GetOriginalSubtitleCompletedEventHandler(object sender, GetOriginalSubtitleCompletedEventArgs e);
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
public partial class GetOriginalSubtitleCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||
|
||||
private object[] results;
|
||||
|
||||
internal GetOriginalSubtitleCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
||||
base(exception, cancelled, userState) {
|
||||
this.results = results;
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public SeSequence[] Result {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((SeSequence[])(this.results[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#pragma warning restore 1591
|
7
src/Web References/SeNetworkService/Reference.map
Normal file
7
src/Web References/SeNetworkService/Reference.map
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<DiscoveryClientResultsFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||||
<Results>
|
||||
<DiscoveryClientResult referenceType="System.Web.Services.Discovery.ContractReference" url="http://localhost:2782/se/SeService.asmx?wsdl" filename="SeService.wsdl" />
|
||||
<DiscoveryClientResult referenceType="System.Web.Services.Discovery.DiscoveryDocumentReference" url="http://localhost:2782/se/SeService.asmx?disco" filename="SeService.disco" />
|
||||
</Results>
|
||||
</DiscoveryClientResultsFile>
|
10
src/Web References/SeNetworkService/SeSequence.datasource
Normal file
10
src/Web References/SeNetworkService/SeSequence.datasource
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
This file is automatically generated by Visual Studio .Net. It is
|
||||
used to store generic object data source configuration information.
|
||||
Renaming the file extension or editing the content of this file may
|
||||
cause the file to be unrecognizable by the program.
|
||||
-->
|
||||
<GenericObjectDataSource DisplayName="SeSequence" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
|
||||
<TypeInfo>Nikse.SubtitleEdit.SeNetworkService.SeSequence, Web References.SeNetworkService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
|
||||
</GenericObjectDataSource>
|
6
src/Web References/SeNetworkService/SeService.disco
Normal file
6
src/Web References/SeNetworkService/SeService.disco
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<discovery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/disco/">
|
||||
<contractRef ref="http://localhost:2782/se/SeService.asmx?wsdl" docRef="http://localhost:2782/se/SeService.asmx" xmlns="http://schemas.xmlsoap.org/disco/scl/" />
|
||||
<soap address="http://localhost:2782/se/SeService.asmx" xmlns:q1="http://tempuri.org/" binding="q1:SeServiceSoap" xmlns="http://schemas.xmlsoap.org/disco/soap/" />
|
||||
<soap address="http://localhost:2782/se/SeService.asmx" xmlns:q2="http://tempuri.org/" binding="q2:SeServiceSoap12" xmlns="http://schemas.xmlsoap.org/disco/soap/" />
|
||||
</discovery>
|
511
src/Web References/SeNetworkService/SeService.wsdl
Normal file
511
src/Web References/SeNetworkService/SeService.wsdl
Normal file
@ -0,0 +1,511 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<wsdl:definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
|
||||
<wsdl:types>
|
||||
<s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
|
||||
<s:element name="Start">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="sessionKey" type="s:string" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="userName" type="s:string" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="subtitle" type="tns:ArrayOfSeSequence" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="originalSubtitle" type="tns:ArrayOfSeSequence" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="fileName" type="s:string" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:complexType name="ArrayOfSeSequence">
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="unbounded" name="SeSequence" nillable="true" type="tns:SeSequence" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
<s:complexType name="SeSequence">
|
||||
<s:sequence>
|
||||
<s:element minOccurs="1" maxOccurs="1" name="Index" type="s:int" />
|
||||
<s:element minOccurs="1" maxOccurs="1" name="StartMilliseconds" type="s:int" />
|
||||
<s:element minOccurs="1" maxOccurs="1" name="EndMilliseconds" type="s:int" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="Text" type="s:string" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
<s:element name="StartResponse">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="StartResult" type="tns:SeUser" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="message" type="s:string" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:complexType name="SeUser">
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="UserName" type="s:string" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="Ip" type="s:string" />
|
||||
<s:element minOccurs="1" maxOccurs="1" name="LastActivity" type="s:dateTime" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
<s:element name="Join">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="sessionId" type="s:string" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="userName" type="s:string" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="JoinResponse">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="JoinResult" type="tns:ArrayOfSeUser" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="message" type="s:string" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:complexType name="ArrayOfSeUser">
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="unbounded" name="SeUser" nillable="true" type="tns:SeUser" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
<s:element name="Leave">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="sessionId" type="s:string" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="userName" type="s:string" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="LeaveResponse">
|
||||
<s:complexType />
|
||||
</s:element>
|
||||
<s:element name="DeleteLines">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="sessionId" type="s:string" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="indices" type="tns:ArrayOfInt" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="user" type="tns:SeUser" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:complexType name="ArrayOfInt">
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="unbounded" name="int" type="s:int" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
<s:element name="DeleteLinesResponse">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="1" maxOccurs="1" name="DeleteLinesResult" type="s:boolean" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="InsertLine">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="sessionId" type="s:string" />
|
||||
<s:element minOccurs="1" maxOccurs="1" name="index" type="s:int" />
|
||||
<s:element minOccurs="1" maxOccurs="1" name="startMilliseconds" type="s:int" />
|
||||
<s:element minOccurs="1" maxOccurs="1" name="endMilliseconds" type="s:int" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="text" type="s:string" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="user" type="tns:SeUser" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="InsertLineResponse">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="1" maxOccurs="1" name="InsertLineResult" type="s:boolean" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="UpdateLine">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="sessionId" type="s:string" />
|
||||
<s:element minOccurs="1" maxOccurs="1" name="index" type="s:int" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="sequence" type="tns:SeSequence" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="user" type="tns:SeUser" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="UpdateLineResponse">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="1" maxOccurs="1" name="UpdateLineResult" type="s:boolean" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="SendMessage">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="sessionId" type="s:string" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="text" type="s:string" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="user" type="tns:SeUser" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="SendMessageResponse">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="1" maxOccurs="1" name="SendMessageResult" type="s:boolean" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="GetUpdates">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="sessionId" type="s:string" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="userName" type="s:string" />
|
||||
<s:element minOccurs="1" maxOccurs="1" name="lastUpdateTime" type="s:dateTime" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="GetUpdatesResponse">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<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:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:complexType name="ArrayOfSeUpdate">
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="unbounded" name="SeUpdate" nillable="true" type="tns:SeUpdate" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
<s:complexType name="SeUpdate">
|
||||
<s:sequence>
|
||||
<s:element minOccurs="1" maxOccurs="1" name="Time" type="s:dateTime" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="User" type="tns:SeUser" />
|
||||
<s:element minOccurs="1" maxOccurs="1" name="Index" type="s:int" />
|
||||
<s:element minOccurs="1" maxOccurs="1" name="StartMilliseconds" type="s:int" />
|
||||
<s:element minOccurs="1" maxOccurs="1" name="EndMilliseconds" type="s:int" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="Text" type="s:string" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="Action" type="s:string" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
<s:element name="GetSubtitle">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="sessionId" type="s:string" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="GetSubtitleResponse">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="GetSubtitleResult" type="tns:ArrayOfSeSequence" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="fileName" type="s:string" />
|
||||
<s:element minOccurs="1" maxOccurs="1" name="updateTime" type="s:dateTime" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="GetOriginalSubtitle">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="sessionId" type="s:string" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="GetOriginalSubtitleResponse">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="GetOriginalSubtitleResult" type="tns:ArrayOfSeSequence" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
</s:schema>
|
||||
</wsdl:types>
|
||||
<wsdl:message name="StartSoapIn">
|
||||
<wsdl:part name="parameters" element="tns:Start" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="StartSoapOut">
|
||||
<wsdl:part name="parameters" element="tns:StartResponse" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="JoinSoapIn">
|
||||
<wsdl:part name="parameters" element="tns:Join" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="JoinSoapOut">
|
||||
<wsdl:part name="parameters" element="tns:JoinResponse" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="LeaveSoapIn">
|
||||
<wsdl:part name="parameters" element="tns:Leave" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="LeaveSoapOut">
|
||||
<wsdl:part name="parameters" element="tns:LeaveResponse" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="DeleteLinesSoapIn">
|
||||
<wsdl:part name="parameters" element="tns:DeleteLines" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="DeleteLinesSoapOut">
|
||||
<wsdl:part name="parameters" element="tns:DeleteLinesResponse" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="InsertLineSoapIn">
|
||||
<wsdl:part name="parameters" element="tns:InsertLine" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="InsertLineSoapOut">
|
||||
<wsdl:part name="parameters" element="tns:InsertLineResponse" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="UpdateLineSoapIn">
|
||||
<wsdl:part name="parameters" element="tns:UpdateLine" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="UpdateLineSoapOut">
|
||||
<wsdl:part name="parameters" element="tns:UpdateLineResponse" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="SendMessageSoapIn">
|
||||
<wsdl:part name="parameters" element="tns:SendMessage" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="SendMessageSoapOut">
|
||||
<wsdl:part name="parameters" element="tns:SendMessageResponse" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetUpdatesSoapIn">
|
||||
<wsdl:part name="parameters" element="tns:GetUpdates" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetUpdatesSoapOut">
|
||||
<wsdl:part name="parameters" element="tns:GetUpdatesResponse" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetSubtitleSoapIn">
|
||||
<wsdl:part name="parameters" element="tns:GetSubtitle" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetSubtitleSoapOut">
|
||||
<wsdl:part name="parameters" element="tns:GetSubtitleResponse" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetOriginalSubtitleSoapIn">
|
||||
<wsdl:part name="parameters" element="tns:GetOriginalSubtitle" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetOriginalSubtitleSoapOut">
|
||||
<wsdl:part name="parameters" element="tns:GetOriginalSubtitleResponse" />
|
||||
</wsdl:message>
|
||||
<wsdl:portType name="SeServiceSoap">
|
||||
<wsdl:operation name="Start">
|
||||
<wsdl:input message="tns:StartSoapIn" />
|
||||
<wsdl:output message="tns:StartSoapOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="Join">
|
||||
<wsdl:input message="tns:JoinSoapIn" />
|
||||
<wsdl:output message="tns:JoinSoapOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="Leave">
|
||||
<wsdl:input message="tns:LeaveSoapIn" />
|
||||
<wsdl:output message="tns:LeaveSoapOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="DeleteLines">
|
||||
<wsdl:input message="tns:DeleteLinesSoapIn" />
|
||||
<wsdl:output message="tns:DeleteLinesSoapOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="InsertLine">
|
||||
<wsdl:input message="tns:InsertLineSoapIn" />
|
||||
<wsdl:output message="tns:InsertLineSoapOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="UpdateLine">
|
||||
<wsdl:input message="tns:UpdateLineSoapIn" />
|
||||
<wsdl:output message="tns:UpdateLineSoapOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="SendMessage">
|
||||
<wsdl:input message="tns:SendMessageSoapIn" />
|
||||
<wsdl:output message="tns:SendMessageSoapOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetUpdates">
|
||||
<wsdl:input message="tns:GetUpdatesSoapIn" />
|
||||
<wsdl:output message="tns:GetUpdatesSoapOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetSubtitle">
|
||||
<wsdl:input message="tns:GetSubtitleSoapIn" />
|
||||
<wsdl:output message="tns:GetSubtitleSoapOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetOriginalSubtitle">
|
||||
<wsdl:input message="tns:GetOriginalSubtitleSoapIn" />
|
||||
<wsdl:output message="tns:GetOriginalSubtitleSoapOut" />
|
||||
</wsdl:operation>
|
||||
</wsdl:portType>
|
||||
<wsdl:binding name="SeServiceSoap" type="tns:SeServiceSoap">
|
||||
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
|
||||
<wsdl:operation name="Start">
|
||||
<soap:operation soapAction="http://tempuri.org/Start" style="document" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="Join">
|
||||
<soap:operation soapAction="http://tempuri.org/Join" style="document" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="Leave">
|
||||
<soap:operation soapAction="http://tempuri.org/Leave" style="document" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="DeleteLines">
|
||||
<soap:operation soapAction="http://tempuri.org/DeleteLines" style="document" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="InsertLine">
|
||||
<soap:operation soapAction="http://tempuri.org/InsertLine" style="document" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="UpdateLine">
|
||||
<soap:operation soapAction="http://tempuri.org/UpdateLine" style="document" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="SendMessage">
|
||||
<soap:operation soapAction="http://tempuri.org/SendMessage" style="document" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetUpdates">
|
||||
<soap:operation soapAction="http://tempuri.org/GetUpdates" style="document" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetSubtitle">
|
||||
<soap:operation soapAction="http://tempuri.org/GetSubtitle" style="document" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetOriginalSubtitle">
|
||||
<soap:operation soapAction="http://tempuri.org/GetOriginalSubtitle" style="document" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
</wsdl:binding>
|
||||
<wsdl:binding name="SeServiceSoap12" type="tns:SeServiceSoap">
|
||||
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
|
||||
<wsdl:operation name="Start">
|
||||
<soap12:operation soapAction="http://tempuri.org/Start" style="document" />
|
||||
<wsdl:input>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="Join">
|
||||
<soap12:operation soapAction="http://tempuri.org/Join" style="document" />
|
||||
<wsdl:input>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="Leave">
|
||||
<soap12:operation soapAction="http://tempuri.org/Leave" style="document" />
|
||||
<wsdl:input>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="DeleteLines">
|
||||
<soap12:operation soapAction="http://tempuri.org/DeleteLines" style="document" />
|
||||
<wsdl:input>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="InsertLine">
|
||||
<soap12:operation soapAction="http://tempuri.org/InsertLine" style="document" />
|
||||
<wsdl:input>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="UpdateLine">
|
||||
<soap12:operation soapAction="http://tempuri.org/UpdateLine" style="document" />
|
||||
<wsdl:input>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="SendMessage">
|
||||
<soap12:operation soapAction="http://tempuri.org/SendMessage" style="document" />
|
||||
<wsdl:input>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetUpdates">
|
||||
<soap12:operation soapAction="http://tempuri.org/GetUpdates" style="document" />
|
||||
<wsdl:input>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetSubtitle">
|
||||
<soap12:operation soapAction="http://tempuri.org/GetSubtitle" style="document" />
|
||||
<wsdl:input>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetOriginalSubtitle">
|
||||
<soap12:operation soapAction="http://tempuri.org/GetOriginalSubtitle" style="document" />
|
||||
<wsdl:input>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap12:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
</wsdl:binding>
|
||||
<wsdl:service name="SeService">
|
||||
<wsdl:port name="SeServiceSoap" binding="tns:SeServiceSoap">
|
||||
<soap:address location="http://localhost:2782/se/SeService.asmx" />
|
||||
</wsdl:port>
|
||||
<wsdl:port name="SeServiceSoap12" binding="tns:SeServiceSoap12">
|
||||
<soap12:address location="http://localhost:2782/se/SeService.asmx" />
|
||||
</wsdl:port>
|
||||
</wsdl:service>
|
||||
</wsdl:definitions>
|
10
src/Web References/SeNetworkService/SeUpdate.datasource
Normal file
10
src/Web References/SeNetworkService/SeUpdate.datasource
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
This file is automatically generated by Visual Studio .Net. It is
|
||||
used to store generic object data source configuration information.
|
||||
Renaming the file extension or editing the content of this file may
|
||||
cause the file to be unrecognizable by the program.
|
||||
-->
|
||||
<GenericObjectDataSource DisplayName="SeUpdate" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
|
||||
<TypeInfo>Nikse.SubtitleEdit.SeNetworkService.SeUpdate, Web References.SeNetworkService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
|
||||
</GenericObjectDataSource>
|
10
src/Web References/SeNetworkService/SeUser.datasource
Normal file
10
src/Web References/SeNetworkService/SeUser.datasource
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
This file is automatically generated by Visual Studio .Net. It is
|
||||
used to store generic object data source configuration information.
|
||||
Renaming the file extension or editing the content of this file may
|
||||
cause the file to be unrecognizable by the program.
|
||||
-->
|
||||
<GenericObjectDataSource DisplayName="SeUser" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
|
||||
<TypeInfo>Nikse.SubtitleEdit.SeNetworkService.SeUser, Web References.SeNetworkService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
|
||||
</GenericObjectDataSource>
|
@ -11,6 +11,9 @@
|
||||
serializeAs="String">
|
||||
<value>http://api.microsofttranslator.com/V2/soap.svc</value>
|
||||
</setting>
|
||||
<setting name="SubtitleEdit_SeNetworkService_SeService" serializeAs="String">
|
||||
<value>http://localhost:2782/se/SeService.asmx</value>
|
||||
</setting>
|
||||
</Nikse.SubtitleEdit.Properties.Settings>
|
||||
</applicationSettings>
|
||||
</configuration>
|
Loading…
Reference in New Issue
Block a user