* recording file/manager fixes and aging of recordings
This commit is contained in:
parent
164fe8db61
commit
8cad33a303
|
|
@ -1,8 +1,10 @@
|
|||
|
||||
-- this is to make sure we don't delete any recordings for 7 days
|
||||
UPDATE recordings SET updated_at = NOW();
|
||||
|
||||
ALTER TABLE recordings ADD COLUMN deleted BOOLEAN DEFAULT FALSE NOT NULL;
|
||||
|
||||
|
||||
DROP VIEW user_syncs;
|
||||
|
||||
CREATE VIEW user_syncs AS
|
||||
|
|
|
|||
|
|
@ -21,7 +21,15 @@ module JamRuby
|
|||
|
||||
raise 'no user id specified' if user_id.blank?
|
||||
|
||||
query = UserSync.includes(recorded_track: [{recording: [:owner, {claimed_recordings: [:share_token]}, {recorded_tracks: [:user]}, {comments:[:user]}, :likes, :plays, :mixes]}, user: [], instrument:[]], mix: [], quick_mix:[]).where(user_id: user_id).paginate(:page => page, :per_page => limit).order('created_at DESC, unified_id')
|
||||
query = UserSync
|
||||
.includes(recorded_track: [{recording: [:owner, {claimed_recordings: [:share_token]}, {recorded_tracks: [:user]}, {comments:[:user]}, :likes, :plays, :mixes]}, user: [], instrument:[]], mix: [], quick_mix:[])
|
||||
.joins("LEFT OUTER JOIN claimed_recordings ON claimed_recordings.user_id = user_syncs.user_id AND claimed_recordings.recording_id = user_syncs.recording_id")
|
||||
.where(user_id: user_id)
|
||||
.where(%Q{
|
||||
((claimed_recordings IS NULL OR claimed_recordings.discarded = TRUE) AND fully_uploaded = FALSE) OR (claimed_recordings IS NOT NULL AND claimed_recordings.discarded = FALSE)
|
||||
})
|
||||
.paginate(:page => page, :per_page => limit)
|
||||
.order('created_at DESC, unified_id')
|
||||
|
||||
|
||||
# allow selection of single user_sync, by ID
|
||||
|
|
|
|||
|
|
@ -65,10 +65,9 @@ module JamRuby
|
|||
|
||||
cleanup_files
|
||||
|
||||
@@log.info("audiomixer job successful. mix_id #{quick_mix_id}")
|
||||
@@log.info("quickmixer job successful. mix_id #{quick_mix_id}")
|
||||
|
||||
rescue Exception => e
|
||||
puts "EEOUOU #{e}"
|
||||
post_error(@quick_mix, e)
|
||||
raise
|
||||
end
|
||||
|
|
|
|||
|
|
@ -41,6 +41,22 @@ describe UserSync do
|
|||
user_syncs[2].quick_mix.should eq(quick_mix)
|
||||
end
|
||||
|
||||
# https://jamkazam.atlassian.net/browse/VRFS-2450
|
||||
it "no longer returned after fully uploaded and unclaimed" do
|
||||
mix = FactoryGirl.create(:mix)
|
||||
mix.recording.duration = 1
|
||||
mix.recording.save!
|
||||
quick_mix = FactoryGirl.create(:quick_mix_completed, recording:mix.recording, user: mix.recording.recorded_tracks[0].user, autowire:false, fully_uploaded: true)
|
||||
mix.recording.recorded_tracks[0].fully_uploaded = true
|
||||
mix.recording.recorded_tracks[0].save!
|
||||
mix.recording.claimed_recordings[0].discarded = true
|
||||
mix.recording.claimed_recordings[0].save!
|
||||
|
||||
data = UserSync.index({user_id: mix.recording.recorded_tracks[0].user.id})
|
||||
user_syncs = data[:query]
|
||||
user_syncs.length.should == 0
|
||||
end
|
||||
|
||||
it "two mixes, one not belonging to querier" do
|
||||
mix1 = FactoryGirl.create(:mix)
|
||||
mix2 = FactoryGirl.create(:mix)
|
||||
|
|
@ -71,8 +87,8 @@ describe UserSync do
|
|||
describe "one recording with two users" do
|
||||
let!(:recording1) {
|
||||
recording = FactoryGirl.create(:recording, owner: user1, band: nil, duration:1)
|
||||
recording.recorded_tracks << FactoryGirl.create(:recorded_track, recording: recording, user: recording.owner)
|
||||
recording.recorded_tracks << FactoryGirl.create(:recorded_track, recording: recording, user: user2)
|
||||
recording.recorded_tracks << FactoryGirl.create(:recorded_track, recording: recording, user: recording.owner, fully_uploaded:false)
|
||||
recording.recorded_tracks << FactoryGirl.create(:recorded_track, recording: recording, user: user2, fully_uploaded:false)
|
||||
recording.save!
|
||||
recording.reload
|
||||
recording
|
||||
|
|
@ -177,10 +193,10 @@ describe UserSync do
|
|||
describe "one recording with multi-track users" do
|
||||
let!(:recording1) {
|
||||
recording = FactoryGirl.create(:recording, owner: user1, band: nil, duration:1)
|
||||
recording.recorded_tracks << FactoryGirl.create(:recorded_track, recording: recording, user: recording.owner)
|
||||
recording.recorded_tracks << FactoryGirl.create(:recorded_track, recording: recording, user: recording.owner)
|
||||
recording.recorded_tracks << FactoryGirl.create(:recorded_track, recording: recording, user: user2)
|
||||
recording.recorded_tracks << FactoryGirl.create(:recorded_track, recording: recording, user: user2)
|
||||
recording.recorded_tracks << FactoryGirl.create(:recorded_track, recording: recording, user: recording.owner, fully_uploaded:false)
|
||||
recording.recorded_tracks << FactoryGirl.create(:recorded_track, recording: recording, user: recording.owner, fully_uploaded:false)
|
||||
recording.recorded_tracks << FactoryGirl.create(:recorded_track, recording: recording, user: user2, fully_uploaded:false)
|
||||
recording.recorded_tracks << FactoryGirl.create(:recorded_track, recording: recording, user: user2, fully_uploaded:false)
|
||||
recording.save!
|
||||
recording.reload
|
||||
recording
|
||||
|
|
@ -228,6 +244,7 @@ describe UserSync do
|
|||
recording = FactoryGirl.create(:recording, owner: user1, band: nil, duration:1)
|
||||
recording.recorded_tracks << FactoryGirl.create(:recorded_track, recording: recording, user: recording.owner)
|
||||
recording.recorded_tracks << FactoryGirl.create(:recorded_track, recording: recording, user: user2)
|
||||
claimed_recording = FactoryGirl.create(:claimed_recording, user: recording.owner, recording: recording, discarded:false)
|
||||
recording.save!
|
||||
recording.reload
|
||||
recording
|
||||
|
|
|
|||
|
|
@ -204,7 +204,7 @@
|
|||
// @FIXME -- this will need to be tweaked when we allow unfollowing
|
||||
$('div[data-band-id='+newFollowing.band_id+'] .search-m-follow').removeClass('button-orange').addClass('button-grey');
|
||||
},
|
||||
error: app.ajaxError
|
||||
error: app.ajaxError(arguments)
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -603,16 +603,26 @@ context.JK.SyncViewer = class SyncViewer
|
|||
title: "Confirm Deletion",
|
||||
html: "Are you sure you want to delete this recording?",
|
||||
yes: =>
|
||||
@rest.deleteRecordingClaim(recordingId).done((response)->
|
||||
@rest.deleteRecordingClaim(recordingId).done((response)=>
|
||||
cmd =
|
||||
{ type: 'recording_directory',
|
||||
action: 'delete',
|
||||
queue: 'cleanup',
|
||||
recording_id: recordingId}
|
||||
|
||||
context.JK.ackBubble($delete, 'command-enqueued', {}, {offsetParent: $delete.closest('.dialog')})
|
||||
|
||||
logger.debug("enqueueing delete #{recordingId}")
|
||||
# now check if the sync is gone entirely, allowing us to delete it from the UI
|
||||
@rest.getUserSync({user_sync_id: recordingId}).done((userSync) =>
|
||||
# the user sync is still here. tell user it'll be done as soon as they've uploaded their files
|
||||
context.JK.ackBubble($delete, 'file-sync-delayed-deletion', {}, {offsetParent: $delete.closest('.dialog')})
|
||||
)
|
||||
.fail((xhr) =>
|
||||
if xhr.status == 404
|
||||
# the userSync is gone; remove from file manager dynamically
|
||||
$recordingHolder = $details.closest('.recording-holder')
|
||||
$recordingHolder.slideUp()
|
||||
else
|
||||
@app.ajaxError(arguments)
|
||||
)
|
||||
|
||||
context.jamClient.OnTrySyncCommand(cmd)
|
||||
)
|
||||
|
|
@ -622,7 +632,7 @@ context.JK.SyncViewer = class SyncViewer
|
|||
return false;
|
||||
|
||||
displaySize: (size) =>
|
||||
# size is in bytes. divide by million, and round to one decimal place
|
||||
# size is in bytes. divide by million, anxosd round to one decimal place
|
||||
megs = Math.round(size * 10 / (1024 * 1024) ) / 10
|
||||
"#{megs}M"
|
||||
|
||||
|
|
|
|||
|
|
@ -148,8 +148,12 @@
|
|||
|
||||
<script type="text/template" id="template-help-command-enqueued">
|
||||
<div class="help-recording-command-enqueued">
|
||||
Your request will be executed immediately, or after File Manager finishes it's current task.
|
||||
Your request will be executed as soon as possible.
|
||||
</div>
|
||||
</script>
|
||||
|
||||
|
||||
<script type="text/template" id="template-help-file-sync-delayed-deletion">
|
||||
<div class="file-sync-delayed-deletion">
|
||||
The files associated with this recording will be deleted as soon as your client has uploaded your tracks and stream mix from this recording.
|
||||
</div>
|
||||
</script>
|
||||
|
|
@ -46,23 +46,12 @@ describe ApiUserSyncsController do
|
|||
}
|
||||
|
||||
it "no claimed_recordings" do
|
||||
# every is supposed to upload immediately, but no downloads until you try claim it. The assertions below validate this
|
||||
|
||||
# if there are no claims, then no one wants the recording. no usersyncs
|
||||
get :index, { :format => 'json', :id => user1.id }
|
||||
json = JSON.parse(response.body, :symbolize_names => true)
|
||||
json[:next].should be_nil
|
||||
json[:entries].length.should == 2
|
||||
|
||||
recorded_track1 = json[:entries][0]
|
||||
recorded_track1[:upload][:should_upload].should be_true
|
||||
recorded_track1[:upload][:too_many_upload_failures].should be_false
|
||||
recorded_track1[:download][:should_download].should be_false
|
||||
recorded_track1[:download][:too_many_downloads].should be_false
|
||||
|
||||
recorded_track2 = json[:entries][1]
|
||||
recorded_track2[:upload][:should_upload].should be_true
|
||||
recorded_track2[:upload][:too_many_upload_failures].should be_false
|
||||
recorded_track2[:download][:should_download].should be_false
|
||||
recorded_track2[:download][:too_many_downloads].should be_false
|
||||
json[:entries].length.should == 0
|
||||
end
|
||||
|
||||
it "recording isn't over" do
|
||||
|
|
@ -79,6 +68,9 @@ describe ApiUserSyncsController do
|
|||
|
||||
FactoryGirl.create(:claimed_recording, user: user1, recording: recording1, discarded:false)
|
||||
|
||||
recording1.recorded_tracks[0].fully_uploaded = false
|
||||
recording1.recorded_tracks[0].save!
|
||||
|
||||
get :index, { :format => 'json', :id => user1.id }
|
||||
json = JSON.parse(response.body, :symbolize_names => true)
|
||||
json[:next].should be_nil
|
||||
|
|
@ -100,7 +92,7 @@ describe ApiUserSyncsController do
|
|||
get :index, { :format => 'json', :id => user2.id }
|
||||
json = JSON.parse(response.body, :symbolize_names => true)
|
||||
json[:next].should be_nil
|
||||
json[:entries].length.should == 2
|
||||
json[:entries].length.should == 1
|
||||
|
||||
recorded_track1 = json[:entries][0]
|
||||
recorded_track1[:upload][:should_upload].should be_true
|
||||
|
|
@ -108,32 +100,17 @@ describe ApiUserSyncsController do
|
|||
recorded_track1[:download][:should_download].should be_false
|
||||
recorded_track1[:download][:too_many_downloads].should be_false
|
||||
|
||||
recorded_track2 = json[:entries][1]
|
||||
recorded_track2[:upload][:should_upload].should be_true
|
||||
recorded_track2[:upload][:too_many_upload_failures].should be_false
|
||||
recorded_track2[:download][:should_download].should be_false
|
||||
recorded_track2[:download][:too_many_downloads].should be_false
|
||||
end
|
||||
|
||||
it "one user decides to discard the recording" do
|
||||
FactoryGirl.create(:claimed_recording, user: user1, recording: recording1, discarded:true)
|
||||
FactoryGirl.create(:claimed_recording, user: user2, recording: recording1, discarded:false)
|
||||
|
||||
# it's a length of zero because recorded_tracks default to 'fully_uploaded = true'. so nothing to do for this user
|
||||
get :index, { :format => 'json', :id => user1.id }
|
||||
json = JSON.parse(response.body, :symbolize_names => true)
|
||||
json[:next].should be_nil
|
||||
json[:entries].length.should == 2
|
||||
|
||||
recorded_track1 = json[:entries][0]
|
||||
recorded_track1[:upload][:should_upload].should be_true
|
||||
recorded_track1[:upload][:too_many_upload_failures].should be_false
|
||||
recorded_track1[:download][:should_download].should be_false
|
||||
recorded_track1[:download][:too_many_downloads].should be_false
|
||||
|
||||
recorded_track2 = json[:entries][1]
|
||||
recorded_track2[:upload][:should_upload].should be_true
|
||||
recorded_track2[:upload][:too_many_upload_failures].should be_false
|
||||
recorded_track2[:download][:should_download].should be_false
|
||||
recorded_track2[:download][:too_many_downloads].should be_false
|
||||
json[:entries].length.should == 0
|
||||
|
||||
controller.current_user = user2
|
||||
get :index, { :format => 'json', :id => user2.id }
|
||||
|
|
@ -141,16 +118,17 @@ describe ApiUserSyncsController do
|
|||
json[:next].should be_nil
|
||||
json[:entries].length.should == 2
|
||||
|
||||
|
||||
recorded_track1 = json[:entries][0]
|
||||
recorded_track1[:upload][:should_upload].should be_true
|
||||
recorded_track1[:upload][:too_many_upload_failures].should be_false
|
||||
recorded_track1[:download][:should_download].should be_false
|
||||
recorded_track1[:download][:should_download].should be_true
|
||||
recorded_track1[:download][:too_many_downloads].should be_false
|
||||
|
||||
recorded_track2 = json[:entries][1]
|
||||
recorded_track2[:upload][:should_upload].should be_true
|
||||
recorded_track2[:upload][:too_many_upload_failures].should be_false
|
||||
recorded_track2[:download][:should_download].should be_false
|
||||
recorded_track2[:download][:should_download].should be_true
|
||||
recorded_track2[:download][:too_many_downloads].should be_false
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue