All pastes #464484 Raw Edit

Anonymous

public text v1 · immutable
#464484 ·published 2007-04-29 15:14 UTC
rendered paste body
Index: mythmusic/mythmusic/music-ui.xml
===================================================================
--- mythmusic/mythmusic/music-ui.xml	(revision 13368)
+++ mythmusic/mythmusic/music-ui.xml	(working copy)
@@ -496,64 +496,71 @@
                 <value>Artist:</value>
             </textarea>
 
-            <textarea name="album_label" draworder="1" align="right">
+            <textarea name="sort_artist_label" draworder="1" align="right">
                 <area>15,190,170,30</area>
                 <context>1</context>
                 <font>labels</font>
+                <value>Sort Artist:</value>
+            </textarea>
+
+            <textarea name="album_label" draworder="1" align="right">
+                <area>15,230,170,30</area>
+                <context>1</context>
+                <font>labels</font>
                 <value>Album:</value>
             </textarea>
 
             <textarea name="title_text" draworder="1" align="right">
-                <area>15,230,170,30</area>
+                <area>15,270,170,30</area>
                 <context>1</context>
                 <font>labels</font>
                 <value>Title:</value>
             </textarea>
 
             <textarea name="genre_label" draworder="1" align="right">
-                <area>15,270,170,30</area>
+                <area>15,310,170,30</area>
                 <context>1</context>
                 <font>labels</font>
                 <value>Genre:</value>
             </textarea>
 
             <textarea name="year_label" draworder="1" align="right">
-                <area>15,310,170,30</area>
+                <area>15,350,170,30</area>
                 <context>1</context>
                 <font>labels</font>
                 <value>Year:</value>
             </textarea>
 
             <textarea name="track_label" draworder="1" align="right">
-                <area>365,310,170,30</area>
+                <area>365,350,170,30</area>
                 <context>1</context>
                 <font>labels</font>
                 <value>Track No.:</value>
             </textarea>
 
             <textarea name="rating_label" draworder="1" align="right">
-                <area>15,350,170,30</area>
+                <area>15,390,170,30</area>
                 <context>1</context>
                 <font>labels</font>
                 <value>Rating:</value>
             </textarea>
 
             <textarea name="playcount_label" draworder="1" align="right">
-                <area>420,390,300,30</area>
+                <area>420,430,300,30</area>
                 <context>1</context>
                 <font>labels</font>
                 <value>Play Count:</value>
             </textarea>
 
             <textarea name="lastplay_label" draworder="1" align="right">
-                <area>15,390,170,30</area>
+                <area>15,430,170,30</area>
                 <context>1</context>
                 <font>labels</font>
                 <value>Last Play:</value>
             </textarea>
 
             <textarea name="filename_label" draworder="1" align="right">
-                <area>15,430,170,30</area>
+                <area>15,470,170,30</area>
                 <context>1</context>
                 <font>labels</font>
                 <value>Filename:</value>
@@ -601,16 +608,21 @@
                 <image function="pushed" filename="blankbutton_pushed.png"></image>
             </pushbutton>
 
+            <remoteedit name="sort_artist_edit" draworder="1" align="left">
+                 <context>1</context>
+                 <area>195,190,525,35</area>
+                 <font>display</font>
+            </remoteedit>
 
             <remoteedit name="album_edit" draworder="1" align="left">
                 <context>1</context>
-                <area>195,190,525,35</area>
+                <area>195,230,525,35</area>
                 <font>display</font>
             </remoteedit>
 
             <pushbutton name="searchalbum_button" draworder="2">
                 <context>1</context>
-                <position>725,190</position>
+                <position>725,230</position>
                 <image function="on" filename="blankbutton_on.png"></image>
                 <image function="off" filename="blankbutton_off.png"></image>
                 <image function="pushed" filename="blankbutton_pushed.png"></image>
@@ -618,19 +630,19 @@
 
             <remoteedit name="title_edit" draworder="1" align="left">
                 <context>1</context>
