[pkg-fso-commits] [SCM] FSO frameworkd Debian packaging branch, debian, updated. upstream/0.9.5.5-717-g0f98819

Sebastian Krzyszkowiak seba.dos1 at gmail.com
Sat Aug 6 08:18:01 UTC 2011


The following commit has been merged in the debian branch:
commit 7ad30ed37960bc64974fa9610f9aa94a0b39f65a
Author: Sebastian Krzyszkowiak <seba.dos1 at gmail.com>
Date:   Mon Aug 24 22:11:54 2009 +0200

    opimd: Fix updating multiple fields

diff --git a/framework/subsystems/opimd/pimb_sqlite_calls.py b/framework/subsystems/opimd/pimb_sqlite_calls.py
index 99c2d5a..c052aca 100644
--- a/framework/subsystems/opimd/pimb_sqlite_calls.py
+++ b/framework/subsystems/opimd/pimb_sqlite_calls.py
@@ -167,11 +167,14 @@ class SQLiteCallBackend(Backend):
         for (field, value) in call_data:
             if field=='_backend_entry_id':
                 callId=value
+        deleted = []
         for (field, value) in call_data:
             if field in reqfields:
                 cur.execute('UPDATE calls SET '+field+'=? WHERE id=?',(value,callId))
             elif not field.startswith('_'):
-                cur.execute('DELETE FROM call_values WHERE callId=? AND field=?',(callId,field))
+                if not field in deleted:
+                    cur.execute('DELETE FROM call_values WHERE callId=? AND field=?',(callId,field))
+                    deleted.append(field)
                 if isinstance(value, Array) or isinstance(value, list):
                     for val in value:
                         cur.execute('INSERT INTO call_values (field,value,callId) VALUES (?,?,?)',(field,val,callId))
diff --git a/framework/subsystems/opimd/pimb_sqlite_contacts.py b/framework/subsystems/opimd/pimb_sqlite_contacts.py
index 6eb5f3c..3b818b5 100644
--- a/framework/subsystems/opimd/pimb_sqlite_contacts.py
+++ b/framework/subsystems/opimd/pimb_sqlite_contacts.py
@@ -204,11 +204,14 @@ class SQLiteContactBackend(Backend):
         for (field, value) in contact_data:
             if field=='_backend_entry_id':
                 contactId=value
+        deleted = []
         for (field, value) in contact_data:
             if field in reqfields:
                 cur.execute('UPDATE contacts SET '+field+'=? WHERE id=?',(value,contactId))
             elif not field.startswith('_'):
-                cur.execute('DELETE FROM contact_values WHERE contactId=? AND field=?',(contactId,field))
+                if not field in deleted:
+                    cur.execute('DELETE FROM contact_values WHERE contactId=? AND field=?',(contactId,field))
+                    deleted.append(field)
                 if isinstance(value, Array) or isinstance(value, list):
                     for val in value:
                         cur.execute('INSERT INTO contact_values (field,value,contactId) VALUES (?,?,?)',(field,val,contactId))
diff --git a/framework/subsystems/opimd/pimb_sqlite_dates.py b/framework/subsystems/opimd/pimb_sqlite_dates.py
index 45c6acb..10b16c0 100644
--- a/framework/subsystems/opimd/pimb_sqlite_dates.py
+++ b/framework/subsystems/opimd/pimb_sqlite_dates.py
@@ -158,11 +158,14 @@ class SQLiteDatesBackend(Backend):
         for (field, value) in date_data:
             if field=='_backend_entry_id':
                 dateId=value
+        deleted = []
         for (field, value) in date_data:
             if field in reqfields:
                 cur.execute('UPDATE dates SET '+field+'=? WHERE id=?',(value,dateId))
             elif not field.startswith('_'):
-                cur.execute('DELETE FROM date_values WHERE dateId=? AND field=?',(dateId,field))
+                if not field in deleted:
+                    cur.execute('DELETE FROM date_values WHERE dateId=? AND field=?',(dateId,field))
+                    deleted.append(field)
                 if isinstance(value, Array) or isinstance(value, list):
                     for val in value:
                         cur.execute('INSERT INTO date_values (field,value,dateId) VALUES (?,?,?)',(field,val,dateId))
diff --git a/framework/subsystems/opimd/pimb_sqlite_messages.py b/framework/subsystems/opimd/pimb_sqlite_messages.py
index ea21820..d978cc0 100644
--- a/framework/subsystems/opimd/pimb_sqlite_messages.py
+++ b/framework/subsystems/opimd/pimb_sqlite_messages.py
@@ -192,11 +192,14 @@ class SQLiteMessagesBackend(Backend):
         for (field, value) in message_data:
             if field=='_backend_entry_id':
                 messageId=value
+        deleted = []
         for (field, value) in message_data:
             if field in reqfields:
                 cur.execute('UPDATE messages SET '+field+'=? WHERE id=?',(value,messageId))
             elif not field.startswith('_'):
-                cur.execute('DELETE FROM message_values WHERE messageId=? AND field=?',(messageId,field))
+                if not field in deleted:
+                    cur.execute('DELETE FROM message_values WHERE messageId=? AND field=?',(messageId,field))
+                    deleted.append(field)
                 if isinstance(value, Array) or isinstance(value, list):
                     for val in value:
                         cur.execute('INSERT INTO message_values (field,value,messageId) VALUES (?,?,?)',(field,val,messageId))
