diff --git a/atlas/api.py b/atlas/api.py
index 2366255b..bd08276e 100644
--- a/atlas/api.py
+++ b/atlas/api.py
@@ -201,6 +201,31 @@ def check_image_hash(request, hash: str):
data = {"status": "success", "id": False}
return data
+@router.post("/check_image_hashes/", auth=django_auth)
+def check_images_hashes(request, hashes: List[str]):
+ """Checks a list of image hashes and returns the series id / url if found
+
+ Return format
+ { "hash_id": {"id": "series_id|false", "url": "series_url|false"}, ...}
+ """
+
+ hash_status = {}
+
+ for hash in hashes:
+ try:
+ print(hash)
+ series_image = SeriesImage.objects.get(image_md5_hash=hash)
+ data = {
+ "id": series_image.pk,
+ "url": series_image.series.get_absolute_url(),
+ }
+ except SeriesImage.DoesNotExist:
+ data = { "id": False, "url": False}
+
+ hash_status[hash] = data
+
+ return hash_status
+
@router.get("/generate_image_hash/{id}", auth=django_auth)
def generate_image_hash(request, id: int):
series_image = SeriesImage.objects.get(pk=id)
diff --git a/atlas/templates/atlas/user_upload_viewer.html b/atlas/templates/atlas/user_upload_viewer.html
new file mode 100755
index 00000000..c41ec564
--- /dev/null
+++ b/atlas/templates/atlas/user_upload_viewer.html
@@ -0,0 +1,40 @@
+
+{% extends "atlas/base.html" %}
+
+{% block content %}
+
SeriesInstanceUID: {{series_id}}
+
+
+
+
+
+
+
+
+
+
+ Series info
+
+
+ Image details
+
+ {% for dicom in dicoms %}
+ {% if dicom.image %}
+ [{{image.image.size|filesizeformat}}]
+ {% endif %}
+
+ {{image.image_md5_hash}} ({{image.is_dicom}})
+
+
+
+ {% endfor %}
+
+
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/atlas/templates/atlas/user_uploads.html b/atlas/templates/atlas/user_uploads.html
index 63efec2b..f9d5c284 100644
--- a/atlas/templates/atlas/user_uploads.html
+++ b/atlas/templates/atlas/user_uploads.html
@@ -14,13 +14,19 @@
{% if series_list %}
diff --git a/atlas/urls.py b/atlas/urls.py
index fe24a0d2..ad029cf4 100755
--- a/atlas/urls.py
+++ b/atlas/urls.py
@@ -36,6 +36,7 @@ urlpatterns = [
path("collection/user", views.user_collections, name="user_collections"),
path("uploads", views.user_uploads, name="user_uploads"),
path("uploads/case/", views.user_uploads, name="user_uploads_case"),
+ path("uploads/series_id/", views.user_uploads_series, name="user_uploads_series"),
path(
"collection/create",
views.CaseCollectionCreate.as_view(),
diff --git a/atlas/views.py b/atlas/views.py
index 538bb64e..7c85b51d 100755
--- a/atlas/views.py
+++ b/atlas/views.py
@@ -301,6 +301,20 @@ def user_collections(request):
return render(request, "atlas/user_collections.html", {"collections": collections})
+@login_required
+def user_uploads_series(request, series_instance_uid: str):
+
+ # We don't restrict to teh uploading user here. Should we?
+ dicoms = UncategorisedDicom.objects.filter(series_instance_uid=series_instance_uid)
+
+ if not dicoms:
+ raise Http404("Series not found")
+
+ return render(
+ request, "atlas/user_upload_viewer.html", {"dicoms": dicoms, "series_id": series_instance_uid}
+ )
+
+
@login_required
def user_uploads(request, case_id: int | None = None):