|
@@ -12,6 +12,18 @@
|
|
|
private string ExportExtension { get; set; } = "brrr";
|
|
|
private int ExportCodePage { get; set; } = 0;
|
|
|
private string ExportMime { get; set; } = "brrrr";
|
|
|
+
|
|
|
+ private string _exportDataUri = null;
|
|
|
+}
|
|
|
+
|
|
|
+@code{
|
|
|
+
|
|
|
+
|
|
|
+ protected override void OnInitialized()
|
|
|
+ {
|
|
|
+ base.OnInitialized();
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
<FnzBootstrapModal @ref="mdl">
|
|
@@ -77,10 +89,30 @@
|
|
|
</div>
|
|
|
</Body>
|
|
|
<Footer>
|
|
|
- <button class="btn btn-primary" @onclick="DoExport">
|
|
|
- <i class="bi bi-save"></i>
|
|
|
- Save
|
|
|
- </button>
|
|
|
+ <div class="input-group">
|
|
|
+ <button class="btn btn-primary" @onclick="DoExport">
|
|
|
+ <i class="bi bi-save"></i>
|
|
|
+ Save
|
|
|
+ </button>
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @if (_exportDataUri == null)
|
|
|
+ {
|
|
|
+ <button class="btn btn-primary" @onclick="@DoExportAsDataUri">
|
|
|
+ <i class="bi bi-gear"></i>
|
|
|
+ Generate Data URI
|
|
|
+ </button>
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ <span class="btn btn-success">
|
|
|
+ <i class="bi bi-link"></i>
|
|
|
+ <a href="@_exportDataUri">Data URI</a>
|
|
|
+ </span>
|
|
|
+ }
|
|
|
+ </div>
|
|
|
+
|
|
|
</Footer>
|
|
|
</FnzBootstrapModal>
|
|
|
|
|
@@ -94,9 +126,10 @@
|
|
|
ExportDate = $"{DateTime.Now:yyMMdd}";
|
|
|
ExportCodePage = 65001;
|
|
|
ExportExtension = "m3u8";
|
|
|
- ExportMime = "text/mpegurl";
|
|
|
+ ExportMime = "application/mpegurl";
|
|
|
|
|
|
PlaylistId = playlistId;
|
|
|
+ _exportDataUri = null;
|
|
|
StateHasChanged();
|
|
|
mdl.Show();
|
|
|
}
|
|
@@ -113,6 +146,29 @@
|
|
|
|
|
|
public void DoExport()
|
|
|
{
|
|
|
+ var outBuf = GenerateM3U( );
|
|
|
+
|
|
|
+ var sbFn = new StringBuilder(ExportName);
|
|
|
+
|
|
|
+ if (ExportDomainCheck) sbFn.Append($"-{ExportDomain}");
|
|
|
+ if (ExportDateCheck) sbFn.Append($"-{ExportDate}");
|
|
|
+
|
|
|
+ sbFn.Append($".{ExportExtension}");
|
|
|
+
|
|
|
+
|
|
|
+ // export
|
|
|
+ JSRuntime.InvokeVoidAsync("fnz.downloadFile", sbFn.ToString(), ExportMime, outBuf);
|
|
|
+ mdl.Hide();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void DoExportAsDataUri()
|
|
|
+ {
|
|
|
+ var outBuf = GenerateM3U( );
|
|
|
+ _exportDataUri = $"data:{ExportMime};base64," + Convert.ToBase64String(outBuf, Base64FormattingOptions.None);
|
|
|
+ }
|
|
|
+
|
|
|
+ private byte[] GenerateM3U( )
|
|
|
+ {
|
|
|
var encoding = Encoding.GetEncoding(ExportCodePage);
|
|
|
|
|
|
// generate m3u content
|
|
@@ -128,18 +184,10 @@
|
|
|
sbM3.AppendLine(track.Path.UrlEscape());
|
|
|
}
|
|
|
|
|
|
- var sbFn = new StringBuilder(ExportName);
|
|
|
-
|
|
|
- if (ExportDomainCheck) sbFn.Append($"-{ExportDomain}");
|
|
|
- if (ExportDateCheck) sbFn.Append($"-{ExportDate}");
|
|
|
-
|
|
|
- sbFn.Append($".{ExportExtension}");
|
|
|
-
|
|
|
var outBuf = encoding.GetBytes(sbM3.ToString());
|
|
|
|
|
|
- // export
|
|
|
- JSRuntime.InvokeVoidAsync("fnz.downloadFile", sbFn.ToString(), ExportMime, outBuf);
|
|
|
- mdl.Hide();
|
|
|
+
|
|
|
+ return outBuf;
|
|
|
}
|
|
|
|
|
|
|