-                <area>195,230,525,35</area>
+                <area>195,270,525,35</area>
                 <font>display</font>
             </remoteedit>
 
             <remoteedit name="genre_edit" draworder="1" align="left">
                 <context>1</context>
-                <area>195,270,525,35</area>
+                <area>195,310,525,35</area>
                 <font>display</font>
             </remoteedit>
 
             <pushbutton name="searchgenre_button" draworder="2">
                 <context>1</context>
-                <position>725,270</position>
+                <position>725,310</position>
                 <image function="on" filename="blankbutton_on.png"></image>
                 <image function="off" filename="blankbutton_off.png"></image>
                 <image function="pushed" filename="blankbutton_pushed.png"></image>
@@ -638,26 +650,26 @@
 
             <remoteedit name="year_edit" draworder="1" align="left">
                 <context>1</context>
-                <area>195,310,175,35</area>
+                <area>195,350,175,35</area>
                 <font>display</font>
             </remoteedit>
 
             <remoteedit name="track_edit" draworder="1" align="left">
                 <context>1</context>
-                <area>545,310,175,35</area>
+                <area>545,350,175,35</area>
                 <font>display</font>
             </remoteedit>
 
             <repeatedimage name="rating_image" draworder="1" fleximage="no">
                 <context>1</context>
                 <filename>mm_rating.png</filename>
-                <position>190,360</position>
+                <position>190,400</position>
                 <orientation>LeftToRight</orientation>
             </repeatedimage>
 
             <selector name="rating_button" draworder="0">
                 <context>1</context>
-                <area>420,350,30,30</area>
+                <area>420,390,30,30</area>
                 <font>display</font>
                 <image function="on" filename="leftright_on.png"></image>
                 <image function="off" filename="leftright_off.png"></image>
@@ -666,19 +678,19 @@
 
             <textarea name="playcount_text" draworder="1" align="left">
                 <context>1</context>
-                <area>725,390,400,30</area>
+                <area>725,430,400,30</area>
                 <font>display</font>
             </textarea>
 
             <textarea name="lastplay_text" draworder="1" align="left">
                 <context>1</context>
-                <area>195,390,400,30</area>
+                <area>195,430,400,30</area>
                 <font>display</font>
             </textarea>
 
             <textarea name="filename_text" draworder="1" align="left">
                 <context>1</context>
-                <area>195,430,550,100</area>
+                <area>195,470,550,100</area>
                 <multiline>yes</multiline>
                 <font>display</font>
             </textarea>
@@ -785,7 +797,7 @@
             -->
 
             <textbutton name="metadata_button" draworder="0">
-                <position>20,540</position>
+                <position>20,550</position>
                 <font>display</font>
                 <image function="on" filename="text_button_on.png"></image>
                 <image function="off" filename="text_button_off.png"></image>
@@ -793,7 +805,7 @@
             </textbutton>
 
             <textbutton name="albumart_button" draworder="0">
-                <position>190,540</position>
+                <position>190,550</position>
                 <font>display</font>
                 <image function="on" filename="text_button_on.png"></image>
                 <image function="off" filename="text_button_off.png"></image>
@@ -801,7 +813,7 @@
             </textbutton>
 <!--
             <textbutton name="dbstats_button" draworder="0">
-                <position>360,540</position>
+                <position>360,550</position>
                 <font>display</font>
                 <image function="on" filename="text_button_on.png"></image>
                 <image function="off" filename="text_button_off.png"></image>
@@ -809,7 +821,7 @@
             </textbutton>
 -->
             <textbutton name="done_button" draworder="0">
-                <position>630,540</position>
+                <position>630,550</position>
                 <font>display</font>
                 <image function="on" filename="text_button_on.png"></image>
                 <image function="off" filename="text_button_off.png"></image>
