refactoring code
This commit is contained in:
@@ -7,12 +7,10 @@ import de.srsoftware.widerhall.mail.SmtpClient;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.mail.Address;
|
||||
import javax.mail.Message;
|
||||
import javax.mail.MessagingException;
|
||||
import javax.mail.internet.AddressException;
|
||||
import javax.mail.internet.InternetAddress;
|
||||
import javax.mail.internet.MimeMessage;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
@@ -49,7 +47,7 @@ public class MailingList implements MessageHandler {
|
||||
private final SmtpClient smtp;
|
||||
private final ImapClient imap;
|
||||
|
||||
private static final HashMap<String,MailingList> lists = new HashMap<>();
|
||||
private static final HashMap<String,MailingList> cache = new HashMap<>();
|
||||
|
||||
/**
|
||||
* create a new ML object
|
||||
@@ -145,7 +143,7 @@ public class MailingList implements MessageHandler {
|
||||
|
||||
private void forward(Message message) throws MessagingException {
|
||||
try {
|
||||
var emails = members().stream().map(User::email).toList();
|
||||
var emails = members().stream().map(ListMember::user).map(User::email).toList();
|
||||
String sender = (state & STATE_FORWARD_FROM) > 0 ? message.getFrom()[0].toString() : email();
|
||||
smtp.bccForward(sender,message,emails);
|
||||
} catch (SQLException e) {
|
||||
@@ -163,8 +161,8 @@ public class MailingList implements MessageHandler {
|
||||
*/
|
||||
private static MailingList from(ResultSet rs) throws SQLException {
|
||||
String email = rs.getString(EMAIL);
|
||||
var ml = lists.get(email);
|
||||
if (ml == null) lists.put(email,ml = new MailingList(rs.getString(EMAIL),
|
||||
var ml = cache.get(email);
|
||||
if (ml == null) cache.put(email,ml = new MailingList(rs.getString(EMAIL),
|
||||
rs.getString(NAME),
|
||||
rs.getString(IMAP_HOST),
|
||||
rs.getInt(IMAP_PORT),
|
||||
@@ -213,7 +211,7 @@ public class MailingList implements MessageHandler {
|
||||
*/
|
||||
public static MailingList load(String listEmail) {
|
||||
if (listEmail == null) return null;
|
||||
var ml = lists.get(listEmail);
|
||||
var ml = cache.get(listEmail);
|
||||
if (ml == null) try {
|
||||
var rs = Database.open()
|
||||
.select(TABLE_NAME)
|
||||
@@ -226,10 +224,41 @@ public class MailingList implements MessageHandler {
|
||||
return ml;
|
||||
}
|
||||
|
||||
private Set<User> members() throws SQLException {
|
||||
return ListMember.of(email()).keySet();
|
||||
public boolean mayBeAlteredBy(User user) {
|
||||
if (user.hashPermission(PERMISSION_ADMIN)) return true;
|
||||
try {
|
||||
if (ListMember.load(this,user).hasState(ListMember.STATE_OWNER)) return true;
|
||||
} catch (SQLException e) {
|
||||
LOG.debug("Error loading list member for ({}, {})",user.email(),email());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean mayBeTestedBy(User user) {
|
||||
if (user.hashPermission(PERMISSION_ADMIN)) return true;
|
||||
try {
|
||||
if (ListMember.load(this,user).hasState(ListMember.STATE_OWNER)) return true;
|
||||
} catch (SQLException e) {
|
||||
LOG.debug("Error loading list member for ({}, {})",user.email(),email());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public Set<ListMember> members() throws SQLException {
|
||||
return ListMember.of(this);
|
||||
}
|
||||
|
||||
public boolean membersMayBeListedBy(User user) {
|
||||
if (user.hashPermission(PERMISSION_ADMIN)) return true;
|
||||
try {
|
||||
if (ListMember.load(this,user).hasState(ListMember.STATE_OWNER)) return true;
|
||||
} catch (SQLException e) {
|
||||
LOG.debug("Error loading list member for ({}, {})",user.email(),email());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* creates a map from the current ML object containing only email and name of the ML
|
||||
* @return
|
||||
@@ -424,5 +453,4 @@ public class MailingList implements MessageHandler {
|
||||
return new ArrayList<InternetAddress>().stream();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user