All files / dist m3u-generator.js

94.11% Statements 16/17
66.66% Branches 6/9
87.5% Functions 7/8
100% Lines 13/13

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25  1x 1x 1x     1x 1x 3x     1x 1x 1x 3x     1x     1x     1x  
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.M3uGenerator = void 0;
const m3u_playlist_1 = require("./m3u-playlist");
class M3uGenerator {
    static generate(playlist) {
        const pls = playlist.title ? `${m3u_playlist_1.M3uDirectives.PLAYLIST}:${playlist.title}` : undefined;
        const medias = playlist.medias.map(item => this.getMedia(item)).join('\n');
        return [m3u_playlist_1.M3uDirectives.EXTM3U, pls, medias].filter(item => item).join('\n');
    }
    static getMedia(media) {
        const attributesString = this.getAttributes(media.attributes);
        const info = this.shouldAddInfoDirective(media, attributesString) ? `${m3u_playlist_1.M3uDirectives.EXTINF}:${media.duration} ${attributesString},${media.name}` : null;
        const group = media.group ? `${m3u_playlist_1.M3uDirectives.EXTGRP}:${media.group}` : null;
        return [info, group, media.location].filter(item => item).join('\n');
    }
    static getAttributes(attributes) {
        return Object.keys(attributes).map(key => `${key}="${attributes[key]}"`).join(' ');
    }
    static shouldAddInfoDirective(media, attributesString) {
        return media.duration !== m3u_playlist_1.DEFAULT_MEDIA_DURATION || attributesString !== '' || media.name !== undefined;
    }
}
exports.M3uGenerator = M3uGenerator;