diff --git a/models/site.rb b/models/site.rb index 9be8b8d4..d9cee147 100644 --- a/models/site.rb +++ b/models/site.rb @@ -988,8 +988,16 @@ class Site < Sequel::Model end def actual_space_used - space = Dir.glob(File.join(files_path, '*')).collect {|p| File.size(p)}.inject {|sum,x| sum += x} - space.nil? ? 0 : space + space = 0 + + files = Dir.glob File.join(files_path, '**', '*') + + files.each do |file| + next if File.directory? file + space += File.size file + end + + space end def total_space_used @@ -1231,7 +1239,6 @@ class Site < Sequel::Model def store_files(files, opts={}) results = [] new_size = 0 - html_uploaded = false if too_many_files?(files.length) results << false @@ -1239,43 +1246,53 @@ class Site < Sequel::Model end files.each do |file| - html_uploaded = true if file[:filename].match HTML_REGEX - existing_size = 0 + site_file = site_files_dataset.where(path: scrubbed_path(file[:filename])).first + if site_file existing_size = site_file.size end res = store_file(file[:filename], file[:tempfile], file[:opts] || opts) + if res == true new_size -= existing_size new_size += file[:tempfile].size end + results << res end - if results.include? true && opts[:new_install] != true - if((files.select {|f| f[:filename] =~ /^\/?index.html$/}.length > 0 || site_changed == true)) - index_changed = true - else - index_changed = false + if results.include? true + + DB["update sites set space_used=space_used#{new_size < 0 ? new_size.to_s : '+'+new_size.to_s} where id=?", self.id].first + + if opts[:new_install] != true + if files.select {|f| f[:filename] =~ /^\/?index.html$/}.length > 0 || site_changed == true + index_changed = true + else + index_changed = false + end + + index_changed = false if empty_index? + + time = Time.now + + sql = DB["update sites set site_changed=?, site_updated_at=?, updated_at=?, changed_count=changed_count+1 where id=?", + index_changed, + time, + time, + self.id + ] + sql.first + + ArchiveWorker.perform_in 24.hours, self.id end - index_changed = false if empty_index? - - time = Time.now - sql = DB["update sites set site_changed=?, site_updated_at=?, updated_at=?, changed_count=changed_count+1, space_used=space_used#{new_size < 0 ? new_size.to_s : '+'+new_size.to_s} where id=?", - index_changed, - time, - time, - self.id - ] - sql.first reload #SiteChange.record self, relative_path unless opts[:new_install] - ArchiveWorker.perform_in 24.hours, self.id end results @@ -1286,7 +1303,6 @@ class Site < Sequel::Model path = scrubbed_path path site_file = site_files_dataset.where(path: path).first site_file.destroy if site_file - true end diff --git a/tests/site_file_tests.rb b/tests/site_file_tests.rb index 65f10d78..b83c87c1 100644 --- a/tests/site_file_tests.rb +++ b/tests/site_file_tests.rb @@ -30,19 +30,22 @@ describe 'site_files' do end it 'works' do + initial_space_used = @site.space_used uploaded_file = Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg') upload 'files[]' => uploaded_file PurgeCacheOrderWorker.jobs.clear - @site.reload.space_used.must_equal uploaded_file.size + @site.reload.space_used.must_equal initial_space_used + uploaded_file.size + @site.actual_space_used.must_equal @site.space_used file_path = @site.files_path 'test.jpg' File.exists?(file_path).must_equal true delete_file filename: 'test.jpg' File.exists?(file_path).must_equal false SiteFile[site_id: @site.id, path: 'test.jpg'].must_be_nil - @site.reload.space_used.must_equal 0 + @site.reload.space_used.must_equal initial_space_used + @site.actual_space_used.must_equal @site.space_used PurgeCacheOrderWorker.jobs.length.must_equal 0 DeleteCacheOrderWorker.jobs.length.must_equal 1 @@ -173,14 +176,20 @@ describe 'site_files' do username, pathname = dirname_purge['args'] username.must_equal @site.username pathname.must_equal '/' + + @site.space_used.must_equal @site.actual_space_used + + (@site.space_used > 0).must_equal true end it 'provides the correct space used after overwriting an existing file' do + initial_space_used = @site.space_used uploaded_file = Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg') upload 'files[]' => uploaded_file second_uploaded_file = Rack::Test::UploadedFile.new('./tests/files/img/test.jpg', 'image/jpeg') upload 'files[]' => second_uploaded_file - @site.reload.space_used.must_equal second_uploaded_file.size + @site.reload.space_used.must_equal initial_space_used + second_uploaded_file.size + @site.space_used.must_equal @site.actual_space_used end it 'does not change title for subdir index.html' do @@ -193,6 +202,7 @@ describe 'site_files' do end it 'succeeds with valid file' do + initial_space_used = @site.space_used uploaded_file = Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg') upload 'files[]' => uploaded_file last_response.body.must_match /successfully uploaded/i @@ -204,7 +214,8 @@ describe 'site_files' do @site.reload @site.space_used.wont_equal 0 - @site.space_used.must_equal uploaded_file.size + @site.space_used.must_equal initial_space_used + uploaded_file.size + @site.space_used.must_equal @site.actual_space_used ThumbnailWorker.jobs.length.must_equal 1 ThumbnailWorker.drain