[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    =?utf-8?q?=5Bdigikam/development/2=2E0=5D_/=3A_The_call_in_Digik?=
From:       Marcel Wiesweg <marcel.wiesweg () gmx ! de>
Date:       2011-02-08 18:54:38
Message-ID: 20110208185438.9DFA3A609B () git ! kde ! org
[Download RAW message or body]

Git commit 01c8829fe881926c5aa6abb08b63b5d8aadfec5f by Marcel Wiesweg.
Committed on 08/02/11 at 19:53.
Pushed by mwiesweg into branch 'development/2.0'.

The call in DigikamApp is probably too late for the collection scanner.
- use built-in flag to populate color tags at first use
- remove global call
- pour in thread-safety
- ensure tags a reread when db changes etc.

M  +0    -3    digikam/digikamapp.cpp     
M  +38   -25   libs/database/tagscache.cpp     
M  +0    -5    libs/database/tagscache.h     

http://commits.kde.org/digikam/01c8829fe881926c5aa6abb08b63b5d8aadfec5f

diff --git a/digikam/digikamapp.cpp b/digikam/digikamapp.cpp
index 8083b9f..5c69fc2 100644
--- a/digikam/digikamapp.cpp
+++ b/digikam/digikamapp.cpp
@@ -215,9 +215,6 @@ DigikamApp::DigikamApp()
     IccSettings::instance()->loadAllProfilesProperties();
     ThumbnailLoadThread::setDisplayingWidget(this);
 
-    // FIXME : This is a temporally fix to register Color Label Tags. This must be \
                done at a better place.
-    TagsCache::instance()->registerColorLabelTagsToDb();
-
     connect(AlbumSettings::instance(), SIGNAL(setupChanged()),
             this, SLOT(slotSetupChanged()));
 
diff --git a/libs/database/tagscache.cpp b/libs/database/tagscache.cpp
index 0abffe1..6e243b3 100644
--- a/libs/database/tagscache.cpp
+++ b/libs/database/tagscache.cpp
@@ -65,12 +65,14 @@ class TagsCache::TagsCachePriv
 {
 public:
 
-    TagsCachePriv() :
+    TagsCachePriv(TagsCache* q) :
         initialized(false),
         needUpdateInfos(true),
         needUpdateHash(true),
         needUpdateProperties(true),
-        changingDB(false)
+        needUpdateColorLabelTags(true),
+        changingDB(false),
+        q(q)
     {
     }
 
@@ -78,6 +80,7 @@ public:
     bool                        needUpdateInfos;
     bool                        needUpdateHash;
     bool                        needUpdateProperties;
+    bool                        needUpdateColorLabelTags;
     bool                        changingDB;
 
     QReadWriteLock              lock;
@@ -89,6 +92,8 @@ public:
     QSet<int>                   internalTags;
     QMap<ColorLabel, int>       colorLabelsTags;              // Map between color \
Id and tag label Id created in DB.  
+    TagsCache* const            q;
+
     void checkInfos()
     {
         if (needUpdateInfos && initialized)
@@ -191,6 +196,29 @@ public:
     {
         return qBinaryFind(list, value) != list.end();
     }
+
+    void checkColorLabelTags()
+    {
+        if (needUpdateColorLabelTags && initialized)
+        {
+            QMap<ColorLabel, int> map;
+            map.insert(NoneLabel,    \
q->getOrCreateInternalTag(InternalTagName::colorLabelNone())); +            \
map.insert(RedLabel,     \
q->getOrCreateInternalTag(InternalTagName::colorLabelRed())); +            \
map.insert(OrangeLabel,  \
q->getOrCreateInternalTag(InternalTagName::colorLabelOrange())); +            \
map.insert(YellowLabel,  \
q->getOrCreateInternalTag(InternalTagName::colorLabelYellow())); +            \
map.insert(GreenLabel,   \
q->getOrCreateInternalTag(InternalTagName::colorLabelGreen())); +            \
map.insert(BlueLabel,    \
q->getOrCreateInternalTag(InternalTagName::colorLabelBlue())); +            \
map.insert(MagentaLabel, \
q->getOrCreateInternalTag(InternalTagName::colorLabelMagenta())); +            \
map.insert(GrayLabel,    \
q->getOrCreateInternalTag(InternalTagName::colorLabelGray())); +            \
map.insert(BlackLabel,   \
q->getOrCreateInternalTag(InternalTagName::colorLabelBlack())); +            \
map.insert(WhiteLabel,   \
q->getOrCreateInternalTag(InternalTagName::colorLabelWhite())); +
+            QWriteLocker locker(&lock);
+            needUpdateColorLabelTags = false;
+            colorLabelsTags = map;
+        }
+    }
+
 };
 
 // ------------------------------------------------------------------------------------------
 @@ -229,7 +257,7 @@ TagsCache* TagsCache::instance()
 }
 
 TagsCache::TagsCache()
-    : d(new TagsCachePriv)
+    : d(new TagsCachePriv(this))
 {
 }
 
@@ -252,27 +280,12 @@ void TagsCache::initialize()
     d->initialized = true;
 }
 
