diff --git a/client/pages/config/library-stats.vue b/client/pages/config/library-stats.vue
index 7a926e73..aa4200dc 100644
--- a/client/pages/config/library-stats.vue
+++ b/client/pages/config/library-stats.vue
@@ -60,6 +60,25 @@
+
+
{{ $strings.HeaderStatsLargestItems }}
+
{{ $strings.MessageNoItems }}
+
+
+
+
+ {{ index + 1 }}. {{ ab.title }}
+
+
+
+
{{ $bytesPretty(ab.size) }}
+
+
+
+
+
@@ -105,6 +124,13 @@ export default {
if (!this.top10LongestItems.length) return 0
return this.top10LongestItems[0].duration
},
+ top10LargestItems() {
+ return this.libraryStats ? this.libraryStats.largestItems || [] : []
+ },
+ largestItemSize() {
+ if (!this.top10LargestItems.length) return 0
+ return this.top10LargestItems[0].size
+ },
authorsWithCount() {
return this.libraryStats ? this.libraryStats.authorsWithCount : []
},
@@ -135,4 +161,4 @@ export default {
this.init()
}
}
-
\ No newline at end of file
+
diff --git a/client/strings/en-us.json b/client/strings/en-us.json
index ecbd7f32..aba99d1c 100644
--- a/client/strings/en-us.json
+++ b/client/strings/en-us.json
@@ -138,6 +138,7 @@
"HeaderSettingsGeneral": "General",
"HeaderSettingsScanner": "Scanner",
"HeaderSleepTimer": "Sleep Timer",
+ "HeaderStatsLargestItems": "Largest Items",
"HeaderStatsLongestItems": "Longest Items (hrs)",
"HeaderStatsMinutesListeningChart": "Minutes Listening (last 7 days)",
"HeaderStatsRecentSessions": "Recent Sessions",
@@ -615,4 +616,4 @@
"ToastSocketFailedToConnect": "Socket failed to connect",
"ToastUserDeleteFailed": "Failed to delete user",
"ToastUserDeleteSuccess": "User deleted"
-}
\ No newline at end of file
+}
diff --git a/server/controllers/LibraryController.js b/server/controllers/LibraryController.js
index d09d52d4..ece93ca2 100644
--- a/server/controllers/LibraryController.js
+++ b/server/controllers/LibraryController.js
@@ -637,6 +637,7 @@ class LibraryController {
var authorsWithCount = libraryHelpers.getAuthorsWithCount(libraryItems)
var genresWithCount = libraryHelpers.getGenresWithCount(libraryItems)
var durationStats = libraryHelpers.getItemDurationStats(libraryItems)
+ var sizeStats = libraryHelpers.getItemSizeStats(libraryItems)
var stats = {
totalItems: libraryItems.length,
totalAuthors: Object.keys(authorsWithCount).length,
@@ -645,6 +646,7 @@ class LibraryController {
longestItems: durationStats.longestItems,
numAudioTracks: durationStats.numAudioTracks,
totalSize: libraryHelpers.getLibraryItemsTotalSize(libraryItems),
+ largestItems: sizeStats.largestItems,
authorsWithCount,
genresWithCount
}
@@ -755,4 +757,4 @@ class LibraryController {
next()
}
}
-module.exports = new LibraryController()
\ No newline at end of file
+module.exports = new LibraryController()
diff --git a/server/utils/libraryHelpers.js b/server/utils/libraryHelpers.js
index 93d23466..5bbee2af 100644
--- a/server/utils/libraryHelpers.js
+++ b/server/utils/libraryHelpers.js
@@ -280,6 +280,19 @@ module.exports = {
}
},
+ getItemSizeStats(libraryItems) {
+ var sorted = sort(libraryItems).desc(li => li.media.size)
+ var top10 = sorted.slice(0, 10).map(li => ({ id: li.id, title: li.media.metadata.title, size: li.media.size })).filter(i => i.size > 0)
+ var totalSize = 0
+ libraryItems.forEach((li) => {
+ totalSize += li.media.size
+ })
+ return {
+ totalSize,
+ largestItems: top10
+ }
+ },
+
getLibraryItemsTotalSize(libraryItems) {
var totalSize = 0
libraryItems.forEach((li) => {
@@ -843,4 +856,4 @@ module.exports = {
return Object.values(albums)
}
-}
\ No newline at end of file
+}