Skip to content

Commit

Permalink
update cwd on rename / duplicate
Browse files Browse the repository at this point in the history
  • Loading branch information
mmckegg committed Aug 4, 2017
1 parent a817888 commit 2aa7a5f
Show file tree
Hide file tree
Showing 13 changed files with 91 additions and 149 deletions.
11 changes: 6 additions & 5 deletions lib/file-object.js
@@ -1,9 +1,9 @@
var resolveNode = require('lib/resolve-node')
var getDirName = require('path').dirname

var resolve = require('path').resolve
var relative = require('path').relative
var Path = require('path')

var resolve = require('mutant/resolve')
var Observ = require('mutant/value')
var Event = require('geval')
var watch = require('mutant/watch')
Expand All @@ -16,6 +16,7 @@ module.exports = FileObject

function FileObject (parentContext) {
var context = Object.create(parentContext)
context.cwd = Observ()

var obs = Observ({})
var set = obs.set
Expand Down Expand Up @@ -115,11 +116,11 @@ function FileObject (parentContext) {
obs.resolved = Observ()

obs.resolvePath = function (src) {
return resolve(context.cwd, src)
return Path.resolve(resolve(context.cwd), src)
}

obs.relative = function (path) {
var value = relative(context.cwd, path)
var value = Path.relative(resolve(context.cwd), path)
if (/^\./.exec(value)) {
return value
} else {
Expand All @@ -141,7 +142,7 @@ function FileObject (parentContext) {
loading = true
obs.file = ObservFile(path)
releaseRename = watch(obs.file.path, obs.path.set)
context.cwd = getDirName(path)
context.cwd.set(getDirName(path))
releaseClose = obs.file.onClose(onClose)
updateFile = JsonFile(obs.file, updateNode)
}
Expand Down
65 changes: 32 additions & 33 deletions lib/observ-audio-buffer.js
@@ -1,6 +1,7 @@
var Observ = require('mutant/value')
var watch = require('mutant/watch')
var resolve = require('path').resolve
var computed = require('mutant/computed')
var Path = require('path')
var ObservFile = require('lib/observ-file')

module.exports = ObservAudioBuffer
Expand All @@ -11,45 +12,42 @@ function ObservAudioBuffer (context) {
obs.cuePoints = Observ()

var releases = []
var lastSrc = null

obs(function (data) {
if (lastSrc !== data.src) {
lastSrc = data.src
update(data.src)
}
})
var src = computed(obs, descriptor => descriptor.src)
var path = computed([context.cwd, src], (a, b) => a && b && Path.resolve(a, b) || null)

function update (src) {
var path = resolve(context.cwd, src)
var timePath = path + '.time'
var unwatch = watch(path, (path) => {
if (path) {
var timePath = path + '.time'

while (releases.length) {
releases.pop()()
}

context.fs.exists(path, function (exists) {
if (exists) {
var file = ObservFile(path, 'arraybuffer')
parseAudioBuffer(file, obs.currentValue.set, context.audio)
releases.push(file.close)
} else {
obs.currentValue.set(null)
while (releases.length) {
releases.pop()()
}
})

context.fs.exists(timePath, function (exists) {
if (exists) {
var file = ObservFile(timePath, 'arraybuffer')
parseFloat32Array(file, obs.cuePoints.set)
releases.push(file.close)
} else {
obs.cuePoints.set(null)
}
})
}
context.fs.exists(path, function (exists) {
if (exists) {
var file = ObservFile(path, 'arraybuffer')
parseAudioBuffer(file, obs.currentValue.set, context.audio)
releases.push(file.close)
} else {
obs.currentValue.set(null)
}
})

context.fs.exists(timePath, function (exists) {
if (exists) {
var file = ObservFile(timePath, 'arraybuffer')
parseFloat32Array(file, obs.cuePoints.set)
releases.push(file.close)
} else {
obs.cuePoints.set(null)
}
})
}
})

obs.destroy = function () {
unwatch()
while (releases.length) {
releases.pop()()
}
Expand All @@ -74,6 +72,7 @@ function parseAudioBuffer (obs, target, audioContext) {
audioContext.decodeAudioData(data, function (audioBuffer) {
target(audioBuffer)
}, function (err) {
if (err) throw err
target(null)
})
} else {
Expand Down
61 changes: 6 additions & 55 deletions lib/params/sample-trimmer.js
Expand Up @@ -2,6 +2,7 @@ var h = require('lib/h')
var svg = require('lib/svg')
var computed = require('mutant/computed')
var watch = require('mutant/watch')
var resolve = require('mutant/watch')

var QueryParam = require('lib/query-param')

Expand All @@ -10,7 +11,6 @@ var DomEvent = require('lib/dom-event')

var read = require('lib/read')
var getValue = require('lib/get-value')
var importSample = require('lib/import-sample')
var cancelEvent = require('lib/cancel-event')

var WaveHook = require('./wave-hook.js')
Expand Down Expand Up @@ -102,7 +102,10 @@ function slicesSvg (slices, width, height) {
return svg('line', {
stroke: 'rgba(0,0,0,0.4)',
'stroke-width': '3px',
x1: x, x2: x, y1: 0, y2: height
x1: x,
x2: x,
y1: 0,
y2: height
})
})
}
Expand All @@ -118,62 +121,13 @@ function dragStart (ev) {
var data = read(this.data) || {}
if (data.buffer && data.buffer.src) {
ev.dataTransfer.setData('loop-drop/sample-path', this.data.context.fileObject.resolvePath(data.buffer.src))
ev.dataTransfer.setData('cwd', this.data.context.cwd)
ev.dataTransfer.setData('cwd', resolve(this.data.context.cwd))
ev.dataTransfer.dropEffect = 'link'
} else {
ev.preventDefault()
}
}

function dragOver (ev) {
ev.stopPropagation()
var item = ev.dataTransfer.items[0]
if (item && item.kind === 'file' && item.type.match(/^(audio|video)\//)) {
ev.currentTarget.classList.add('-dragOver')
ev.dataTransfer.dropEffect = 'copy'
ev.preventDefault()
} else if (ev.dataTransfer.types.includes('loop-drop/sample-path')) {
ev.currentTarget.classList.add('-dragOver')
ev.dataTransfer.dropEffect = 'link'
ev.preventDefault()
}
}

function dragLeave (ev) {
ev.currentTarget.classList.remove('-dragOver')
}

function drop (ev) {
var node = this.data
var data = read(node)
var context = this.data.context
var item = ev.dataTransfer.items[0]

ev.preventDefault()
dragLeave(ev)

var currentPath = data.buffer && data.buffer.src && node.context.fileObject.resolvePath(data.buffer.src) || null

var path = item.kind === 'file'
? ev.dataTransfer.items[0].getAsFile().path
: ev.dataTransfer.getData('loop-drop/sample-path')

if (path && path !== currentPath) {
importSample(context, path, function (err, descriptor) {
if (err) throw err
for (var k in descriptor) {
QueryParam(node, k).set(descriptor[k])
}
})
}

}

function getGainTransform(value){
var offsetHeight = (((currentHeightScale*height) - height) / 2) / currentHeightScale
return 'scale(' + currentWidthScale + ' ' + currentHeightScale + ') translate(0 ' + -offsetHeight + ')'
}

function handleChange (event) {
this.data.set(event.currentTarget.value)
}
Expand All @@ -186,9 +140,6 @@ function subtract (a, b) {
return a - b
}


function noop(){}

function ValueHook (obs) {
return function (element) {
return watch(obs, function (value) {
Expand Down
3 changes: 2 additions & 1 deletion lib/session-recorder.js
Expand Up @@ -2,6 +2,7 @@ var watch = require('mutant/watch')
var computed = require('mutant/computed')
var Struct = require('mutant/struct')
var Value = require('mutant/value')
var resolve = require('mutant/resolve')
var join = require('path').join
var strftime = require('strftime')
var recordToDisk = require('lib/record-to-disk')
Expand All @@ -26,7 +27,7 @@ function SessionRecorder (context, active) {
// constant signal to ensure file has no gaps
Silence(context.audio).connect(obs.input)

var recordingsPath = join(context.cwd, '~recordings')
var recordingsPath = join(resolve(context.cwd), '~recordings')
mkdirp(recordingsPath, { fs: context.fs })

var isRecording = computed([obs.recording, active], (a, b) => a || b)
Expand Down
5 changes: 3 additions & 2 deletions lib/wave-hook.js
@@ -1,13 +1,14 @@
var WaveSvg = require('lib/wave-svg')
var resolve = require('path').resolve
var Path = require('path')
var resolve = require('mutant/resolve')

module.exports = WaveHook

var cache = {}

function WaveHook (context, src) {
return function (element) {
var path = resolve(context.cwd, src)
var path = Path.resolve(resolve(context.cwd), src)
if (!cache[path]) {
cache[path] = WaveSvg(path, context)
}
Expand Down
3 changes: 2 additions & 1 deletion lib/widgets/orderable.js
@@ -1,5 +1,6 @@
var h = require('lib/h')
var MPE = require('lib/mouse-position-event')
var resolve = require('mutant/resolve')

module.exports = Orderable

Expand Down Expand Up @@ -40,7 +41,7 @@ function dragStart (ev) {
ev.ordering = true
ev.node = ev.data
ev.dataTransfer.setData('loop-drop/' + type, JSON.stringify(data))
ev.dataTransfer.setData('cwd', ev.data.context.cwd)
ev.dataTransfer.setData('cwd', resolve(ev.data.context.cwd))
window.currentDrag = ev
}

Expand Down
19 changes: 8 additions & 11 deletions nodes/audio-buffer/object.js
@@ -1,7 +1,8 @@
var Observ = require('mutant/value')
var watch = require('mutant/watch')
var ObservAudioBuffer = require('lib/observ-audio-buffer')
var resolve = require('path').resolve
var Path = require('path')
var computed = require('mutant/computed')

module.exports = ObservAudioBufferCached

Expand All @@ -19,29 +20,25 @@ function ObservAudioBufferCached (context) {
}

var release = null
var lastSrc = null
var src = computed(obs, descriptor => descriptor.src)
var path = computed([context.cwd, src], (a, b) => a && b && Path.resolve(a, b) || null)

obs(function (data) {
if (lastSrc !== data.src) {
lastSrc = data.src
update(data.src)
}
})
var unwatch = watch(path, update)

obs.destroy = function () {
unwatch()
update(null)
}

return obs

// scoped

function update (src) {
function update (path) {
release && release()
release = null

if (src) {
var path = resolve(context.cwd, src)
if (path) {
var instance = cache[path]

if (!instance) {
Expand Down
15 changes: 6 additions & 9 deletions nodes/clip/object.js
Expand Up @@ -3,7 +3,7 @@ var Struct = require('mutant/struct')
var Property = require('lib/property')
var watch = require('mutant/watch')
var resolve = require('mutant/resolve')
var resolvePath = require('path').resolve
var Path = require('path')
var computed = require('mutant/computed')
var pull = require('pull-stream')
var toPcm = require('lib/to-pcm')
Expand Down Expand Up @@ -58,11 +58,11 @@ function AudioTimelineClip (context) {

obs.position = Property(0)

var lastPath = null
obs.src(function (value) {
// preload
var path = resolvePath(context.cwd, value)
if (path !== lastPath) {
var path = computed([context.cwd, obs.src], (a, b) => a && b && Path.resolve(a, b) || null)
var queue = []

watch(path, (path) => {
if (path) {
loadingMeta = true
refreshLoading()

Expand Down Expand Up @@ -99,8 +99,6 @@ function AudioTimelineClip (context) {
}
})

var queue = []

var releaseScheduler = context.scheduler(function (schedule) {
for (var i = queue.length - 1; i >= 0; i--) {
var item = queue[i]
Expand All @@ -117,7 +115,6 @@ function AudioTimelineClip (context) {

obs.start = function (at, timeOffset, duration) {
var time = at
var remaining = duration
var cues = getCueList(timeOffset, duration)
cues.forEach(cue => {
queue.push({
Expand Down

0 comments on commit 2aa7a5f

Please sign in to comment.