From f4432932152ae262cf7e87353c3eda12d367cf1f Mon Sep 17 00:00:00 2001
From: Travis Ralston <travpc@gmail.com>
Date: Wed, 26 Jun 2019 19:07:16 -0600
Subject: [PATCH] Don't convert nil values from singleflight

Fixes https://github.com/turt2live/matrix-media-repo/issues/178
---
 .../download_controller/download_controller.go     | 14 ++++++++++++--
 .../preview_controller/preview_controller.go       |  7 ++++++-
 .../thumbnail_controller/thumbnail_controller.go   |  7 ++++++-
 3 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/controllers/download_controller/download_controller.go b/controllers/download_controller/download_controller.go
index 7dae57d7..4cf85eec 100644
--- a/controllers/download_controller/download_controller.go
+++ b/controllers/download_controller/download_controller.go
@@ -130,7 +130,12 @@ func GetMedia(origin string, mediaId string, downloadRemote bool, blockForMedia
 		return vals
 	})
 
-	return v.(*types.MinimalMedia), err
+	var value *types.MinimalMedia
+	if v != nil {
+		value = v.(*types.MinimalMedia)
+	}
+
+	return value, err
 }
 
 func FindMinimalMediaRecord(origin string, mediaId string, downloadRemote bool, ctx context.Context, log *logrus.Entry) (*types.MinimalMedia, error) {
@@ -258,5 +263,10 @@ func FindMediaRecord(origin string, mediaId string, downloadRemote bool, ctx con
 		return media, nil
 	})
 
-	return v.(*types.Media), err
+	var value *types.Media
+	if v != nil {
+		value = v.(*types.Media)
+	}
+
+	return value, err
 }
diff --git a/controllers/preview_controller/preview_controller.go b/controllers/preview_controller/preview_controller.go
index 82c7b600..2c32758a 100644
--- a/controllers/preview_controller/preview_controller.go
+++ b/controllers/preview_controller/preview_controller.go
@@ -59,7 +59,12 @@ func GetPreview(urlStr string, onHost string, forUserId string, atTs int64, ctx
 		return result.preview, result.err
 	})
 
-	return v.(*types.UrlPreview), err
+	var value *types.UrlPreview
+	if v != nil {
+		value = v.(*types.UrlPreview)
+	}
+
+	return value, err
 }
 
 func cachedPreviewToReal(cached *types.CachedUrlPreview) (*types.UrlPreview, error) {
diff --git a/controllers/thumbnail_controller/thumbnail_controller.go b/controllers/thumbnail_controller/thumbnail_controller.go
index 3c9a3219..e91f954a 100644
--- a/controllers/thumbnail_controller/thumbnail_controller.go
+++ b/controllers/thumbnail_controller/thumbnail_controller.go
@@ -193,7 +193,12 @@ func GetThumbnail(origin string, mediaId string, desiredWidth int, desiredHeight
 		return vals
 	})
 
-	return v.(*types.StreamedThumbnail), err
+	var value *types.StreamedThumbnail
+	if v != nil {
+		value = v.(*types.StreamedThumbnail)
+	}
+
+	return value, err
 }
 
 func GetOrGenerateThumbnail(media *types.Media, width int, height int, animated bool, method string, ctx context.Context, log *logrus.Entry) (*types.Thumbnail, error) {
-- 
GitLab