Change networking feature from using wcf to rest

wcf is obsolete - and this should make SE ready for .NET 5
This commit is contained in:
Nikolaj Olsson 2020-12-01 18:10:56 +01:00
parent 3d47ae17f6
commit d6a60490a2
19 changed files with 471 additions and 1670 deletions

1
.gitignore vendored
View File

@ -45,3 +45,4 @@ SubtitleEditBeta
/src/ui/NHunspell*
/build_beta.bat
/TestResults
/packages

View File

@ -1743,7 +1743,7 @@ $HorzAlign = Center
public class NetworkSettings
{
public string UserName { get; set; }
public string WebServiceUrl { get; set; }
public string WebApiUrl { get; set; }
public string SessionKey { get; set; }
public int PollIntervalSeconds { get; set; }
public string NewMessageSound { get; set; }
@ -1751,8 +1751,8 @@ $HorzAlign = Center
public NetworkSettings()
{
UserName = string.Empty;
SessionKey = "DemoSession"; // TODO: Leave blank or use guid
WebServiceUrl = "https://www.nikse.dk/se/SeService.asmx";
SessionKey = "DemoSession";
WebApiUrl = "https://www.nikse.dk/api/SeNet";
PollIntervalSeconds = 5;
}
}
@ -5635,10 +5635,10 @@ $HorzAlign = Center
settings.NetworkSettings.UserName = subNode.InnerText;
}
subNode = node.SelectSingleNode("WebServiceUrl");
subNode = node.SelectSingleNode("WebApiUrl");
if (subNode != null)
{
settings.NetworkSettings.WebServiceUrl = subNode.InnerText;
settings.NetworkSettings.WebApiUrl = subNode.InnerText;
}
subNode = node.SelectSingleNode("PollIntervalSeconds");
@ -8274,7 +8274,7 @@ $HorzAlign = Center
textWriter.WriteStartElement("NetworkSettings", string.Empty);
textWriter.WriteElementString("SessionKey", settings.NetworkSettings.SessionKey);
textWriter.WriteElementString("UserName", settings.NetworkSettings.UserName);
textWriter.WriteElementString("WebServiceUrl", settings.NetworkSettings.WebServiceUrl);
textWriter.WriteElementString("WebApiUrl", settings.NetworkSettings.WebApiUrl);
textWriter.WriteElementString("PollIntervalSeconds", settings.NetworkSettings.PollIntervalSeconds.ToString(CultureInfo.InvariantCulture));
textWriter.WriteElementString("NewMessageSound", settings.NetworkSettings.NewMessageSound);
textWriter.WriteEndElement();

View File

