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 }}

+ +
@@ -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 +}