112 lines
2.8 KiB
JavaScript
112 lines
2.8 KiB
JavaScript
const { create: createPlaylist } = require('./playlist')
|
|
const store = require('./store')
|
|
const path = require('path')
|
|
const glob = require('glob')
|
|
const fs = require('fs-extra')
|
|
const _ = require('lodash')
|
|
|
|
const file = {}
|
|
|
|
file.list = function (pattern) {
|
|
return new Promise(resolve => {
|
|
glob(pattern, function (err, files) {
|
|
resolve(files)
|
|
})
|
|
})
|
|
}
|
|
|
|
file.getFilename = function (filepath) {
|
|
return path.parse(filepath).name
|
|
}
|
|
|
|
file.createDir = async function (dir) {
|
|
if (await file.exists(dir)) return
|
|
|
|
return fs.mkdir(dir, { recursive: true }).catch(console.error)
|
|
}
|
|
|
|
file.exists = function (filepath) {
|
|
return fs.exists(path.resolve(filepath))
|
|
}
|
|
|
|
file.read = function (filepath) {
|
|
return fs.readFile(path.resolve(filepath), { encoding: 'utf8' }).catch(console.error)
|
|
}
|
|
|
|
file.append = function (filepath, data) {
|
|
return fs.appendFile(path.resolve(filepath), data).catch(console.error)
|
|
}
|
|
|
|
file.create = function (filepath, data = '') {
|
|
filepath = path.resolve(filepath)
|
|
const dir = path.dirname(filepath)
|
|
|
|
return file
|
|
.createDir(dir)
|
|
.then(() => fs.writeFile(filepath, data, { encoding: 'utf8', flag: 'w' }))
|
|
.catch(console.error)
|
|
}
|
|
|
|
file.write = function (filepath, data = '') {
|
|
return fs.writeFile(path.resolve(filepath), data).catch(console.error)
|
|
}
|
|
|
|
file.clear = function (filepath) {
|
|
return file.write(filepath, '')
|
|
}
|
|
|
|
file.resolve = function (filepath) {
|
|
return path.resolve(filepath)
|
|
}
|
|
|
|
file.dirname = function (filepath) {
|
|
return path.dirname(filepath)
|
|
}
|
|
|
|
file.basename = function (filepath) {
|
|
return path.basename(filepath)
|
|
}
|
|
|
|
// file.saveAsM3U = async function (filepath, items, options = {}) {
|
|
// const playlist = createPlaylist(filepath)
|
|
|
|
// const header = {}
|
|
// if (options.public) {
|
|
// let guides = items.map(item => item.guides)
|
|
// guides = _.uniq(_.flatten(guides)).sort().join(',')
|
|
|
|
// header['x-tvg-url'] = guides
|
|
// }
|
|
// playlist.setHeader(header)
|
|
|
|
// for (const item of items) {
|
|
// const stream = store.create(item)
|
|
|
|
// let attrs
|
|
// if (options.public) {
|
|
// attrs = {
|
|
// 'tvg-id': stream.get('tvg_id'),
|
|
// 'tvg-country': stream.get('tvg_country'),
|
|
// 'tvg-language': stream.get('tvg_language'),
|
|
// 'tvg-logo': stream.get('tvg_logo'),
|
|
// 'user-agent': stream.get('http.user-agent') || undefined,
|
|
// 'group-title': stream.get('group_title')
|
|
// }
|
|
// } else {
|
|
// attrs = {
|
|
// 'tvg-id': stream.get('tvg_id'),
|
|
// 'user-agent': stream.get('http.user-agent') || undefined
|
|
// }
|
|
// }
|
|
|
|
// playlist.add(stream.get('url'), stream.get('display_name'), attrs, {
|
|
// 'http-referrer': stream.get('http.referrer') || undefined,
|
|
// 'http-user-agent': stream.get('http.user-agent') || undefined
|
|
// })
|
|
// }
|
|
|
|
// return file.write(filepath, playlist.toString())
|
|
// }
|
|
|
|
module.exports = file
|