utf8: implement utf8foldernames option
If utf8foldernames is enabled on account level all folder names read from the IMAP server will immediately be reencoded to UTF-8. Names will be treated as UTF-8 as long as the IMAP server isn't contacted again, for which they are reencoded to IMAP4-UTF-7. This means that any further processing such as nametrans, folderfilter etc. will act upon the UTF-8 names, which will have to be documented carefully. NOTE 1: GMail repositories and folders inherit from the IMAP... classes, so I don't know yet if these changes have ugly side-effects. But web research suggests that GMail IMAP folders are equally encoded in UTF-7 so that should work identically here and incorporate the same improvements. NOTE 2: I could not test the behaviour with idlefolders as I didn't get this option to work at all, not even with the latest stable version. NOTE 3: I *did* test to sync an IMAP repository against another IMAP repository. Signed-off-by: Urs Liska <git@ursliska.de> Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
This commit is contained in:
		 Urs Liska
					Urs Liska
				
			
				
					committed by
					
						 Nicolas Sebrecht
						Nicolas Sebrecht
					
				
			
			
				
	
			
			
			 Nicolas Sebrecht
						Nicolas Sebrecht
					
				
			
						parent
						
							14d83dbf48
						
					
				
				
					commit
					36d726763d
				
			| @@ -69,6 +69,8 @@ class Account(CustomConfig.ConfigHelperMixin): | ||||
|         self.name = name | ||||
|         self.metadatadir = config.getmetadatadir() | ||||
|         self.localeval = config.getlocaleval() | ||||
|         # Store utf-8 support as a property of Account object | ||||
|         self.utf_8_support = self.getconfboolean('utf8foldernames', False) | ||||
|         # Current :mod:`offlineimap.ui`, can be used for logging: | ||||
|         self.ui = getglobalui() | ||||
|         self.refreshperiod = self.getconffloat('autorefresh', 0.0) | ||||
| @@ -360,7 +362,7 @@ class SyncableAccount(Account): | ||||
|  | ||||
|                 if not remotefolder.sync_this: | ||||
|                     self.ui.debug('', "Not syncing filtered folder '%s'" | ||||
|                                   "[%s]"% (remotefolder, remoterepos)) | ||||
|                                   "[%s]"% (remotefolder.getname(), remoterepos)) | ||||
|                     continue # Ignore filtered folder. | ||||
|  | ||||
|                 # The remote folder names must not have the local sep char in | ||||
| @@ -378,7 +380,7 @@ class SyncableAccount(Account): | ||||
|                 localfolder = self.get_local_folder(remotefolder) | ||||
|                 if not localfolder.sync_this: | ||||
|                     self.ui.debug('', "Not syncing filtered folder '%s'" | ||||
|                                  "[%s]"% (localfolder, localfolder.repository)) | ||||
|                                  "[%s]"% (localfolder.getname(), localfolder.repository)) | ||||
|                     continue # Ignore filtered folder. | ||||
|  | ||||
|                 if not globals.options.singlethreading: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user