summaryrefslogtreecommitdiff
blob: a6dcc7702e358e479b72c4c5718550995f5b6e31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
diff -Nur kdepim-3.4.1.orig/kpilot/conduits/memofileconduit/memofile-conduit.cc kdepim-3.4.1/kpilot/conduits/memofileconduit/memofile-conduit.cc
--- kdepim-3.4.1.orig/kpilot/conduits/memofileconduit/memofile-conduit.cc	2005-05-23 14:12:37.000000000 +0200
+++ kdepim-3.4.1/kpilot/conduits/memofileconduit/memofile-conduit.cc	2005-05-27 17:27:52.000000000 +0200
@@ -114,7 +114,7 @@
 	setFirstSync( _memofiles->isFirstSync() );
 	addSyncLogEntry(i18n(" Syncing with %1.").arg(_memo_directory));
 
-	if ( (syncMode() == SyncAction::SyncMode::eCopyHHToPC) || isFirstSync() ) {
+	if ( (syncMode() == SyncAction::SyncMode::eCopyHHToPC) || _memofiles->isFirstSync() ) {
 		addSyncLogEntry(i18n(" Copying Pilot to PC..."));
 #ifdef DEBUG
 		DEBUGCONDUIT << fname << ": copying Pilot to PC." << endl;
@@ -474,17 +474,11 @@
 	// Note: This will reset both fCategories and fMemoAppInfo, so
 	//       after this, we need to reinitialize our memofiles object...
 	setAppInfo();
-	cleanup();
 
 	// re-create our memofiles helper...
 	delete _memofiles;
 	_memofiles = new Memofiles(fCategories, *fMemoAppInfo, _memo_directory);
 
-	// make sure we are starting with a clean database on both ends...
-	fDatabase->deleteRecord(0, true);
-	fLocalDatabase->deleteRecord(0, true);
-	cleanup();
-
 	_memofiles->load(true);
 
 	QPtrList<Memofile> memofiles = _memofiles->getAll();
@@ -496,11 +490,39 @@
 	}
 
 	_memofiles->save();
-
+	
+	// now that we've copied from the PC to our handheld, remove anything extra from the
+	// handheld...
+	deleteUnsyncedHHRecords();
+	
 	return true;
 
 }
 
+void MemofileConduit::deleteUnsyncedHHRecords()
+{
+	FUNCTIONSETUP;
+	if ( syncMode()==SyncMode::eCopyPCToHH )
+	{
+		RecordIDList ids=fDatabase->idList();
+		RecordIDList::iterator it;
+		for ( it = ids.begin(); it != ids.end(); ++it )
+		{
+			if (!_memofiles->find(*it))
+			{
+#ifdef DEBUG
+				DEBUGCONDUIT << fname
+				<< "Deleting record with ID "<<*it <<" from handheld "
+				<< "(is not on PC, and syncing with PC->HH direction)"
+				<< endl;
+#endif
+				fDatabase->deleteRecord(*it);
+				fLocalDatabase->deleteRecord(*it);
+			}
+		}
+	}
+}
+
 int MemofileConduit::writeToPilot(Memofile * memofile)
 {
 	FUNCTIONSETUP;
diff -Nur kdepim-3.4.1.orig/kpilot/conduits/memofileconduit/memofile-conduit.h kdepim-3.4.1/kpilot/conduits/memofileconduit/memofile-conduit.h
--- kdepim-3.4.1.orig/kpilot/conduits/memofileconduit/memofile-conduit.h	2005-05-23 14:12:37.000000000 +0200
+++ kdepim-3.4.1/kpilot/conduits/memofileconduit/memofile-conduit.h	2005-05-27 17:27:52.000000000 +0200
@@ -88,6 +88,7 @@
 
 	bool	copyHHToPC();
 	bool	copyPCToHH();
+	void	deleteUnsyncedHHRecords();
 	bool	sync();
 
 	int 	writeToPilot(Memofile * memofile);
diff -Nur kdepim-3.4.1.orig/kpilot/lib/pilotDatabase.cc kdepim-3.4.1/kpilot/lib/pilotDatabase.cc
--- kdepim-3.4.1.orig/kpilot/lib/pilotDatabase.cc	2005-05-23 14:12:43.000000000 +0200
+++ kdepim-3.4.1/kpilot/lib/pilotDatabase.cc	2005-05-27 17:27:52.000000000 +0200
@@ -185,7 +185,7 @@
 	int len = CATEGORY_NAME_SIZE - 1;
 	QCString t = PilotAppCategory::codec()->fromUnicode(s,len);
 	memset(categoryInfo()->name[i],0,CATEGORY_NAME_SIZE);
-	qstrncpy(categoryInfo()->name[i],t,kMin(len,(int)CATEGORY_NAME_SIZE));
+	qstrncpy(categoryInfo()->name[i],t,CATEGORY_NAME_SIZE);
 	return true;
 }
 
diff -Nur kdepim-3.4.1.orig/kpilot/lib/pilotDatabase.h kdepim-3.4.1/kpilot/lib/pilotDatabase.h
--- kdepim-3.4.1.orig/kpilot/lib/pilotDatabase.h	2005-05-23 14:12:43.000000000 +0200
+++ kdepim-3.4.1/kpilot/lib/pilotDatabase.h	2005-05-27 17:27:52.000000000 +0200
@@ -279,9 +279,12 @@
 		int appLen = MAX_APPINFO_SIZE;
 		unsigned char buffer[MAX_APPINFO_SIZE];
 
-		appLen = d->readAppBlock(buffer,appLen);
-
-		(*unpack)(&fInfo, buffer, appLen);
+		if (d && d->isDBOpen())
+		{
+			appLen = d->readAppBlock(buffer,appLen);
+			(*unpack)(&fInfo, buffer, appLen);
+		}
+		// fInfo is just a struct, so we can point to it anyway.
 		init(&fInfo.category,appLen);
 	} ;
 
@@ -289,6 +292,10 @@
 	{
 		FUNCTIONSETUP;
 		unsigned char buffer[MAX_APPINFO_SIZE];
+		if (!d || !d->isDBOpen())
+		{
+			return -1;
+		}
 		int appLen = (*pack)(&fInfo, buffer, length());
 		if (appLen > 0)
 		{
diff -Nur kdepim-3.4.1.orig/kpilot/lib/pilotLocalDatabase.cc kdepim-3.4.1/kpilot/lib/pilotLocalDatabase.cc
--- kdepim-3.4.1.orig/kpilot/lib/pilotLocalDatabase.cc	2005-05-23 14:12:43.000000000 +0200
+++ kdepim-3.4.1/kpilot/lib/pilotLocalDatabase.cc	2005-05-27 17:27:52.000000000 +0200
@@ -618,7 +618,7 @@
 
 	int count;
 	pi_file_get_entries(dbFile, &count);
-	if (count > 0)
+	if (count >= 0)
 	{
 		KPILOT_DELETE(d);
 		d = new Private(count);