commit
45b7d8cbee
|
@ -170,7 +170,9 @@ namespace Emby.Server.Implementations.Data
|
||||||
|
|
||||||
createMediaStreamsTableCommand,
|
createMediaStreamsTableCommand,
|
||||||
|
|
||||||
"create index if not exists idx_mediastreams1 on mediastreams(ItemId)"
|
"create index if not exists idx_mediastreams1 on mediastreams(ItemId)",
|
||||||
|
|
||||||
|
"pragma shrink_memory"
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -3591,6 +3593,15 @@ namespace Emby.Server.Implementations.Data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(query.ExternalId))
|
||||||
|
{
|
||||||
|
whereClauses.Add("ExternalId=@ExternalId");
|
||||||
|
if (statement != null)
|
||||||
|
{
|
||||||
|
statement.TryBind("@ExternalId", query.ExternalId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(query.Name))
|
if (!string.IsNullOrWhiteSpace(query.Name))
|
||||||
{
|
{
|
||||||
whereClauses.Add("CleanName=@Name");
|
whereClauses.Add("CleanName=@Name");
|
||||||
|
|
|
@ -414,9 +414,9 @@ namespace Emby.Server.Implementations.HttpServer
|
||||||
httpRes.StatusCode = 200;
|
httpRes.StatusCode = 200;
|
||||||
httpRes.AddHeader("Access-Control-Allow-Origin", "*");
|
httpRes.AddHeader("Access-Control-Allow-Origin", "*");
|
||||||
httpRes.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, PATCH, OPTIONS");
|
httpRes.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, PATCH, OPTIONS");
|
||||||
httpRes.AddHeader("Access-Control-Allow-Headers",
|
httpRes.AddHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, Range, X-MediaBrowser-Token, X-Emby-Authorization");
|
||||||
"Content-Type, Authorization, Range, X-MediaBrowser-Token, X-Emby-Authorization");
|
httpRes.ContentType = "text/plain";
|
||||||
httpRes.ContentType = "text/html";
|
Write(httpRes, string.Empty);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1601,6 +1601,14 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
var program = string.IsNullOrWhiteSpace(timer.ProgramId) ? null : _libraryManager.GetItemList(new InternalItemsQuery
|
||||||
|
{
|
||||||
|
IncludeItemTypes = new[] { typeof(LiveTvProgram).Name },
|
||||||
|
Limit = 1,
|
||||||
|
ExternalId = timer.ProgramId
|
||||||
|
|
||||||
|
}).FirstOrDefault();
|
||||||
|
|
||||||
if (timer.IsSports)
|
if (timer.IsSports)
|
||||||
{
|
{
|
||||||
AddGenre(timer.Genres, "Sports");
|
AddGenre(timer.Genres, "Sports");
|
||||||
|
@ -1615,14 +1623,37 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
|
||||||
AddGenre(timer.Genres, "News");
|
AddGenre(timer.Genres, "News");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// dummy this up
|
||||||
|
if (program == null)
|
||||||
|
{
|
||||||
|
program = new LiveTvProgram
|
||||||
|
{
|
||||||
|
Name = timer.Name,
|
||||||
|
HomePageUrl = timer.HomePageUrl,
|
||||||
|
ShortOverview = timer.ShortOverview,
|
||||||
|
Overview = timer.Overview,
|
||||||
|
Genres = timer.Genres,
|
||||||
|
CommunityRating = timer.CommunityRating,
|
||||||
|
OfficialRating = timer.OfficialRating,
|
||||||
|
ProductionYear = timer.ProductionYear,
|
||||||
|
PremiereDate = timer.OriginalAirDate,
|
||||||
|
IndexNumber = timer.EpisodeNumber,
|
||||||
|
ParentIndexNumber = timer.SeasonNumber
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
if (timer.IsProgramSeries)
|
if (timer.IsProgramSeries)
|
||||||
{
|
{
|
||||||
SaveSeriesNfo(timer, recordingPath, seriesPath);
|
SaveSeriesNfo(timer, seriesPath);
|
||||||
SaveVideoNfo(timer, recordingPath, false);
|
SaveVideoNfo(timer, recordingPath, program, false);
|
||||||
}
|
}
|
||||||
else if (!timer.IsMovie || timer.IsSports || timer.IsNews)
|
else if (!timer.IsMovie || timer.IsSports || timer.IsNews)
|
||||||
{
|
{
|
||||||
SaveVideoNfo(timer, recordingPath, true);
|
SaveVideoNfo(timer, recordingPath, program, true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SaveVideoNfo(timer, recordingPath, program, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -1631,7 +1662,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SaveSeriesNfo(TimerInfo timer, string recordingPath, string seriesPath)
|
private void SaveSeriesNfo(TimerInfo timer, string seriesPath)
|
||||||
{
|
{
|
||||||
var nfoPath = Path.Combine(seriesPath, "tvshow.nfo");
|
var nfoPath = Path.Combine(seriesPath, "tvshow.nfo");
|
||||||
|
|
||||||
|
@ -1676,7 +1707,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
|
||||||
}
|
}
|
||||||
|
|
||||||
public const string DateAddedFormat = "yyyy-MM-dd HH:mm:ss";
|
public const string DateAddedFormat = "yyyy-MM-dd HH:mm:ss";
|
||||||
private void SaveVideoNfo(TimerInfo timer, string recordingPath, bool lockData)
|
private void SaveVideoNfo(TimerInfo timer, string recordingPath, BaseItem item, bool lockData)
|
||||||
{
|
{
|
||||||
var nfoPath = Path.ChangeExtension(recordingPath, ".nfo");
|
var nfoPath = Path.ChangeExtension(recordingPath, ".nfo");
|
||||||
|
|
||||||
|
@ -1694,6 +1725,8 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
|
||||||
CloseOutput = false
|
CloseOutput = false
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var options = _config.GetNfoConfiguration();
|
||||||
|
|
||||||
using (XmlWriter writer = XmlWriter.Create(stream, settings))
|
using (XmlWriter writer = XmlWriter.Create(stream, settings))
|
||||||
{
|
{
|
||||||
writer.WriteStartDocument(true);
|
writer.WriteStartDocument(true);
|
||||||
|
@ -1707,45 +1740,64 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
|
||||||
writer.WriteElementString("title", timer.EpisodeTitle);
|
writer.WriteElementString("title", timer.EpisodeTitle);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (timer.OriginalAirDate.HasValue)
|
if (item.PremiereDate.HasValue)
|
||||||
{
|
{
|
||||||
var formatString = _config.GetNfoConfiguration().ReleaseDateFormat;
|
var formatString = options.ReleaseDateFormat;
|
||||||
|
|
||||||
writer.WriteElementString("aired", timer.OriginalAirDate.Value.ToLocalTime().ToString(formatString));
|
writer.WriteElementString("aired", item.PremiereDate.Value.ToLocalTime().ToString(formatString));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (timer.EpisodeNumber.HasValue)
|
if (item.IndexNumber.HasValue)
|
||||||
{
|
{
|
||||||
writer.WriteElementString("episode", timer.EpisodeNumber.Value.ToString(CultureInfo.InvariantCulture));
|
writer.WriteElementString("episode", item.IndexNumber.Value.ToString(CultureInfo.InvariantCulture));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (timer.SeasonNumber.HasValue)
|
if (item.ParentIndexNumber.HasValue)
|
||||||
{
|
{
|
||||||
writer.WriteElementString("season", timer.SeasonNumber.Value.ToString(CultureInfo.InvariantCulture));
|
writer.WriteElementString("season", item.ParentIndexNumber.Value.ToString(CultureInfo.InvariantCulture));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
writer.WriteStartElement("movie");
|
writer.WriteStartElement("movie");
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(timer.Name))
|
if (!string.IsNullOrWhiteSpace(item.Name))
|
||||||
{
|
{
|
||||||
writer.WriteElementString("title", timer.Name);
|
writer.WriteElementString("title", item.Name);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(item.OriginalTitle))
|
||||||
|
{
|
||||||
|
writer.WriteElementString("originaltitle", item.OriginalTitle);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.PremiereDate.HasValue)
|
||||||
|
{
|
||||||
|
var formatString = options.ReleaseDateFormat;
|
||||||
|
|
||||||
|
writer.WriteElementString("premiered", item.PremiereDate.Value.ToLocalTime().ToString(formatString));
|
||||||
|
writer.WriteElementString("releasedate", item.PremiereDate.Value.ToLocalTime().ToString(formatString));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
writer.WriteElementString("dateadded", DateTime.UtcNow.ToLocalTime().ToString(DateAddedFormat));
|
writer.WriteElementString("dateadded", DateTime.UtcNow.ToLocalTime().ToString(DateAddedFormat));
|
||||||
|
|
||||||
if (timer.ProductionYear.HasValue)
|
if (item.ProductionYear.HasValue)
|
||||||
{
|
{
|
||||||
writer.WriteElementString("year", timer.ProductionYear.Value.ToString(CultureInfo.InvariantCulture));
|
writer.WriteElementString("year", item.ProductionYear.Value.ToString(CultureInfo.InvariantCulture));
|
||||||
}
|
|
||||||
if (!string.IsNullOrEmpty(timer.OfficialRating))
|
|
||||||
{
|
|
||||||
writer.WriteElementString("mpaa", timer.OfficialRating);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var overview = (timer.Overview ?? string.Empty)
|
if (!string.IsNullOrEmpty(item.OfficialRating))
|
||||||
|
{
|
||||||
|
writer.WriteElementString("mpaa", item.OfficialRating);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(item.OfficialRatingDescription))
|
||||||
|
{
|
||||||
|
writer.WriteElementString("mpaadescription", item.OfficialRatingDescription);
|
||||||
|
}
|
||||||
|
|
||||||
|
var overview = (item.Overview ?? string.Empty)
|
||||||
.StripHtml()
|
.StripHtml()
|
||||||
.Replace(""", "'");
|
.Replace(""", "'");
|
||||||
|
|
||||||
|
@ -1756,24 +1808,116 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
|
||||||
writer.WriteElementString("lockdata", true.ToString().ToLower());
|
writer.WriteElementString("lockdata", true.ToString().ToLower());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (timer.CommunityRating.HasValue)
|
if (item.CommunityRating.HasValue)
|
||||||
{
|
{
|
||||||
writer.WriteElementString("rating", timer.CommunityRating.Value.ToString(CultureInfo.InvariantCulture));
|
writer.WriteElementString("rating", item.CommunityRating.Value.ToString(CultureInfo.InvariantCulture));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var genre in timer.Genres)
|
foreach (var genre in item.Genres)
|
||||||
{
|
{
|
||||||
writer.WriteElementString("genre", genre);
|
writer.WriteElementString("genre", genre);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(timer.ShortOverview))
|
if (!string.IsNullOrWhiteSpace(item.ShortOverview))
|
||||||
{
|
{
|
||||||
writer.WriteElementString("outline", timer.ShortOverview);
|
writer.WriteElementString("outline", item.ShortOverview);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(timer.HomePageUrl))
|
if (!string.IsNullOrWhiteSpace(item.HomePageUrl))
|
||||||
{
|
{
|
||||||
writer.WriteElementString("website", timer.HomePageUrl);
|
writer.WriteElementString("website", item.HomePageUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
var people = item.Id == Guid.Empty ? new List<PersonInfo>() : _libraryManager.GetPeople(item);
|
||||||
|
|
||||||
|
var directors = people
|
||||||
|
.Where(i => IsPersonType(i, PersonType.Director))
|
||||||
|
.Select(i => i.Name)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
foreach (var person in directors)
|
||||||
|
{
|
||||||
|
writer.WriteElementString("director", person);
|
||||||
|
}
|
||||||
|
|
||||||
|
var writers = people
|
||||||
|
.Where(i => IsPersonType(i, PersonType.Writer))
|
||||||
|
.Select(i => i.Name)
|
||||||
|
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
foreach (var person in writers)
|
||||||
|
{
|
||||||
|
writer.WriteElementString("writer", person);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var person in writers)
|
||||||
|
{
|
||||||
|
writer.WriteElementString("credits", person);
|
||||||
|
}
|
||||||
|
|
||||||
|
var rt = item.GetProviderId(MetadataProviders.RottenTomatoes);
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(rt))
|
||||||
|
{
|
||||||
|
writer.WriteElementString("rottentomatoesid", rt);
|
||||||
|
}
|
||||||
|
|
||||||
|
var tmdbCollection = item.GetProviderId(MetadataProviders.TmdbCollection);
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(tmdbCollection))
|
||||||
|
{
|
||||||
|
writer.WriteElementString("collectionnumber", tmdbCollection);
|
||||||
|
}
|
||||||
|
|
||||||
|
var imdb = item.GetProviderId(MetadataProviders.Imdb);
|
||||||
|
if (!string.IsNullOrEmpty(imdb))
|
||||||
|
{
|
||||||
|
if (item is Series)
|
||||||
|
{
|
||||||
|
writer.WriteElementString("imdb_id", imdb);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
writer.WriteElementString("imdbid", imdb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var tvdb = item.GetProviderId(MetadataProviders.Tvdb);
|
||||||
|
if (!string.IsNullOrEmpty(tvdb))
|
||||||
|
{
|
||||||
|
writer.WriteElementString("tvdbid", tvdb);
|
||||||
|
}
|
||||||
|
|
||||||
|
var tmdb = item.GetProviderId(MetadataProviders.Tmdb);
|
||||||
|
if (!string.IsNullOrEmpty(tmdb))
|
||||||
|
{
|
||||||
|
writer.WriteElementString("tmdbid", tmdb);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.CriticRating.HasValue)
|
||||||
|
{
|
||||||
|
writer.WriteElementString("criticrating", item.CriticRating.Value.ToString(CultureInfo.InvariantCulture));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(item.CriticRatingSummary))
|
||||||
|
{
|
||||||
|
writer.WriteElementString("criticratingsummary", item.CriticRatingSummary);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(item.Tagline))
|
||||||
|
{
|
||||||
|
writer.WriteElementString("tagline", item.Tagline);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var studio in item.Studios)
|
||||||
|
{
|
||||||
|
writer.WriteElementString("studio", studio);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.VoteCount.HasValue)
|
||||||
|
{
|
||||||
|
writer.WriteElementString("votes", item.VoteCount.Value.ToString(CultureInfo.InvariantCulture));
|
||||||
}
|
}
|
||||||
|
|
||||||
writer.WriteEndElement();
|
writer.WriteEndElement();
|
||||||
|
@ -1782,6 +1926,11 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static bool IsPersonType(PersonInfo person, string type)
|
||||||
|
{
|
||||||
|
return string.Equals(person.Type, type, StringComparison.OrdinalIgnoreCase) || string.Equals(person.Role, type, StringComparison.OrdinalIgnoreCase);
|
||||||
|
}
|
||||||
|
|
||||||
private void AddGenre(List<string> genres, string genre)
|
private void AddGenre(List<string> genres, string genre)
|
||||||
{
|
{
|
||||||
if (!genres.Contains(genre, StringComparer.OrdinalIgnoreCase))
|
if (!genres.Contains(genre, StringComparer.OrdinalIgnoreCase))
|
||||||
|
|
|
@ -229,7 +229,6 @@ namespace Emby.Server.Implementations.Sync
|
||||||
commandText = "update SyncJobs set TargetId=?,Name=?,Profile=?,Quality=?,Bitrate=?,Status=?,Progress=?,UserId=?,ItemIds=?,Category=?,ParentId=?,UnwatchedOnly=?,ItemLimit=?,SyncNewContent=?,DateCreated=?,DateLastModified=?,ItemCount=? where Id=?";
|
commandText = "update SyncJobs set TargetId=?,Name=?,Profile=?,Quality=?,Bitrate=?,Status=?,Progress=?,UserId=?,ItemIds=?,Category=?,ParentId=?,UnwatchedOnly=?,ItemLimit=?,SyncNewContent=?,DateCreated=?,DateLastModified=?,ItemCount=? where Id=?";
|
||||||
}
|
}
|
||||||
|
|
||||||
paramList.Add(job.Id.ToGuidParamValue());
|
|
||||||
paramList.Add(job.TargetId);
|
paramList.Add(job.TargetId);
|
||||||
paramList.Add(job.Name);
|
paramList.Add(job.Name);
|
||||||
paramList.Add(job.Profile);
|
paramList.Add(job.Profile);
|
||||||
|
@ -249,6 +248,15 @@ namespace Emby.Server.Implementations.Sync
|
||||||
paramList.Add(job.DateLastModified.ToDateTimeParamValue());
|
paramList.Add(job.DateLastModified.ToDateTimeParamValue());
|
||||||
paramList.Add(job.ItemCount);
|
paramList.Add(job.ItemCount);
|
||||||
|
|
||||||
|
if (insert)
|
||||||
|
{
|
||||||
|
paramList.Insert(0, job.Id.ToGuidParamValue());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
paramList.Add(job.Id.ToGuidParamValue());
|
||||||
|
}
|
||||||
|
|
||||||
connection.RunInTransaction(conn =>
|
connection.RunInTransaction(conn =>
|
||||||
{
|
{
|
||||||
conn.Execute(commandText, paramList.ToArray());
|
conn.Execute(commandText, paramList.ToArray());
|
||||||
|
@ -698,7 +706,6 @@ namespace Emby.Server.Implementations.Sync
|
||||||
}
|
}
|
||||||
|
|
||||||
var paramList = new List<object>();
|
var paramList = new List<object>();
|
||||||
paramList.Add(jobItem.Id.ToGuidParamValue());
|
|
||||||
paramList.Add(jobItem.ItemId);
|
paramList.Add(jobItem.ItemId);
|
||||||
paramList.Add(jobItem.ItemName);
|
paramList.Add(jobItem.ItemName);
|
||||||
paramList.Add(jobItem.MediaSourceId);
|
paramList.Add(jobItem.MediaSourceId);
|
||||||
|
@ -716,6 +723,15 @@ namespace Emby.Server.Implementations.Sync
|
||||||
paramList.Add(jobItem.JobItemIndex);
|
paramList.Add(jobItem.JobItemIndex);
|
||||||
paramList.Add(jobItem.ItemDateModifiedTicks);
|
paramList.Add(jobItem.ItemDateModifiedTicks);
|
||||||
|
|
||||||
|
if (insert)
|
||||||
|
{
|
||||||
|
paramList.Insert(0, jobItem.Id.ToGuidParamValue());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
paramList.Add(jobItem.Id.ToGuidParamValue());
|
||||||
|
}
|
||||||
|
|
||||||
connection.RunInTransaction(conn =>
|
connection.RunInTransaction(conn =>
|
||||||
{
|
{
|
||||||
conn.Execute(commandText, paramList.ToArray());
|
conn.Execute(commandText, paramList.ToArray());
|
||||||
|
|
|
@ -679,6 +679,8 @@ namespace MediaBrowser.Api.Library
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="request">The request.</param>
|
/// <param name="request">The request.</param>
|
||||||
public void Post(RefreshLibrary request)
|
public void Post(RefreshLibrary request)
|
||||||
|
{
|
||||||
|
Task.Run(() =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -688,6 +690,7 @@ namespace MediaBrowser.Api.Library
|
||||||
{
|
{
|
||||||
Logger.ErrorException("Error refreshing library", ex);
|
Logger.ErrorException("Error refreshing library", ex);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -141,6 +141,7 @@ namespace MediaBrowser.Controller.Entities
|
||||||
public SeriesStatus[] SeriesStatuses { get; set; }
|
public SeriesStatus[] SeriesStatuses { get; set; }
|
||||||
public string AlbumArtistStartsWithOrGreater { get; set; }
|
public string AlbumArtistStartsWithOrGreater { get; set; }
|
||||||
public string ExternalSeriesId { get; set; }
|
public string ExternalSeriesId { get; set; }
|
||||||
|
public string ExternalId { get; set; }
|
||||||
|
|
||||||
public string[] AlbumNames { get; set; }
|
public string[] AlbumNames { get; set; }
|
||||||
public string[] ArtistNames { get; set; }
|
public string[] ArtistNames { get; set; }
|
||||||
|
|
|
@ -107,28 +107,6 @@ namespace MediaBrowser.Server.Mac
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void LaunchUrl(string url)
|
|
||||||
{
|
|
||||||
var process = new Process
|
|
||||||
{
|
|
||||||
StartInfo = new ProcessStartInfo
|
|
||||||
{
|
|
||||||
FileName = url
|
|
||||||
},
|
|
||||||
|
|
||||||
EnableRaisingEvents = true,
|
|
||||||
};
|
|
||||||
|
|
||||||
process.Exited += ProcessExited;
|
|
||||||
|
|
||||||
process.Start();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void ProcessExited(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
((Process)sender).Dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void EnableLoopbackInternal(string appName)
|
protected override void EnableLoopbackInternal(string appName)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user