mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2024-12-24 19:11:44 +01:00
37 lines
1.2 KiB
JavaScript
37 lines
1.2 KiB
JavaScript
|
const fs = require('fs-extra')
|
||
|
|
||
|
function escapeSingleQuotes(path) {
|
||
|
// return path.replace(/'/g, '\'\\\'\'')
|
||
|
return path.replace(/\\/g, '/').replace(/ /g, '\\ ').replace(/'/g, '\\\'')
|
||
|
}
|
||
|
|
||
|
// Returns first track start time
|
||
|
// startTime is for streams starting an encode part-way through an audiobook
|
||
|
async function writeConcatFile(tracks, outputPath, startTime = 0) {
|
||
|
var trackToStartWithIndex = 0
|
||
|
var firstTrackStartTime = 0
|
||
|
|
||
|
// Find first track greater than startTime
|
||
|
if (startTime > 0) {
|
||
|
var currTrackEnd = 0
|
||
|
var startingTrack = tracks.find(t => {
|
||
|
currTrackEnd += t.duration
|
||
|
return startTime < currTrackEnd
|
||
|
})
|
||
|
if (startingTrack) {
|
||
|
firstTrackStartTime = currTrackEnd - startingTrack.duration
|
||
|
trackToStartWithIndex = startingTrack.index
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var tracksToInclude = tracks.filter(t => t.index >= trackToStartWithIndex)
|
||
|
var trackPaths = tracksToInclude.map(t => {
|
||
|
var line = 'file ' + escapeSingleQuotes(t.fullPath) + '\n' + `duration ${t.duration}`
|
||
|
return line
|
||
|
})
|
||
|
var inputstr = trackPaths.join('\n\n')
|
||
|
await fs.writeFile(outputPath, inputstr)
|
||
|
|
||
|
return firstTrackStartTime
|
||
|
}
|
||
|
module.exports.writeConcatFile = writeConcatFile
|