From 595f4e01cb2003334f3616f79a42c3d9a9f61047 Mon Sep 17 00:00:00 2001 From: Joe Keenan Date: Sun, 29 Apr 2018 11:21:45 -0400 Subject: [PATCH] More changes for move option Existing device fixup Mark message as processed in case move fails --- .../Contents/Server Plugin/IMAPServer.py | 29 ++++++++++--------- .../Contents/Server Plugin/plugin.py | 7 ++++- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/BetterEmail.indigoPlugin/Contents/Server Plugin/IMAPServer.py b/BetterEmail.indigoPlugin/Contents/Server Plugin/IMAPServer.py index 95205f9..4d35bc0 100755 --- a/BetterEmail.indigoPlugin/Contents/Server Plugin/IMAPServer.py +++ b/BetterEmail.indigoPlugin/Contents/Server Plugin/IMAPServer.py @@ -35,7 +35,7 @@ def __init__(self, device): self.connectIMAP() self.needsync = False self.exitIDLE = False - self.idleThread = Thread(target=self.idleIMAP) + self.idleThread = Thread(target=self.idleIMAPThread) self.idleThread.start() def __str__(self): @@ -145,8 +145,8 @@ def connectIMAP(self): ########################################################################################## # run IDLE loop in separate thread. When this function exits, the IDLE thread terminates - def idleIMAP(self): - self.logger.debug(self.device.name + u": idleIMAP() called") + def idleIMAPThread(self): + self.logger.debug(self.device.name + u": idleIMAPThread() called") def idleEvent(args): self.logger.debug(self.device.name + u": IDLE Event Received") @@ -170,7 +170,6 @@ def idleEvent(args): def checkMsgs(self): self.logger.debug(u"{}: Doing checkMsgs".format(self.device.name)) - self.connection.select("INBOX") typ, msg_ids = self.connection.search(None, 'ALL') self.logger.debug(self.device.name + u": msg_ids = " + str(msg_ids)) if msg_ids == None: @@ -187,8 +186,8 @@ def checkMsgs(self): continue except Exception, e: self.logger.error(self.device.name + u': Error fetching FLAGS for Message # ' + messageNum + ": " + str(e)) - pass - + continue + try: self.logger.debug(self.device.name + u": Fetching Message # " + messageNum) typ, data = self.connection.fetch(messageNum, '(RFC822)') @@ -296,17 +295,19 @@ def checkMsgs(self): if self.imapProps['postProcess'] == 'delete': self.logger.debug(u"{}: Deleting message # {}".format(self.device.name, messageNum)) t, resp = self.connection.store(messageNum, '+FLAGS', r'(\Deleted)') - elif self.imapProps['postProcess'] == 'move': - self.logger.debug(u"{}: Moving message # {}".format(self.device.name, messageNum)) - result = self.connection.copy(messageNum, self.imapProps['moveFolder']) - if result[0] == 'OK': - t, resp = self.connection.store(messageNum, '+FLAGS', r'(\Deleted)') - else: - self.logger.debug(u"{}: Error moving message # {}: {}".format(self.device.name, messageNum, result)) - else: # Mark the message as successfully processed t, resp = self.connection.store(messageNum, '+FLAGS', r'($IndigoProcessed)') + if self.imapProps['postProcess'] == 'move': + self.logger.debug(u"{}: Copying message # {} to {}".format(self.device.name, messageNum, self.imapProps['moveFolder'])) + result = self.connection.copy(messageNum, self.imapProps['moveFolder']) + if result[0] == 'OK': + self.logger.debug(u"{}: Deleting message # {}".format(self.device.name, messageNum)) + t, resp = self.connection.store(messageNum, '+FLAGS', r'(\Deleted)') + else: + self.logger.error(u"{}: Error moving message # {}: {}".format(self.device.name, messageNum, result)) + + self.connection.expunge() self.logger.debug(u"{}: checkMsgs complete".format(self.device.name)) diff --git a/BetterEmail.indigoPlugin/Contents/Server Plugin/plugin.py b/BetterEmail.indigoPlugin/Contents/Server Plugin/plugin.py index a2bf79e..58adad9 100755 --- a/BetterEmail.indigoPlugin/Contents/Server Plugin/plugin.py +++ b/BetterEmail.indigoPlugin/Contents/Server Plugin/plugin.py @@ -13,7 +13,7 @@ from IMAPServer import IMAPServer from POPServer import POPServer -kCurDevVersCount = 3 # current version of plugin devices +kCurDevVersCount = 4 # current version of plugin devices ################################################################################ class Plugin(indigo.PluginBase): @@ -216,6 +216,11 @@ def deviceStartComm(self, device): newProps["useIDLE"] = "True" self.logger.debug(device.name + u": created useIDLE property") + postProcess = device.pluginProps.get('postProcess', "unknown") + if postProcess == "unknown": + newProps["postProcess"] = "delete" + self.logger.debug(device.name + u": created postProcess property") + pollingFrequency = device.pluginProps.get('pollingFrequency', "unknown") if pollingFrequency == "unknown": newProps["pollingFrequency"] = device.pluginProps.get('pollingFrequency', 15)