Project

General

Profile

playlist-data.cc.diff

playlist-data.cc patch - Jim Turner, March 07, 2019 16:37

View differences:

playlist-data.cc.PATCHED 2019-03-07 10:01:56.082838939 -0600
22 22
#include <stdlib.h>
23 23
#include <string.h>
24 24

  
25
#include "audstrings.h"
25 26
#include "runtime.h"
26 27
#include "scanner.h"
27 28
#include "tuple-compiler.h"
......
172 173
    if (entry->selected)
173 174
        m_selected_length -= entry->length;
174 175

  
176
    /* JWT: KEEP (DON'T OVERWRITE) ENTRY'S TITLE IF TUPLE'S TITLE IS NOT SET!
177
       (NEEDED FOR EXTENDED M3U PLAYLIST ITEMS TO KEEP THE TITLE!)
178
    */
179
    String Title = entry->tuple.get_str (Tuple::Title);
180
    if (! tuple.is_set (Tuple::Title))
181
        tuple.set_str (Tuple::Title, Title);
182

  
175 183
    entry->set_tuple (std::move (tuple));
176 184

  
177 185
    m_total_length += entry->length;
......
1032 1040
 ScanRequest::Callback callback, int extra_flags)
1033 1041
{
1034 1042
    int flags = extra_flags;
1035
    if (! entry->tuple.valid ())
1043
    /* JWT:ADDED NEXT TEST - NECESSARY TO FORCE RESCAN OF CUESHEETS, OTHERWISE TUPLE METADATA IS
1044
       INCORRECT IF THE *FIRST* ENTRY IS A CUESHEET AND IT WON'T PLAY A SECOND TIME?!
1045
    */
1046
    if (! strncmp (entry->filename, "file://", 7) && strstr ((const char *) entry->filename, ".cue?"))
1047
        flags |= SCAN_CUESHEET;  // WE'RE A CUESHEET, HANDLE W/SPECIAL CARE! (in scanner.cc)
1048
    else if (! entry->tuple.valid ())
1036 1049
        flags |= SCAN_TUPLE;
1037 1050

  
1038 1051
    /* scanner uses Tuple::AudioFile from existing tuple, if valid */
......
1045 1058
    if (! entry->decoder)
1046 1059
        entry->decoder = request->decoder;
1047 1060

  
1061
    const char * base;
1062
    const char * ext;
1063
    int isub_p;
1064
    uri_parse (request->filename, & base, & ext, nullptr, & isub_p);
1065
    int baselen = ext - base;
1048 1066
    if (! entry->tuple.valid () && request->tuple.valid ())
1049 1067
    {
1068
        int cuesetlength = entry->tuple.get_int (Tuple::Length);  // JWT:DON'T LET SCAN REPLACE CUESHEET-SET LENGTH, IF SET!
1069
        /* JWT: ONLY REPLACE ENTRY'S TITLE W/REQUEST'S TITLE IF CUESHEET AND THE ENTRY'S TITLE
1070
           IS STILL JUST THE FILENAME! (ACCOMPLISHED BY STUFFING THE CURRENT ENTRY'S TITLE
1071
           INTO THE REQUEST TUPLE BEFORE REPLACING ENTRY'S TUPLE W/REQUEST'S TUPLE)
1072
           THIS NEEDED TO ENSURE THAT A CUESHEET ENTRY'S TITLE IN A NON-EXTENDED M3U PLAYLIST
1073
           GETS (STAYS) OVERRIDDEN BY THE TITLE IN THE CUESHEET (PREVIOUSLY WE DIDN'T SUPPORT
1074
           CUESHEETS IN M3U PLAYLISTS).
1075
        */
1076
        String oldTitle = entry->tuple.get_str (Tuple::Title);
1077
        if (oldTitle && oldTitle[0] && isub_p > 0 && strncmp ((const char *) oldTitle, base, baselen))
1078
            request->tuple.set_str (Tuple::Title, oldTitle);
1079

  
1050 1080
        set_entry_tuple (entry, std::move (request->tuple));
1081
        if (cuesetlength > 0)  // JWT:MAKE SURE RECALCULATED LENGTH FROM CUESHEETS DOESN'T GET CLOBBERED!
1082
            entry->tuple.set_int (Tuple::Length, cuesetlength);
1083

  
1051 1084
        queue_update (Playlist::Metadata, entry->number, 1, update_flags);
1052 1085
    }
1053 1086