diff --git a/framework/subsystems/opimd/pimb_sqlite_notes.py b/framework/subsystems/opimd/pimb_sqlite_notes.py
index 36faaa8..f660387 100644
--- a/framework/subsystems/opimd/pimb_sqlite_notes.py
+++ b/framework/subsystems/opimd/pimb_sqlite_notes.py
@@ -157,11 +157,14 @@ class SQLiteNotesBackend(Backend):
         for (field, value) in entry_data:
             if field=='_backend_entry_id':
                 entryId=value
+        deleted = []
         for (field, value) in entry_data:
             if field in reqfields:
                 cur.execute('UPDATE notes SET '+field+'=? WHERE id=?',(value,entryId))
             elif not field.startswith('_'):
-                cur.execute('DELETE FROM note_values WHERE noteId=? AND field=?',(entryId,field))
+                if not field in deleted:
+                    cur.execute('DELETE FROM note_values WHERE noteId=? AND field=?',(entryId,field))
+                    deleted.append(field)
                 if isinstance(value, Array) or isinstance(value, list):
                     for val in value:
                         cur.execute('INSERT INTO note_values (field,value,noteId) VALUES (?,?,?)',(field,val,entryId))
diff --git a/framework/subsystems/opimd/pimb_sqlite_tasks.py b/framework/subsystems/opimd/pimb_sqlite_tasks.py
index 6e10149..6a5b50c 100644
--- a/framework/subsystems/opimd/pimb_sqlite_tasks.py
+++ b/framework/subsystems/opimd/pimb_sqlite_tasks.py
@@ -159,11 +159,14 @@ class SQLiteTasksBackend(Backend):
         for (field, value) in entry_data:
             if field=='_backend_entry_id':
                 entryId=value
+        deleted = []
         for (field, value) in entry_data:
             if field in reqfields:
                 cur.execute('UPDATE tasks SET '+field+'=? WHERE id=?',(value,entryId))
             elif not field.startswith('_'):
-                cur.execute('DELETE FROM task_values WHERE taskId=? AND field=?',(entryId,field))
+                if not field in deleted:
+                    cur.execute('DELETE FROM task_values WHERE taskId=? AND field=?',(entryId,field))
+                    deleted.append(field)
                 if isinstance(value, Array) or isinstance(value, list):
                     for val in value:
                         cur.execute('INSERT INTO task_values (field,value,taskId) VALUES (?,?,?)',(field,val,entryId))
diff --git a/framework/subsystems/opimd/pimd_generic.py b/framework/subsystems/opimd/pimd_generic.py
index eedd8db..69ac320 100644
--- a/framework/subsystems/opimd/pimd_generic.py
+++ b/framework/subsystems/opimd/pimd_generic.py
@@ -11,13 +11,15 @@ GPLv2 or later
 
 Generic Domain
 
-From this domain class others inherit.
+From those domain classes others inherit.
 """
 
 DBUS_BUS_NAME_FSO = "org.freesmartphone.opimd"
 DBUS_PATH_BASE_FSO = "/org/freesmartphone/PIM"
 DIN_BASE_FSO = "org.freesmartphone.PIM"
 
+import dbus
+
 from dbus.service import FallbackObject as DBusFBObject
 from dbus.service import signal as dbus_signal
 from dbus.service import method as dbus_method
@@ -640,8 +642,22 @@ class GenericDomain():
                 else:
                     raise InvalidBackend( "There is no backend which can store new field" )
             elif not field_name.startswith('_'):
-                for field_nr in entryif._field_idx[field_name]:
-                    if entry[field_name]!=data[field_name]:
+                if not data[field_name] or isinstance(data[field_name], list) or isinstance(data[field_name], dbus.Array):
+                    field_idx = entryif._field_idx[field_name]
+                    field_idx.reverse()
+                    for field_nr in field_idx:
+                        del entryif._fields[field_nr]
+                    del entryif._field_idx[field_name]
+                    if data[field_name]:
+                        entryif._field_idx[field_name] = []
+                        for value in data[field_name]:
+                            #newfieldid = len(entryif._fields)-1
+                            #entryif._field_idx[field_name].append(newfieldid)
+                            entryif._fields.append([field_name, value, value, backend])
+                    entryif.rebuild_index()
+                else:
+                    for field_nr in entryif._field_idx[field_name]:
+                        #if entry[field_name]!=data[field_name]:
                         entryif._fields[field_nr][1]=data[field_name]
 
         for backend_name in entryif._used_backends:
@@ -676,18 +692,7 @@ class GenericDomain():
                 raise InvalidBackend( "Backend does not feature del_entry" )
 
         #del self._entries[num_id]
-        # Experimental: it may introduce some bugs.
-#        entry = self._entries[num_id]
         self._entries[num_id] = None
-#        del entry
-
-        # update Path fields, as IDs may be changed - UGLYYYY!!! */me spanks himself*
-        # Not needed with that "experimental" code above.
-        #for id in range(0,len(self._entries)):
-        #    path = _DBUS_PATH_ENTRIES+ '/' + str(id)
-        #    for field in self._entries[id]._fields:
-        #        if field[0]=='Path':
-        #            field[1]=path
 
         for backend_name in backends:
             backend = self._backends[backend_name]

-- 
FSO frameworkd Debian packaging



More information about the pkg-fso-commits mailing list