X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/6403b8728d3120d6cb22583b3963d2a030e88aa3..b6017f4edc19188fa26f74ff0da2bedb94841dcf:/apps/workbench/app/models/collection.rb diff --git a/apps/workbench/app/models/collection.rb b/apps/workbench/app/models/collection.rb index 78b0c36376..24e6da59ba 100644 --- a/apps/workbench/app/models/collection.rb +++ b/apps/workbench/app/models/collection.rb @@ -1,3 +1,5 @@ +require "arvados/keep" + class Collection < ArvadosBase MD5_EMPTY = 'd41d8cd98f00b204e9800998ecf8427e' @@ -18,25 +20,33 @@ class Collection < ArvadosBase true end + def manifest + Keep::Manifest.new(manifest_text || "") + end + + def files + # This method provides backwards compatibility for code that relied on + # the old files field in API results. New code should use manifest + # methods directly. + if @files.nil? or manifest_text_changed? + @files = manifest.each_file.to_a + end + @files + end + def content_summary ApplicationController.helpers.human_readable_bytes_html(total_bytes) + " " + super end def total_bytes - if files - tot = 0 - files.each do |file| - tot += file[2] - end - tot - else - 0 - end + manifest.each_file.inject(0) { |sum, filespec| sum + filespec.last } end def files_tree - return [] if files.empty? - tree = files.group_by { |file_spec| File.split(file_spec.first) } + tree = manifest.each_file.group_by do |file_spec| + File.split(file_spec.first) + end + return [] if tree.empty? # Fill in entries for empty directories. tree.keys.map { |basedir, _| File.split(basedir) }.each do |splitdir| until tree.include?(splitdir)