@ -490,10 +490,15 @@ class Core {
// Drafts: javax.mail.FolderClosedException: * BYE Jakarta Mail Exception:
// javax.net.ssl.SSLException: Write error: ssl=0x8286cac0: I/O error during system call, Broken pipe
// Drafts: * BYE Jakarta Mail Exception: java.io.IOException: Connection dropped by server?
// Sync: BAD Could not parse command
// Seen: NO mailbox selected READ-ONLY
// Fetch: BAD Error in IMAP command FETCH: Invalid messageset
// Fetch: NO all of the requested messages have been expunged
// fetch: BAD parse error: invalid message sequence number:
// fetch: NO [SERVERBUG] SELECT Server error - Please try again later
// Move: NO No matching messages
// Move: NO [EXPUNGEISSUED] Some of the requested messages no longer exist
// Move: BAD parse error: invalid message sequence number:
// Delete: NO [CANNOT] STORE It's not possible to perform specified operation
// Delete: NO [UNAVAILABLE] EXPUNGE Backend error
String msg = "Unrecoverable operation=" + op . name + " tries=" + op . tries + " created=" + new Date ( op . created ) ;
@ -923,28 +928,19 @@ class Core {
} else
ifolder . appendMessages ( new Message [ ] { imessage } ) ;
// Delete previous (external) version
if ( message . uid ! = null ) {
if ( folder . id . equals ( message . folder ) ) {
// Prevent deleting message
db . message ( ) . setMessageUid ( message . id , null ) ;
Message iexisting = ifolder . getMessageByUID ( message . uid ) ;
if ( iexisting = = null )
Log . w ( folder . name + " existing not found uid=" + message . uid ) ;
else {
try {
Log . i ( folder . name + " deleting uid=" + message . uid ) ;
iexisting . setFlag ( Flags . Flag . DELETED , true ) ;
ifolder . expunge ( ) ;
} catch ( MessageRemovedException ignored ) {
Log . w ( folder . name + " existing gone uid=" + message . uid ) ;
}
}
}
if ( folder . id . equals ( message . folder ) ) {
// Some providers do not list the new message yet
Long found = findUid ( ifolder , message . msgid , true ) ;
if ( newuid = = null )
newuid = findUid ( ifolder , message . msgid , true ) ;
newuid = found ;
else if ( ! newuid . equals ( found ) ) {
Log . e ( folder . name + " Added=" + newuid + " found=" + found ) ;
newuid = found ;
}
if ( newuid ! = null & & ( message . uid = = null | | newuid > message . uid ) )
try {
Log . i ( folder . name + " Fetching uid=" + newuid ) ;
@ -1902,7 +1898,7 @@ class Core {
boolean notify_known = prefs . getBoolean ( "notify_known" , false ) ;
boolean pro = ActivityBilling . isPro ( context ) ;
Log. i ( folder . name + " POP sync type=" + folder . type + " connected=" + ( ifolder ! = null ) ) ;
EntityLog. log ( context , folder . name + " POP sync type=" + folder . type + " connected=" + ( ifolder ! = null ) ) ;
if ( ! EntityFolder . INBOX . equals ( folder . type ) ) {
db . folder ( ) . setFolderSyncState ( folder . id , null ) ;
@ -1915,10 +1911,10 @@ class Core {
db . folder ( ) . setFolderSyncState ( folder . id , "syncing" ) ;
Map < String , String > caps = istore . capabilities ( ) ;
Log. i ( folder . name + " POP capabilities= " + caps . keySet ( ) ) ;
EntityLog. log ( context , folder . name + " POP capabilities= " + caps . keySet ( ) ) ;
Message [ ] imessages = ifolder . getMessages ( ) ;
Log. i ( folder . name + " POP messages=" + imessages . length ) ;
EntityLog. log ( context , folder . name + " POP messages=" + imessages . length ) ;
if ( account . max_messages ! = null & & imessages . length > account . max_messages )
imessages = Arrays . copyOfRange ( imessages ,
@ -1934,7 +1930,7 @@ class Core {
}
List < TupleUidl > ids = db . message ( ) . getUidls ( folder . id ) ;
Log. i ( folder . name + " POP existing=" + ids . size ( ) + " uidl=" + hasUidl ) ;
EntityLog. log ( context , folder . name + " POP existing=" + ids . size ( ) + " uidl=" + hasUidl ) ;
// Index UIDLs
Map < String , String > uidlMsgId = new HashMap < > ( ) ;
@ -1958,7 +1954,7 @@ class Core {
}
for ( TupleUidl uidl : known . values ( ) ) {
Log. i ( folder . name + " POP purging uidl=" + uidl . uidl ) ;
EntityLog. log ( context , folder . name + " POP purging uidl=" + uidl . uidl ) ;
db . message ( ) . deleteMessage ( uidl . id ) ;
}
} else {
@ -1975,7 +1971,7 @@ class Core {
}
for ( TupleUidl uidl : known . values ( ) ) {
Log. i ( folder . name + " POP purging msgid=" + uidl . msgid ) ;
EntityLog. log ( context , folder . name + " POP purging msgid=" + uidl . msgid ) ;
db . message ( ) . deleteMessage ( uidl . id ) ;
}
}
@ -1993,7 +1989,7 @@ class Core {
if ( hasUidl ) {
uidl = ifolder . getUID ( imessage ) ;
if ( TextUtils . isEmpty ( uidl ) ) {
Log. w ( folder . name + " POP no uidl" ) ;
EntityLog. log ( context , folder . name + " POP no uidl" ) ;
continue ;
}
@ -2025,12 +2021,12 @@ class Core {
}
if ( TextUtils . isEmpty ( msgid ) ) {
Log. w ( folder . name + " POP no msgid" ) ;
EntityLog. log ( context , folder . name + " POP no msgid" ) ;
continue ;
}
try {
Log. i ( folder . name + " POP sync=" + uidl + "/" + msgid ) ;
EntityLog. log ( context , folder . name + " POP sync=" + uidl + "/" + msgid ) ;
Long sent = helper . getSent ( ) ;
Long received = helper . getReceivedHeader ( ) ;
@ -2158,7 +2154,7 @@ class Core {
}
db . folder ( ) . setFolderLastSync ( folder . id , new Date ( ) . getTime ( ) ) ;
Log. i ( folder . name + " POP done" ) ;
EntityLog. log ( context , folder . name + " POP done" ) ;
} finally {
db . folder ( ) . setFolderSyncState ( folder . id , null ) ;
}