!7 sclass LatestGMails extends DynTable { int numMsgs = 50; L data; void start { ownTimer(doEvery(dm_osLoading() ? 10.0 : 0.0, 60.0, r actualUpdate)); } void actualUpdate { actualCalc(); updateMe(); } JComponent visualize() { JComponent c = super.visualize(); tablePopupMenuItemsThreaded(table, "Mail source code", r { long uid = parseLong((S) selectedTableCell(table, "UID")); if (uid == 0) ret; Folder inbox = googleCode_gmail_inbox(); temp tempMailStore(inbox); inbox.open(Folder.READ_ONLY); IMAPMessage msg = cast ((UIDFolder) inbox).getMessageByUID(uid); O content = msg.getContent(); showText("Mail " + uid, javaMail_messageContentToText(content)); }); ret c; } L calc() { temp enter(); if (data != null) ret data; ret actualCalc(); } L actualCalc() ctex { temp enter(); long startTime = sysNow(); Folder inbox = googleCode_gmail_inbox(); temp tempMailStore(inbox); new L l; inbox.open(Folder.READ_ONLY); int count = inbox.getMessageCount(); int n = max(1, count-numMsgs+1); Message[] messages = inbox.getMessages(n, count); print("Fetching " + n2(messages, "message")); inbox.fetch(messages, javaMail_fullFetchProfile()); int i = 1; for (Message _msg : reversed(messages)) { new LinkedHashMap map; //print("Loading message " + i++); IMAPMessage msg = cast _msg; map.put("From", InternetAddress.toString(msg.getFrom())); map.put("Subject", msg.getSubject()); //map.put("Message number: " + msg.getMessageNumber()); map.put("Sent/Received", msg.getSentDate() + "/" + msg.getReceivedDate()); //O content = msg.getContent(); //print(" Content type: " + getClassName(content)); map.put("Size", toK(msg.getSize()) + " K"); map.put("[hidden] ID", msg.getMessageID()); pcall { map.put("UID", ((UIDFolder) inbox).getUID(msg)); } //map.put("Content Type", className(content) + " / " + msg.getContentType()); map.put("Content Type", msg.getContentType()); //print(" Content type: " + msg.getContentType()); l.add(map); } //inbox.close(false); //inbox.getStore().close(); print("Fetching " + n2(l, " latest GMail") + " took: " + elapsedTime(startTime) + " ms"); S oldLatest = latestMessageID(); setField(data := l); if (nempty(oldLatest)) { S latest = latestMessageID(); if (neq(oldLatest, latest)) onClick(infoBoxPanel("New GMail from " + getString(first(l), "From") + "!"), rThread dm_toFront); } ret l; } S latestMessageID() { ret getString(first(data), "[hidden] ID"); } }