Index: mythmusic/mythmusic/metaioflacvorbiscomment.cpp
===================================================================
--- mythmusic/mythmusic/metaioflacvorbiscomment.cpp	(revision 13368)
+++ mythmusic/mythmusic/metaioflacvorbiscomment.cpp	(working copy)
@@ -134,7 +134,7 @@
  */
 Metadata* MetaIOFLACVorbisComment::read(QString filename)
 {
-    QString artist = "", compilation_artist = "", album = "", title = "", genre = "";
+    QString artist = "", sort_artist = "", compilation_artist = "", album = "", title = "", genre = "";
     int year = 0, tracknum = 0, length = 0;
     bool compilation = false;
 
@@ -184,6 +184,7 @@
     else
     {
         artist = getComment(block, MYTH_VORBISCOMMENT_ARTIST);
+        sort_artist = getComment(block, MYTH_VORBISCOMMENT_ARTIST);
         compilation_artist = getComment(block, 
                                         MYTH_VORBISCOMMENT_COMPILATIONARTIST);
         album = getComment(block, MYTH_VORBISCOMMENT_ALBUM);
@@ -200,7 +201,7 @@
     FLAC__metadata_chain_delete(chain);
     FLAC__metadata_iterator_delete(iterator);
 
-    Metadata *retdata = new Metadata(filename, artist, compilation_artist, album, 
+    Metadata *retdata = new Metadata(filename, artist, sort_artist, compilation_artist, album, 
                                      title, genre, year, tracknum, length);
 
     retdata->setCompilation(compilation);
Index: mythmusic/mythmusic/metadata.cpp
===================================================================
--- mythmusic/mythmusic/metadata.cpp	(revision 13368)
+++ mythmusic/mythmusic/metadata.cpp	(working copy)
@@ -32,6 +32,7 @@
 Metadata& Metadata::operator=(Metadata *rhs)
 {
     m_artist = rhs->m_artist;
+    m_sort_artist = rhs->m_sort_artist;
     m_compilation_artist = rhs->m_compilation_artist;
     m_album = rhs->m_album;
     m_title = rhs->m_title;
@@ -110,6 +111,7 @@
 
     MSqlQuery query(MSqlQuery::InitCon());
     query.prepare("SELECT music_artists.artist_name, "
+    "music_artists.artist_sortkey, "
     "music_comp_artists.artist_name AS compilation_artist, "
     "music_albums.album_name, music_songs.name, music_genres.genre, "
     "music_songs.year, music_songs.track, music_songs.length, "
@@ -133,19 +135,20 @@
         query.next();
 
         m_artist = QString::fromUtf8(query.value(0).toString());
-        m_compilation_artist = QString::fromUtf8(query.value(1).toString());
-        m_album = QString::fromUtf8(query.value(2).toString());
-        m_title = QString::fromUtf8(query.value(3).toString());
-        m_genre = QString::fromUtf8(query.value(4).toString());
-        m_year = query.value(5).toInt();
-        m_tracknum = query.value(6).toInt();
-        m_length = query.value(7).toInt();
-        m_id = query.value(8).toUInt();
-        m_rating = query.value(9).toInt();
-        m_playcount = query.value(10).toInt();
-        m_lastplay = query.value(11).toString();
-        m_compilation = (query.value(12).toInt() > 0);
-        m_format = query.value(13).toString();
+        m_sort_artist = QString::fromUtf8(query.value(1).toString());
+        m_compilation_artist = QString::fromUtf8(query.value(2).toString());
+        m_album = QString::fromUtf8(query.value(3).toString());
+        m_title = QString::fromUtf8(query.value(4).toString());
+        m_genre = QString::fromUtf8(query.value(5).toString());
+        m_year = query.value(6).toInt();
+        m_tracknum = query.value(7).toInt();
+        m_length = query.value(8).toInt();
+        m_id = query.value(9).toUInt();
+        m_rating = query.value(10).toInt();
+        m_playcount = query.value(11).toInt();
+        m_lastplay = query.value(12).toString();
+        m_compilation = (query.value(13).toInt() > 0);
+        m_format = query.value(14).toString();
 
         retval = true;
     }
@@ -216,11 +219,23 @@
         if (query.next())
         {
             m_artistid = query.value(0).toInt();
+
+            query.prepare("UPDATE music_artists SET artist_sortkey = :SORTARTIST "
+                          "WHERE artist_id = :ARTISTID ;");
+            query.bindValue(":SORTARTIST", m_sort_artist.utf8());
+            query.bindValue(":ARTISTID", m_artist.utf8());
+            if (!query.exec() || !query.isActive() || query.numRowsAffected() <= 0)
+            {
+                MythContext::DBError("music update sortartist", query);
+                return;
+            }
         }
         else
         {
-            query.prepare("INSERT INTO music_artists (artist_name) VALUES (:ARTIST);");
+            query.prepare("INSERT INTO music_artists (artist_name,artist_sortkey) "
+                          "VALUES (:ARTIST, :SORTARTIST);");
             query.bindValue(":ARTIST", m_artist.utf8());
+            query.bindValue(":SORTARTIST", m_sort_artist.utf8());
 
             if (!query.exec() || !query.isActive() || query.numRowsAffected() <= 0)
             {
@@ -432,6 +447,7 @@
 QString Metadata::m_formatnormalfiletrack       = "TITLE";
 QString Metadata::m_formatnormalcdartist        = "ARTIST";
 QString Metadata::m_formatnormalcdtrack         = "TITLE";
+QString Metadata::m_formatnormalsortartist      = "ARTIST";
 QString Metadata::m_formatcompilationfileartist = "COMPARTIST";
 QString Metadata::m_formatcompilationfiletrack  = "TITLE (ARTIST)";
 QString Metadata::m_formatcompilationcdartist   = "COMPARTIST";
@@ -456,6 +472,10 @@
     tmp = gContext->GetSetting("MusicFormatNormalCDTrack");
     if (!tmp.isEmpty())
         m_formatnormalcdtrack = tmp;
+
+    tmp = gContext->GetSetting("MusicFormatNormalSortArtist");
+    if (!tmp.isEmpty())
+        m_formatnormalsortartist = tmp;
         
     tmp = gContext->GetSetting("MusicFormatCompilationFileArtist");
     if (!tmp.isEmpty())
@@ -489,6 +509,7 @@
   QString rv = format;
   rv.replace("COMPARTIST", m_compilation_artist);
   rv.replace("ARTIST", m_artist);
+  rv.replace("SORTARTIST", m_sort_artist);
   rv.replace("TITLE", m_title);
   rv.replace("TRACK", QString("%1").arg(m_tracknum, 2));
   return rv;
@@ -498,6 +519,8 @@
 {
     if (m_artist == "")
         m_artist = QObject::tr("Unknown Artist");
+    if (m_sort_artist == "")
+        m_sort_artist = m_artist;        // same as artist, if not specified
     if (m_compilation_artist == "")
         m_compilation_artist = m_artist; // This should be the same as Artist if blank.
     if (m_album == "")
@@ -576,6 +599,10 @@
     //                      completeness.
     else if (field == "compilation_artist")
       m_compilation_artist = data;
+    // turbo@talstar.com:   Likewise, I've added sortartist stuff here for
+    //                      completeness.
+    else if (field == "sort_artist")
+        m_sort_artist = data;
     else if (field == "album")
         m_album = data;
     else if (field == "title")
@@ -821,7 +848,7 @@
 {
     m_done_loading = false;
 
-    QString aquery = "SELECT music_songs.song_id, music_artists.artist_name, music_comp_artists.artist_name AS compilation_artist, "
+    QString aquery = "SELECT music_songs.song_id, music_artists.artist_name, music_artists.artist_sortkey, music_comp_artists.artist_name AS compilation_artist, "
                      "music_albums.album_name, music_songs.name, music_genres.genre, music_songs.year, "
                      "music_songs.track, music_songs.length, CONCAT_WS('/', "
                      "music_directories.path, music_songs.filename) AS filename, "
@@ -835,7 +862,7 @@
                      "LEFT JOIN music_genres ON music_songs.genre_id=music_genres.genre_id "
                      "ORDER BY music_songs.song_id;";
 
-    QString filename, artist, album, title;
+    QString filename, artist, sortartist, album, title;
 
     MSqlQuery query(MSqlQuery::InitCon());
     query.exec(aquery);
@@ -850,7 +877,7 @@
     {
         while (query.next())
         {
-            filename = QString::fromUtf8(query.value(9).toString());
+            filename = QString::fromUtf8(query.value(10).toString());
             if (!filename.contains("://"))
                 filename = m_startdir + filename;
 
@@ -858,30 +885,35 @@
             if (artist.isEmpty())
                 artist = QObject::tr("Unknown Artist");
 
-            album = QString::fromUtf8(query.value(3).toString());
+            sortartist = QString::fromUtf8(query.value(2).toString());
+            if (sortartist.isEmpty())
+                sortartist = artist;
+
+            album = QString::fromUtf8(query.value(4).toString());
             if (album.isEmpty())
                 album = QObject::tr("Unknown Album");
 
-            title = QString::fromUtf8(query.value(4).toString());
+            title = QString::fromUtf8(query.value(5).toString());
             if (title.isEmpty())
                 title = QObject::tr("Unknown Title");
 
             Metadata *temp = new Metadata(
                 filename,
                 artist,
-                QString::fromUtf8(query.value(2).toString()),
+                sortartist,
+                QString::fromUtf8(query.value(3).toString()),
                 album,
                 title,
-                QString::fromUtf8(query.value(5).toString()),
-                query.value(6).toInt(),
+                QString::fromUtf8(query.value(6).toString()),
                 query.value(7).toInt(),
                 query.value(8).toInt(),
+                query.value(9).toInt(),
                 query.value(0).toInt(),
-                query.value(10).toInt(), //rating
-                query.value(11).toInt(), //playcount
-                query.value(12).toString(), //lastplay
-                (query.value(13).toInt() > 0), //compilation
-                query.value(14).toString()); //format
+                query.value(11).toInt(), //rating
+                query.value(12).toInt(), //playcount
+                query.value(13).toString(), //lastplay
+                (query.value(14).toInt() > 0), //compilation
+                query.value(15).toString()); //format
 
             //  Don't delete temp, as PtrList now owns it
             m_all_music.append(temp);
Index: mythmusic/mythmusic/metadata.h
===================================================================
--- mythmusic/mythmusic/metadata.h	(revision 13368)
+++ mythmusic/mythmusic/metadata.h	(working copy)
@@ -42,12 +42,14 @@
 class Metadata
 {
   public:
-    Metadata(QString lfilename = "", QString lartist = "", QString lcompilation_artist = "",
+    Metadata(QString lfilename = "", QString lartist = "", QString lsortartist = "",
+             QString lcompilation_artist = "",
              QString lalbum = "", QString ltitle = "", QString lgenre = "",
              int lyear = 0, int ltracknum = 0, int llength = 0, int lid = 0,
              int lrating = 0, int lplaycount = 0, QString llastplay = "",
              bool lcompilation = false, QString lformat="")
                 : m_artist(lartist),
+                   m_sort_artist(lsortartist),
                    m_compilation_artist(lcompilation_artist),
                    m_album(lalbum),
                    m_title(ltitle),
@@ -90,6 +92,9 @@
         m_artist = lartist; m_formattedartist = m_formattedtitle = "";
     }
 
+    QString SortArtist() { return m_sort_artist; }
+    void setSortArtist(const QString &lsortartist) { m_sort_artist = lsortartist; m_formattedartist = m_formattedtitle = ""; }
+
     QString CompilationArtist() const { return m_compilation_artist; }
     void setCompilationArtist(const QString &lcompilation_artist)
     {
@@ -192,6 +197,7 @@
     void checkEmptyFields(void);
 
     QString m_artist;
+    QString m_sort_artist;
     QString m_compilation_artist;
     QString m_album;
     QString m_title;
@@ -227,6 +233,8 @@
     static QString m_formatnormalcdartist;
     static QString m_formatnormalcdtrack;
 
+    static QString m_formatnormalsortartist;
+
     static QString m_formatcompilationfileartist;
     static QString m_formatcompilationfiletrack;
     static QString m_formatcompilationcdartist;
Index: mythmusic/mythmusic/editmetadata.cpp
===================================================================
--- mythmusic/mythmusic/editmetadata.cpp	(revision 13368)
+++ mythmusic/mythmusic/editmetadata.cpp	(working copy)
@@ -42,6 +42,11 @@
         artist_edit->setText(m_metadata->Artist());
     }
 
+    if (sort_artist_edit)
+    {
+        sort_artist_edit->setText(m_metadata->SortArtist());
+    }
+
     if (compilation_artist_edit)
     {
         compilation_artist_edit->setText(m_metadata->CompilationArtist());
@@ -304,6 +309,13 @@
         connect(compilation_artist_edit, SIGNAL(loosingFocus()), this, SLOT(editLostFocus()));
     }
 
+    sort_artist_edit = getUIRemoteEditType("sort_artist_edit");
+    if (sort_artist_edit)
+    {
+        sort_artist_edit->createEdit(this);
+        connect(sort_artist_edit, SIGNAL(loosingFocus()), this, SLOT(editLostFocus()));
+    }
+
     album_edit = getUIRemoteEditType("album_edit");
     if (album_edit)
     {
@@ -460,6 +472,10 @@
     {
         m_metadata->setArtist(artist_edit->getText());
     }
+    else if (whichEditor == sort_artist_edit)
+    {
+        m_metadata->setSortArtist(sort_artist_edit->getText());
+    }
     else if (whichEditor == compilation_artist_edit)
     {
         m_metadata->setCompilationArtist(compilation_artist_edit->getText());
Index: mythmusic/mythmusic/metaioavfcomment.cpp
===================================================================
--- mythmusic/mythmusic/metaioavfcomment.cpp	(revision 13368)
+++ mythmusic/mythmusic/metaioavfcomment.cpp	(working copy)
@@ -51,7 +51,7 @@
  */
 Metadata* MetaIOAVFComment::read(QString filename)
 {
-    QString artist = "", compilation_artist = "", album = "", title = "", genre = "";
+    QString artist = "", sort_artist = "", compilation_artist = "", album = "", title = "", genre = "";
     int year = 0, tracknum = 0, length = 0;
     
     AVFormatContext* p_context = NULL;
@@ -76,6 +76,7 @@
     else
     {
         artist += (char *)p_context->author;
+        sort_artist += (char *)p_context->author;
         // compilation_artist???
         album += (char *)p_context->album;
         genre += (char *)p_context->genre;
@@ -85,7 +86,7 @@
     
     length = getTrackLength(p_context);
 
-    Metadata *retdata = new Metadata(filename, artist, compilation_artist, album, 
+    Metadata *retdata = new Metadata(filename, artist, sort_artist, compilation_artist, album, 
                                      title, genre, year, tracknum, length);
 
     retdata->determineIfCompilation();
Index: mythmusic/mythmusic/editmetadata.h
===================================================================
--- mythmusic/mythmusic/editmetadata.h	(revision 13368)
+++ mythmusic/mythmusic/editmetadata.h	(working copy)
@@ -66,6 +66,7 @@
     //  GUI stuff
     //
     UIRemoteEditType    *artist_edit;
+    UIRemoteEditType	*sort_artist_edit;
     UIRemoteEditType    *compilation_artist_edit;
     UIRemoteEditType    *album_edit;
     UIRemoteEditType    *title_edit;
Index: mythmusic/mythmusic/metaiotaglib.cpp
===================================================================
--- mythmusic/mythmusic/metaiotaglib.cpp	(revision 13368)
+++ mythmusic/mythmusic/metaiotaglib.cpp	(working copy)
@@ -98,7 +98,7 @@
  */
 Metadata* MetaIOTagLib::read(QString filename)
 {
-    QString artist = "", compilation_artist = "", album = "", title = "",
+    QString artist = "", sort_artist = "", compilation_artist = "", album = "", title = "",
             genre = "";
     int year = 0, tracknum = 0, length = 0, playcount = 0, rating = 0, id = 0;
     bool compilation = false;
@@ -185,7 +185,8 @@
         return NULL;
     }
 
-    Metadata *retdata = new Metadata(filename, artist, compilation_artist, album,
+    Metadata *retdata = new Metadata(filename, artist, sort_artist,
+                                     compilation_artist, album,
                                      title, genre, year, tracknum, length,
                                      id, rating, playcount);
 
Index: mythmusic/mythmusic/cddecoder.cpp
===================================================================
--- mythmusic/mythmusic/cddecoder.cpp	(revision 13368)
+++ mythmusic/mythmusic/cddecoder.cpp	(working copy)
@@ -332,7 +332,7 @@
 Metadata *CdDecoder::getMetadata()
 {
 
-    QString artist = "", album = "", compilation_artist = "", title = "", genre = "";
+    QString artist = "", sort_artist = "", album = "", compilation_artist = "", title = "", genre = "";
     int year = 0, tracknum = 0, length = 0;
 
     int cd = cd_init_device((char *)devicename.ascii());
@@ -426,7 +426,7 @@
     length = length < 0 ? 0 : length;
     length *= 1000;
 
-    Metadata *retdata = new Metadata(filename, artist, compilation_artist,
+    Metadata *retdata = new Metadata(filename, artist, sort_artist, compilation_artist,
                                      album, title, genre, year, tracknum, length);
 
     retdata->determineIfCompilation(true);
@@ -484,6 +484,8 @@
         if (mdata->Artist() != discdata.data_artist)
             strncpy(discdata.data_artist, mdata->Artist().utf8(), 256);
     }
+    if (mdata->SortArtist() != discdata.data_artist)
+        strncpy(discdata.data_artist, mdata->SortArtist().utf8(), 256);
     if (mdata->Album() != discdata.data_title)
         strncpy(discdata.data_title, mdata->Album().utf8(), 256);
     if (mdata->Title() != discdata.data_track[tracknum - 1].track_name)
Index: mythmusic/mythmusic/metaiooggvorbiscomment.cpp
===================================================================
--- mythmusic/mythmusic/metaiooggvorbiscomment.cpp	(revision 13368)
+++ mythmusic/mythmusic/metaiooggvorbiscomment.cpp	(working copy)
@@ -275,7 +275,7 @@
  */
 Metadata* MetaIOOggVorbisComment::read(QString filename)
 {
-    QString artist = "", compilation_artist = "", album = "", title = "", genre = "";
+    QString artist = "", sort_artist = "", compilation_artist = "", album = "", title = "", genre = "";
     int year = 0, tracknum = 0, length = 0;
     bool compilation = false;
 
@@ -302,6 +302,7 @@
             //
         
             artist = getComment(comment, MYTH_VORBISCOMMENT_ARTIST);
+            sort_artist = getComment(comment, MYTH_VORBISCOMMENT_ARTIST);
             compilation_artist = getComment(comment, MYTH_VORBISCOMMENT_COMPILATIONARTIST);
             album = getComment(comment, MYTH_VORBISCOMMENT_ALBUM);
             title = getComment(comment, MYTH_VORBISCOMMENT_TITLE);
@@ -330,7 +331,7 @@
         readFromFilename(filename, artist, album, title, genre, tracknum);
     }
         
-    Metadata *retdata = new Metadata(filename, artist, compilation_artist, album,
+    Metadata *retdata = new Metadata(filename, artist, sort_artist, compilation_artist, album,
                                      title, genre, year, tracknum, length);
 
     retdata->setCompilation(compilation);