This week I am at GUADEC. I have been lucky to see a great number of talks and talk with some great people.

I have not had an unproductive week, however.

Over the past week, I have written the code to connection asyncronously to an IMAP server and do some -basic- IMAP parsing.

From latest git commit:

IMAPFolder#

  • tracks overall folder uid list
  • count of messages in the folder
  • has data_in and data_out GIO streams
  • change_state()
    • checks if folder is in the IDLE state and sends DONE command if necessary to perform another command
  • new_search()
    • creates a new search object
    • changes state to ‘searchlist’ with the tag of the

Using a basic state variable on the IMAPFolder object to control behaviour depending on the current state. Eg. ignore EXISTS and EXPUNGED while waiting for the results of an IMAP serach.

IMAPSearch#

  • keeps list of messages that match a search string
  • store callback reference for returning data to cache or other interested party
  • update()
    • update the uid_list in the IMAPSearch and run the callback function to return the new data

Basic logic for parsing IMAP messages is nearly complete.

The async line reader provided by GIO pipes data into the parser, which will respond to the commands as required.

Working:#

  • Logging in
  • select folder
  • download and store list of message UIDs
  • respond to EXISTS and EXPUNGED while IDLE

Not Working:#

  • EXISTS and EXPUNGED while in the mainlist (fetch main UID list) and searchlist (fetch search UID list) states