X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/949c388c5ec3bc4f8cc6b3d503c11dcd20e5bbd4..20c594c3c683a492132c0fc105241689ee116c10:/apps/workbench/app/models/collection.rb diff --git a/apps/workbench/app/models/collection.rb b/apps/workbench/app/models/collection.rb index 6022d82433..2fe4e2b748 100644 --- a/apps/workbench/app/models/collection.rb +++ b/apps/workbench/app/models/collection.rb @@ -8,6 +8,10 @@ class Collection < ArvadosBase !!locator.to_s.match("^#{MD5_EMPTY}(\\+.*)?\$") end + def self.goes_in_folders? + true + end + def content_summary human_readable_bytes_html(total_bytes) + " " + super end @@ -22,6 +26,27 @@ class Collection < ArvadosBase end end + def files_tree + tree = files.group_by { |file_spec| File.split(file_spec.first) } + # Fill in entries for empty directories. + tree.keys.map { |basedir, _| File.split(basedir) }.each do |splitdir| + until tree.include?(splitdir) + tree[splitdir] = [] + splitdir = File.split(splitdir.first) + end + end + dir_to_tree = lambda do |dirname| + # First list subdirectories, with their files inside. + subnodes = tree.keys.select { |bd, td| (bd == dirname) and (td != '.') } + .sort.flat_map do |parts| + [parts + [nil]] + dir_to_tree.call(File.join(parts)) + end + # Then extend that list with files in this directory. + subnodes + tree[File.split(dirname)] + end + dir_to_tree.call('.') + end + def attribute_editable?(attr) false end