-void TagsCache::registerColorLabelTagsToDb()
-{
-    d->colorLabelsTags.insert(NoneLabel,    \
                getOrCreateInternalTag(InternalTagName::colorLabelNone()));
-    d->colorLabelsTags.insert(RedLabel,     \
                getOrCreateInternalTag(InternalTagName::colorLabelRed()));
-    d->colorLabelsTags.insert(OrangeLabel,  \
                getOrCreateInternalTag(InternalTagName::colorLabelOrange()));
-    d->colorLabelsTags.insert(YellowLabel,  \
                getOrCreateInternalTag(InternalTagName::colorLabelYellow()));
-    d->colorLabelsTags.insert(GreenLabel,   \
                getOrCreateInternalTag(InternalTagName::colorLabelGreen()));
-    d->colorLabelsTags.insert(BlueLabel,    \
                getOrCreateInternalTag(InternalTagName::colorLabelBlue()));
-    d->colorLabelsTags.insert(MagentaLabel, \
                getOrCreateInternalTag(InternalTagName::colorLabelMagenta()));
-    d->colorLabelsTags.insert(GrayLabel,    \
                getOrCreateInternalTag(InternalTagName::colorLabelGray()));
-    d->colorLabelsTags.insert(BlackLabel,   \
                getOrCreateInternalTag(InternalTagName::colorLabelBlack()));
-    d->colorLabelsTags.insert(WhiteLabel,   \
                getOrCreateInternalTag(InternalTagName::colorLabelWhite()));
-
-    kDebug() << "Color Label Tags: " << d->colorLabelsTags;
-}
-
 void TagsCache::invalidate()
 {
-    d->needUpdateInfos      = true;
-    d->needUpdateHash       = true;
-    d->needUpdateProperties = true;
+    d->needUpdateInfos          = true;
+    d->needUpdateHash           = true;
+    d->needUpdateProperties     = true;
+    d->needUpdateColorLabelTags = true;
 }
 
 QLatin1String TagsCache::tagPathOfDigikamInternalTags(LeadingSlashPolicy \
slashPolicy) @@ -833,9 +846,7 @@ void TagsCache::slotTagChanged(const TagChangeset& \
changeset)  {
     if (!d->changingDB && changeset.operation() != TagChangeset::IconChanged)
     {
-        d->needUpdateInfos      = true;
-        d->needUpdateHash       = true;
-        d->needUpdateProperties = true;
+        invalidate();
     }
 
     if (changeset.operation() == TagChangeset::Added)
@@ -853,6 +864,8 @@ int TagsCache::getTagForColorLabel(ColorLabel label)
     if (label < NoneLabel || label > WhiteLabel)
         return 0;
 
+    d->checkColorLabelTags();
+    QReadLocker locker(&d->lock);
     return d->colorLabelsTags[label];
 }
 
diff --git a/libs/database/tagscache.h b/libs/database/tagscache.h
index 37e922a..5614d9f 100644
--- a/libs/database/tagscache.h
+++ b/libs/database/tagscache.h
@@ -194,11 +194,6 @@ public:
      */
     int getTagForColorLabel(ColorLabel label);
 
-    /**
-     * Register Color Label tags in database. If tags do not exists, create it as \
                well.
-     */
-    void registerColorLabelTagsToDb();
-
     static QLatin1String tagPathOfDigikamInternalTags(LeadingSlashPolicy slashPolicy \
= IncludeLeadingSlash);  static QLatin1String propertyNameDigikamInternalTag();
     static QLatin1String propertyNameExcludedFromWriting();


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic