Index: mythmusic/metadata.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythmusic/mythmusic/metadata.cpp,v
retrieving revision 1.34
diff -u -d -r1.34 metadata.cpp
--- mythmusic/metadata.cpp	10 Apr 2005 05:17:15 -0000	1.34
+++ mythmusic/metadata.cpp	10 Apr 2005 13:59:42 -0000
@@ -631,14 +631,15 @@
     //  Start a thread to do data
     //  loading and sorting
     //
-    
+
     metadata_loader = new MetadataLoadingThread(this);
     metadata_loader->start();
 
     all_music.setAutoDelete(true);
     top_nodes.setAutoDelete(true);
-    
+
     last_listed = -1;
+    field_sep = gContext->GetSetting("FieldSeparator", "");
 }
 
 AllMusic::~AllMusic()
@@ -936,27 +937,40 @@
         }
         QString title_temp = QString(QObject::tr("%1 - %2")).arg((*anit).Track()).arg(title_string);
         QString level_temp = QObject::tr("title");
-        CDCheckItem *new_item = new CDCheckItem(where, title_temp, level_temp, 
+        CDCheckItem *new_item = new CDCheckItem(where, title_temp, level_temp,
                                                 -(*anit).Track());
-        new_item->setCheck(false); //  Avoiding -Wall     
-    }  
+        new_item->setCheck(false); //  Avoiding -Wall
+    }
 }
 
 
 void AllMusic::intoTree(Metadata* inserter)
 {
-    MusicNode *insertion_point = findRightNode(inserter, 0);
-    insertion_point->insert(inserter);
+    QString a_field = "";
+    inserter->getField(tree_levels.first(), &a_field, paths, startdir, 0);
+
+    if(field_sep == "")
+    {
+        MusicNode *insertion_point = findRightNode(inserter, a_field, 0);
+        insertion_point->insert(inserter);
+    }
+    else
+    {
+        QStringList lst( QStringList::split( field_sep, a_field ) );
+
+        for (QStringList::Iterator it = lst.begin() ; it != lst.end(); ++it ) {
+           MusicNode *insertion_point = findRightNode(inserter, *it, 0);
+           insertion_point->insert(inserter);
+        }
+    }
 }
 
-MusicNode* AllMusic::findRightNode(Metadata* inserter, uint depth)
+MusicNode* AllMusic::findRightNode(Metadata* inserter, QString &a_field, uint depth)
 {
-    QString a_field = "";
-
     //  Use metadata to find pre-exisiting insertion
     //  point or (recursively) create nodes as needed
     //  and return ultimate insertion point
-    
+
     if(inserter->areYouFinished(depth, tree_levels.count(), paths, startdir))
     {
         //  special case, track is at root level
@@ -964,8 +978,7 @@
         //  paths=directory
         return root_node;
     }
-    
-    inserter->getField(tree_levels.first(), &a_field, paths, startdir, depth);
+
     QPtrListIterator<MusicNode> iter( top_nodes );
     MusicNode *search;
     while ( (search = iter.current()) != 0 )
Index: mythmusic/metadata.h
===================================================================
RCS file: /var/lib/mythcvs/mythmusic/mythmusic/metadata.h,v
retrieving revision 1.17
diff -u -d -r1.17 metadata.h
--- mythmusic/metadata.h	23 Feb 2005 20:41:08 -0000	1.17
+++ mythmusic/metadata.h	10 Apr 2005 13:59:42 -0000
@@ -256,7 +256,7 @@
     void        sortTree();
     void        writeTree(GenericTree *tree_to_write_to);
     void        intoTree(Metadata* inserter);
-    MusicNode*  findRightNode(Metadata* inserter, uint depth);
+    MusicNode*  findRightNode(Metadata* inserter, QString &a_field, uint depth);
     void        setSorting(QString a_paths);
     bool        putYourselfOnTheListView(TreeCheckItem *where, int how_many);
     void        putCDOnTheListView(CDCheckItem *where);
@@ -288,8 +288,8 @@
     QString     startdir;
     QString     paths;
     QStringList tree_levels;
-    
-    
+
+    QString     field_sep;
     MetadataLoadingThread   *metadata_loader;
     bool                     done_loading;
     int                      last_listed;
