diff --git a/.idea/.idea.Zero-K/.idea/projectSettingsUpdater.xml b/.idea/.idea.Zero-K/.idea/projectSettingsUpdater.xml
index 86cc6c63e..64af657f5 100644
--- a/.idea/.idea.Zero-K/.idea/projectSettingsUpdater.xml
+++ b/.idea/.idea.Zero-K/.idea/projectSettingsUpdater.xml
@@ -1,6 +1,7 @@
+
\ No newline at end of file
diff --git a/Zero-K.info/Controllers/ReplaysController.cs b/Zero-K.info/Controllers/ReplaysController.cs
index 9c5b0e6a1..fcdb029ca 100644
--- a/Zero-K.info/Controllers/ReplaysController.cs
+++ b/Zero-K.info/Controllers/ReplaysController.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
@@ -18,7 +19,17 @@ public ActionResult Index() {
public ActionResult Download(string name)
{
- return Redirect(ReplayStorage.Instance.GetFileUrl(name));
+ try
+ {
+ var url = ReplayStorage.Instance.GetFileUrl(name);
+ if (url != null) return Redirect(url);
+ }
+ catch (Exception ex)
+ {
+ Trace.TraceWarning("Error downloading replay {0}, attempting local copy: {1}", name, ex.Message);
+ }
+
+ return File(ReplayStorage.Instance.GetLocalFileContent(name), "application/octet-stream", name);
}
}
diff --git a/Zero-K.info/Web.config b/Zero-K.info/Web.config
index 9ce0c3ad0..0ce38f56a 100644
--- a/Zero-K.info/Web.config
+++ b/Zero-K.info/Web.config
@@ -147,7 +147,7 @@
-
+
diff --git a/ZkLobbyServer/ReplayStorage.cs b/ZkLobbyServer/ReplayStorage.cs
index 0617159a1..c69f80806 100644
--- a/ZkLobbyServer/ReplayStorage.cs
+++ b/ZkLobbyServer/ReplayStorage.cs
@@ -14,12 +14,26 @@ namespace ZkLobbyServer
public class ReplayStorage
{
public static ReplayStorage Instance { get; } = new ReplayStorage();
-
+
BlobContainerClient azureContainer;
+ string basePath = GlobalConst.SpringieDataDir;
+
internal ReplayStorage()
{
- azureContainer = new BlobContainerClient(MiscVar.ReplaysConnectionString, MiscVar.ReplaysContainerName);
+ try
+ {
+ if (string.IsNullOrEmpty(MiscVar.ReplaysConnectionString) || string.IsNullOrEmpty(MiscVar.ReplaysContainerName))
+ {
+ Trace.TraceWarning("Replay storage not configured, replays won't be stored in blobs");
+ return;
+ }
+
+ azureContainer = new BlobContainerClient(MiscVar.ReplaysConnectionString, MiscVar.ReplaysContainerName);
+ } catch (Exception ex)
+ {
+ Trace.TraceError("Error initializing replay storage: {0}", ex.Message);
+ }
}
public async Task UploadAndDeleteFileAsync(string path)
@@ -65,17 +79,25 @@ public async Task GetFileContent(string replayName)
return stream.ToArray();
}
+
+ public byte[] GetLocalFileContent(string replayName)
+ {
+ var path = Path.Combine(basePath, "demos-server", replayName);
+ if (!File.Exists(path)) return null;
+ return File.ReadAllBytes(path);
+ }
+
public async Task MigrateReplays()
{
// replays themselves
- var files = Directory.GetFiles(@"c:\Projekty\springie_spring\demos-server");
+ var files = Directory.GetFiles(Path.Combine(basePath,"demos-server"));
foreach (var fi in files)
{
await UploadAndDeleteFileAsync(fi);
}
// infologs
- files = Directory.GetFiles(@"c:\Projekty\springie_spring","infolog_*.txt");
+ files = Directory.GetFiles(basePath,"infolog_*.txt");
foreach (var fi in files)
{
await UploadAndDeleteFileAsync(fi);