Browse Source

export: add data URI generation

Coder 1 year ago
parent
commit
baada23d12

+ 63 - 15
FNZCM/FNZCM.BlazorWasm/UI/Views/Default/Playlist/PlaylistExportDialog.razor

@@ -12,6 +12,18 @@
     private string ExportExtension { get; set; } = "brrr";
     private string ExportExtension { get; set; } = "brrr";
     private int ExportCodePage { get; set; } = 0;
     private int ExportCodePage { get; set; } = 0;
     private string ExportMime { get; set; } = "brrrr";
     private string ExportMime { get; set; } = "brrrr";
+
+    private string _exportDataUri = null;
+}
+
+@code{
+
+
+    protected override void OnInitialized()
+    {
+        base.OnInitialized();
+    }
+
 }
 }
 
 
 <FnzBootstrapModal @ref="mdl">
 <FnzBootstrapModal @ref="mdl">
@@ -77,10 +89,30 @@
         </div>
         </div>
     </Body>
     </Body>
     <Footer>
     <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>
     </Footer>
 </FnzBootstrapModal>
 </FnzBootstrapModal>
 
 
@@ -94,9 +126,10 @@
         ExportDate = $"{DateTime.Now:yyMMdd}";
         ExportDate = $"{DateTime.Now:yyMMdd}";
         ExportCodePage = 65001;
         ExportCodePage = 65001;
         ExportExtension = "m3u8";
         ExportExtension = "m3u8";
-        ExportMime = "text/mpegurl";
+        ExportMime = "application/mpegurl";
 
 
         PlaylistId = playlistId;
         PlaylistId = playlistId;
+        _exportDataUri = null;
         StateHasChanged();
         StateHasChanged();
         mdl.Show();
         mdl.Show();
     }
     }
@@ -113,6 +146,29 @@
 
 
     public void DoExport()
     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);
         var encoding = Encoding.GetEncoding(ExportCodePage);
 
 
         // generate m3u content
         // generate m3u content
@@ -128,18 +184,10 @@
             sbM3.AppendLine(track.Path.UrlEscape());
             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());
         var outBuf = encoding.GetBytes(sbM3.ToString());
 
 
-        // export
-        JSRuntime.InvokeVoidAsync("fnz.downloadFile", sbFn.ToString(), ExportMime, outBuf);
-        mdl.Hide();
+
+        return outBuf;
     }
     }