@ -40,7 +40,7 @@ namespace Nikse.SubtitleEdit.Forms.Networking
textBoxSessionKey.Text = Guid.NewGuid().ToString().RemoveChar('-');
}
comboBoxWebServiceUrl.Text = Configuration.Settings.NetworkSettings.WebServiceUrl;
comboBoxWebServiceUrl.Text = Configuration.Settings.NetworkSettings.WebApiUrl;
textBoxUserName.Text = Configuration.Settings.NetworkSettings.UserName;
if (textBoxUserName.Text.Trim().Length < 2)
{
@ -51,7 +51,7 @@ namespace Nikse.SubtitleEdit.Forms.Networking
private void buttonJoin_Click(object sender, EventArgs e)
{
Configuration.Settings.NetworkSettings.SessionKey = textBoxSessionKey.Text;
Configuration.Settings.NetworkSettings.WebServiceUrl = comboBoxWebServiceUrl.Text;
Configuration.Settings.NetworkSettings.WebApiUrl = comboBoxWebServiceUrl.Text;
Configuration.Settings.NetworkSettings.UserName = textBoxUserName.Text;
buttonJoin.Enabled = false;

View File

@ -1,8 +1,7 @@
using System;
using System.Windows.Forms;
using Nikse.SubtitleEdit.Core;
using Nikse.SubtitleEdit.Core.Common;
using Nikse.SubtitleEdit.Core.Common;
using Nikse.SubtitleEdit.Logic;
using System;
using System.Windows.Forms;
namespace Nikse.SubtitleEdit.Forms.Networking
{
@ -26,7 +25,7 @@ namespace Nikse.SubtitleEdit.Forms.Networking
{
textBoxSessionKey.Text = networkSession.SessionId;
textBoxUserName.Text = networkSession.CurrentUser.UserName;
textBoxWebServiceUrl.Text = networkSession.WebServiceUrl;
textBoxWebServiceUrl.Text = networkSession.BaseUrl;
textBoxLog.Text = networkSession.GetLog();
}

View File

@ -1,9 +1,8 @@
using System;
using Nikse.SubtitleEdit.Core.Common;
using Nikse.SubtitleEdit.Logic;
using System;
using System.Net;
using System.Windows.Forms;
using Nikse.SubtitleEdit.Core;
using Nikse.SubtitleEdit.Core.Common;
using Nikse.SubtitleEdit.Logic;
namespace Nikse.SubtitleEdit.Forms.Networking
{
@ -41,7 +40,7 @@ namespace Nikse.SubtitleEdit.Forms.Networking
textBoxSessionKey.Text = Guid.NewGuid().ToString().RemoveChar('-');
}
comboBoxWebServiceUrl.Text = Configuration.Settings.NetworkSettings.WebServiceUrl;
comboBoxWebServiceUrl.Text = Configuration.Settings.NetworkSettings.WebApiUrl;
textBoxUserName.Text = Configuration.Settings.NetworkSettings.UserName;
if (textBoxUserName.Text.Trim().Length < 2)
{
@ -52,7 +51,7 @@ namespace Nikse.SubtitleEdit.Forms.Networking
private void buttonStart_Click(object sender, EventArgs e)
{
Configuration.Settings.NetworkSettings.SessionKey = textBoxSessionKey.Text;
Configuration.Settings.NetworkSettings.WebServiceUrl = comboBoxWebServiceUrl.Text;
Configuration.Settings.NetworkSettings.WebApiUrl = comboBoxWebServiceUrl.Text;
Configuration.Settings.NetworkSettings.UserName = textBoxUserName.Text;
buttonStart.Enabled = false;
@ -65,8 +64,7 @@ namespace Nikse.SubtitleEdit.Forms.Networking
try
{
string message;
_networkSession.StartServer(comboBoxWebServiceUrl.Text, textBoxSessionKey.Text, textBoxUserName.Text, _fileName, out message);
_networkSession.StartServer(comboBoxWebServiceUrl.Text, textBoxSessionKey.Text, textBoxUserName.Text, _fileName, out var message);
if (message != "OK")
{
MessageBox.Show(message);

View File

@ -1,9 +1,10 @@
using Nikse.SubtitleEdit.Core;
using Nikse.SubtitleEdit.Core.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using Nikse.SubtitleEdit.Core.Common;
namespace Nikse.SubtitleEdit.Logic.Networking
{
@ -21,20 +22,19 @@ namespace Nikse.SubtitleEdit.Logic.Networking
private System.Windows.Forms.Timer _timerWebService;
public List<UpdateLogEntry> UpdateLog { get; } = new List<UpdateLogEntry>();
public List<ChatEntry> ChatLog { get; } = new List<ChatEntry>();
private SeNetworkService.SeService _seWs;
private SeNetworkService _seWs;
private DateTime _seWsLastUpdate = DateTime.Now.AddYears(-1);
public SeNetworkService.SeUser CurrentUser { get; set; }
public Subtitle LastSubtitle { get; set; }
public Subtitle Subtitle { get; private set; }
public Subtitle OriginalSubtitle { get; private set; }
public string SessionId { get; private set; }
public string BaseUrl => _seWs != null ? _seWs.BaseUrl : string.Empty;
private string _userName;
private string _fileName;
public List<SeNetworkService.SeUser> Users { get; private set; }
public StringBuilder Log { get; }
public string WebServiceUrl => _seWs.Url;
public NikseWebServiceSession(Subtitle subtitle, Subtitle originalSubtitle, EventHandler onUpdateTimerTick, EventHandler onUpdateUserLogEntries)
{
Subtitle = subtitle;
@ -52,13 +52,13 @@ namespace Nikse.SubtitleEdit.Logic.Networking
OnUpdateUserLogEntries = onUpdateUserLogEntries;
}
public void StartServer(string webServiceUrl, string sessionKey, string userName, string fileName, out string message)
public void StartServer(string baseUrl, string sessionKey, string userName, string fileName, out string message)
{
SessionId = sessionKey;
_userName = userName;
_fileName = fileName;
var list = new List<SeNetworkService.SeSequence>();
foreach (Paragraph p in Subtitle.Paragraphs)
foreach (var p in Subtitle.Paragraphs)
{
list.Add(new SeNetworkService.SeSequence
{
@ -71,7 +71,7 @@ namespace Nikse.SubtitleEdit.Logic.Networking
var originalSubtitle = new List<SeNetworkService.SeSequence>();
if (OriginalSubtitle != null)
{
foreach (Paragraph p in OriginalSubtitle.Paragraphs)
foreach (var p in OriginalSubtitle.Paragraphs)
{
originalSubtitle.Add(new SeNetworkService.SeSequence
{
@ -82,15 +82,21 @@ namespace Nikse.SubtitleEdit.Logic.Networking
}
}
_seWs = new SeNetworkService.SeService
_seWs = new SeNetworkService(baseUrl);
var request = new SeNetworkService.StartRequest()
{
Url = webServiceUrl,
Proxy = Utilities.GetProxy()
SessionId = sessionKey,
FileName = fileName,
OriginalSubtitle = originalSubtitle,
Subtitle = list,
UserName = userName
};
var user = _seWs.Start(sessionKey, userName, list.ToArray(), originalSubtitle.ToArray(), fileName, out message);
CurrentUser = user;
Users = new List<SeNetworkService.SeUser> { user };
if (message == "OK")
var response = _seWs.Start(request);
CurrentUser = response.User;
message = response.Message;
Users = new List<SeNetworkService.SeUser> { response.User };
if (response.Message == "OK")
{
_timerWebService.Start();
}
@ -99,40 +105,50 @@ namespace Nikse.SubtitleEdit.Logic.Networking
public bool Join(string webServiceUrl, string userName, string sessionKey, out string message)
{
SessionId = sessionKey;
_seWs = new SeNetworkService.SeService
{
Url = webServiceUrl,
Proxy = Utilities.GetProxy()
};
_seWs = new SeNetworkService(webServiceUrl);
Users = new List<SeNetworkService.SeUser>();
var users = _seWs.Join(sessionKey, userName, out message);
if (message != "OK")
var joinRequest = new SeNetworkService.JoinRequest()
{
SessionId = sessionKey,
UserName = userName
};
var joinResponse = _seWs.Join(joinRequest);
message = joinResponse.Message;
if (joinResponse.Message != "OK")
{
return false;
}
string tempFileName;
Subtitle = new Subtitle();
foreach (var sequence in _seWs.GetSubtitle(sessionKey, out tempFileName, out _))
var getSubtitleRequest = new SeNetworkService.GetSubtitleRequest
{
SessionId = sessionKey
};
var getSubtitleResponse = _seWs.GetSubtitle(getSubtitleRequest);
foreach (var sequence in getSubtitleResponse.Subtitle)
{
Subtitle.Paragraphs.Add(new Paragraph(WebUtility.HtmlDecode(sequence.Text).Replace("<br />", Environment.NewLine), sequence.StartMilliseconds, sequence.EndMilliseconds));
}
_fileName = tempFileName;
_fileName = getSubtitleResponse.FileName;
OriginalSubtitle = new Subtitle();
var sequences = _seWs.GetOriginalSubtitle(sessionKey);
if (sequences != null)
var getOriginalSubtitleRequest = new SeNetworkService.GetOriginalSubtitleRequest
{
foreach (var sequence in sequences)
SessionId = sessionKey
};
var getOriginalSubtitleResponse = _seWs.GetOriginalSubtitle(getOriginalSubtitleRequest);
if (getOriginalSubtitleResponse.Subtitle != null)
{
foreach (var sequence in getOriginalSubtitleResponse.Subtitle)
{
OriginalSubtitle.Paragraphs.Add(new Paragraph(WebUtility.HtmlDecode(sequence.Text).Replace("<br />", Environment.NewLine), sequence.StartMilliseconds, sequence.EndMilliseconds));
}
}
SessionId = sessionKey;
CurrentUser = users[users.Length - 1]; // me
foreach (var user in users)
CurrentUser = joinResponse.Users.Last();
foreach (var user in joinResponse.Users)
{
Users.Add(user);
}
@ -159,28 +175,40 @@ namespace Nikse.SubtitleEdit.Logic.Networking
public List<SeNetworkService.SeUpdate> GetUpdates(out string message, out int numberOfLines)
{
List<SeNetworkService.SeUpdate> list = new List<SeNetworkService.SeUpdate>();
var updates = _seWs.GetUpdates(SessionId, CurrentUser.UserName, _seWsLastUpdate, out message, out var newUpdateTime, out numberOfLines);
if (updates != null)
var list = new List<SeNetworkService.SeUpdate>();
var request = new SeNetworkService.GetUpdatesRequest
{
foreach (var update in updates)
SessionId = SessionId,
UserName = CurrentUser.UserName,
LastUpdateTime = _seWsLastUpdate
};
var response = _seWs.GetUpdates(request);
if (response.Updates != null)
{
foreach (var update in response.Updates)
{
list.Add(update);
}
}
_seWsLastUpdate = newUpdateTime;
_seWsLastUpdate = response.NewUpdateTime;
message = response.Message;
numberOfLines = response.NumberOfLines;
return list;
}
public Subtitle ReloadSubtitle()
{
Subtitle.Paragraphs.Clear();
var sequences = _seWs.GetSubtitle(SessionId, out var tempFileName, out var updateTime);
_fileName = tempFileName;
_seWsLastUpdate = updateTime;
if (sequences != null)
var request = new SeNetworkService.GetSubtitleRequest
{
foreach (var sequence in sequences)
SessionId = SessionId,
};
var response = _seWs.GetSubtitle(request);
_fileName = response.FileName;
_seWsLastUpdate = response.UpdateTime;
if (response.Subtitle != null)
{
foreach (var sequence in response.Subtitle)
{
Subtitle.Paragraphs.Add(new Paragraph(WebUtility.HtmlDecode(sequence.Text).Replace("<br />", Environment.NewLine), sequence.StartMilliseconds, sequence.EndMilliseconds));
}
@ -190,23 +218,31 @@ namespace Nikse.SubtitleEdit.Logic.Networking
private void ReloadFromWs()
{
if (_seWs != null)
if (_seWs == null)
{
Subtitle = new Subtitle();
var sequences = _seWs.GetSubtitle(SessionId, out _fileName, out _seWsLastUpdate);
foreach (var sequence in sequences)
{
var p = new Paragraph(WebUtility.HtmlDecode(sequence.Text).Replace("<br />", Environment.NewLine), sequence.StartMilliseconds, sequence.EndMilliseconds);
Subtitle.Paragraphs.Add(p);
}
Subtitle.Renumber();
LastSubtitle = new Subtitle(Subtitle);
return;
}
Subtitle = new Subtitle();
var request = new SeNetworkService.GetSubtitleRequest
{
SessionId = SessionId,
};
var response = _seWs.GetSubtitle(request);
_fileName = response.FileName;
_seWsLastUpdate = response.UpdateTime;
foreach (var sequence in response.Subtitle)
{
var p = new Paragraph(WebUtility.HtmlDecode(sequence.Text).Replace("<br />", Environment.NewLine), sequence.StartMilliseconds, sequence.EndMilliseconds);
Subtitle.Paragraphs.Add(p);
}
Subtitle.Renumber();
LastSubtitle = new Subtitle(Subtitle);
}
public void AppendToLog(string text)
{
string timestamp = DateTime.Now.ToLongTimeString();
var timestamp = DateTime.Now.ToLongTimeString();
Log.AppendLine(timestamp + ": " + UiUtil.GetListViewTextFromString(text.TrimEnd()));
}
@ -217,17 +253,31 @@ namespace Nikse.SubtitleEdit.Logic.Networking
public void SendChatMessage(string message)
{
_seWs.SendMessage(SessionId, WebUtility.HtmlEncode(message.Replace(Environment.NewLine, "<br />")), CurrentUser);
var request = new SeNetworkService.SendMessageRequest
{
SessionId = SessionId,
User = CurrentUser,
Text = WebUtility.HtmlEncode(message.Replace(Environment.NewLine, "<br />"))
};
_seWs.SendMessage(request);
}
internal void UpdateLine(int index, Paragraph paragraph)
{
_seWs.UpdateLine(SessionId, index, new SeNetworkService.SeSequence
var request = new SeNetworkService.UpdateLineRequest
{
StartMilliseconds = (int)paragraph.StartTime.TotalMilliseconds,
EndMilliseconds = (int)paragraph.EndTime.TotalMilliseconds,
Text = WebUtility.HtmlEncode(paragraph.Text.Replace(Environment.NewLine, "<br />"))
}, CurrentUser);
SessionId = SessionId,
User = CurrentUser,
Index = index,
Sequence = new SeNetworkService.SeSequence
{
StartMilliseconds = (int)paragraph.StartTime.TotalMilliseconds,
EndMilliseconds = (int)paragraph.EndTime.TotalMilliseconds,
Text = WebUtility.HtmlEncode(paragraph.Text.Replace(Environment.NewLine, "<br />"))
}
};
_seWs.UpdateLine(request);
AddToWsUserLog(CurrentUser, index, "UPD", true);
}
@ -275,7 +325,8 @@ namespace Nikse.SubtitleEdit.Logic.Networking
{
try
{
_seWs.Leave(SessionId, CurrentUser.UserName);
var request = new SeNetworkService.LeaveRequest { SessionId = SessionId, UserName = CurrentUser.UserName };
_seWs.Leave(request);
}
catch
{
@ -285,7 +336,13 @@ namespace Nikse.SubtitleEdit.Logic.Networking
internal void DeleteLines(List<int> indices)
{
_seWs.DeleteLines(SessionId, indices.ToArray(), CurrentUser);
var request = new SeNetworkService.DeleteLinesRequest
{
SessionId = SessionId,
User = CurrentUser,
Indices = indices
};
_seWs.DeleteLines(request);
foreach (int index in indices)
{
AdjustUpdateLogToDelete(index);
@ -295,7 +352,16 @@ namespace Nikse.SubtitleEdit.Logic.Networking
internal void InsertLine(int index, Paragraph newParagraph)
{
_seWs.InsertLine(SessionId, index, (int)newParagraph.StartTime.TotalMilliseconds, (int)newParagraph.EndTime.TotalMilliseconds, newParagraph.Text, CurrentUser);
var request = new SeNetworkService.InsertLineRequest
{
SessionId = SessionId,
User = CurrentUser,
Index = index,
Text = newParagraph.Text,
StartMilliseconds = (int)newParagraph.StartTime.TotalMilliseconds,
EndMilliseconds = (int)newParagraph.EndTime.TotalMilliseconds
};
_seWs.InsertLine(request);
AppendToLog(string.Format(Configuration.Settings.Language.Main.NetworkInsert, CurrentUser.UserName, CurrentUser.Ip, index, UiUtil.GetListViewTextFromString(newParagraph.Text)));
}
@ -340,7 +406,7 @@ namespace Nikse.SubtitleEdit.Logic.Networking
try
{
System.Threading.Thread.Sleep(200);
StartServer(_seWs.Url, SessionId, _userName, _fileName, out message);
StartServer(_seWs.BaseUrl, SessionId, _userName, _fileName, out message);
retries = maxRetries;
}
catch
@ -367,7 +433,7 @@ namespace Nikse.SubtitleEdit.Logic.Networking
try
{
System.Threading.Thread.Sleep(200);
if (Join(_seWs.Url, _userName, SessionId, out message))
if (Join(_seWs.BaseUrl, _userName, SessionId, out message))
{
message = "Reload";
}
@ -399,11 +465,7 @@ namespace Nikse.SubtitleEdit.Logic.Networking
_timerWebService.Dispose();
_timerWebService = null;
}
if (_seWs != null)
{
_seWs.Dispose();
_seWs = null;
}
_seWs = null;
}
}

View File

@ -0,0 +1,300 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
namespace Nikse.SubtitleEdit.Logic.Networking
{
public class SeNetworkService
{
private static HttpClient _httpClient;
public string BaseUrl { get; private set; }
public SeNetworkService(string baseUrl)
{
if (string.IsNullOrEmpty(baseUrl))
{
throw new ArgumentException("Url cannot be empty");
}
BaseUrl = baseUrl.Trim().TrimEnd('/') + "/";
_httpClient = CreateDefaultHttpClient(BaseUrl);
}
private static HttpClient CreateDefaultHttpClient(string baseUrl)
{
if (!Uri.IsWellFormedUriString(baseUrl, UriKind.Absolute))
{
throw new ArgumentException($"{baseUrl} is not a valid base URL.");
}
var client = new HttpClient { BaseAddress = new Uri(baseUrl) };
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
return client;
}
public T Post<T>(string path, object content = null)
{
var response = SendRequest(HttpMethod.Post, path, content);
return ReadResponse<T>(response);
}
private HttpResponseMessage SendRequest(HttpMethod method, string uri, object content = null)
{
return SendRequestAsync(method, uri, content).Result;
}
public Task<HttpResponseMessage> SendRequestAsync(HttpMethod method, string uri, object content = null)
{
var request = new HttpRequestMessage(method, uri);
if (content != null)
{
request.Content = new StringContent(JsonConvert.SerializeObject(content),
Encoding.UTF8,
"application/json");
}
return _httpClient.SendAsync(request);
}
private static T ReadResponse<T>(HttpResponseMessage response)
{
var settings = new JsonSerializerSettings
{
MaxDepth = 20
};
var jsonResponse = response.Content.ReadAsStringAsync().Result;
return JsonConvert.DeserializeObject<T>(jsonResponse, settings);
}
public class SeSequence
{
public int Index { get; set; }
public int StartMilliseconds { get; set; }
public int EndMilliseconds { get; set; }
public string Text { get; set; }
}
[Serializable]
public class SeUser
{
public string UserName { get; set; }
public string Ip { get; set; }
public DateTime LastActivity { get; set; }
}
public class SeUpdate
{
public DateTime Time { get; set; }
public SeUser User { get; set; }
public int Index { get; set; }
public int StartMilliseconds { get; set; }
public int EndMilliseconds { get; set; }
public string Text { get; set; }
public string Action { get; set; }
public SeUpdate()
{
}
public SeUpdate(SeUser user, int index, int startMilliseconds, int endMilliseconds, string text, string action)
{
User = user;
Index = index;
StartMilliseconds = startMilliseconds;
EndMilliseconds = endMilliseconds;
Text = text;
Action = action;
Time = DateTime.Now;
}
}
public class SeSession
{
public DateTime Started { get; private set; }
public string Id { get; private set; }
public string FileName { get; private set; }
public List<SeSequence> Subtitle { get; private set; }
public List<SeSequence> OriginalSubtitle { get; private set; }
public List<SeUser> Users { get; private set; }
public List<SeUpdate> Updates { get; private set; }
public SeSession(string sessionId, List<SeSequence> subtitle, string fileName, List<SeSequence> originalsubtitle)
{
Started = DateTime.Now;
Id = sessionId;
FileName = fileName;
Subtitle = subtitle;
OriginalSubtitle = originalsubtitle;
Renumber();
Users = new List<SeUser>();
Updates = new List<SeUpdate>();
}
public void Renumber()
{
for (int i = 0; i < Subtitle.Count; i++)
{
Subtitle[0].Index = i;
}
}
}
public class StartRequest
{
public string SessionId { get; set; }
public string UserName { get; set; }
public string FileName { get; set; }
public List<SeSequence> Subtitle { get; set; }
public List<SeSequence> OriginalSubtitle { get; set; }
}
public class StartResponse
{
public SeUser User { get; set; }
public string Message { get; set; }
}
public StartResponse Start(StartRequest request)
{
return Post<StartResponse>("Start", request);
}
public class JoinRequest
{
public string SessionId { get; set; }
public string UserName { get; set; }
}
public class JoinResponse
{
public List<SeUser> Users { get; set; }
public string Message { get; set; }
}
public JoinResponse Join(JoinRequest request)
{
return Post<JoinResponse>("Join", request);
}
public class LeaveRequest
{
public string SessionId { get; set; }
public string UserName { get; set; }
}
public void Leave(LeaveRequest request)
{
Post<JoinResponse>("Leave", request);
}
public class DeleteLinesRequest
{
public string SessionId { get; set; }
public List<int> Indices { get; set; }
public SeUser User { get; set; }
}
public bool DeleteLines(DeleteLinesRequest request)
{
return Post<bool>("DeleteLines", request);
}
public class InsertLineRequest
{
public string SessionId { get; set; }
public int Index { get; set; }
public int StartMilliseconds { get; set; }
public int EndMilliseconds { get; set; }
public string Text { get; set; }
public SeUser User { get; set; }
}
public bool InsertLine(InsertLineRequest request)
{
return Post<bool>("InsertLine", request);
}
public class UpdateLineRequest
{
public string SessionId { get; set; }
public int Index { get; set; }
public SeSequence Sequence { get; set; }
public SeUser User { get; set; }
}
public bool UpdateLine(UpdateLineRequest request)
{
return Post<bool>("UpdateLine", request);
}
public class SendMessageRequest
{
public string SessionId { get; set; }
public string Text { get; set; }
public SeUser User { get; set; }
}
public bool SendMessage(SendMessageRequest request)
{
return Post<bool>("SendMessage", request);
}
public class GetUpdatesRequest
{
public string SessionId { get; set; }
public string UserName { get; set; }
public DateTime LastUpdateTime { get; set; }
}
public class GetUpdatesResponse
{
public List<SeUpdate> Updates { get; set; }
public string Message { get; set; }
public DateTime NewUpdateTime { get; set; }
public int NumberOfLines { get; set; }
}
public GetUpdatesResponse GetUpdates(GetUpdatesRequest request)
{
return Post<GetUpdatesResponse>("GetUpdates", request);
}
public class GetSubtitleRequest
{
public string SessionId { get; set; }
}
public class GetSubtitleResponse
{
public List<SeSequence> Subtitle { get; set; }
public string FileName { get; set; }
public DateTime UpdateTime { get; set; }
}
public GetSubtitleResponse GetSubtitle(GetSubtitleRequest request)
{
return Post<GetSubtitleResponse>("GetSubtitle", request);
}
public class GetOriginalSubtitleRequest
{
public string SessionId { get; set; }
}
public class GetOriginalSubtitleResponse
{
public List<SeSequence> Subtitle { get; set; }
}
public GetOriginalSubtitleResponse GetOriginalSubtitle(GetOriginalSubtitleRequest request)
{
return Post<GetOriginalSubtitleResponse>("GetOriginalSubtitle", request);
}
}
}

View File

@ -12,7 +12,7 @@ namespace Nikse.SubtitleEdit.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.7.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.8.1.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
@ -22,15 +22,5 @@ namespace Nikse.SubtitleEdit.Properties {
return defaultInstance;
}
}
[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"]));
}
}
}
}

View File

@ -1,9 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="Nikse.SubtitleEdit.Properties" GeneratedClassName="Settings">
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles />
<Settings>
<Setting Name="SubtitleEdit_SeNetworkService_SeService" Type="(Web Service URL)" Scope="Application">
<Value Profile="(Default)">http://localhost:2782/se/SeService.asmx</Value>
</Setting>
</Settings>
<Settings />
</SettingsFile>

View File

@ -57,6 +57,9 @@
<HintPath>DLLs\Interop.QuartzTypeLib.dll</HintPath>
<SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\..\packages\Newtonsoft.Json.8.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="NHunspell, Version=1.2.5554.16953, Culture=neutral, PublicKeyToken=1ac793ea843b4366, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>packages\NHunspell.1.2.5554.16953\lib\net\NHunspell.dll</HintPath>
@ -65,6 +68,14 @@
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.EnterpriseServices" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http.Primitives, Version=4.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Primitives.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http.WebRequest" />
<Reference Include="System.Web.Services" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
@ -1054,6 +1065,7 @@
<Compile Include="Logic\CommandLineConvert\TsToBluRaySup.cs" />
<Compile Include="Logic\DarkTheme.cs" />
<Compile Include="Logic\FindReplaceDialogHelper.cs" />
<Compile Include="Logic\Networking\SeNetworkService.cs" />
<Compile Include="Logic\SceneChangesGenerator.cs" />
<Compile Include="Logic\ListViewSorter.cs" />
<Compile Include="Logic\NativeMethods.cs" />
@ -1125,11 +1137,6 @@
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</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>
@ -1648,20 +1655,6 @@
<SubType>Designer</SubType>
</None>
<EmbeddedResource Include="Resources\SMPTE-428-7-2014-DCST.xsd.gz" />
<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>
<EmbeddedResource Include="Controls\WebBrowser\WebBrowserEditBox.html" />
@ -1784,7 +1777,6 @@
<Content Include="Languages\zh-TW.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<None Include="Web References\SeNetworkService\SeService.disco" />
<None Include="DLLs\Interop.QuartzTypeLib.dll" />
<EmbeddedResource Include="Controls\VideoPlayerContainer.resx">
<DependentUpon>VideoPlayerContainer.cs</DependentUpon>
@ -1904,22 +1896,6 @@
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<WebReferences Include="Web References\" />
</ItemGroup>
<ItemGroup>
<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>
<ItemGroup>
<ProjectReference Include="..\libse\LibSE.csproj">
<Project>{3e3cb28f-3a7b-430f-9eb3-0d6c1e53b753}</Project>
@ -1950,6 +1926,11 @@
<Target Name="BeforeClean">
<Delete Files="@(HunspellAssemblies -> '$(OutputPath)%(Identity)')" />
</Target>
<Import Project="..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />
<Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
<Error Condition="!Exists('..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
<Error Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">

View File

@ -1,965 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// 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.42000.
//
#pragma warning disable 1591
namespace Nikse.SubtitleEdit.SeNetworkService {
using System;
using System.Web.Services;
using System.Diagnostics;
using System.Web.Services.Protocols;
using System.Xml.Serialization;
using System.ComponentModel;
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")]
[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, out int numberOfLines) {
object[] results = this.Invoke("GetUpdates", new object[] {
sessionId,
userName,
lastUpdateTime});
message = ((string)(results[1]));
newUpdateTime = ((System.DateTime)(results[2]));
numberOfLines = ((int)(results[3]));
return ((SeUpdate[])(results[0]));
}
/// <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.8.4084.0")]
[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.8.4084.0")]
[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.8.4084.0")]
[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.8.4084.0")]
public delegate void StartCompletedEventHandler(object sender, StartCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")]
[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.8.4084.0")]
public delegate void JoinCompletedEventHandler(object sender, JoinCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")]
[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.8.4084.0")]
public delegate void LeaveCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")]
public delegate void DeleteLinesCompletedEventHandler(object sender, DeleteLinesCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")]
[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.8.4084.0")]
public delegate void InsertLineCompletedEventHandler(object sender, InsertLineCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")]
[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.8.4084.0")]
public delegate void UpdateLineCompletedEventHandler(object sender, UpdateLineCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")]
[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.8.4084.0")]
public delegate void SendMessageCompletedEventHandler(object sender, SendMessageCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")]
[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.8.4084.0")]
public delegate void GetUpdatesCompletedEventHandler(object sender, GetUpdatesCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")]
[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/>
public int numberOfLines {
get {
this.RaiseExceptionIfNecessary();
return ((int)(this.results[3]));
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")]
public delegate void GetSubtitleCompletedEventHandler(object sender, GetSubtitleCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")]
[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.8.4084.0")]
public delegate void GetOriginalSubtitleCompletedEventHandler(object sender, GetOriginalSubtitleCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.8.4084.0")]
[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

View File

@ -1,7 +0,0 @@
<?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>

View File

@ -1,10 +0,0 @@
<?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.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
</GenericObjectDataSource>

View File

@ -1,6 +0,0 @@
<?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>

View File

@ -1,512 +0,0 @@
<?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:element minOccurs="1" maxOccurs="1" name="numberOfLines" type="s:int" />
</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>

View File

@ -1,10 +0,0 @@
<?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.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
</GenericObjectDataSource>

View File

@ -1,10 +0,0 @@
<?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.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
</GenericObjectDataSource>

View File

@ -1,17 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="Nikse.SubtitleEdit.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</sectionGroup>
</configSections>
<applicationSettings>
<Nikse.SubtitleEdit.Properties.Settings>
<setting name="SubtitleEdit_SeNetworkService_SeService" serializeAs="String">
<value>http://localhost:2782/se/SeService.asmx</value>
</setting>
</Nikse.SubtitleEdit.Properties.Settings>
</applicationSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/>
</startup>

View File

@ -1,5 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ILRepack" version="2.0.18" targetFramework="net462" />
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="net462" />
<package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="net462" />
<package id="Microsoft.Net.Http" version="2.2.29" targetFramework="net462" />
<package id="Newtonsoft.Json" version="8.0.3" targetFramework="net462" />
<package id="NHunspell" version="1.2.5554.16953" targetFramework="net462" />
</packages>