diff --git a/AMSExplorer/AMSClient/AMSClientV3.cs b/AMSExplorer/AMSClient/AMSClientV3.cs index 29b19dc7..ff7facfd 100644 --- a/AMSExplorer/AMSClient/AMSClientV3.cs +++ b/AMSExplorer/AMSClient/AMSClientV3.cs @@ -18,6 +18,7 @@ using Azure.ResourceManager; using Azure.ResourceManager.Media; using Microsoft.Identity.Client; +using Microsoft.Identity.Client.Desktop; using Microsoft.Rest; using System; using System.Diagnostics; @@ -62,8 +63,8 @@ public AMSClientV3(AzureEnvironment myEnvironment, string azureSubscriptionId, C //.WithAuthority(AzureCloudInstance.AzurePublic, credentialsEntry.AadTenantId) .WithAuthority(environment.AADSettings.AuthenticationEndpoint + string.Format("{0}", credentialsEntry.AadTenantId ?? "organizations")) .WithDefaultRedirectUri() - //.WithRedirectUri("http://localhost") - .WithBroker(true) + //.WithRedirectUri("http://localhost") + .WithWindowsDesktopFeatures(new BrokerOptions(BrokerOptions.OperatingSystems.Windows)) .Build(); } else // SP @@ -180,7 +181,7 @@ public async Task ConnectAndGetNewClientV3Async(Fo if (firstTimeAuth && connectToMKIO) { - // form for MK/IO + // form for MK.IO MKIOConnection mkioConnectionForm = new(credentialsEntry.MKIOSubscriptionName, credentialsEntry.MKIOClearToken); if (mkioConnectionForm.ShowDialog() == DialogResult.OK) diff --git a/AMSExplorer/AMSExplorer.csproj b/AMSExplorer/AMSExplorer.csproj index 5b20799c..24621003 100644 --- a/AMSExplorer/AMSExplorer.csproj +++ b/AMSExplorer/AMSExplorer.csproj @@ -7,13 +7,13 @@ SystemAware true AMSExplorer.Program - 5.8.0.0 + 5.8.2.0 Azure Explorer_ico.ico Copyright © 2023 $(Authors)Microsoft - 5.8.1.0 - 5.8.1.0 + 5.8.2.0 + 5.8.2.0 Properties Azure Explorer.png @@ -90,24 +90,25 @@ - - + + - - - + + + - + + - - - + + + diff --git a/AMSExplorer/AssetInformation.Designer.cs b/AMSExplorer/AssetInformation.Designer.cs index 3a151203..3948dc39 100644 --- a/AMSExplorer/AssetInformation.Designer.cs +++ b/AMSExplorer/AssetInformation.Designer.cs @@ -951,7 +951,7 @@ private void InitializeComponent() // pictureBoxMKIO // resources.ApplyResources(pictureBoxMKIO, "pictureBoxMKIO"); - pictureBoxMKIO.Image = Bitmaps.mk_io_blue; + pictureBoxMKIO.Image = Bitmaps.MKIO_Default; pictureBoxMKIO.Name = "pictureBoxMKIO"; pictureBoxMKIO.TabStop = false; // diff --git a/AMSExplorer/AssetInformation.cs b/AMSExplorer/AssetInformation.cs index ed38f4a3..1915993a 100644 --- a/AMSExplorer/AssetInformation.cs +++ b/AMSExplorer/AssetInformation.cs @@ -60,7 +60,7 @@ public partial class AssetInformation : Form private string _serverManifestName = null; private AmsClientRest _restClient; private MKIOClient _MKIOclient; - private List _MKIOStreamingEndpointList; + private IEnumerable _MKIOStreamingEndpointList; private AssetSchema _mkioasset = null; public AssetInformation(Mainform mainform, AMSClientV3 amsClient, MediaAssetResource asset, IEnumerable streamingEndpoints, MKIOClient MKIOclient = null) @@ -672,7 +672,7 @@ private async Task BuildLocatorsTreeAsync() string locatorstatus = string.Empty; Color colornode = GetLocatorApparence(locator, ref locatorstatus); - if (SelectedSE.Data.ResourceState != StreamingEndpointResourceState.Running) + if (SelectedSE.Data.ResourceState != Azure.ResourceManager.Media.Models.StreamingEndpointResourceState.Running) { colornode = Color.Red; } @@ -2286,7 +2286,7 @@ private async Task GetDRMTestTokenAsync() List claims = new(); - foreach (ContentKeyPolicyTokenClaim claim in ckrestriction.RequiredClaims) + foreach (Azure.ResourceManager.Media.Models.ContentKeyPolicyTokenClaim claim in ckrestriction.RequiredClaims) { if (claim.ClaimType == "urn:microsoft:azure:mediaservices:contentkeyidentifier") { @@ -2798,10 +2798,10 @@ private async Task DisplayMKIOAssetInfoAsync() DGMKIOInfo.Rows.Clear(); - DGMKIOInfo.Rows.Add("MK/IO Name", _mkioasset.Name); - DGMKIOInfo.Rows.Add("MK/IO Description", _mkioasset.Properties.Description); + DGMKIOInfo.Rows.Add("MK.IO Name", _mkioasset.Name); + DGMKIOInfo.Rows.Add("MK.IO Description", _mkioasset.Properties.Description); - // fill the combo with list of MK/IO streaming endpoints + // fill the combo with list of MK.IO streaming endpoints _MKIOStreamingEndpointList = await _MKIOclient.StreamingEndpoints.ListAsync(); comboBoxSEMKIO.Items.Clear(); foreach (var se in _MKIOStreamingEndpointList) @@ -2817,7 +2817,7 @@ private async Task DisplayMKIOAssetInfoAsync() } /// - /// Build the treeview of locators for MK/IO + /// Build the treeview of locators for MK.IO /// /// private async Task BuildMKIOLocatorsTreeAsync(AssetSchema mkioasset) @@ -2871,7 +2871,7 @@ private async Task BuildMKIOLocatorsTreeAsync(AssetSchema mkioasset) string locatorstatus = string.Empty; Color colornode = Color.Black; - if (SelectedSE.Properties.ResourceState != StreamingEndpointResourceState.Running) + if (SelectedSE.Properties.ResourceState != MK.IO.Models.StreamingEndpointResourceState.Running) { colornode = Color.Red; } @@ -2884,7 +2884,7 @@ private async Task BuildMKIOLocatorsTreeAsync(AssetSchema mkioasset) TreeViewLocatorsMKIO.Nodes.Add(myLocNode); TreeViewLocatorsMKIO.Nodes[indexloc].Nodes.Add(new TreeNode(AMSExplorer.Properties.Resources.AssetInformation_BuildLocatorsTree_LocatorInformation)); - LocTreeAddTextEntryToNode(TreeViewLocatorsMKIO, indexloc, 0, "Streaming locator Id: {0}", locator.Properties.StreamingLocatorId); + LocTreeAddTextEntryToNode(TreeViewLocatorsMKIO, indexloc, 0, "Streaming locator Id: {0}", locator.Properties.StreamingLocatorId.ToString()); LocTreeAddTextEntryToNode(TreeViewLocatorsMKIO, indexloc, 0, AMSExplorer.Properties.Resources.AssetInformation_BuildLocatorsTree_Name0, locator.Name); LocTreeAddTextEntryToNode(TreeViewLocatorsMKIO, indexloc, 0, "Streaming policy name: {0}", locator.Properties.StreamingPolicyName); LocTreeAddTextEntryToNode(TreeViewLocatorsMKIO, indexloc, 0, "Default content key policy name: {0}", locator.Properties.DefaultContentKeyPolicyName); @@ -2908,11 +2908,11 @@ private async Task BuildMKIOLocatorsTreeAsync(AssetSchema mkioasset) foreach (string p in path.Paths) { appendExtension = string.Empty; - if (path.StreamingProtocol == StreamingPolicyStreamingProtocol.Dash && !p.EndsWith(Constants.mpd)) + if (path.StreamingProtocol == StreamingPathsStreamingProtocol.Dash && !p.EndsWith(Constants.mpd)) { appendExtension = Constants.mpd; } - else if (path.StreamingProtocol == StreamingPolicyStreamingProtocol.Hls && !p.EndsWith(Constants.m3u8)) + else if (path.StreamingProtocol == StreamingPathsStreamingProtocol.Hls && !p.EndsWith(Constants.m3u8)) { appendExtension = Constants.m3u8; } diff --git a/AMSExplorer/AssetInformation.resx b/AMSExplorer/AssetInformation.resx index bc52a148..04561985 100644 --- a/AMSExplorer/AssetInformation.resx +++ b/AMSExplorer/AssetInformation.resx @@ -2510,7 +2510,7 @@ 7 - MK/IO + MK.IO tabPageMKIO diff --git a/AMSExplorer/Bitmaps.Designer.cs b/AMSExplorer/Bitmaps.Designer.cs index 658f622d..8c7e695c 100644 --- a/AMSExplorer/Bitmaps.Designer.cs +++ b/AMSExplorer/Bitmaps.Designer.cs @@ -563,9 +563,9 @@ internal static System.Drawing.Bitmap media_stabilizer { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - internal static System.Drawing.Bitmap mk_io_blue { + internal static System.Drawing.Bitmap MKIO_Default { get { - object obj = ResourceManager.GetObject("mk_io_blue", resourceCulture); + object obj = ResourceManager.GetObject("MKIO_Default", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } diff --git a/AMSExplorer/Bitmaps.resx b/AMSExplorer/Bitmaps.resx index 792f115b..83d75f60 100644 --- a/AMSExplorer/Bitmaps.resx +++ b/AMSExplorer/Bitmaps.resx @@ -352,7 +352,7 @@ IconsPNG\passthrough_std.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - BitmapsPNG\mk-io-blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + BitmapsPNG\MKIO Default.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/AMSExplorer/BitmapsPNG/MKIO Default.png b/AMSExplorer/BitmapsPNG/MKIO Default.png new file mode 100644 index 00000000..5c499a25 Binary files /dev/null and b/AMSExplorer/BitmapsPNG/MKIO Default.png differ diff --git a/AMSExplorer/BitmapsPNG/mk-io-blue.png b/AMSExplorer/BitmapsPNG/mk-io-blue.png deleted file mode 100644 index e7993a24..00000000 Binary files a/AMSExplorer/BitmapsPNG/mk-io-blue.png and /dev/null differ diff --git a/AMSExplorer/Constants.cs b/AMSExplorer/Constants.cs index 78ac6270..a65605d0 100644 --- a/AMSExplorer/Constants.cs +++ b/AMSExplorer/Constants.cs @@ -25,7 +25,7 @@ public static class Constants public const string Webview2Installer = "https://go.microsoft.com/fwlink/p/?LinkId=2124703"; public const string Webview2RegPath64 = "SOFTWARE\\WOW6432Node\\Microsoft\\EdgeUpdate\\Clients\\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}"; public const string Webview2RegPath32 = "SOFTWARE\\Microsoft\\EdgeUpdate\\Clients\\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}"; - public const string Webview2MinVersion = "119.0.2151.40"; + public const string Webview2MinVersion = "125.0.2535.41"; public const string GitHubAMSEVersionPrimaryV3 = "https://raw.githubusercontent.com/Azure/Azure-Media-Services-Explorer/main/versionv3.json"; public const string GitHubAMSEVersionSecondaryV3 = "https://amsexplorer.azureedge.net/release/versionv3.json"; @@ -92,8 +92,8 @@ public static class Constants public const string DemoCaptionMaker = @"https://testdrive-archive.azurewebsites.net/Graphics/CaptionMaker/Default.html"; - public const string MKIOPortal = @"https://io.mediakind.com"; - public const string MKIOApp = @"https://app.io.mediakind.com/"; + public const string MKIOWebSite = @"https://www.mk.io"; + public const string MKIOPortal = @"https://app.mk.io/"; public const string LinkFeedbackAMS = "https://aka.ms/amsvoice"; @@ -144,8 +144,8 @@ public static class Constants public const string LinkAMSManagedIdentities = "https://learn.microsoft.com/en-us/azure/media-services/latest/concept-managed-identities"; public const string LinkAMSCustomerManagedKeys = "https://learn.microsoft.com/en-us/azure/media-services/latest/concept-use-customer-managed-keys-byok"; - public const string LinkMKIOPortal = "https://io.mediakind.com"; - public const string LinkMKIOMigrationDoc = "https://docs.io.mediakind.com/docs/migrating-from-ams"; + public const string LinkMKIOPortal = "https://app.mk.io"; + public const string LinkMKIOMigrationDoc = "https://docs.mk.io/docs/migrating-from-ams"; public const string LinkAMSE = "https://aka.ms/amse"; public const string LinkMailtoAMSE = "mailto:amse@microsoft.com?subject=Azure Media Services Explorer - Question/Comment"; diff --git a/AMSExplorer/DataGrid/DataGridViewAssets.cs b/AMSExplorer/DataGrid/DataGridViewAssets.cs index 49caeeff..a1a1670f 100644 --- a/AMSExplorer/DataGrid/DataGridViewAssets.cs +++ b/AMSExplorer/DataGrid/DataGridViewAssets.cs @@ -100,7 +100,7 @@ public TimeRangeValue TimeFilterTimeRange } public int? DisplayedCount => _MyObservAssetV3 != null ? _MyObservAssetV3.Count : null; - public List ListMKIOAssets; + public IEnumerable ListMKIOAssets; public void Init(AMSClientV3 client, SynchronizationContext syncontext, bool enableMKIOInfo) { @@ -175,7 +175,7 @@ public void Init(AMSClientV3 client, SynchronizationContext syncontext, bool ena Columns["AlternateId"].Visible = Properties.Settings.Default.DisplayAssetAltIDinGrid; Columns["StorageAccountName"].Visible = Properties.Settings.Default.DisplayAssetStorageinGrid; Columns["StorageAccountName"].HeaderText = "Storage account"; - Columns["MKIOMigrated"].HeaderText = "In MK/IO"; + Columns["MKIOMigrated"].HeaderText = "In MK.IO"; Columns["MKIOMigrated"].Visible = enableMKIOInfo; Columns["SizeLong"].Visible = false; Columns["LastModifiedOn"].Visible = false; diff --git a/AMSExplorer/ExportToExcel.cs b/AMSExplorer/ExportToExcel.cs index 2afa0aa9..a4b0c587 100644 --- a/AMSExplorer/ExportToExcel.cs +++ b/AMSExplorer/ExportToExcel.cs @@ -321,13 +321,13 @@ private async Task Excel_DoWorkAsync(CancellationToken cancellationToken) Row rowAMSENote = CreateNewRow(AMSENote); - // MK/IO + // MK.IO var allMKIOAssets = new List(); if (_mkioClient != null) { // list assets with pages - var mkioAssetsResult = await _mkioClient.Assets.ListAsPageAsync(null, 20); + var mkioAssetsResult = await _mkioClient.Assets.ListAsPageAsync(top : 20); while (true) { // do stuff here using mkioAssetsResult.Results @@ -427,7 +427,7 @@ private async Task Excel_DoWorkAsync(CancellationToken cancellationToken) listHeader.Add("Streaming locators count"); if (_mkioClient != null) { - listHeader.Add("In MK/IO"); + listHeader.Add("In MK.IO"); } if (detailed) @@ -709,13 +709,13 @@ private async Task CSV_DoWorkAsync(CancellationToken cancellationToken) var streamingEndpoints = _amsClient.AMSclient.GetStreamingEndpoints().GetAllAsync().ToListAsync(); var selist = streamingEndpoints.Result; - // MK/IO + // MK.IO var allMKIOAssets = new List(); if (_mkioClient != null) { // list assets with pages - var mkioAssetsResult = _mkioClient.Assets.ListAsPage(null, 20); + var mkioAssetsResult = _mkioClient.Assets.ListAsPage(top: 20); while (true) { // do stuff here using mkioAssetsResult.Results @@ -820,7 +820,7 @@ private async Task CSV_DoWorkAsync(CancellationToken cancellationToken) if (_mkioClient != null) { - linec.Add("In MK/IO"); + linec.Add("In MK.IO"); } if (detailed) diff --git a/AMSExplorer/ExportToExcel.resx b/AMSExplorer/ExportToExcel.resx index ae5ae874..6eb4df50 100644 --- a/AMSExplorer/ExportToExcel.resx +++ b/AMSExplorer/ExportToExcel.resx @@ -238,7 +238,7 @@ 69 - asset name, description, times, storage info, locators count, MK/IO status + asset name, description, times, storage info, locators count, MK.IO status label8 diff --git a/AMSExplorer/Forms-Login/AMSLogin.Designer.cs b/AMSExplorer/Forms-Login/AMSLogin.Designer.cs index 12f594e2..d73f29cc 100644 --- a/AMSExplorer/Forms-Login/AMSLogin.Designer.cs +++ b/AMSExplorer/Forms-Login/AMSLogin.Designer.cs @@ -58,9 +58,9 @@ private void InitializeComponent() tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); textBoxSubscription = new System.Windows.Forms.TextBox(); label2 = new System.Windows.Forms.Label(); + label3 = new System.Windows.Forms.Label(); errorProvider1 = new System.Windows.Forms.ErrorProvider(components); pictureBoxMKIO = new System.Windows.Forms.PictureBox(); - label3 = new System.Windows.Forms.Label(); groupBoxAADAutMode.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)pictureBoxJob).BeginInit(); panel1.SuspendLayout(); @@ -354,6 +354,16 @@ private void InitializeComponent() label2.Name = "label2"; toolTip1.SetToolTip(label2, resources.GetString("label2.ToolTip")); // + // label3 + // + resources.ApplyResources(label3, "label3"); + errorProvider1.SetError(label3, resources.GetString("label3.Error")); + label3.ForeColor = System.Drawing.SystemColors.ControlText; + errorProvider1.SetIconAlignment(label3, (System.Windows.Forms.ErrorIconAlignment)resources.GetObject("label3.IconAlignment")); + errorProvider1.SetIconPadding(label3, (int)resources.GetObject("label3.IconPadding")); + label3.Name = "label3"; + toolTip1.SetToolTip(label3, resources.GetString("label3.ToolTip")); + // // errorProvider1 // errorProvider1.ContainerControl = this; @@ -365,21 +375,11 @@ private void InitializeComponent() errorProvider1.SetError(pictureBoxMKIO, resources.GetString("pictureBoxMKIO.Error")); errorProvider1.SetIconAlignment(pictureBoxMKIO, (System.Windows.Forms.ErrorIconAlignment)resources.GetObject("pictureBoxMKIO.IconAlignment")); errorProvider1.SetIconPadding(pictureBoxMKIO, (int)resources.GetObject("pictureBoxMKIO.IconPadding")); - pictureBoxMKIO.Image = Bitmaps.mk_io_blue; + pictureBoxMKIO.Image = Bitmaps.MKIO_Default; pictureBoxMKIO.Name = "pictureBoxMKIO"; pictureBoxMKIO.TabStop = false; toolTip1.SetToolTip(pictureBoxMKIO, resources.GetString("pictureBoxMKIO.ToolTip")); // - // label3 - // - resources.ApplyResources(label3, "label3"); - errorProvider1.SetError(label3, resources.GetString("label3.Error")); - label3.ForeColor = System.Drawing.SystemColors.ControlText; - errorProvider1.SetIconAlignment(label3, (System.Windows.Forms.ErrorIconAlignment)resources.GetObject("label3.IconAlignment")); - errorProvider1.SetIconPadding(label3, (int)resources.GetObject("label3.IconPadding")); - label3.Name = "label3"; - toolTip1.SetToolTip(label3, resources.GetString("label3.ToolTip")); - // // AmsLogin // AcceptButton = buttonLogin; @@ -451,7 +451,7 @@ private void InitializeComponent() private System.Windows.Forms.TextBox textBoxSubscription; private System.Windows.Forms.Label label2; private System.Windows.Forms.LinkLabel linkLabelAMSRetire; - private System.Windows.Forms.PictureBox pictureBoxMKIO; private System.Windows.Forms.Label label3; + private System.Windows.Forms.PictureBox pictureBoxMKIO; } } \ No newline at end of file diff --git a/AMSExplorer/Forms-Login/AMSLogin.cs b/AMSExplorer/Forms-Login/AMSLogin.cs index 458cdc4e..690c0590 100644 --- a/AMSExplorer/Forms-Login/AMSLogin.cs +++ b/AMSExplorer/Forms-Login/AMSLogin.cs @@ -22,6 +22,7 @@ using Azure.ResourceManager; using Azure.ResourceManager.Media; using Microsoft.Identity.Client; +using Microsoft.Identity.Client.Desktop; using Microsoft.Rest; using Microsoft.Rest.Azure.Authentication; using Newtonsoft.Json; @@ -161,7 +162,7 @@ private async void ButtonLogin_Click(object sender, EventArgs e) return; } - // let's save the credentials (SP) and MK/IO settings. They may be updated by the user when connecting + // let's save the credentials (SP) and MK.IO settings. They may be updated by the user when connecting CredentialList.MediaServicesAccounts[listViewAccounts.SelectedIndices[0]] = AmsClient.credentialsEntry; SaveCredentialsToSettings(); @@ -339,7 +340,7 @@ private void SaveCredentialsToSettings() { PropertyRenameAndIgnoreSerializerContractResolver jsonResolver = new(); jsonResolver.IgnoreProperty(typeof(CredentialsEntryV4), "ClearADSPClientSecret"); // let's not save the clear SP secret - jsonResolver.IgnoreProperty(typeof(CredentialsEntryV4), "MKIOClearToken"); // let's not save the MK/IO token secret + jsonResolver.IgnoreProperty(typeof(CredentialsEntryV4), "MKIOClearToken"); // let's not save the MK.IO token secret JsonSerializerSettings settings = new() { ContractResolver = jsonResolver }; Properties.Settings.Default.LoginListRPv4JSON = JsonConvert.SerializeObject(CredentialList, settings); Program.SaveAndProtectUserConfig(); @@ -366,7 +367,8 @@ private async void AMSLogin_ShownAsync(object sender, EventArgs e) await Program.CheckWebView2VersionAsync(); await Program.CheckAMSEVersionAsync(); - DisplayAMSRetirementNotice(); + // DisplayAMSRetirementNotice(); + // Now we display custom message when connecting to an account } private void DisplayAMSRetirementNotice() @@ -374,9 +376,13 @@ private void DisplayAMSRetirementNotice() int days = new DateTime(2024, 6, 30).Subtract(DateTime.Now).Days; // we display the message only once a week - if (Settings.Default.RetirementNotifDays - days >= 7) + if (Settings.Default.RetirementNotifDays - days >= 7 || days < 0) { - MessageBox.Show("Azure Media Services will be retired on 30 June 2024.\r\n\r\nYou can continue to use Azure Media Services without any disruptions. After 30 June 2024, Azure Media Services won’t be supported, and customers won’t have access to their Azure Media Services accounts.\r\n\r\nTo avoid any service disruptions, you’ll need to transition to Azure Video Indexer for on-demand video and audio analysis workflows or to a Microsoft partner solution for all other media services workflows before 30 June 2024\r\n\r\nThis tool supports the migration of your assets to MK/IO. More features may be added in the future to help your migration.", $"Retirement notice - {days} days left", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); + if (days < 0) + { + days = 0; + } + MessageBox.Show("Azure Media Services will be retired on 30 June 2024.\r\n\r\nYou can continue to use Azure Media Services without any disruptions. After 30 June 2024, Azure Media Services won’t be supported, and customers won’t have access to their Azure Media Services accounts.\r\n\r\nTo avoid any service disruptions, you’ll need to transition to Azure Video Indexer for on-demand video and audio analysis workflows and to a Microsoft partner solution for all other media services workflows by 30 June 2024.\r\n\r\nThis tool supports the migration of your assets to MediaKind MK.IO. More features may be added in the future to help your migration.", $"Retirement notice - {days} days left", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); Settings.Default.RetirementNotifDays = days; Settings.Default.Save(); } @@ -473,7 +479,7 @@ private async Task PickUpAcountAsync() .WithAuthority(environment.AADSettings.AuthenticationEndpoint.ToString() + "organizations") .WithDefaultRedirectUri() //.WithRedirectUri("http://localhost") - .WithBroker(true) + .WithWindowsDesktopFeatures(new BrokerOptions(BrokerOptions.OperatingSystems.Windows)) .Build(); AuthenticationResult accessToken = null; diff --git a/AMSExplorer/Forms-Login/AMSLogin.ja.resx b/AMSExplorer/Forms-Login/AMSLogin.ja.resx index 3599e5db..b3c1c9e1 100644 --- a/AMSExplorer/Forms-Login/AMSLogin.ja.resx +++ b/AMSExplorer/Forms-Login/AMSLogin.ja.resx @@ -378,7 +378,7 @@ iVBORw0KGgoAAAANSUhEUgAAAS4AAAA8CAYAAADYKVdnAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vgAADr4B6kKxwAAAD85JREFUeF7tnW9MXWcZwO8HXfxmot/4Yozfzf3Ah6Zhq11XtlUwoiVrlbVsra2u + vQAADr0BR/uQrQAAD85JREFUeF7tnW9MXWcZwO8HXfxmot/4Yozfzf3Ah6Zhq11XtlUwoiVrlbVsra2u SsZwtGOlK4OtrDgZRSsyu65aKzoFtAO0EcwUNE0gWQK6rI0hkKwKDuc1rd5kMY/Pc855z3nPe57z73Jv Oy7PTX7Jdu/58/47v/d5/xyauXXrFgiCIGwkRFyCIGw4RFyCIGw4RFyCIGw4RFyCIGw4SiquzM5OyNz3 LNIBmR3EScjcSzwDme0nHNoh85njNtuehlfeAfZagiAIiqKLK1P9HNJlS6sAcVkcW7Dgri8IglA0cWXu @@ -565,28 +565,28 @@ - + - + MiddleRight - + 0 - + - + - + MiddleRight - + 0 - + \ No newline at end of file diff --git a/AMSExplorer/Forms-Login/AMSLogin.resx b/AMSExplorer/Forms-Login/AMSLogin.resx index 02e7af4c..a62257c6 100644 --- a/AMSExplorer/Forms-Login/AMSLogin.resx +++ b/AMSExplorer/Forms-Login/AMSLogin.resx @@ -117,652 +117,626 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - buttonDeleteAccountEntry + + tableLayoutPanel1 - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + - - - False + + + MiddleRight - - + + 6 - - 1 + + NoControl - - - Bottom, Left + + Pick-up / create an account... - - 84 + + + 207, 15 - - Azure Subscription + + tableLayoutPanel1 - - MiddleRight + + System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + Azure Media Services Explorer + + + + True + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3, 213 + + + Bottom, Left - 784, 55 - - 7 + + $this - + + 1 + + 0 - - $this + + 565, 5 - - System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.SaveFileDialog, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tableLayoutPanel1 + + 86 - - MiddleRight + + Azure Subscription - - 457, 23 + + NoControl - - $this + + MiddleRight - - 3, 153 + + 53 - - 7 + + Top, Right - - True + + 5 - + 0 - - Segoe UI, 12pt + + Top, Right - - NoControl + + Bottom, Left - - MiddleRight + + Top, Right - - + + 71, 27 - - $this + + 0 - - NoControl + + Segoe UI, 9pt - - 12 + + linkLabelAMSRetire - - 4 + + NoControl - - + + 0 - - 8 + + 0 - - MiddleLeft + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="textBoxSubscription" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="label2" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="textBoxDescription" Row="7" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="label1" Row="6" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="textBoxResourceGroup" Row="5" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="labelE2" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="labelADTenant" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="textBoxAADtenantId" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Percent,12,5,Percent,12,5,Percent,12,5,Percent,12,5,Percent,12,5,Percent,12,5,Percent,12,5,Percent,12,5,Absolute,20" /></TableLayoutSettings> - + True - - 10 - - + True - - 194, 63 + + $this - - AutoSize + + - - Bottom, Left + + - - tableLayoutPanel1 + + Top, Left, Right - - Media Services Documentation (local) + + pictureBoxMKIO - - tableLayoutPanel1 + + 0 - - MiddleRight + + 679, 62 - - Bottom, Left + + 201, 423 - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBoxAADAutMode - - MiddleLeft + + Authentication Mode - + - - $this + + 10 - - Top, Right + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 91, 15 + + Media Services Documentation (local) - - Remove + + labelADTenant - - 89 + + 82 - - False + + Service Principal - - 106, 15 + + 3, 93 - - MiddleRight + + 0 - - 52 + + 7 - - 207, 15 + + Bottom, Left - + - - 11 + + 86 - - 565, 423 + + 0 - - 87 + + 2 - - + + True - - System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 457, 23 - - groupBoxAADAutMode + + 30 - - 5 + + 3 - - True + + 0 - - Top, Right + + MiddleRight - - + + MiddleRight - - True + + panel1 - - MiddleRight + + 565, 423 - - 124, 423 + + 0 - - 86 + + 3 - - True + + AmsLogin - - 0 + + panel1 - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 3, 33 - + MiddleRight - - - - + $this - - saveFileDialog1 + + 17, 423 0 - - MiddleRight - - - False + + 463, 247 - + 0 - - $this + + MiddleRight - - System.Windows.Forms.SaveFileDialog, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + pictureBoxJob - - + + 5 - - 105, 27 + + 643, 71 - - AmsLogin + + 91, 15 - - $this + + MiddleRight - - + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 201, 423 + + 52 - - panel1 + + 12 - - label1 + + 87 - - System.Windows.Forms.PictureBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 262, 15 - - + + NoControl - - Select or enter a Media Service account + + 124, 423 - - linkLabelAMSOfflineDoc + + Export - - 0 + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 1 + + 0 - - 2 + + 14, 15 - - buttonLogin + + 23, 22 - + Bottom, Left - + + 85 + + False - - MiddleRight + + textBoxAADtenantId - - 0 + + 664, 15 - - buttonPickupAccount + + True - - 0 + + 17, 50 - - radioButtonAADServicePrincipal + + MiddleRight - - 6 + + - + + System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MiddleLeft + + False - - + + MiddleRight - - Version {0} for Media Services v3 + + 0 - + System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 15, 21 - - Top, Left, Right - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MiddleRight - - - True - - + 0 - - 457, 23 + + 67, 15 - - 226, 21 + + Bottom, Left - - 17, 50 + + 0 - - pictureBoxJob + + 296, 50 - - True + + 0 - - Top, Right + + Remove - - CenterScreen + + 176, 15 - - MiddleRight + + Import - - 565, 5 + + textBoxDescription - - 176, 15 + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - errorProvider1 + + Top, Left, Right - - System.Windows.Forms.ErrorProvider, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Bottom, Left - + - - - - - openFileDialog1 - - - - - - - - - System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 3, 213 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MiddleLeft - - - panel1 - - - 71, 27 + + $this - - + + 4 - - Bottom, Left + + Found in Azure portal / AMS Account / Properties. Example : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/amsResourceGroup/providers/Microsoft.Media/mediaservices/amsaccount - + - - 3, 15 - - + 1 - - 86 + + MiddleRight - - 67, 15 + + 80, 19 - - Bottom, Left + + True - - labelenteramsacct + + 8 - - + + False - + - - 0 - - - 0 + + tableLayoutPanel1 - + - - 552, 117 - - - 80, 19 - - - 3, 135 - - - 296, 170 - - - tableLayoutPanel1 + + json file (*.json)|*.json - + - - 0 + + AutoSize - - MiddleRight + + Top, Right - - System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 111, 19 - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 784, 523 - - 8 + + $this - + - - Segoe UI, 9pt - - - 457, 23 - - - System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - linkLabelAMSRetire - - - 3, 93 - - - pictureBoxMKIO + + with - - 83 + + Cancel - - Top, Left, Right + + NoControl - + 1 - - buttonExport - - - - - - 3 - - - - - - - - - + + MiddleRight - + 0 - - 0 + + MiddleRight - + 0 - - buttonImportAll - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAACdSURBVDhPpZPBDYMwFENDGbkDtANwoAP0zpapHclR - SL9/kfqkJxGCrSRAqbX+5cgdvuHSRjGc2+GjjQYYZh11Jbz3gnruCTsMaSIqmcP0gDfY4IUrceEVnnAl - l8IiKhlNw8KVXAqTaM9UZ5LiwjItcac9bycscWHumXNRSf8GsrBwJX0l/CxdWMwlGzzBH+TXq1LJV1j0 - JSUMz5TyAQRkjEUIke9yAAAAAElFTkSuQmCC - - - - groupBoxAADAutMode - - - + + 4 - + 3 - - MiddleRight - - - MiddleRight - - - - - - - - - radioButtonAADInteractive - - + True - - - - - + + 71, 27 - - + + False - - 106, 15 + + 31 - - Bottom, Left + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 281, 21 + + System.Windows.Forms.RadioButton, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + 80, 24 - - 643, 71 + + $this - + - - System.Windows.Forms.PictureBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - buttonCancel - 3, 75 - + + MiddleRight + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 457, 23 + + + + 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 + + + + 1 + + + panel1 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAACTSURBVDhPpZMxDoMwEAR5DGXaUCfvSkLy13RUNKmd @@ -771,671 +745,697 @@ LLb7H2gAAAAASUVORK5CYII= - - 0 - - - 679, 64 + + True Top, Left, Right - - 3, 33 - - - + + System.Windows.Forms.PictureBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 30, 15 + + 2 - - 96, 96 + + 3, 195 - - System.Windows.Forms.Form, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1 - - MiddleRight + + 3 - - + + System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - toolTip1 + + $this - - 82 + + groupBoxAADAutMode - - MiddleRight + + - - Top, Bottom, Left + + System.Windows.Forms.PictureBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - MiddleRight + + - - 0 + + Top, Left, Right - - 111, 19 + + MiddleRight - - 0, 468 + + System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 5 + + 9 - - 0 + + linkLabelAMSOfflineDoc - - System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + False - - 23, 47 + + False - + MiddleRight - - System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Export + + - - 3, 195 + + errorProvider1 - - 2 + + 23, 47 - - 463, 247 + + Azure Media Services retirement on 30 June 2024 - - textBoxResourceGroup + + - - 0 + + 83 - - NoControl + + 457, 23 - - MiddleRight + + 42 - - 4 + + - - Interactive + + 106, 15 - - textBoxAADtenantId + + label3 - + - - Pick-up / create an account... + + 0 - - True + + buttonImportAll - - Found in Azure portal / AMS Account / Properties. Example : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/amsResourceGroup/providers/Microsoft.Media/mediaservices/amsaccount + + - - $this + + 0 - - Resource Group + + MiddleRight - - 54 + + - - NoControl + + 86 - - MiddleRight + + - - 0 + + label1 - - 0 + + Segoe UI, 12pt - - 30 + + 3, 15 - - Bottom, Right + + groupBoxAADAutMode - - 457, 23 + + Bottom - - 2 + + $this - - 0 + + - - False + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 14, 15 + + 11 - - 86 + + tableLayoutPanel1 - + - - 32 - - - NoControl + + - - Description + + Json files (*.json)|*.json - - + + 552, 15 - - Top, Right + + tableLayoutPanel1 - + System.Windows.Forms.ToolTip, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + NoControl - - labelVersion + + 30, 15 - - Cancel + + 0 - - System.Windows.Forms.ListView, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Bottom, Left - - textBoxDescription + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAACTSURBVDhPpZMxDoMwEAR5TEpSQkselhD+SkdFk9rZ + QToLkJFXYqRB8uluLWNoUkq3BJ4lJ2lxaxhi6IqHnCU9bwpnagHwlIsshjgB0MtV0vuhELgB8JI/Sf9I + Ac4BsXb8yrwI9g01t9uKhcMg4wjb7uAGdDJeYj4/OAGtjGs8DEMtwP6Q9ubzOZQC0Asp/aK+qfkDDzW3 + L8Nd2MoAAAAASUVORK5CYII= + - - 1 + + Version {0} for Media Services v3 - - + + 552, 117 - - False + + buttonCancel - - + + System.Windows.Forms.ListView, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - NoControl + + 3 - - MiddleLeft + + 3, 153 - - panel1 + + toolTip1 - - labelADTenant + + System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 552, 15 + + labelVersion - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + tableLayoutPanel1 - - 71, 27 + + label2 - + MiddleRight - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True + + MiddleRight - - 0 + + labelenteramsacct - - label3 + + System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 3 + + - - Service Principal + + - - - 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 - + + 106, 15 - - Azure Media Services Explorer + + 5 - - tableLayoutPanel1 + + Select or enter a Media Service account - - 784, 523 + + 6 - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + openFileDialog1 - + + 6 + + - - 1 + + radioButtonAADInteractive - - MiddleRight + + CenterScreen - - Bottom + + labelE2 - - Top, Right + + 96, 96 - - 42 + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 4 + + 0 - - $this + + Azure AD tenant Id - - Top, Right + + MiddleRight - - 23, 22 + + - - 180, 82 + + NoControl - - + + MiddleRight - + + 7 + + tableLayoutPanel1 - - panel1 + + MiddleRight - + NoControl - - 31 + + textBoxSubscription - - NoControl + + Interactive - + + saveFileDialog1 + + - - 3 + + - - 189, 27 + + - - Top, Left, Right + + System.Windows.Forms.Form, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 17, 423 + + 89 - + + 2 + + + MiddleRight + + 0 - - $this + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - labelE2 + + 7 - - $this + + - + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 5 + + + 54 + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MiddleRight + + + textBoxResourceGroup + + 0 - + + MiddleRight + + + System.Windows.Forms.ErrorProvider, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0 - - + + Bottom, Left - - Zoom + + radioButtonAADServicePrincipal - - 9 + + System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + MiddleRight + + + 0 + + + MiddleRight + + + System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Top, Left, Right + + + + + MiddleLeft - - listViewAccounts + + False - - NoControl + + 180, 82 - - 80, 27 + + 296, 170 - - tableLayoutPanel1 + + - - 0 + + buttonExport - - 255, 367 + + True - - label2 + + 226, 21 - + 0 - + MiddleLeft - + + MiddleLeft + + - - 53 + + 1 - - 0 + + MiddleLeft + + + MiddleRight + + + 189, 27 + + + + + + Top, Right + + + MiddleRight + + + System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 32 + + + 281, 21 + + + $this + + + + + + NoControl - + - - 6 + + 79, 27 - - 5 + + System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - textBoxSubscription + + $this - + + buttonLogin + + $this - - json file (*.json)|*.json + + - - NoControl + + MiddleLeft - - MiddleRight + + - + + + + 105, 27 - - MiddleLeft + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAACdSURBVDhPpZPBDYMwFENDGbkDtANwoAP0zpapHclR + SL9/kfqkJxGCrSRAqbX+5cgdvuHSRjGc2+GjjQYYZh11Jbz3gnruCTsMaSIqmcP0gDfY4IUrceEVnnAl + l8IiKhlNw8KVXAqTaM9UZ5LiwjItcac9bycscWHumXNRSf8GsrBwJX0l/CxdWMwlGzzBH+TXq1LJV1j0 + JSUMz5TyAQRkjEUIke9yAAAAAElFTkSuQmCC + - - Azure AD tenant Id + + NoControl Connect - - tableLayoutPanel1 - - - Authentication Mode - - + System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 1 + + buttonPickupAccount - - 296, 50 + + tableLayoutPanel1 - + - - MiddleRight + + 457, 23 - - MiddleRight + + 0 - - $this + + 0 - - groupBoxAADAutMode + + 4 - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Top, Bottom, Left - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAACTSURBVDhPpZMxDoMwEAR5TEpSQkselhD+SkdFk9rZ - QToLkJFXYqRB8uluLWNoUkq3BJ4lJ2lxaxhi6IqHnCU9bwpnagHwlIsshjgB0MtV0vuhELgB8JI/Sf9I - Ac4BsXb8yrwI9g01t9uKhcMg4wjb7uAGdDJeYj4/OAGtjGs8DEMtwP6Q9ubzOZQC0Asp/aK+qfkDDzW3 - L8Nd2MoAAAAASUVORK5CYII= - + + - - 0 + + 1 - + + + + 0 - - 79, 27 + + Top, Right - - + + 255, 367 - - Azure Media Services retirement on 30 June 2024 + + True - - 0 + + - - 7 + + - - with + + buttonDeleteAccountEntry - - MiddleRight + + 8 - - 3 + + Description - - + + 0, 468 - - 85 + + - - 664, 15 + + - - Import + + panel1 - - Json files (*.json)|*.json + + MiddleLeft - - MiddleRight + + - - MiddleRight + + 3, 135 - - 262, 15 + + True panel1 - + MiddleRight - - MiddleRight + + tableLayoutPanel1 - - True + + 0 - - Top, Left, Right + + Zoom - - Bottom, Left + + MiddleRight - - tableLayoutPanel1 + + Bottom, Right - - 5 + + 84 - - 0 + + 194, 63 - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="textBoxSubscription" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="label2" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="textBoxDescription" Row="7" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="label1" Row="6" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="textBoxResourceGroup" Row="5" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="labelE2" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="labelADTenant" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="textBoxAADtenantId" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Percent,12,5,Percent,12,5,Percent,12,5,Percent,12,5,Percent,12,5,Percent,12,5,Percent,12,5,Percent,12,5,Absolute,20" /></TableLayoutSettings> + + True - - 6 + + $this - + - - System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Resource Group - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0 - - System.Windows.Forms.RadioButton, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + listViewAccounts - - 157, 17 - - - 17, 17 - - - True + + $this + + + 105, 27 + + + + + + 293, 17 63 - - 293, 17 - 390, 17 + + True + + + 17, 17 + + + 157, 17 + \ No newline at end of file diff --git a/AMSExplorer/Forms-Login/AddAMSAccount2Browse.cs b/AMSExplorer/Forms-Login/AddAMSAccount2Browse.cs index 555fea8f..ab542ba2 100644 --- a/AMSExplorer/Forms-Login/AddAMSAccount2Browse.cs +++ b/AMSExplorer/Forms-Login/AddAMSAccount2Browse.cs @@ -20,6 +20,7 @@ using Azure.ResourceManager.Media.Models; using Azure.ResourceManager.Resources; using Microsoft.Identity.Client; +using Microsoft.Identity.Client.Desktop; using Microsoft.Rest; using System; using System.Collections.Generic; @@ -106,7 +107,7 @@ private async void BuildSubTree() _clientApplications[selectedTenantId] = PublicClientApplicationBuilder.Create(environment.ClientApplicationId) .WithAuthority(environment.AADSettings.AuthenticationEndpoint + selectedTenantId) .WithDefaultRedirectUri() - .WithBroker(true) + .WithWindowsDesktopFeatures(new BrokerOptions(BrokerOptions.OperatingSystems.Windows)) //.WithRedirectUri("http://localhost") .Build(); } diff --git a/AMSExplorer/Forms-Login/ExportSettings.resx b/AMSExplorer/Forms-Login/ExportSettings.resx index de29f866..e9ac3561 100644 --- a/AMSExplorer/Forms-Login/ExportSettings.resx +++ b/AMSExplorer/Forms-Login/ExportSettings.resx @@ -301,7 +301,7 @@ 79 - Include Service Principal and MK/IO secrets + Include Service Principal and MK.IO secrets checkBoxIncludeSPSecrets diff --git a/AMSExplorer/HelpFiles/AMSv3doc.pdf b/AMSExplorer/HelpFiles/AMSv3doc.pdf index 02d368fa..562a6e81 100644 Binary files a/AMSExplorer/HelpFiles/AMSv3doc.pdf and b/AMSExplorer/HelpFiles/AMSv3doc.pdf differ diff --git a/AMSExplorer/MKIO/Mainform_MK.cs b/AMSExplorer/MKIO/Mainform_MK.cs index 7e850f1a..3ddca1ee 100644 --- a/AMSExplorer/MKIO/Mainform_MK.cs +++ b/AMSExplorer/MKIO/Mainform_MK.cs @@ -30,10 +30,10 @@ namespace AMSExplorer { public partial class Mainform : Form { - // Placeholder for MK/IO code + // Placeholder for MK.IO code /// - /// Content key policies creation in MK/IO + /// Content key policies creation in MK.IO /// /// /// @@ -50,26 +50,24 @@ private async Task DoMKIOCreateContentKeyPolicyAsync() { try { - var cknewprop = new MK.IO.ContentKeyPolicyProperties(); - // use REST with AMS var existingCkProp = await _restClient.GetContentKeyPolicyPropertiesWithSecretsAsync(ck.Data.Name); //dynamic existingCkDyn = JsonConvert.DeserializeObject(existingCk); var ckPolProp = JsonConvert.DeserializeObject(existingCkProp); - var createdPol = await MKIOclient.ContentKeyPolicies.CreateAsync(ck.Data.Name, new ContentKeyPolicy(ckPolProp)); - TextBoxLogWriteLine($"Succesfully created content key policy '{ck.Data.Name}' in MK/IO"); + var createdPol = await MKIOclient.ContentKeyPolicies.CreateAsync(ck.Data.Name, ckPolProp); + TextBoxLogWriteLine($"Succesfully created content key policy '{ck.Data.Name}' in MK.IO"); } catch { - TextBoxLogWriteLine($"Error when creating content key policy '{ck.Data.Name}' in MK/IO", true); + TextBoxLogWriteLine($"Error when creating content key policy '{ck.Data.Name}' in MK.IO", true); } } await DoRefreshGridCKPoliciesVAsync(false); } /// - /// Storage accounts creation in MK/IO + /// Storage accounts creation in MK.IO /// /// private async Task DoMKIOStorageAddAsync() @@ -86,7 +84,7 @@ private async Task DoMKIOStorageAddAsync() if (storageMKIOName != null && storageMKIOName.Spec.Name == storName) { - MessageBox.Show($"Storage account {storName} is already migrated to MK/IO", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show($"Storage account {storName} is already migrated to MK.IO", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } @@ -129,27 +127,24 @@ private async Task DoMKIOStorageAddAsync() try { - var storageMKIO = await MKIOclient.StorageAccounts.CreateAsync(new StorageRequestSchema + var storageMKIO = await MKIOclient.StorageAccounts.CreateAsync(new StorageSchema { - Spec = new StorageSchema + Name = storName, + Location = _amsClient.AMSclient.Get().Value.Data.Location.Name, + Description = formStorageCreation.StorageDescription, + AzureStorageConfiguration = new BlobStorageAzureProperties { - Name = storName, - Location = _amsClient.AMSclient.Get().Value.Data.Location.Name, - Description = formStorageCreation.StorageDescription, - AzureStorageConfiguration = new BlobStorageAzureProperties - { - Url = blobEndpoint.ToString() + sasSig - } + Url = blobEndpoint.ToString() + sasSig } } ); - TextBoxLogWriteLine($"Storage account '{storName}' added to MK/IO"); + TextBoxLogWriteLine($"Storage account '{storName}' added to MK.IO"); } catch (Exception ex) { - MessageBox.Show(ex.Message, "Error adding storage account to MK/IO", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show(ex.Message, "Error adding storage account to MK.IO", MessageBoxButtons.OK, MessageBoxIcon.Error); TextBoxLogWriteLine(ex); Telemetry.TrackException(ex); Cursor = Cursors.Arrow; @@ -163,7 +158,7 @@ private async Task DoMKIOStorageAddAsync() /// - /// Remove storage account from MK/IO + /// Remove storage account from MK.IO /// /// private async Task DoMKIOStorageRemoveAsync() @@ -171,7 +166,7 @@ private async Task DoMKIOStorageRemoveAsync() Telemetry.TrackEvent("DoMKIOStorageRemoveAsync"); var storage = ReturnSelectedStorage(); - if (storage == null || migratedStorageAccountsToMKIO.Count == 0) return; + if (storage == null || migratedStorageAccountsToMKIO.Count() == 0) return; string storName = AMSClientV3.GetStorageName(storage.Id); @@ -179,7 +174,7 @@ private async Task DoMKIOStorageRemoveAsync() if (storageMKIOName == null) { - MessageBox.Show($"Storage account {storName} is not migrated to MK/IO", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show($"Storage account {storName} is not migrated to MK.IO", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } @@ -190,11 +185,11 @@ private async Task DoMKIOStorageRemoveAsync() try { await MKIOclient.StorageAccounts.DeleteAsync((Guid)storageMKIOName.Metadata.Id); - TextBoxLogWriteLine($"Storage account '{storName}' removed from MK/IO"); + TextBoxLogWriteLine($"Storage account '{storName}' removed from MK.IO"); } catch (Exception ex) { - TextBoxLogWriteLine($"Error when removing storage account '{storName}' from MK/IO", true); + TextBoxLogWriteLine($"Error when removing storage account '{storName}' from MK.IO", true); TextBoxLogWriteLine(ex); Telemetry.TrackException(ex); } @@ -204,7 +199,7 @@ private async Task DoMKIOStorageRemoveAsync() } /// - /// Create asset(s) in MK/IO + /// Create asset(s) in MK.IO /// /// private async Task MKIOCreateAssetAsync() @@ -212,14 +207,14 @@ private async Task MKIOCreateAssetAsync() Telemetry.TrackEvent("MKIOCreateAssetAsync"); if (MKIOclient == null) { - MessageBox.Show("Can't Create", "MK/IO is not connected. Restart the application to connect."); + MessageBox.Show("Can't Create", "MK.IO is not connected. Restart the application to connect."); } var assets = await ReturnSelectedAssetsAsync(); if (assets.Count == 0) return; - //let's verify that storage account is in MK/IO ! + //let's verify that storage account is in MK.IO ! var storageNames = assets.Select(a => a.Data.StorageAccountName).Distinct().ToList(); var storageMKIONames = migratedStorageAccountsToMKIO.Select(s => s.Spec.Name); if (!(storageNames.Intersect(storageMKIONames).Count() == storageNames.Count())) @@ -228,11 +223,11 @@ private async Task MKIOCreateAssetAsync() if (nonintersect.Count() == 1) { - MessageBox.Show($"Storage account {nonintersect.First()} has not be added to MK/IO. Please do it before creating the asset(s) in MK/IO.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show($"Storage account {nonintersect.First()} has not be added to MK.IO. Please do it before creating the asset(s) in MK.IO.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { - MessageBox.Show($"Storage accounts {string.Join(",", nonintersect.ToArray())} have not be added to MK/IO. Please do it before creating the assets in MK/IO.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show($"Storage accounts {string.Join(",", nonintersect.ToArray())} have not be added to MK.IO. Please do it before creating the assets in MK.IO.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } return; } @@ -260,11 +255,11 @@ private async Task MKIOCreateAssetAsync() try { await MKIOclient.Assets.CreateOrUpdateAsync(assetName, asset.Data.Container, asset.Data.StorageAccountName, assetDescription); - TextBoxLogWriteLine($"Asset '{assetName}' created in MK/IO"); + TextBoxLogWriteLine($"Asset '{assetName}' created in MK.IO"); } catch (Exception ex) { - TextBoxLogWriteLine($"Error when creating asset '{assetName}' in MK/IO", true); + TextBoxLogWriteLine($"Error when creating asset '{assetName}' in MK.IO", true); TextBoxLogWriteLine(ex); Telemetry.TrackException(ex); } @@ -301,16 +296,17 @@ private async Task MKIOCreateAssetAsync() Id = k.Id.ToString(), PolicyName = k.PolicyName, LabelReferenceInStreamingPolicy = k.LabelReferenceInStreamingPolicy, - Type = k.KeyType.ToString(), + Type = (StreamingLocatorContentKeyType)Enum.Parse(typeof(StreamingLocatorContentKeyType), k.KeyType.ToString()), + //.k.KeyType.ToString(), Value = k.Value, Tracks = JsonConvert.DeserializeObject>(tracksJson) - }); + }); ; }; } } - //TextBoxLogWriteLine($"Asset '{assetName}' : locator '{locator.Name}' not created in MK/IO because there are attached content keys.", true); + //TextBoxLogWriteLine($"Asset '{assetName}' : locator '{locator.Name}' not created in MK.IO because there are attached content keys.", true); var startT = locatorRes.Data.StartOn?.UtcDateTime; var endT = locatorRes.Data.EndOn?.UtcDateTime; @@ -323,23 +319,23 @@ private async Task MKIOCreateAssetAsync() StartTime = startT, EndTime = endT, StreamingPolicyName = locatorRes.Data.StreamingPolicyName, - StreamingLocatorId = locatorRes.Data.StreamingLocatorId.ToString(), + StreamingLocatorId = locatorRes.Data.StreamingLocatorId, Filters = locatorRes.Data.Filters?.ToList(), DefaultContentKeyPolicyName = locatorRes.Data.DefaultContentKeyPolicyName, ContentKeys = mkioContentKey }); - TextBoxLogWriteLine($"Asset '{assetName}' : locator '{locator.Name}' created in MK/IO"); + TextBoxLogWriteLine($"Asset '{assetName}' : locator '{locator.Name}' created in MK.IO"); } catch (Exception ex) { - TextBoxLogWriteLine($"Error when creating locator '{locator.Name}' for asset '{assetName}' in MK/IO", true); + TextBoxLogWriteLine($"Error when creating locator '{locator.Name}' for asset '{assetName}' in MK.IO", true); TextBoxLogWriteLine(ex); Telemetry.TrackException(ex); } } else { - TextBoxLogWriteLine($"Asset '{assetName}' : locator '{locator.Name}' not created in MK/IO because it does not use a built-in streaming policy.", true); + TextBoxLogWriteLine($"Asset '{assetName}' : locator '{locator.Name}' not created in MK.IO because it does not use a built-in streaming policy.", true); } } } @@ -350,7 +346,7 @@ private async Task MKIOCreateAssetAsync() /// - /// Delete asset(s) in MK/IO + /// Delete asset(s) in MK.IO /// /// private async Task MKIODeleteAssetAsync() @@ -358,14 +354,14 @@ private async Task MKIODeleteAssetAsync() Telemetry.TrackEvent("MKIODeleteAssetAsync"); if (MKIOclient == null) { - MessageBox.Show("Can't delete", "MK/IO is not connected. Restart the application to connect."); + MessageBox.Show("Can't delete", "MK.IO is not connected. Restart the application to connect."); } var assets = await ReturnSelectedAssetsAsync(); if (assets.Count == 0) return; - string message = assets.Count == 1 ? string.Format("Delete asset '{0}' from MK/IO ?", assets.First().Data.Name) : string.Format("Delete these {0} assets from MK/IO ?", assets.Count); - if (MessageBox.Show(message, "MK/IO asset deletion", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) + string message = assets.Count == 1 ? string.Format("Delete asset '{0}' from MK.IO ?", assets.First().Data.Name) : string.Format("Delete these {0} assets from MK.IO ?", assets.Count); + if (MessageBox.Show(message, "MK.IO asset deletion", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { return; } @@ -374,24 +370,24 @@ private async Task MKIODeleteAssetAsync() { string assetName = asset.Data.Name; - // let's verify that asset is in MK/IO + // let's verify that asset is in MK.IO var assetInMKIO = migratedAssetsToMKIO.Where(a => a.Properties.Container == asset.Data.Container && a.Properties.StorageAccountName == asset.Data.StorageAccountName).FirstOrDefault(); if (assetInMKIO == null) { - TextBoxLogWriteLine($"Asset '{assetName}' is not in MK/IO, skipping the deletion.", true); + TextBoxLogWriteLine($"Asset '{assetName}' is not in MK.IO, skipping the deletion.", true); } - else // asset is in MK/IO + else // asset is in MK.IO { try { await MKIOclient.Assets.DeleteAsync(assetName); - TextBoxLogWriteLine($"Asset '{assetName}' deleted in MK/IO."); + TextBoxLogWriteLine($"Asset '{assetName}' deleted in MK.IO."); } catch (Exception ex) { - TextBoxLogWriteLine($"Error when deleting asset '{assetName}' in MK/IO.", true); + TextBoxLogWriteLine($"Error when deleting asset '{assetName}' in MK.IO.", true); TextBoxLogWriteLine(ex); Telemetry.TrackException(ex); } @@ -402,7 +398,7 @@ private async Task MKIODeleteAssetAsync() } /// - /// Delete content key policies from MK/IO + /// Delete content key policies from MK.IO /// /// private async Task MKIODeleteCKPolAsync() @@ -410,14 +406,14 @@ private async Task MKIODeleteCKPolAsync() Telemetry.TrackEvent("MKIODeleteCKPolAsync"); if (MKIOclient == null) { - MessageBox.Show("Can't delete", "MK/IO is not connected. Restart the application to connect."); + MessageBox.Show("Can't delete", "MK.IO is not connected. Restart the application to connect."); } var contentKeyPols = await ReturnSelectedCKPoliciessAsync(); if (contentKeyPols.Count == 0) return; - string message = contentKeyPols.Count == 1 ? string.Format("Delete content key policy '{0}' from MK/IO ?", contentKeyPols.First().Data.Name) : string.Format("Delete these {0} content key policies from MK/IO ?", contentKeyPols.Count); - if (MessageBox.Show(message, "MK/IO content key policy deletion", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) + string message = contentKeyPols.Count == 1 ? string.Format("Delete content key policy '{0}' from MK.IO ?", contentKeyPols.First().Data.Name) : string.Format("Delete these {0} content key policies from MK.IO ?", contentKeyPols.Count); + if (MessageBox.Show(message, "MK.IO content key policy deletion", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { return; } @@ -426,24 +422,24 @@ private async Task MKIODeleteCKPolAsync() { string ckpolName = ckpol.Data.Name; - // let's verify that asset is in MK/IO + // let's verify that asset is in MK.IO var ckpInMKIO = migratedContentKeyPoliciesToMKIO.Where(ckp => ckp.Name == ckpol.Data.Name).FirstOrDefault(); if (ckpInMKIO == null) { - TextBoxLogWriteLine($"Content key policy '{ckpolName}' is not in MK/IO, skipping the deletion.", true); + TextBoxLogWriteLine($"Content key policy '{ckpolName}' is not in MK.IO, skipping the deletion.", true); } - else // ckpol is in MK/IO + else // ckpol is in MK.IO { try { await MKIOclient.ContentKeyPolicies.DeleteAsync(ckpolName); - TextBoxLogWriteLine($"Content key policy '{ckpolName}' deleted in MK/IO."); + TextBoxLogWriteLine($"Content key policy '{ckpolName}' deleted in MK.IO."); } catch (Exception ex) { - TextBoxLogWriteLine($"Error when deleting content key policy '{ckpolName}' in MK/IO.", true); + TextBoxLogWriteLine($"Error when deleting content key policy '{ckpolName}' in MK.IO.", true); TextBoxLogWriteLine(ex); Telemetry.TrackException(ex); } diff --git a/AMSExplorer/MKIO/UI/MKIOAssetCreationUpdate.Designer.cs b/AMSExplorer/MKIO/UI/MKIOAssetCreationUpdate.Designer.cs index ad6129fd..49dc4d86 100644 --- a/AMSExplorer/MKIO/UI/MKIOAssetCreationUpdate.Designer.cs +++ b/AMSExplorer/MKIO/UI/MKIOAssetCreationUpdate.Designer.cs @@ -131,7 +131,7 @@ private void InitializeComponent() // // pictureBox1 // - pictureBox1.Image = Bitmaps.mk_io_blue; + pictureBox1.Image = Bitmaps.MKIO_Default; resources.ApplyResources(pictureBox1, "pictureBox1"); pictureBox1.Name = "pictureBox1"; pictureBox1.TabStop = false; diff --git a/AMSExplorer/MKIO/UI/MKIOAssetCreationUpdate.cs b/AMSExplorer/MKIO/UI/MKIOAssetCreationUpdate.cs index 16a25ded..82f3c960 100644 --- a/AMSExplorer/MKIO/UI/MKIOAssetCreationUpdate.cs +++ b/AMSExplorer/MKIO/UI/MKIOAssetCreationUpdate.cs @@ -80,7 +80,7 @@ public MKIOAssetCreationUpdate(AssetCreationMode mode) case AssetCreationMode.Multiple: this.Text = "Create New Assets"; - labelNewAsset.Text = "Create these assets in MK/IO"; + labelNewAsset.Text = "Create these assets in MK.IO"; lblContainer.Visible = false; textBoxContainer.Visible = false; @@ -89,7 +89,7 @@ public MKIOAssetCreationUpdate(AssetCreationMode mode) textBoxInstructions.Text = @"Multiple assets have been selected and will be created. -The tag, {Asset Name}, must be included and allows you to add a prefix or suffix to the new asset names in MK/IO. +The tag, {Asset Name}, must be included and allows you to add a prefix or suffix to the new asset names in MK.IO. Leave just the tag to keep the same name. diff --git a/AMSExplorer/MKIO/UI/MKIOAssetCreationUpdate.resx b/AMSExplorer/MKIO/UI/MKIOAssetCreationUpdate.resx index b2b0b20f..61733768 100644 --- a/AMSExplorer/MKIO/UI/MKIOAssetCreationUpdate.resx +++ b/AMSExplorer/MKIO/UI/MKIOAssetCreationUpdate.resx @@ -220,13 +220,13 @@ 26, 22 - 179, 20 + 176, 20 75 - Create this asset in MK/IO + Create this asset in MK.IO labelNewAsset @@ -286,7 +286,7 @@ 0 - Asset name in MK/IO. It could be different from the AMS asset name + Asset name in MK.IO. It could be different from the AMS asset name textBoxAssetName @@ -313,7 +313,7 @@ 1 - Asset description in MK/IO + Asset description in MK.IO textBoxDescription @@ -483,11 +483,8 @@ Recreate existing keys - - 146, 17 - - Copy the existing keys of the AMS locator to the new MK/IO locator. Key properties to be copied : id, policy name, label ref in streaming policy, type, value, tracks. + Copy the existing keys of the AMS locator to the new MK.IO locator. Key properties to be copied : id, policy name, label ref in streaming policy, type, value, tracks. checkBoxRecreateKeys @@ -517,7 +514,7 @@ Recreate existing streaming locators - Copy the existing locators of the AMS asset to the new MK/IO asset. Locator properties will be copied : name, id, start time, end time, content key policy name, filters. + Copy the existing locators of the AMS asset to the new MK.IO asset. Locator properties will be copied : name, id, start time, end time, content key policy name, filters. checkBoxCloneClearLocator @@ -595,7 +592,7 @@ 287, 22 - 80, 27 + 80, 24 AutoSize @@ -690,4 +687,7 @@ Value + + 146, 17 + \ No newline at end of file diff --git a/AMSExplorer/MKIO/UI/MKIOConnection.Designer.cs b/AMSExplorer/MKIO/UI/MKIOConnection.Designer.cs index c9163426..cdddc313 100644 --- a/AMSExplorer/MKIO/UI/MKIOConnection.Designer.cs +++ b/AMSExplorer/MKIO/UI/MKIOConnection.Designer.cs @@ -108,7 +108,8 @@ private void InitializeComponent() // pictureBoxMKIO // resources.ApplyResources(pictureBoxMKIO, "pictureBoxMKIO"); - pictureBoxMKIO.Image = Bitmaps.mk_io_blue; + pictureBoxMKIO.ErrorImage = Bitmaps.MKIO_Default; + pictureBoxMKIO.Image = Bitmaps.MKIO_Default; pictureBoxMKIO.Name = "pictureBoxMKIO"; pictureBoxMKIO.TabStop = false; // diff --git a/AMSExplorer/MKIO/UI/MKIOConnection.cs b/AMSExplorer/MKIO/UI/MKIOConnection.cs index 3eba9303..495b3740 100644 --- a/AMSExplorer/MKIO/UI/MKIOConnection.cs +++ b/AMSExplorer/MKIO/UI/MKIOConnection.cs @@ -48,13 +48,13 @@ public MKIOConnection(string subscriptionName, string token) textInstructions.Text = @"Instructions: -You must have a MediaKind I/O subscription set up and use the MK/IO portal: -https://io.mediakind.com -The Subscription name is the resource name in the MK/IO portal. +You must have a MediaKind MK.IO subscription set up and use the MK.IO portal: +https://app.mk.io +The Subscription name is the resource name in the MK.IO portal. -To get a MK/IO Token: -1) Log into https://io.mediakind.com with Microsoft SSO -2) Then use the URL: https://api.io.mediakind.com/auth/token/ +To get a MK.IO Token: +1) Log into https://app.mk.io with Microsoft SSO +2) Then use the URL: https://api.mk.io/auth/token/ 3) Copy the token"; if (string.IsNullOrEmpty(subscriptionName)) diff --git a/AMSExplorer/MKIO/UI/MKIOConnection.resx b/AMSExplorer/MKIO/UI/MKIOConnection.resx index aa433363..a7ea1198 100644 --- a/AMSExplorer/MKIO/UI/MKIOConnection.resx +++ b/AMSExplorer/MKIO/UI/MKIOConnection.resx @@ -169,7 +169,7 @@ 2 - Connect with MK/IO + Connect with MK.IO buttonConnectMKIO @@ -220,13 +220,13 @@ 26, 22 - 229, 20 + 226, 20 75 - Connect with MediaKind MK/IO ? + Connect with MediaKind MK.IO ? labelNewAsset @@ -409,13 +409,13 @@ 28, 61 - 76, 15 + 74, 15 90 - MK/IO Portal + MK.IO Portal linkLabelMKIO @@ -463,7 +463,7 @@ 339, 22 - 80, 27 + 80, 24 AutoSize @@ -490,7 +490,7 @@ CenterParent - MediaKind MK/IO Connection + MediaKind MK.IO Connection errorProvider1 diff --git a/AMSExplorer/MKIO/UI/MKIOStorageCreation.Designer.cs b/AMSExplorer/MKIO/UI/MKIOStorageCreation.Designer.cs index c226a0ea..7b182ded 100644 --- a/AMSExplorer/MKIO/UI/MKIOStorageCreation.Designer.cs +++ b/AMSExplorer/MKIO/UI/MKIOStorageCreation.Designer.cs @@ -106,7 +106,7 @@ private void InitializeComponent() // // pictureBox1 // - pictureBox1.Image = Bitmaps.mk_io_blue; + pictureBox1.Image = Bitmaps.MKIO_Default; resources.ApplyResources(pictureBox1, "pictureBox1"); pictureBox1.Name = "pictureBox1"; pictureBox1.TabStop = false; @@ -166,7 +166,7 @@ private void InitializeComponent() resources.ApplyResources(label3, "label3"); label3.Name = "label3"; // - // StorageCreation + // MKIOStorageCreation // AcceptButton = buttonOk; resources.ApplyResources(this, "$this"); @@ -187,7 +187,7 @@ private void InitializeComponent() Controls.Add(lblDescription); Controls.Add(labelNewAsset); Controls.Add(panel1); - Name = "StorageCreation"; + Name = "MKIOStorageCreation"; Load += StorageCreation_Load; Shown += StorageCreation_Shown; panel1.ResumeLayout(false); diff --git a/AMSExplorer/MKIO/UI/MKIOStorageCreation.resx b/AMSExplorer/MKIO/UI/MKIOStorageCreation.resx index 55c01f43..bed2a49f 100644 --- a/AMSExplorer/MKIO/UI/MKIOStorageCreation.resx +++ b/AMSExplorer/MKIO/UI/MKIOStorageCreation.resx @@ -223,13 +223,13 @@ 26, 22 - 196, 20 + 193, 20 75 - Create this storage in MK/IO + Create this storage in MK.IO labelNewAsset @@ -277,13 +277,13 @@ 40, 128 - 153, 15 + 151, 15 78 - MK/IO Storage description : + MK.IO Storage description : lblDescription @@ -571,7 +571,7 @@ 287, 22 - 80, 27 + 80, 24 AutoSize @@ -619,7 +619,7 @@ System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - StorageCreation + MKIOStorageCreation System.Windows.Forms.Form, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 diff --git a/AMSExplorer/Mainform.Designer.cs b/AMSExplorer/Mainform.Designer.cs index 67453385..9ecdbe77 100644 --- a/AMSExplorer/Mainform.Designer.cs +++ b/AMSExplorer/Mainform.Designer.cs @@ -310,7 +310,6 @@ private void InitializeComponent() jwPlayerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); tHEOPlayerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); toolStripSeparator29 = new System.Windows.Forms.ToolStripSeparator(); - hTML5CaptionMakerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); mKIOPortalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); azureMediaHelpFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -2281,7 +2280,7 @@ private void InitializeComponent() // // samplePlayersToolStripMenuItem // - samplePlayersToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { toolStripMenuItemAzureUpdates, azureMediaBlogToolStripMenuItem, toolStripSeparator1, azureMediaServicesPlayerPageToolStripMenuItem, dASHIFHTML5ReferencePlayerToolStripMenuItem, hTML5VideoElementToolStripMenuItem, jwPlayerToolStripMenuItem, tHEOPlayerToolStripMenuItem, toolStripSeparator29, hTML5CaptionMakerToolStripMenuItem, mKIOPortalToolStripMenuItem }); + samplePlayersToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { toolStripMenuItemAzureUpdates, azureMediaBlogToolStripMenuItem, toolStripSeparator1, azureMediaServicesPlayerPageToolStripMenuItem, dASHIFHTML5ReferencePlayerToolStripMenuItem, hTML5VideoElementToolStripMenuItem, jwPlayerToolStripMenuItem, tHEOPlayerToolStripMenuItem, toolStripSeparator29, mKIOPortalToolStripMenuItem }); samplePlayersToolStripMenuItem.Name = "samplePlayersToolStripMenuItem"; resources.ApplyResources(samplePlayersToolStripMenuItem, "samplePlayersToolStripMenuItem"); // @@ -2337,12 +2336,6 @@ private void InitializeComponent() toolStripSeparator29.Name = "toolStripSeparator29"; resources.ApplyResources(toolStripSeparator29, "toolStripSeparator29"); // - // hTML5CaptionMakerToolStripMenuItem - // - resources.ApplyResources(hTML5CaptionMakerToolStripMenuItem, "hTML5CaptionMakerToolStripMenuItem"); - hTML5CaptionMakerToolStripMenuItem.Name = "hTML5CaptionMakerToolStripMenuItem"; - hTML5CaptionMakerToolStripMenuItem.Click += hTML5CaptionMakerToolStripMenuItem_Click; - // // mKIOPortalToolStripMenuItem // mKIOPortalToolStripMenuItem.Image = Bitmaps.external_link; @@ -2516,7 +2509,7 @@ private void InitializeComponent() // pictureBoxMKIO // resources.ApplyResources(pictureBoxMKIO, "pictureBoxMKIO"); - pictureBoxMKIO.Image = Bitmaps.mk_io_blue; + pictureBoxMKIO.Image = Bitmaps.MKIO_Default; pictureBoxMKIO.Name = "pictureBoxMKIO"; pictureBoxMKIO.TabStop = false; pictureBoxMKIO.Click += pictureBoxMKIO_Click; @@ -2758,7 +2751,6 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; private System.Windows.Forms.ToolStripMenuItem withAzureMediaPlayerToolStripMenuItem2; private System.Windows.Forms.ToolStripMenuItem withAzureMediaPlayerToolStripMenuItem4; - private System.Windows.Forms.ToolStripMenuItem hTML5CaptionMakerToolStripMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripSeparator29; private System.Windows.Forms.ToolStripMenuItem toAnotherAzureMediaServicesAccountToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem enableAzureCDNToolStripMenuItem; diff --git a/AMSExplorer/Mainform.cs b/AMSExplorer/Mainform.cs index 5da1276d..d5ff70a7 100644 --- a/AMSExplorer/Mainform.cs +++ b/AMSExplorer/Mainform.cs @@ -38,6 +38,7 @@ using System.Data; using System.Diagnostics; using System.Drawing; +using System.Globalization; using System.IO; using System.Linq; using System.Net; @@ -94,9 +95,9 @@ private record QuotaMetrics(string Name, string CountMetric, string QuotaMetric) public string MKIOSubscriptionName; public string MKIOToken; - public List migratedAssetsToMKIO; - public List migratedStorageAccountsToMKIO; - public List migratedContentKeyPoliciesToMKIO; + public IEnumerable migratedAssetsToMKIO; + public IEnumerable migratedStorageAccountsToMKIO; + public IEnumerable migratedContentKeyPoliciesToMKIO; public Mainform(string[] args) { @@ -200,15 +201,15 @@ public Mainform(string[] args) migratedStorageAccountsToMKIO = MKIOclient.StorageAccounts.List(); migratedContentKeyPoliciesToMKIO = MKIOclient.ContentKeyPolicies.List(); - if (migratedStorageAccountsToMKIO.Count == 0) + if (migratedStorageAccountsToMKIO.Count() == 0) { - MessageBox.Show($"No storage account found in MK/IO.{Constants.endline}Please add the storage account(s) of this AMS account to MK/IO by going to the Storage tab, right click and select 'MediaKind MK/IO' / 'Add Storage...'", "No MK/IO Storage Account"); + MessageBox.Show($"No storage account found in MK.IO.{Constants.endline}Please add the storage account(s) of this AMS account to MK.IO by going to the Storage tab, right click and select 'MediaKind MK.IO' / 'Add Storage...'", "No MK.IO Storage Account"); } } catch { MKIOclient = null; - MessageBox.Show("Connection to MediaKind MK/IO failed. Restart the application to try again.", "No MK/IO Connection"); + MessageBox.Show("Connection to MediaKind MK.IO failed. Restart the application to try again.", "No MK.IO Connection"); } } @@ -217,7 +218,7 @@ public Mainform(string[] args) if (MKIOclient != null) { - toolStripStatusLabelConnection.Text += $" and '{_amsClient.credentialsEntry.MKIOSubscriptionName}' (MK/IO)"; + toolStripStatusLabelConnection.Text += $" and '{_amsClient.credentialsEntry.MKIOSubscriptionName}' (MK.IO)"; pictureBoxMKIO.Visible = true; } @@ -276,7 +277,7 @@ public Mainform(string[] args) { var seResults = _amsClient.AMSclient.GetStreamingEndpoints().GetAllAsync().ToListAsync().Result; - if (seResults.AsEnumerable().Where(o => o.Data.ResourceState == StreamingEndpointResourceState.Running).ToList().Count == 0) + if (seResults.AsEnumerable().Where(o => o.Data.ResourceState == Azure.ResourceManager.Media.Models.StreamingEndpointResourceState.Running).ToList().Count == 0) { TextBoxLogWriteLine("There is no streaming endpoint running in this account.", true); // Warning } @@ -298,6 +299,61 @@ public Mainform(string[] args) Environment.Exit(0); } + + // RETIREMENT DATA DISPLAY AND EXTENSION MANAGEMENT + try + { + // let's get the info about retirement date using REST + var restTransformClient = new AmsClientRest(_amsClient); + var retirementDate = (DateTime)restTransformClient.GetAccountRetirementDate(); + var culture = new CultureInfo("en-US"); + if (retirementDate > DateTime.Now) + { + // no extension but account still active + MessageBox.Show($"Your account will expire on {retirementDate.ToString("D", culture)}.\r\n\r\nAll live events and streaming endpoints will be stopped. After this date, no new content can be created.\r\nMigrate to another service as soon as possible.\r\nYour account will be read-only after this date and will be deleted 90 days after.", "Account active BUT", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + else + { + // account is disabled + var dif = retirementDate.AddDays(90) - DateTime.Now; + MessageBox.Show($"Your account was deactivated on {retirementDate.ToString("D", culture)}.\r\n\r\nNo new content can be created.\r\nMigrate to another service as soon as possible.\r\nYour account is read-only and will be deleted in {dif.Days} days.", "Account disabled", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + + if (retirementDate < new DateTime(2024, 8, 1)) + { + // we can propose an extension + if (MessageBox.Show($"Your AMS account is eligible to a one-time extension.\r\n\r\nIf your account is still active, extend now to avoid interruptions.\r\nIf your account is already deactivated, you will need to manually start your streaming endpoints if they are stopped. It may take up to an hour before you can stream your content again and see the new account expiration time.\r\n\r\nDo you want to extend your account for an additional 30 days?", "One time extension", MessageBoxButtons.YesNo, MessageBoxIcon.Question) + == DialogResult.Yes) + { + try + { + var returnCode = restTransformClient.ExtendAccount(); + if (returnCode == HttpStatusCode.Accepted) + { + MessageBox.Show("Account extended for 30 days.", "Account extended", MessageBoxButtons.OK, MessageBoxIcon.Information); + retirementDate = (DateTime)restTransformClient.GetAccountRetirementDate(); + } + else + { + MessageBox.Show($"Account extension error code {returnCode.ToString()}.", "Account extension", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + } + + catch (Exception ex) + { + MessageBox.Show("Account extension error : " + ex.Message, "Account extension", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + } + TextBoxLogWriteLine("The retirement date for this account is {0}.", retirementDate.ToString("d"), true); // Warning + } + + catch + { + + } + string mes = @"To use Azure CLI with this account, use a syntax like : ""az ams asset list -g {0} -a {1}"""; TextBoxLogWriteLine(mes, _amsClient.credentialsEntry.ResourceGroupName, _amsClient.credentialsEntry.AccountName); @@ -530,7 +586,7 @@ public void DoRefreshGridAssetV(bool firstime) { if (!firstime && MKIOclient != null) { - //Refresh MK/IO Assets + //Refresh MK.IO Assets migratedAssetsToMKIO = await MKIOclient.Assets.ListAsync(); dataGridViewAssetsV.ListMKIOAssets = migratedAssetsToMKIO; } @@ -2483,7 +2539,7 @@ private async Task DoCreateLocatorAsync(List SelectedAssets, contentKeyPolicyData.Options.Add( new Azure.ResourceManager.Media.Models.ContentKeyPolicyOption( - configuration: new ContentKeyPolicyFairPlayConfiguration + configuration: new Azure.ResourceManager.Media.Models.ContentKeyPolicyFairPlayConfiguration ( applicationSecretKey: formCencDelivery.FairPlayASK, fairPlayPfxPassword: formCencDelivery.FairPlayCertificate.Password, @@ -3297,7 +3353,7 @@ private void Mainform_Load(object sender, EventArgs e) comboBoxFilterTimeLiveEvent.SelectedIndex = 0; comboBoxStatusLiveEvent.Items.AddRange( - typeof(LiveEventResourceState) + typeof(Azure.ResourceManager.Media.Models.LiveEventResourceState) .GetProperties()//.GetFields() .Select(i => i.Name) .ToArray() @@ -4490,11 +4546,11 @@ private async Task DoRefreshGridStorageVAsync(bool firstime) dataGridViewStorage.Columns[1].HeaderText = "Id"; dataGridViewStorage.Columns[1].Width = 700; - // MK/IO column + // MK.IO column dataGridViewStorage.Columns.RemoveAt(2); var c = new DataGridViewCheckBoxColumn(); c.ValueType = typeof(bool); - c.HeaderText = "in MK/IO"; + c.HeaderText = "in MK.IO"; c.Name = "MKIOMigrated"; c.Visible = MKIOclient != null; c.Width = 700; @@ -4524,7 +4580,7 @@ private async Task DoRefreshGridStorageVAsync(bool firstime) dataGridViewStorage.Rows[rowi].Cells[0].ToolTipText = "Primary storage account"; } - // MK/IO flag storage display + // MK.IO flag storage display if (MKIOclient != null) { if (migratedStorageAccountsToMKIO.Select(s => s.Spec.Name).ToList().Contains(name)) @@ -4655,11 +4711,11 @@ public async Task DoRefreshGridCKPoliciesVAsync(bool firstime) dataGridViewCKPolicies.Columns[4].Name = "LastModified"; dataGridViewCKPolicies.Columns[4].Width = 110; - // MK/IO column + // MK.IO column dataGridViewCKPolicies.Columns.RemoveAt(5); var c = new DataGridViewCheckBoxColumn(); c.ValueType = typeof(bool); - c.HeaderText = "in MK/IO"; + c.HeaderText = "in MK.IO"; c.Name = "MKIOMigrated"; c.Visible = MKIOclient != null; c.Width = 700; @@ -4687,15 +4743,15 @@ public async Task DoRefreshGridCKPoliciesVAsync(bool firstime) foreach (Azure.ResourceManager.Media.Models.ContentKeyPolicyOption option in ckPolicy.Data.Options) { Type typeConfig = option.Configuration.GetType(); - if (typeConfig == typeof(ContentKeyPolicyPlayReadyConfiguration)) + if (typeConfig == typeof(Azure.ResourceManager.Media.Models.ContentKeyPolicyPlayReadyConfiguration)) { listTypeConfig.Add("PlayReady"); } - else if (typeConfig == typeof(ContentKeyPolicyWidevineConfiguration)) + else if (typeConfig == typeof(Azure.ResourceManager.Media.Models.ContentKeyPolicyWidevineConfiguration)) { listTypeConfig.Add("Widevine"); } - else if (typeConfig == typeof(ContentKeyPolicyFairPlayConfiguration)) + else if (typeConfig == typeof(Azure.ResourceManager.Media.Models.ContentKeyPolicyFairPlayConfiguration)) { listTypeConfig.Add("FairPlay"); } @@ -4712,7 +4768,7 @@ public async Task DoRefreshGridCKPoliciesVAsync(bool firstime) rowi = dataGridViewCKPolicies.Rows.Add(ckPolicy.Data.Name, "Error"); } - // MK/IO flag storage display + // MK.IO flag storage display if (MKIOclient != null) { dataGridViewCKPolicies.Rows[rowi].Cells[5].Value = migratedContentKeyPoliciesToMKIO.Select(s => s.Name).ToList().Contains(ckPolicy.Data.Name); @@ -4800,14 +4856,14 @@ private void dataGridViewLiveV_CellFormatting(object sender, DataGridViewCellFor if (cellLiveEventStateValue != null) { - LiveEventResourceState CS = (LiveEventResourceState)cellLiveEventStateValue; + Azure.ResourceManager.Media.Models.LiveEventResourceState CS = (Azure.ResourceManager.Media.Models.LiveEventResourceState)cellLiveEventStateValue; var mycolor = CS.ToString() switch { - nameof(LiveEventResourceState.Deleting) => Color.Red, - nameof(LiveEventResourceState.Stopping) => Color.OrangeRed, - nameof(LiveEventResourceState.Starting) => Color.DarkCyan, - nameof(LiveEventResourceState.Stopped) => Color.Blue, - nameof(LiveEventResourceState.Running) => Color.Green, + nameof(Azure.ResourceManager.Media.Models.LiveEventResourceState.Deleting) => Color.Red, + nameof(Azure.ResourceManager.Media.Models.LiveEventResourceState.Stopping) => Color.OrangeRed, + nameof(Azure.ResourceManager.Media.Models.LiveEventResourceState.Starting) => Color.DarkCyan, + nameof(Azure.ResourceManager.Media.Models.LiveEventResourceState.Stopped) => Color.Blue, + nameof(Azure.ResourceManager.Media.Models.LiveEventResourceState.Running) => Color.Green, _ => Color.Black, }; e.CellStyle.ForeColor = mycolor; @@ -4828,9 +4884,10 @@ private async Task DoResetLiveEventsAsync() plist.ForEach(p => LOList.Add(new Program.LiveOutputExt() { LiveOutputItem = p, LiveEventName = le.Data.Name })); } - IEnumerable liveOutputRunningQuery = LOList.Where(p => p.LiveOutputItem.Data.ResourceState == LiveOutputResourceState.Running); + IEnumerable liveOutputRunningQuery = LOList.Where(p => p.LiveOutputItem.Data.ResourceState == Azure.ResourceManager.Media.Models.LiveOutputResourceState.Running); - if (LOList.Where(p => p.LiveOutputItem.Data.ResourceState == LiveOutputResourceState.Creating || p.LiveOutputItem.Data.ResourceState == LiveOutputResourceState.Deleting).Any()) // live outputs are in creation or deletion mode + if (LOList.Where(p => p.LiveOutputItem.Data.ResourceState == Azure.ResourceManager.Media.Models.LiveOutputResourceState.Creating + || p.LiveOutputItem.Data.ResourceState == Azure.ResourceManager.Media.Models.LiveOutputResourceState.Deleting).Any()) // live outputs are in creation or deletion mode { MessageBox.Show("Some live outputs are being created or deleted. Live event(s) cannot be reset now.", "Live event(s) stop", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } @@ -5043,7 +5100,7 @@ private async Task DoDisplayLiveEventInfoAsync(List live if (data.Encoding.EncodingType != Azure.ResourceManager.Media.Models.LiveEventEncodingType.PassthroughStandard && data.Encoding.EncodingType != Azure.ResourceManager.Media.Models.LiveEventEncodingType.PassthroughBasic && data.Encoding != null - && (data.ResourceState == LiveEventResourceState.Stopped || data.ResourceState == LiveEventResourceState.StandBy)) + && (data.ResourceState == Azure.ResourceManager.Media.Models.LiveEventResourceState.Stopped || data.ResourceState == Azure.ResourceManager.Media.Models.LiveEventResourceState.StandBy)) { if (modifications.SystemPreset) { @@ -5199,7 +5256,7 @@ private async void dataGridViewLiveV_SelectionChanged(object sender, EventArgs e private async Task DoStopOrDeleteLiveEventsEngineAsync(List ListEvents, bool deleteLiveEvents) { // Stop the live events which run - List liveeventsrunning = ListEvents.Where(p => p.Data.ResourceState == LiveEventResourceState.Running).ToList(); + List liveeventsrunning = ListEvents.Where(p => p.Data.ResourceState == Azure.ResourceManager.Media.Models.LiveEventResourceState.Running).ToList(); string names = string.Join(", ", liveeventsrunning.Select(le => le.Data.Name).ToArray()); if (liveeventsrunning.Count > 0) @@ -5207,7 +5264,7 @@ private async Task DoStopOrDeleteLiveEventsEngineAsync(List states = liveeventsrunning.Select(p => p.Data.ResourceState).ToList(); + List states = liveeventsrunning.Select(p => p.Data.ResourceState).ToList(); Task[] taskcstop = liveeventsrunning.Select(c => c.StopAsync(WaitUntil.Completed, new LiveEventActionContent() { RemoveOutputsOnStop = false })).ToArray(); int complete = 0; @@ -5224,7 +5281,7 @@ private async Task DoStopOrDeleteLiveEventsEngineAsync(List await dataGridViewLiveEventsV.RefreshLiveEventAsync(loitemR, _amsClient)), null); - if (loitemR.Data.ResourceState == LiveEventResourceState.Stopped) + if (loitemR.Data.ResourceState == Azure.ResourceManager.Media.Models.LiveEventResourceState.Stopped) { TextBoxLogWriteLine("Live event stopped : {0}.", loitemR.Data.Name); Telemetry.TrackEvent("Live event stopped"); @@ -5262,7 +5319,7 @@ private async Task DoStopOrDeleteLiveEventsEngineAsync(List le.Data.Name).ToArray()); TextBoxLogWriteLine("Deleting live event(s) : {0}...", names2); - List states = ListEvents.Select(p => p.Data.ResourceState).ToList(); + List states = ListEvents.Select(p => p.Data.ResourceState).ToList(); Task[] taskcdel = ListEvents.Select(c => c.DeleteAsync(WaitUntil.Completed)).ToArray(); while (!taskcdel.All(t => t.IsCompleted)) @@ -5315,14 +5372,14 @@ private async Task DoStopOrDeleteLiveEventsEngineAsync(List ListEvents) { // Start the live events which are stopped - List liveevntsstopped = ListEvents.Where(p => p.Data.ResourceState == LiveEventResourceState.Stopped).ToList(); + List liveevntsstopped = ListEvents.Where(p => p.Data.ResourceState == Azure.ResourceManager.Media.Models.LiveEventResourceState.Stopped).ToList(); string names = string.Join(", ", liveevntsstopped.Select(le => le.Data.Name).ToArray()); if (liveevntsstopped.Count > 0) { try { TextBoxLogWriteLine("Starting live event(s) : {0}...", names); - List states = liveevntsstopped.Select(p => p.Data.ResourceState).ToList(); + List states = liveevntsstopped.Select(p => p.Data.ResourceState).ToList(); Task[] taskLEStart = liveevntsstopped.Select(c => c.StartAsync(WaitUntil.Completed)).ToArray(); int complete = 0; @@ -5339,7 +5396,7 @@ private async Task DoStartLiveEventsEngineAsync(List Lis { states[liveevntsstopped.IndexOf(loitem)] = loitemR.Data.ResourceState; dataGridViewLiveEventsV.BeginInvoke(new Action(async () => await dataGridViewLiveEventsV.RefreshLiveEventAsync(loitemR, _amsClient)), null); - if (loitemR.Data.ResourceState == LiveEventResourceState.Running) + if (loitemR.Data.ResourceState == Azure.ResourceManager.Media.Models.LiveEventResourceState.Running) { TextBoxLogWriteLine("Live event started : {0}.", loitemR.Data.Name); Telemetry.TrackEvent("Live event started"); @@ -5405,7 +5462,7 @@ private async Task DoDeleteLiveOutputsEngineAsync(List try { // delete programs ListOutputs.ToList().ForEach(p => TextBoxLogWriteLine("Live output '{0}' : deleting...", p.Data.Name)); - List states = ListOutputs.Select(p => p.Data.ResourceState).ToList(); + List states = ListOutputs.Select(p => p.Data.ResourceState).ToList(); Task[] tasks = ListOutputs.Select(p => p.DeleteAsync(WaitUntil.Completed)).ToArray(); while (!tasks.All(t => t.IsCompleted)) @@ -5474,14 +5531,14 @@ private async Task DoDeleteLiveOutputsEngineAsync(List private async Task DoStartStreamingEndpointEngineAsync(List ListStreamingEndpoints, AMSClientV3 amsClient) { // Start the streaming endpoint which are stopped - List streamingendpointsstopped = ListStreamingEndpoints.Where(p => p.Data.ResourceState == StreamingEndpointResourceState.Stopped).ToList(); + List streamingendpointsstopped = ListStreamingEndpoints.Where(p => p.Data.ResourceState == Azure.ResourceManager.Media.Models.StreamingEndpointResourceState.Stopped).ToList(); string names = string.Join(", ", streamingendpointsstopped.Select(le => le.Data.Name).ToArray()); if (streamingendpointsstopped.Count > 0) { try { TextBoxLogWriteLine("Starting streaming endpoint(s) : {0}...", names); - List states = streamingendpointsstopped.Select(p => p.Data.ResourceState).ToList(); + List states = streamingendpointsstopped.Select(p => p.Data.ResourceState).ToList(); Task[] taskSEStart = streamingendpointsstopped.Select(c => c.StartAsync(WaitUntil.Completed)).ToArray(); int complete = 0; @@ -5500,7 +5557,7 @@ private async Task DoStartStreamingEndpointEngineAsync(List ListStreamingEndpoints, bool deleteStreamingEndpoints) { // Stop the streaming endpoints which run - List sesrunning = ListStreamingEndpoints.Where(p => p.Data.ResourceState == StreamingEndpointResourceState.Running).ToList(); + List sesrunning = ListStreamingEndpoints.Where(p => p.Data.ResourceState == Azure.ResourceManager.Media.Models.StreamingEndpointResourceState.Running).ToList(); string names = string.Join(", ", sesrunning.Select(le => le.Data.Name).ToArray()); if (sesrunning.Count > 0) @@ -5572,7 +5629,7 @@ private async Task DoStopOrDeleteStreamingEndpointsEngineAsync(List states = sesrunning.Select(p => p.Data.ResourceState).ToList(); + List states = sesrunning.Select(p => p.Data.ResourceState).ToList(); Task[] taskSEstop = sesrunning.Select(c => c.StopAsync(WaitUntil.Completed)).ToArray(); int complete = 0; @@ -5590,7 +5647,7 @@ private async Task DoStopOrDeleteStreamingEndpointsEngineAsync(List le.Data.Name).ToArray()); TextBoxLogWriteLine("Deleting streaming endpoints(s) : {0}...", names2); - List states = ListStreamingEndpoints.Select(p => p.Data.ResourceState).ToList(); + List states = ListStreamingEndpoints.Select(p => p.Data.ResourceState).ToList(); Task[] taskSEdel = ListStreamingEndpoints.Select(c => c.DeleteAsync(WaitUntil.Completed)).ToArray(); while (!taskSEdel.All(t => t.IsCompleted)) @@ -5765,12 +5822,12 @@ private void dataGridViewProgramV_CellFormatting(object sender, DataGridViewCell if (cellprogramstatevalue != null) { - LiveOutputResourceState PS = (LiveOutputResourceState)cellprogramstatevalue; + Azure.ResourceManager.Media.Models.LiveOutputResourceState PS = (Azure.ResourceManager.Media.Models.LiveOutputResourceState)cellprogramstatevalue; var mycolor = PS.ToString() switch { - nameof(LiveOutputResourceState.Deleting) => Color.OrangeRed, - nameof(LiveOutputResourceState.Creating) => Color.DarkCyan, - nameof(LiveOutputResourceState.Running) => Color.Green, + nameof(Azure.ResourceManager.Media.Models.LiveOutputResourceState.Deleting) => Color.OrangeRed, + nameof(Azure.ResourceManager.Media.Models.LiveOutputResourceState.Creating) => Color.DarkCyan, + nameof(Azure.ResourceManager.Media.Models.LiveOutputResourceState.Running) => Color.Green, _ => Color.Black, }; e.CellStyle.ForeColor = mycolor; @@ -5816,14 +5873,14 @@ private void dataGridViewOriginsV_CellFormatting(object sender, DataGridViewCell if (cellSEstatevalue != null) { - StreamingEndpointResourceState SES = (StreamingEndpointResourceState)cellSEstatevalue; + var SES = (Azure.ResourceManager.Media.Models.StreamingEndpointResourceState)cellSEstatevalue; var mycolor = SES.ToString() switch { - nameof(StreamingEndpointResourceState.Deleting) => Color.Red, - nameof(StreamingEndpointResourceState.Stopping) => Color.OrangeRed, - nameof(StreamingEndpointResourceState.Starting) => Color.DarkCyan, - nameof(StreamingEndpointResourceState.Stopped) => Color.Red, - nameof(StreamingEndpointResourceState.Running) => Color.Green, + nameof(Azure.ResourceManager.Media.Models.StreamingEndpointResourceState.Deleting) => Color.Red, + nameof(Azure.ResourceManager.Media.Models.StreamingEndpointResourceState.Stopping) => Color.OrangeRed, + nameof(Azure.ResourceManager.Media.Models.StreamingEndpointResourceState.Starting) => Color.DarkCyan, + nameof(Azure.ResourceManager.Media.Models.StreamingEndpointResourceState.Stopped) => Color.Red, + nameof(Azure.ResourceManager.Media.Models.StreamingEndpointResourceState.Running) => Color.Green, _ => Color.Black, }; e.CellStyle.ForeColor = mycolor; @@ -6954,7 +7011,7 @@ private async Task ChangeAzureCDNAsync(bool enable) var streamingendpoint = (await ReturnSelectedStreamingEndpointsAsync()).FirstOrDefault(); - if (streamingendpoint.Data.ResourceState != StreamingEndpointResourceState.Stopped) + if (streamingendpoint.Data.ResourceState != Azure.ResourceManager.Media.Models.StreamingEndpointResourceState.Stopped) { MessageBox.Show(string.Format("Streaming endpoint must be stopped in order to {0} CDN.", enable ? "enable" : "disable"), "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; @@ -7010,7 +7067,7 @@ private async Task ManageMenuOptionsAzureCDNAsync(ToolStripMenuItem disableAzure if (streamingendpoints.Count == 1) { var se = streamingendpoints.FirstOrDefault(); - bool sestopped = (se.Data.ResourceState == StreamingEndpointResourceState.Stopped); + bool sestopped = (se.Data.ResourceState == Azure.ResourceManager.Media.Models.StreamingEndpointResourceState.Stopped); bool cdnenabled = (bool)se.Data.IsCdnEnabled; disableAzureCDNToolStripMenuItem1.Enabled = sestopped && cdnenabled; @@ -7125,13 +7182,13 @@ private async void contextMenuStripLiveEvents_Opening(object sender, CancelEvent ContextMenuItemLiveEventCopyPreviewURLToClipboard.Enabled = single && liveEvents.FirstOrDefault().Data.Preview != null; // start, stop, reset, delete, clone live event - ContextMenuItemLiveEventStart.Enabled = (single && liveEvents.FirstOrDefault().Data.ResourceState == LiveEventResourceState.Stopped) || several; - ContextMenuItemLiveEventStop.Enabled = (single && liveEvents.FirstOrDefault().Data.ResourceState == LiveEventResourceState.Running) || several; - ContextMenuItemLiveEventReset.Enabled = (single && liveEvents.FirstOrDefault().Data.ResourceState == LiveEventResourceState.Running) || several; + ContextMenuItemLiveEventStart.Enabled = (single && liveEvents.FirstOrDefault().Data.ResourceState == Azure.ResourceManager.Media.Models.LiveEventResourceState.Stopped) || several; + ContextMenuItemLiveEventStop.Enabled = (single && liveEvents.FirstOrDefault().Data.ResourceState == Azure.ResourceManager.Media.Models.LiveEventResourceState.Running) || several; + ContextMenuItemLiveEventReset.Enabled = (single && liveEvents.FirstOrDefault().Data.ResourceState == Azure.ResourceManager.Media.Models.LiveEventResourceState.Running) || several; ContextMenuItemLiveEventDelete.Enabled = oneOrMore; // playback preview - playbackTheProgramToolStripMenuItem.Enabled = (single && liveEvents.FirstOrDefault().Data.ResourceState == LiveEventResourceState.Running) || several; + playbackTheProgramToolStripMenuItem.Enabled = (single && liveEvents.FirstOrDefault().Data.ResourceState == Azure.ResourceManager.Media.Models.LiveEventResourceState.Running) || several; } private void liveLiveEventToolStripMenuItem_DropDownOpening(object sender, EventArgs e) @@ -9898,7 +9955,7 @@ private void mKIOPortalToolStripMenuItem_Click(object sender, EventArgs e) { StartInfo = new ProcessStartInfo { - FileName = Constants.DemoCaptionMaker, + FileName = Constants.MKIOPortal, UseShellExecute = true } }; @@ -9931,7 +9988,7 @@ private void pictureBoxMKIO_Click(object sender, EventArgs e) { StartInfo = new ProcessStartInfo { - FileName = Constants.MKIOApp + _amsClient.credentialsEntry.MKIOSubscriptionName, + FileName = Constants.MKIOPortal + _amsClient.credentialsEntry.MKIOSubscriptionName, UseShellExecute = true } }; diff --git a/AMSExplorer/Mainform.resx b/AMSExplorer/Mainform.resx index f346fe59..3de6c2c4 100644 --- a/AMSExplorer/Mainform.resx +++ b/AMSExplorer/Mainform.resx @@ -654,22 +654,22 @@ 286, 6 - 225, 22 + 223, 22 - Create asset(s) in MK/IO... + Create asset(s) in MK.IO... - 225, 22 + 223, 22 - Delete asset(s) from MK/IO... + Delete asset(s) from MK.IO... 289, 22 - MediaKind MK/IO + MediaKind MK.IO 290, 430 @@ -1273,22 +1273,22 @@ Key delivery configuration... - 183, 22 + 181, 22 - Create in MK/IO + Create in MK.IO - 183, 22 + 181, 22 - Delete from MK/IO... + Delete from MK.IO... 221, 22 - MediaKind MK/IO + MediaKind MK.IO 222, 142 @@ -3755,22 +3755,22 @@ 250, 6 - 235, 22 + 233, 22 - Add storage to MK/IO... + Add storage to MK.IO... - 235, 22 + 233, 22 - Remove storage from MK/IO... + Remove storage from MK.IO... 253, 22 - MediaKind MK/IO + MediaKind MK.IO 254, 98 @@ -4460,25 +4460,11 @@ 247, 6 - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAB/SURBVDhPzZBLDoAgDEThCrryhi48kS70RK69TZ1G - SJVvNSyc5BGSMo+AISJTiQUL4IMxThAPBA5LZhDPlQIOS1bwnAeCUjqwAykzSsG9fIDN7VWCsDwA+ZOK - IFX2uSQFQQ9yZR9bEowgV5bzlSdMIHWzWpDLjwVvwdpC8B0yJ5DUzNnliX0KAAAAAElFTkSuQmCC - - - - 250, 22 - - - HTML5 Caption Maker - 250, 22 - MK/IO Portal + MK.IO Portal 88, 20 @@ -4895,7 +4881,7 @@ 943, 27 - 80, 27 + 80, 24 AutoSize @@ -6097,12 +6083,6 @@ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - hTML5CaptionMakerToolStripMenuItem - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - mKIOPortalToolStripMenuItem diff --git a/AMSExplorer/Rest/AmsClientRest.cs b/AMSExplorer/Rest/AmsClientRest.cs index cbb18d8e..f0aeb559 100644 --- a/AMSExplorer/Rest/AmsClientRest.cs +++ b/AMSExplorer/Rest/AmsClientRest.cs @@ -15,6 +15,9 @@ //--------------------------------------------------------------------------------------------- +using System; +using System.Linq; +using System.Net; using System.Threading.Tasks; namespace AMSExplorer.Rest @@ -119,5 +122,49 @@ public async Task GetStreamingPolicyAsync(string streamingPolicyName) return await GetObjectContentAsync(URL); } + + // + // account extension + // + + private const string accountApiUrl = "subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Media/mediaservices/{2}?api-version=2023-01-01"; + + + public DateTime? GetAccountRetirementDate() + { + return Task.Run(async () => await GetAccountRetirementDateAsync()).GetAwaiter().GetResult(); + } + + public async Task GetAccountRetirementDateAsync() + { + DateTime? retirementDate = null; + string URL = GenerateApiUrl(accountApiUrl); + var responseHeaders = await GetObjectContentAndHeaderAsync(URL); + + if (responseHeaders.Item2.TryGetValues("ams-retirement-date", out var values)) + { + var headerValue = values.FirstOrDefault(); + // Use the header value as needed + retirementDate = DateTime.Parse(headerValue); + } + return retirementDate; + } + + public HttpStatusCode ExtendAccount() + { + return Task.Run(async () => await ExtendAccountAsync()).GetAwaiter().GetResult(); + } + + /// + /// + /// + /// HttpStatusCode.Accepted is ok + public async Task ExtendAccountAsync() + { + string URL = GenerateApiUrl(accountApiUrl); + var response = await PatchObjectContentExtendAMSAsync(URL); + + return response.Item2; + } } } \ No newline at end of file diff --git a/AMSExplorer/Rest/CoreForRest.cs b/AMSExplorer/Rest/CoreForRest.cs index 8988352a..8d08c30a 100644 --- a/AMSExplorer/Rest/CoreForRest.cs +++ b/AMSExplorer/Rest/CoreForRest.cs @@ -19,6 +19,7 @@ using Newtonsoft.Json; using System; using System.Linq; +using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; @@ -45,6 +46,17 @@ private string GenerateApiUrl(string url, string objectName) ); } + private string GenerateApiUrl(string url) + { + return _amsClient.environment.ArmEndpoint + + string.Format(url, + _amsClient.credentialsEntry.SubscriptionId, + _amsClient.credentialsEntry.ResourceGroupName, + _amsClient.credentialsEntry.AccountName + + ); + } + private string GetToken() { return _amsClient.authResult != null ? _amsClient.authResult.AccessToken : @@ -103,6 +115,50 @@ private async Task GetObjectContentAsync(string url) return responseContent; } + private async Task<(string, HttpResponseHeaders)> GetObjectContentAndHeaderAsync(string url) + { + HttpClient client = GetHttpClient(); + + // Request headers + client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _amsClient.authResult.AccessToken); + + HttpResponseMessage amsRequestResult = await client.GetAsync(url).ConfigureAwait(false); + + string responseContent = await amsRequestResult.Content.ReadAsStringAsync().ConfigureAwait(false); + + if (!amsRequestResult.IsSuccessStatusCode) + { + dynamic error = JsonConvert.DeserializeObject(responseContent); + throw new Exception((string)error?.error?.message); + } + return (responseContent, amsRequestResult.Headers); + } + + private async Task<(string,HttpStatusCode)> PatchObjectContentExtendAMSAsync(string url) + { + HttpClient client = GetHttpClient(); + + // Request headers + client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _amsClient.authResult.AccessToken); + + StringContent httpContent = new("{}", System.Text.Encoding.UTF8); + httpContent.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json; charset=utf-8"); + httpContent.Headers.Add("ams-extend-retirement", "True"); + + HttpResponseMessage amsRequestResult = await client.PatchAsync(url, httpContent).ConfigureAwait(false); + + string responseContent = await amsRequestResult.Content.ReadAsStringAsync().ConfigureAwait(false); + + if (!amsRequestResult.IsSuccessStatusCode) + { + dynamic error = JsonConvert.DeserializeObject(responseContent); + throw new Exception((string)error?.error?.message); + } + return (responseContent, amsRequestResult.StatusCode); + } + private async Task PostObjectContentAsync(string url) { HttpClient client = GetHttpClient(); diff --git a/AllReleaseNotes.md b/AllReleaseNotes.md index c12bf422..02e3689f 100644 --- a/AllReleaseNotes.md +++ b/AllReleaseNotes.md @@ -7,12 +7,12 @@ ## Version 5.8.0.0 (November 23rd, 2023) brings the following features and improvements -* Support for MediaKind MK/IO - * UI to connect to MK/IO instance - * Provide Storage access to MK/IO (using add/remove commands) - * Content Key Policies migration to MK/IO (create/delete commands) - * Assets migration to MK/IO (create/delete commands) with migration of locators - * Display MK/IO info and streaming URLs in asset information +* Support for MediaKind MK.IO + * UI to connect to MK.IO instance + * Provide Storage access to MK.IO (using add/remove commands) + * Content Key Policies migration to MK.IO (create/delete commands) + * Assets migration to MK.IO (create/delete commands) with migration of locators + * Display MK.IO info and streaming URLs in asset information * Nugget packages and documentation update ## Version 5.7.2.0 (July 25th, 2023) brings the following features and improvements diff --git a/README.md b/README.md index 479ef3b6..48f630a0 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,9 @@ products: Azure Media Services Explorer (AMSE) is a .NET 7.0 (C#) application for Windows that does upload, download, encode and stream VOD and live content with [Azure Media Services v3](https://azure.microsoft.com/services/media-services/). -Important : Azure Media Services will be [retired on June 30th, 2024](https://learn.microsoft.com/azure/media-services/latest/azure-media-services-retirement). +Important : Azure Media Services will be [retired on June 30th, 2024](https://learn.microsoft.com/azure/media-services/latest/azure-media-services-retirement) but you can request a one month extension with this tool. -This tool can help you migrate to MediaKind [MK/IO](https://io.mediakind.com). +This tool can help you migrate to MediaKind [MK.IO](https://mk.io) as it supports asset, locator and content key policy migration. ## Installing the tool with Winget @@ -42,23 +42,23 @@ You need to install the [Microsoft Visual Studio Installer Projects](https://mar This solution requires [.NET SDK 7.0](https://dotnet.microsoft.com/download/dotnet/7.0) to compile. -## MediaKind MK/IO +## MediaKind MK.IO -This version of the Azure Media Services Explorer supports creating assets in MediaKind MK/IO from existing AMS assets. +This version of the Azure Media Services Explorer supports creating assets in MediaKind MK.IO from existing AMS assets. It also support locators and content key policies migration. -You must have an active MediaKind MK/IO subscription and access to the MediaKind I/O portal: -[https://io.mediakind.com](https://io.mediakind.com) +You must have an active MediaKind MK.IO subscription and access to the MediaKind I/O portal: +[https://mk.io](https://mk.io) -To connect with MK I/O you will need: +To connect with MK.IO you will need: - Subscription Name -- MK/IO Token +- MK.IO Token The subscription name is also called the resource name and is available in the portal. -An MK/IO token can be obtained by following the directions contained in this [article](https://support.mediakind.com/portal/en/kb/articles/how-to-use-mkio-apis-step-by-step). +An MK.IO token can be obtained by following the directions contained in this [article](https://support.mk.io/portal/en/kb/articles/how-to-use-mkio-apis-step-by-step). -AMSE relies on the MK/IO SDK available [here](https://www.nuget.org/packages/MK.IO). +AMSE relies on the MK.IO SDK available [here](https://www.nuget.org/packages/MK.IO). Learn more on the migration: diff --git a/Setup/Setup.vdproj b/Setup/Setup.vdproj index af144237..14de90a2 100644 --- a/Setup/Setup.vdproj +++ b/Setup/Setup.vdproj @@ -229,15 +229,15 @@ { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:Azure Media Services Explorer" - "ProductCode" = "8:{6E3549D8-A012-4A8B-950E-8B4B11589319}" - "PackageCode" = "8:{47343314-82AF-4439-862B-2C1660E80D85}" + "ProductCode" = "8:{90D16C3D-D2C3-4B21-9B0C-F352D14A9A95}" + "PackageCode" = "8:{1482EF6F-2B62-4CAB-9ACA-6D1B613401C8}" "UpgradeCode" = "8:{5145C7B3-B64F-42CA-A111-45E636E02027}" "AspNetVersion" = "8:4.0.30319.0" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:TRUE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:TRUE" - "ProductVersion" = "8:5.8.1" + "ProductVersion" = "8:5.8.2" "Manufacturer" = "8:Microsoft Corporation" "ARPHELPTELEPHONE" = "8:" "ARPHELPLINK" = "8:"