Ticket #4372: upnp_utf8_fixes.diff

File upnp_utf8_fixes.diff, 25.1 KB (added by stuartm, 13 years ago)
  • mythtv/programs/mythbackend/mythxml.cpp

     
    4343
    4444    //  --- none at this time.
    4545
    46     QString sUPnpDescPath = UPnp::g_pConfig->GetValue( "UPnP/DescXmlPath", m_sSharePath );
     46    QString sUPnpDescPath = UPnp::g_pConfig->GetValue( "UPnP/DescXmlPath",
     47                                                                m_sSharePath );
    4748
    4849    m_sServiceDescFileName = sUPnpDescPath + "MXML_scpd.xml";
    4950    m_sControlUrl          = "/Myth";
     
    101102    {
    102103        if (pRequest)
    103104        {
    104             if (pRequest->m_sBaseUrl == "/Myth/GetVideo")
    105             {
    106                 pRequest->m_sBaseUrl = m_sControlUrl;
    107                 pRequest->m_sMethod = "GetVideo";
    108             }
     105            if (pRequest->m_sBaseUrl == "/Myth/GetVideo")
     106            {
     107                pRequest->m_sBaseUrl = m_sControlUrl;
     108                pRequest->m_sMethod = "GetVideo";
     109            }
    109110
    110111            if (pRequest->m_sBaseUrl != m_sControlUrl)
    111112                return( false );
    112113
    113114            VERBOSE(VB_UPNP, QString("MythXML::ProcessRequest: %1 : %2")
    114                                      .arg(pRequest->m_sMethod)
    115                                      .arg(pRequest->m_sRawRequest));
     115                    .arg(pRequest->m_sMethod)
     116                    .arg(pRequest->m_sRawRequest));
    116117
    117118            switch( GetMethod( pRequest->m_sMethod ))
    118119            {
    119                 case MXML_GetServiceDescription: pRequest->FormatFileResponse( m_sServiceDescFileName ); return true;
     120                case MXML_GetServiceDescription:
     121                    pRequest->FormatFileResponse( m_sServiceDescFileName );
     122                    return true;
    120123
    121                 case MXML_GetProgramGuide      : GetProgramGuide( pRequest ); return true;
    122                 case MXML_GetProgramDetails    : GetProgramDetails( pRequest ); return true;
     124                case MXML_GetProgramGuide      :
     125                    GetProgramGuide( pRequest );
     126                    return true;
     127                case MXML_GetProgramDetails    :
     128                    GetProgramDetails( pRequest );
     129                    return true;
    123130
    124                 case MXML_GetHosts             : GetHosts       ( pRequest ); return true;
    125                 case MXML_GetKeys              : GetKeys        ( pRequest ); return true;
    126                 case MXML_GetSetting           : GetSetting     ( pRequest ); return true;
    127                 case MXML_PutSetting           : PutSetting     ( pRequest ); return true;
    128                                                                              
    129                 case MXML_GetChannelIcon       : GetChannelIcon ( pRequest ); return true;
    130                 case MXML_GetRecorded          : GetRecorded    ( pRequest ); return true;
    131                 case MXML_GetExpiring          : GetExpiring    ( pRequest ); return true;
    132                 case MXML_GetPreviewImage      : GetPreviewImage( pRequest ); return true;
     131                case MXML_GetHosts             :
     132                    GetHosts       ( pRequest );
     133                    return true;
     134                case MXML_GetKeys              :
     135                    GetKeys        ( pRequest );
     136                    return true;
     137                case MXML_GetSetting           :
     138                    GetSetting     ( pRequest );
     139                    return true;
     140                case MXML_PutSetting           :
     141                    PutSetting     ( pRequest );
     142                    return true;
    133143
    134                 case MXML_GetRecording         : GetRecording   ( pThread, pRequest ); return true;
    135                 case MXML_GetMusic             : GetMusic       ( pThread, pRequest ); return true;
    136                 case MXML_GetVideo             : GetVideo       ( pThread, pRequest ); return true;
     144                case MXML_GetChannelIcon       :
     145                    GetChannelIcon ( pRequest );
     146                    return true;
     147                case MXML_GetRecorded          :
     148                    GetRecorded    ( pRequest );
     149                    return true;
     150                case MXML_GetExpiring          :
     151                    GetExpiring    ( pRequest );
     152                    return true;
     153                case MXML_GetPreviewImage      :
     154                    GetPreviewImage( pRequest );
     155                    return true;
    137156
    138                 case MXML_GetConnectionInfo    : GetConnectionInfo( pRequest ); return true;
    139                 case MXML_GetAlbumArt          : GetAlbumArt    ( pRequest ); return true;
    140                 case MXML_GetVideoArt          : GetVideoArt    ( pRequest ); return true;
     157                case MXML_GetRecording         :
     158                    GetRecording   ( pThread, pRequest );
     159                    return true;
     160                case MXML_GetMusic             :
     161                    GetMusic       ( pThread, pRequest );
     162                    return true;
     163                case MXML_GetVideo             :
     164                    GetVideo       ( pThread, pRequest );
     165                    return true;
    141166
     167                case MXML_GetConnectionInfo    :
     168                    GetConnectionInfo( pRequest );
     169                    return true;
     170                case MXML_GetAlbumArt          :
     171                    GetAlbumArt    ( pRequest );
     172                    return true;
     173                case MXML_GetVideoArt          :
     174                    GetVideoArt    ( pRequest );
     175                    return true;
    142176
    143                 default:
     177
     178                default:
    144179                {
    145180                    UPnp::FormatErrorResponse( pRequest, UPnPResult_InvalidAction );
    146181
     
    151186    }
    152187    catch( ... )
    153188    {
    154         VERBOSE( VB_IMPORTANT, "MythXML::ProcessRequest() - Unexpected Exception" );
     189        VERBOSE( VB_IMPORTANT, "MythXML::ProcessRequest() - Unexpected "
     190                               "Exception" );
    155191    }
    156192
    157193    return( false );
    158 }           
     194}
    159195
    160196// ==========================================================================
    161197// Request handler Methods
     
    167203
    168204void MythXML::GetHosts( HTTPRequest *pRequest )
    169205{
    170     pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", max-age = 5000";
     206    pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", "
     207                                                    "max-age = 5000";
    171208
    172209    MSqlQuery query(MSqlQuery::InitCon());
    173210
     
    201238        }
    202239    }
    203240    else
    204         UPnp::FormatErrorResponse( pRequest, UPnPResult_ActionFailed, "Database not open while trying to load list of hosts" );
     241        UPnp::FormatErrorResponse( pRequest, UPnPResult_ActionFailed,
     242                    "Database not open while trying to load list of hosts" );
    205243}
    206244
    207245/////////////////////////////////////////////////////////////////////////////
     
    210248
    211249void MythXML::GetKeys( HTTPRequest *pRequest )
    212250{
    213     pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", max-age = 5000";
     251    pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", "
     252                                                    "max-age = 5000";
    214253
    215254    MSqlQuery query(MSqlQuery::InitCon());
    216255
     
    244283    else
    245284        UPnp::FormatErrorResponse( pRequest,
    246285                                   UPnPResult_ActionFailed,
    247                                    QString("Database not open while trying to load setting: %1")
     286                                   QString("Database not open while trying to "
     287                                           "load setting: %1")
    248288                                      .arg( pRequest->m_mapParams[ "Key" ] ));
    249289}
    250290
     
    254294
    255295void MythXML::GetSetting( HTTPRequest *pRequest )
    256296{
    257     pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", max-age = 5000";
     297    pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", "
     298                                                    "max-age = 5000";
    258299
    259300    QString sKey      = pRequest->m_mapParams[ "Key"      ];
    260301    QString sHostName = pRequest->m_mapParams[ "HostName" ];
     
    372413    else
    373414        UPnp::FormatErrorResponse( pRequest,
    374415                                   UPnPResult_ActionFailed,
    375                                    QString("Database not open while trying to load setting: %1")
     416                                   QString("Database not open while trying to "
     417                                           "load setting: %1")
    376418                                      .arg( pRequest->m_mapParams[ "Key" ] ));
    377419}
    378420
     
    382424
    383425void MythXML::PutSetting( HTTPRequest *pRequest )
    384426{
    385     pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", max-age = 5000";
     427    pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", "
     428                                                    "max-age = 5000";
    386429
    387430    QString sHostName = pRequest->m_mapParams[ "HostName" ];
    388431    QString sKey      = pRequest->m_mapParams[ "Key"      ];
     
    400443        pRequest->FormatActionResponse( &list );
    401444    }
    402445    else
    403         UPnp::FormatErrorResponse( pRequest, UPnPResult_InvalidArgs, "Key Required" );
     446        UPnp::FormatErrorResponse( pRequest, UPnPResult_InvalidArgs,
     447                                                            "Key Required" );
    404448}
    405449
    406450/////////////////////////////////////////////////////////////////////////////
     
    409453
    410454void MythXML::GetProgramGuide( HTTPRequest *pRequest )
    411455{
    412     pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", max-age = 5000";
     456    pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", "
     457                                                    "max-age = 5000";
    413458
    414459    QString sStartTime     = pRequest->m_mapParams[ "StartTime"    ];
    415460    QString sEndTime       = pRequest->m_mapParams[ "EndTime"      ];
     
    423468
    424469    if (!dtStart.isValid())
    425470    {
    426         UPnp::FormatErrorResponse( pRequest, UPnPResult_ArgumentValueInvalid, "StartTime is invalid" );
     471        UPnp::FormatErrorResponse( pRequest, UPnPResult_ArgumentValueInvalid,
     472                                                    "StartTime is invalid" );
    427473        return;
    428474    }
    429        
     475
    430476    if (!dtEnd.isValid())
    431477    {
    432         UPnp::FormatErrorResponse( pRequest, UPnPResult_ArgumentValueInvalid, "EndTime is invalid" );
     478        UPnp::FormatErrorResponse( pRequest, UPnPResult_ArgumentValueInvalid,
     479                                                        "EndTime is invalid" );
    433480        return;
    434481    }
    435482
    436483    if (dtEnd < dtStart)
    437     {
    438         UPnp::FormatErrorResponse( pRequest, UPnPResult_ArgumentValueInvalid, "EndTime is before StartTime");
     484    {
     485        UPnp::FormatErrorResponse( pRequest, UPnPResult_ArgumentValueInvalid,
     486                                                "EndTime is before StartTime");
    439487        return;
    440488    }
    441489
     
    451499
    452500    query.prepare( "SELECT chanid FROM channel WHERE (chanid >= :STARTCHANID )"
    453501                   " ORDER BY chanid LIMIT :NUMCHAN" );
    454    
     502
    455503    query.bindValue(":STARTCHANID", iStartChanId );
    456504    query.bindValue(":NUMCHAN"    , iNumOfChannels );
    457505
     
    460508
    461509    query.first();  iStartChanId = query.value(0).toInt();
    462510    query.last();   iEndChanId   = query.value(0).toInt();
    463        
    464     // Build add'l SQL statement for Program Listing
    465511
     512    // Build SQL statement for Program Listing
     513
    466514    MSqlBindings bindings;
    467515    QString      sSQL = "WHERE program.chanid >= :StartChanId "
    468516                         "AND program.chanid <= :EndChanId "
     
    486534        m_pSched->getAllPending( &recList);
    487535
    488536    // ----------------------------------------------------------------------
    489     // We need to convert from a RecList to a ProgramList 
     537    // We need to convert from a RecList to a ProgramList
    490538    // (ProgramList will autodelete ProgramInfo pointers)
    491539    // ----------------------------------------------------------------------
    492540
     
    504552
    505553    // Build Response
    506554
    507     QDomDocument doc;                       
     555    QDomDocument doc;
    508556
    509557    QDomElement channels = doc.createElement("Channels");
    510558    doc.appendChild( channels );
     
    548596    list.append( new NameValue( "Details"      , bDetails     ));
    549597
    550598    list.append( new NameValue( "Count"        , (int)progList.count() ));
    551     list.append( new NameValue( "AsOf"         , QDateTime::currentDateTime().toString( Qt::ISODate )));
     599    list.append( new NameValue( "AsOf"         , QDateTime::currentDateTime()
     600                                            .toString( Qt::ISODate )));
    552601    list.append( new NameValue( "Version"      , MYTH_BINARY_VERSION ));
    553602    list.append( new NameValue( "ProtoVer"     , MYTH_PROTO_VERSION  ));
    554603    list.append( new NameValue( "ProgramGuide" , doc.toString()      ));
     
    559608
    560609
    561610/////////////////////////////////////////////////////////////////////////////
    562 //                 
     611//
    563612/////////////////////////////////////////////////////////////////////////////
    564613
    565614void MythXML::GetProgramDetails( HTTPRequest *pRequest )
    566615{
    567     pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", max-age = 5000";
     616    pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", "
     617                                                    "max-age = 5000";
    568618
    569619    QString sStartTime = pRequest->m_mapParams[ "StartTime" ];
    570620    QString sChanId    = pRequest->m_mapParams[ "ChanId"    ];
     
    572622    QDateTime dtStart = QDateTime::fromString( sStartTime, Qt::ISODate );
    573623
    574624    if (!dtStart.isValid())
    575     {
    576         UPnp::FormatErrorResponse( pRequest, UPnPResult_ArgumentValueInvalid, "StartTime is invalid" );
     625    {
     626        UPnp::FormatErrorResponse( pRequest, UPnPResult_ArgumentValueInvalid,
     627                                                    "StartTime is invalid" );
    577628        return;
    578629    }
    579630
    580631    // ----------------------------------------------------------------------
    581632    // -=>TODO: Add support for getting Recorded Program Info
    582633    // ----------------------------------------------------------------------
    583    
     634
    584635    // Build add'l SQL statement for Program Listing
    585636
    586637    MSqlBindings bindings;
     
    618669    ProgramInfo *pInfo = progList.first();
    619670
    620671    if (pInfo==NULL)
    621     {
    622         UPnp::FormatErrorResponse( pRequest, UPnPResult_ActionFailed, "Error Reading Program Info" );
     672    {
     673        UPnp::FormatErrorResponse( pRequest, UPnPResult_ActionFailed,
     674                                                "Error Reading Program Info" );
    623675        return;
    624676    }
    625677
     
    640692    list.append( new NameValue( "ChanId"       , sChanId      ));
    641693
    642694    list.append( new NameValue( "Count"        , 1  ));
    643     list.append( new NameValue( "AsOf"         , QDateTime::currentDateTime().toString( Qt::ISODate )));
     695    list.append( new NameValue( "AsOf"         , QDateTime::currentDateTime()
     696                                                    .toString( Qt::ISODate )));
    644697    list.append( new NameValue( "Version"      , MYTH_BINARY_VERSION ));
    645698    list.append( new NameValue( "ProtoVer"     , MYTH_PROTO_VERSION  ));
    646699
     
    650703}
    651704
    652705/////////////////////////////////////////////////////////////////////////////
    653 //                 
     706//
    654707/////////////////////////////////////////////////////////////////////////////
    655708
    656709void MythXML::GetChannelIcon( HTTPRequest *pRequest )
     
    759812    //
    760813    int     nWidth    = pRequest->m_mapParams[ "Width"     ].toInt();
    761814    int     nHeight   = pRequest->m_mapParams[ "Height"    ].toInt();
    762    
     815
    763816    // Read Video poster file path from database
    764    
     817
    765818    MSqlQuery query(MSqlQuery::InitCon());
    766819
    767820    query.prepare("SELECT coverart FROM upnpmedia WHERE intid = :ITEMID");
     
    787840    // ----------------------------------------------------------------------
    788841    // check to see if albumart image is already created.
    789842    // ----------------------------------------------------------------------
    790        
     843
    791844    if (QFile::exists( sFileName ))
    792845    {
    793846        pRequest->m_eResponseType   = ResponseTypeFile;
    794847        pRequest->m_nResponseStatus = 200;
    795         pRequest->m_sFileName = sFileName;
    796         return;
     848        pRequest->m_sFileName = sFileName;
     849        return;
    797850    }
    798        
     851
    799852}
    800853
    801854void MythXML::GetAlbumArt( HTTPRequest *pRequest )
     
    830883    {
    831884        query.first();
    832885
    833         pRequest->m_sFileName       = musicbasepath + query.value(0).toString();
     886        pRequest->m_sFileName = QString( "%1/%2" )
     887                        .arg( musicbasepath )
     888                        .arg( QString::fromUtf8(query.value(0).toString()) );
    834889    }
    835890
    836891    if ((nWidth == 0) && (nHeight == 0))
     
    9451000    NameValueList list;
    9461001
    9471002    list.append( new NameValue( "Count"    , (int)progList.count()));
    948     list.append( new NameValue( "AsOf"     , QDateTime::currentDateTime().toString( Qt::ISODate )));
     1003    list.append( new NameValue( "AsOf"     , QDateTime::currentDateTime()
     1004                                                    .toString( Qt::ISODate )));
    9491005    list.append( new NameValue( "Version"  , MYTH_BINARY_VERSION ));
    9501006    list.append( new NameValue( "ProtoVer" , MYTH_PROTO_VERSION  ));
    9511007
     
    9891045    NameValueList list;
    9901046
    9911047    list.append( new NameValue( "Count"    , (int)infoList.size()));
    992     list.append( new NameValue( "AsOf"     , QDateTime::currentDateTime().toString( Qt::ISODate )));
     1048    list.append( new NameValue( "AsOf"     , QDateTime::currentDateTime()
     1049                                                    .toString( Qt::ISODate )));
    9931050    list.append( new NameValue( "Version"  , MYTH_BINARY_VERSION ));
    9941051    list.append( new NameValue( "ProtoVer" , MYTH_PROTO_VERSION  ));
    9951052
     
    11241181    // check to see if scaled preview image is already created.
    11251182    // ----------------------------------------------------------------------
    11261183
    1127    
    11281184
     1185
    11291186    if (QFile::exists( pRequest->m_sFileName ))
    11301187    {
    11311188        delete pImage;
     
    11491206    bool bIndexFile = false;
    11501207
    11511208    pRequest->m_eResponseType   = ResponseTypeHTML;
    1152     pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", max-age = 5000";
     1209    pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", "
     1210                                                    "max-age = 5000";
    11531211    pRequest->m_nResponseStatus = 404;
    11541212
    11551213    QString sChanId   = pRequest->m_mapParams[ "ChanId"    ];
     
    12201278
    12211279        if (pInfo==NULL)
    12221280        {
    1223             VERBOSE( VB_UPNP, QString( "MythXML::GetRecording - GetProgramFromRecorded( %1, %2 ) returned NULL" )
    1224                                  .arg( sChanId )
    1225                                  .arg( sStartTime ));
     1281            VERBOSE( VB_UPNP, QString( "MythXML::GetRecording - "
     1282                                       "GetProgramFromRecorded( %1, %2 ) "
     1283                                       "returned NULL" )
     1284                                        .arg( sChanId )
     1285                                        .arg( sStartTime ));
    12261286            return;
    12271287        }
    12281288
     
    12301290        {
    12311291            // We only handle requests for local resources   
    12321292
    1233             VERBOSE( VB_UPNP, QString( "MythXML::GetRecording - To access this recording, send request to %1." )
    1234                                  .arg( pInfo->hostname ));
     1293            VERBOSE( VB_UPNP, QString( "MythXML::GetRecording - To access this "
     1294                                       "recording, send request to %1." )
     1295                                        .arg( pInfo->hostname ));
    12351296
    12361297            delete pInfo;
    12371298
    1238             return;     
     1299            return;
    12391300        }
    12401301
    12411302        pRequest->m_sFileName = GetPlaybackURL(pInfo);
     
    12771338                        HTTPRequest      *pRequest )
    12781339{
    12791340    pRequest->m_eResponseType   = ResponseTypeHTML;
    1280     pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", max-age = 5000";
     1341    pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", "
     1342                                                    "max-age = 5000";
    12811343    pRequest->m_nResponseStatus = 404;
    12821344
    12831345    QString sId   = pRequest->m_mapParams[ "Id"    ];
     
    13341396            {
    13351397                query.first(); 
    13361398                pRequest->m_sFileName = QString( "%1/%2" )
    1337                                            .arg( sBasePath )
    1338                                            .arg( query.value(0).toString() );
     1399                        .arg( sBasePath )
     1400                        .arg( QString::fromUtf8(query.value(0).toString()) );
    13391401            }
    13401402        }
    13411403
     
    13671429                        HTTPRequest      *pRequest )
    13681430{
    13691431    pRequest->m_eResponseType   = ResponseTypeHTML;
    1370     pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", max-age = 5000";
     1432    pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", "
     1433                                                    "max-age = 5000";
    13711434    pRequest->m_nResponseStatus = 404;
    13721435
    13731436    QString sId   = pRequest->m_mapParams[ "Id" ];
     
    13761439    {
    13771440        QStringList idPath = QStringList::split( "/", pRequest->m_sRawRequest );
    13781441
    1379         idPath = QStringList::split( " ", idPath[idPath.count() - 2] );
    1380         idPath = QStringList::split( "?", idPath[0] );
     1442        idPath = QStringList::split( " ", idPath[idPath.count() - 2] );
     1443        idPath = QStringList::split( "?", idPath[0] );
    13811444
    13821445        sId = idPath[0];
    13831446
    1384         if (sId.startsWith("Id"))
    1385             sId = sId.right(sId.length() - 2);
    1386         else 
     1447        if (sId.startsWith("Id"))
     1448            sId = sId.right(sId.length() - 2);
     1449        else
    13871450            return;
    13881451
    1389         //VERBOSE(VB_UPNP, QString("MythXML::GetVideo : %1 ").arg(sId));
    1390        
    1391         pRequest->m_mapParams[ "Id" ] = sId;
     1452        //VERBOSE(VB_UPNP, QString("MythXML::GetVideo : %1 ").arg(sId));
     1453
     1454        pRequest->m_mapParams[ "Id" ] = sId;
    13921455    }
    13931456
    13941457    bool wantCoverArt = (pRequest->m_mapParams[ "albumArt" ] == "true");
     
    13961459    if (wantCoverArt)
    13971460    {
    13981461        GetVideoArt(pRequest);
    1399         return;
     1462        return;
    14001463    }
    14011464
    14021465    // ----------------------------------------------------------------------
     
    14411504                query.first();
    14421505                pRequest->m_sFileName = QString( "%1/%2" )
    14431506                                           .arg( sBasePath )
    1444                                            .arg( query.value(0).toString() );
     1507                            .arg( QString::fromUtf8(query.value(0).toString()) );
    14451508            }
    14461509        }
    14471510
     
    15751638        program.setAttribute( "hostname"    , pInfo->hostname     );
    15761639
    15771640        if (pInfo->hasAirDate)
    1578             program.setAttribute( "airdate"  , pInfo->originalAirDate.toString(Qt::ISODate) );
     1641            program.setAttribute( "airdate"  , pInfo->originalAirDate
     1642                                                    .toString(Qt::ISODate) );
    15791643
    15801644        QDomText textNode = pDoc->createTextNode( pInfo->description );
    15811645        program.appendChild( textNode );
     
    15851649    if ( bIncChannel )
    15861650    {
    15871651        // Build Channel Child Element
    1588        
     1652
    15891653        QDomElement channel = pDoc->createElement( "Channel" );
    15901654        program.appendChild( channel );
    15911655
     
    15951659    // Build Recording Child Element
    15961660
    15971661    if ( pInfo->recstatus != rsUnknown )
    1598     { 
     1662    {
    15991663        QDomElement recording = pDoc->createElement( "Recording" );
    16001664        program.appendChild( recording );
    16011665
    16021666        recording.setAttribute( "recStatus"     , pInfo->recstatus   );
    16031667        recording.setAttribute( "recPriority"   , pInfo->recpriority );
    1604         recording.setAttribute( "recStartTs"    , pInfo->recstartts.toString(Qt::ISODate));
    1605         recording.setAttribute( "recEndTs"      , pInfo->recendts.toString(Qt::ISODate));
     1668        recording.setAttribute( "recStartTs"    , pInfo->recstartts
     1669                                                    .toString(Qt::ISODate));
     1670        recording.setAttribute( "recEndTs"      , pInfo->recendts
     1671                                                    .toString(Qt::ISODate));
    16061672
    16071673        if (bDetails)
    16081674        {
  • mythtv/programs/mythbackend/upnpcdsvideo.cpp

     
    116116                            MSqlQuery               &query )
    117117{
    118118    int            nVidID       = query.value( 0).toInt();
    119     QString        sTitle       = query.value( 1).toString();
    120     QString        sFileName    = query.value( 2).toString();
     119    QString        sTitle       = QString::fromUtf8(query.value( 1).toString());
     120    QString        sFileName    = QString::fromUtf8(query.value( 2).toString());
    121121    QString        sItemType    = query.value( 3).toString();
    122122    QString        sParentID    = query.value( 5).toString();
    123123    QString        sCoverArt    = query.value( 6).toString();
  • mythtv/programs/mythbackend/upnpcdsmusic.cpp

     
    186186//    int            nYear        = query.value( 5).toInt();
    187187    int            nTrackNum    = query.value( 6).toInt();
    188188    QString        sDescription = QString::fromUtf8(query.value( 7).toString());
    189     QString        sFileName    = query.value( 8).toString();
     189    QString        sFileName    = QString::fromUtf8(query.value( 8).toString());
    190190    uint           nLength      = query.value( 9).toInt();
    191191
    192192/*