From 0f499f4697b270063792d12d086eb6aff6132679 Mon Sep 17 00:00:00 2001
From: root <root@example.com>
Date: Mon, 28 Apr 2014 21:15:24 +0200
Subject: [PATCH] uniqueid

---
 ActiveSync/SOGoActiveSyncDispatcher.m |    3 +++
 SoObjects/Mailer/SOGoMailFolder.m     |   44 +++++++++++++++++++++++++++++++++
 2 files changed, 47 insertions(+)

diff --git a/ActiveSync/SOGoActiveSyncDispatcher.m b/ActiveSync/SOGoActiveSyncDispatcher.m
index b1b8e4e..9fd800e 100644
--- a/ActiveSync/SOGoActiveSyncDispatcher.m
+++ b/ActiveSync/SOGoActiveSyncDispatcher.m
@@ -618,6 +618,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       NSCalendarDate *filter;
       NSArray *uids;
 
+//tfu hack
+NSLog(@"tfu unique %@" , [currentCollection uniqueid]);
+
       filter = [NSCalendarDate dateFromFilterType: [[(id)[theDocumentElement getElementsByTagName: @"FilterType"] lastObject] textValue]];
       
       notDeletedQualifier =  [EOQualifier qualifierWithQualifierFormat:
diff --git a/SoObjects/Mailer/SOGoMailFolder.m b/SoObjects/Mailer/SOGoMailFolder.m
index 6408828..492bfd8 100644
--- a/SoObjects/Mailer/SOGoMailFolder.m
+++ b/SoObjects/Mailer/SOGoMailFolder.m
@@ -67,6 +67,8 @@
 #import "SOGoMailManager.h"
 #import "SOGoMailFolder.h"
 #import "SOGoTrashFolder.h"
+#import <Foundation/NSProcessInfo.h>
+
 
 #define XMLNS_INVERSEDAV @"urn:inverse:params:xml:ns:inverse-dav"
 
@@ -757,6 +759,48 @@ static NSString *defaultUserID =  @"anyone";
   return result;
 }
 
+//tfu
+- (NSString *) uniqueid
+{
+  NGImap4Client *client;
+  NSString *folderName, *folderUid, *folderUidValidity ;
+  NSDictionary *result;
+
+  client = [[self imap4Connection] client];
+  folderName = [[self imap4Connection] imap4FolderNameForURL: [self imap4URL]];
+
+  result = [ client select: folderName];
+  
+  folderUid = [result objectForKey: @"x-guid"];
+  folderUidValidity = [result objectForKey: @"uidvalidity"];
+
+  NSLog(@"tfu uniqueid x-guid %@ uidvalidity %@", folderUid, folderUidValidity);
+
+  if (!folderUid) {
+
+     NSLog(@"tfu uniqueid folderName %@", folderName);
+     result = [client annotation: folderName entryName: @"/comment" attributeName: @"value.priv"];
+     //result = [client annotation: folderName entryName: @"/comment" attributeName: @"value"];
+     //result = [client annotation: folderName entryName: @"/*" attributeName: @"value"];
+     result = [client annotation: @"" entryName: @"/*" attributeName: @"value"];
+     if ([result objectForKey: @"/comment"]) {
+        NSLog(@"tfu uniqueid folderuid from annotation %@", [[result objectForKey: @"/comment"] objectForKey: @"value.priv"]);
+        folderUid = [[result objectForKey: @"/comment"] objectForKey: @"value.priv"];
+     } else {
+            folderUid = [[NSProcessInfo processInfo] globallyUniqueString];
+            result = [client annotation: folderName entryName: @"/comment" attributeName: @"value.priv" attributeValue: folderUid ];
+            if (![[result objectForKey: @"result"] boolValue]) {
+               folderUid = [NSString stringWithFormat: @"%@-%@", folderName,  folderUidValidity ];
+               NSLog(@"tfu uniqueid setannotation failed: %@", result );
+               NSLog(@"tfu uniqueid folderid: %@", folderUid );
+            }
+     }
+  } 
+  
+  NSLog(@"tfu annotation folderUid  %@", folderUid );
+  return folderUid;
+}
+
 - (NSDictionary *) statusForFlags: (NSArray *) flags
 {
   NGImap4Client *client;
-- 
1.7.9.5

