changeset 43:a3f731205168

* Write results out to local datastore
author Chris Cannam
date Wed, 28 Apr 2010 15:57:06 +0100
parents add3570c6035
children ed2befdf1e98
files common/Objects.cpp common/Objects.h common/TypeRegistrar.cpp utilities/track/track.cpp
diffstat 4 files changed, 46 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/common/Objects.cpp	Tue Apr 20 15:21:32 2010 +0100
+++ b/common/Objects.cpp	Wed Apr 28 15:57:06 2010 +0100
@@ -825,8 +825,19 @@
     }
 }
 
+TrackFile::TrackFile(QObject *parent) :
+    QObject(parent),
+    m_composer(0),
+    m_work(0),
+    m_movement(0)
+{
+}
+
 TrackFile::TrackFile(FileSource source, QObject *parent) :
-    QObject(parent)
+    QObject(parent),
+    m_composer(0),
+    m_work(0),
+    m_movement(0)
 {
     if (source.isAvailable()) {
         QFile f(source.getLocalFilename());
--- a/common/Objects.h	Tue Apr 20 15:21:32 2010 +0100
+++ b/common/Objects.h	Wed Apr 28 15:57:06 2010 +0100
@@ -594,12 +594,14 @@
     Q_PROPERTY(QSet<Dataquay::Uri> otherURIs READ otherURIs WRITE setOtherURIs NOTIFY otherURIsChanged STORED true)
 
 public:
-    TrackFile(QObject *parent = 0) : QObject(parent) { }
+    TrackFile(QObject *parent = 0);
     TrackFile(FileSource file, QObject *parent = 0);
     
+    /// The hash is set automatically from the FileSource at construction
     QString hash() const { return m_hash; }
     void setHash(QString hash) { m_hash = hash; emit hashChanged(hash); }
 
+    /// The URI is set automatically from the FileSource at construction
     Dataquay::Uri uri() const { return m_uri; }
     void setUri(Dataquay::Uri u) { m_uri = u; emit uriChanged(u); }
 
--- a/common/TypeRegistrar.cpp	Tue Apr 20 15:21:32 2010 +0100
+++ b/common/TypeRegistrar.cpp	Wed Apr 28 15:57:06 2010 +0100
@@ -121,7 +121,8 @@
 	mapping->setRelationshipPrefix(Uri("http://dbtune.org/classical/resource/vocab/relationship/"));
     }
 
-    if (store) {
+    if (store && mapping) {
+
 	store->addPrefix("type", mapping->getObjectTypePrefix());
 	store->addPrefix("classical", Uri(mapping->getObjectTypePrefix().toString() + "type/"));
 	store->addPrefix("property", mapping->getPropertyPrefix());
@@ -135,9 +136,7 @@
 
 	store->add(Triple("property:death", "a", store->expand("owl:ObjectProperty")));
 	store->add(Triple("property:death", "rdfs:subPropertyOf", store->expand("bio:event")));
-    }
 
-    if (mapping) {
 	mapping->addTypeMapping("ClassicalData::Composer", store->expand("classical:Composer"));
 	mapping->addPropertyMapping("ClassicalData::Composer", "pages", store->expand("foaf:page"));
 	mapping->addPropertyMapping("ClassicalData::Composer", "name", store->expand("foaf:name"));
--- a/utilities/track/track.cpp	Tue Apr 20 15:21:32 2010 +0100
+++ b/utilities/track/track.cpp	Wed Apr 28 15:57:06 2010 +0100
@@ -205,8 +205,8 @@
 getTrackData(FileSource source, QString &fingerprint, QString &puid,
              QString &title, QString &maker, AudioFileReader::TagMap &tags)
 {
-//    AudioFileReader *reader = AudioFileReaderFactory::createReader(source);
-    AudioFileReader *reader = AudioFileReaderFactory::createThreadingReader(source);
+    AudioFileReader *reader = AudioFileReaderFactory::createReader(source);
+//    AudioFileReader *reader = AudioFileReaderFactory::createThreadingReader(source);
     if (!reader || !reader->isOK()) {
         cerr << "Failed to open audio file" << endl;
         return;
@@ -454,7 +454,7 @@
     guessWorkFromTitle(filepart, scale, composer, guesses);
 }
 
-void
+TrackFile *
 guess(QString track)
 {
     cout << endl;
@@ -471,6 +471,9 @@
     //!!! bad api!:
     getTrackData(fs, fingerprint, puid, title, maker, tags);
 
+    cout << "fingerprint: " << fingerprint.toStdString() << ", puid: "
+         << puid.toStdString() << endl;
+
     GuessSet guesses;
 
     guessFromMakerTag(tags, "TCOM", 1.0, guesses);
@@ -588,17 +591,24 @@
     float bc3 = bc2;
     QString best3 = best2;
     QString work;
+    Work *bestWork = 0;
     if (!consistentWorks.empty()) {
         Guess bg = *consistentWorks.begin();
-        Work *w = qobject_cast<Work *>(bg.entity());
-        if (w) {
+        bestWork = qobject_cast<Work *>(bg.entity());
+        if (bestWork) {
             bc3 = bg.confidence();
-            best3 = w->getComposerName();
-            work = w->getDisplayName();
+            best3 = bestWork->getComposerName();
+            work = bestWork->getDisplayName();
         }
     }
 
     cout << track << "|" << best << "|" << bc << "|" << best2 << "|" << bc2 << "|" << best3 << "|" << bc3 << "|" << work << "|" << bestTitle << endl;
+
+    tf->setOfaFingerprint(fingerprint);
+    tf->setPuid(puid);
+    tf->setComposer(confidentComposer);
+    tf->setWork(bestWork);
+    return tf;
 }
 
 int
@@ -686,12 +696,23 @@
         }
     }
 
+    BasicStore localStore;
+    TypeRegistrar::addMappings(&localStore, &tm);
+
+    ObjectStorer *localStorer = new ObjectStorer(&localStore);
+    localStorer->setTypeMapping(tm);
+//    localStorer->setFollowPolicy(ObjectStorer::FollowObjectProperties);
+
     if (command == "guess") {
         if (args.empty()) usage(argv[0]);
         foreach (QString track, args) {
-            guess(track);
+            TrackFile *tf = guess(track);
+            localStorer->store(tf);
         }
     } 
+
+    delete localStorer;
+    localStore.save("local.ttl");
         
     delete store;
     TempDirectory::getInstance()->cleanup();