| /* |
| * Copyright (C) 2015 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.voicemail.impl.mail.store; |
| |
| import android.content.Context; |
| import android.net.Network; |
| import com.android.voicemail.impl.imap.ImapHelper; |
| import com.android.voicemail.impl.mail.MailTransport; |
| import com.android.voicemail.impl.mail.Message; |
| import com.android.voicemail.impl.mail.MessagingException; |
| import com.android.voicemail.impl.mail.internet.MimeMessage; |
| import java.io.IOException; |
| import java.io.InputStream; |
| import org.apache.james.mime4j.MimeException; |
| |
| public class ImapStore { |
| /** |
| * A global suggestion to Store implementors on how much of the body should be returned on |
| * FetchProfile.Item.BODY_SANE requests. We'll use 125k now. |
| */ |
| public static final int FETCH_BODY_SANE_SUGGESTED_SIZE = (125 * 1024); |
| |
| private final Context context; |
| private final ImapHelper helper; |
| private final String username; |
| private final String password; |
| private final MailTransport transport; |
| private ImapConnection connection; |
| |
| public static final int FLAG_NONE = 0x00; // No flags |
| public static final int FLAG_SSL = 0x01; // Use SSL |
| public static final int FLAG_TLS = 0x02; // Use TLS |
| public static final int FLAG_AUTHENTICATE = 0x04; // Use name/password for authentication |
| public static final int FLAG_TRUST_ALL = 0x08; // Trust all certificates |
| public static final int FLAG_OAUTH = 0x10; // Use OAuth for authentication |
| |
| /** Contains all the information necessary to log into an imap server */ |
| public ImapStore( |
| Context context, |
| ImapHelper helper, |
| String username, |
| String password, |
| int port, |
| String serverName, |
| int flags, |
| Network network) { |
| this.context = context; |
| this.helper = helper; |
| this.username = username; |
| this.password = password; |
| transport = new MailTransport(context, this.getImapHelper(), network, serverName, port, flags); |
| } |
| |
| public Context getContext() { |
| return context; |
| } |
| |
| public ImapHelper getImapHelper() { |
| return helper; |
| } |
| |
| public String getUsername() { |
| return username; |
| } |
| |
| public String getPassword() { |
| return password; |
| } |
| |
| /** Returns a clone of the transport associated with this store. */ |
| MailTransport cloneTransport() { |
| return transport.clone(); |
| } |
| |
| /** Returns UIDs of Messages joined with "," as the separator. */ |
| static String joinMessageUids(Message[] messages) { |
| StringBuilder sb = new StringBuilder(); |
| boolean notFirst = false; |
| for (Message m : messages) { |
| if (notFirst) { |
| sb.append(','); |
| } |
| sb.append(m.getUid()); |
| notFirst = true; |
| } |
| return sb.toString(); |
| } |
| |
| static class ImapMessage extends MimeMessage { |
| private ImapFolder folder; |
| |
| ImapMessage(String uid, ImapFolder folder) { |
| this.uid = uid; |
| this.folder = folder; |
| } |
| |
| public void setSize(int size) { |
| this.size = size; |
| } |
| |
| @Override |
| public void parse(InputStream in) throws IOException, MessagingException, MimeException { |
| super.parse(in); |
| } |
| |
| public void setFlagInternal(String flag, boolean set) throws MessagingException { |
| super.setFlag(flag, set); |
| } |
| |
| @Override |
| public void setFlag(String flag, boolean set) throws MessagingException { |
| super.setFlag(flag, set); |
| folder.setFlags(new Message[] {this}, new String[] {flag}, set); |
| } |
| } |
| |
| static class ImapException extends MessagingException { |
| private static final long serialVersionUID = 1L; |
| |
| private final String status; |
| private final String statusMessage; |
| private final String alertText; |
| private final String responseCode; |
| |
| public ImapException( |
| String message, |
| String status, |
| String statusMessage, |
| String alertText, |
| String responseCode) { |
| super(message); |
| this.status = status; |
| this.statusMessage = statusMessage; |
| this.alertText = alertText; |
| this.responseCode = responseCode; |
| } |
| |
| public String getStatus() { |
| return status; |
| } |
| |
| public String getStatusMessage() { |
| return statusMessage; |
| } |
| |
| public String getAlertText() { |
| return alertText; |
| } |
| |
| public String getResponseCode() { |
| return responseCode; |
| } |
| } |
| |
| public void closeConnection() { |
| if (connection != null) { |
| connection.close(); |
| connection = null; |
| } |
| } |
| |
| public ImapConnection getConnection() { |
| if (connection == null) { |
| connection = new ImapConnection(this); |
| } |
| return connection; |
| } |
| } |