List of usage examples for org.apache.commons.net.nntp Article getFrom
public String getFrom()
From source file:com.almarsoft.GroundhogReader.lib.HeaderItemClass.java
public HeaderItemClass(Article article, int level) { mArticle = article;/*w w w. j a v a2 s . com*/ mLevel = level; if (!article.isDummy()) { String from = article.getFrom(); int idx = from.indexOf('<'); if (idx != -1) { mFromNoEmail = from.substring(0, from.indexOf('<')); } else mFromNoEmail = from; mFromNoEmail = mFromNoEmail.replaceAll("\"", "").trim(); // Fix for some articles that have level 0 even being inside a thread // (probably bug in the Threader) if (article.getReferences().length > 0 && mLevel == 0) mLevel = 1; } }
From source file:net.longfalcon.newsj.Blacklist.java
public boolean isBlackListed(Article article, Group group) { boolean isBlackListed = false; String[] fields = new String[4]; fields[0] = ""; fields[Defaults.BLACKLIST_FIELD_SUBJECT] = article.getSubject(); fields[Defaults.BLACKLIST_FIELD_FROM] = article.getFrom(); fields[Defaults.BLACKLIST_FIELD_MESSAGEID] = article.getArticleId(); List<BinaryBlacklistEntry> blacklistEntries = getCachedBlacklist(); for (BinaryBlacklistEntry blacklistEntry : blacklistEntries) { Pattern groupPattern = Pattern.compile("^" + blacklistEntry.getGroupName() + "$", Pattern.CASE_INSENSITIVE); Matcher groupNameMatcher = groupPattern.matcher(group.getName()); if (groupNameMatcher.matches()) { Pattern blacklistPattern = Pattern.compile(blacklistEntry.getRegex(), Pattern.CASE_INSENSITIVE); String matcherText = fields[blacklistEntry.getMsgCol()]; Matcher blacklistMatcher = blacklistPattern.matcher(matcherText); if (blacklistEntry.getOpType() == 1) { // remove what matches if (blacklistMatcher.find()) { isBlackListed = true; }// w ww .j a v a2 s . c o m } else if (blacklistEntry.getOpType() == 2) { // remove all that doesnt match if (!blacklistMatcher.find()) { isBlackListed = true; } } } } return isBlackListed; }
From source file:com.almarsoft.GroundhogReader.lib.ServerManager.java
public Vector<Object> getArticleInfoFromXOVER(long articleNumber, String charset, SQLiteDatabase catchedDB) throws IOException, UsenetReaderException, ServerAuthException { clientConnectIfNot();/*from w w w . j a v a2 s. c om*/ long ddbbId = -1; Vector<Object> ret = null; // Get the article information (shorter than the header; we'll fetch the body and the // body when the user clicks on an article.) Article articleInfo = buildArticleInfoFromXOVER(articleNumber); if (articleInfo != null) { String from = articleInfo.getFrom(); if ((!mBannedThreadsSet.contains(articleInfo.simplifiedSubject())) && (!mBannedTrollsSet.contains(from))) { ddbbId = insertArticleInDB(articleInfo, articleNumber, from, charset, catchedDB); } ret = new Vector<Object>(2); ret.add(ddbbId); ret.add(articleInfo.getArticleId()); } return ret; }
From source file:com.almarsoft.GroundhogReader.MessageListActivity.java
private void markUserMessagesAsRead(String from) { // Proxy stuff String msgId;/* ww w. j av a 2 s . c om*/ Article article; ArrayList<HeaderItemClass> proxyHeaderItems = mHeaderItemsList; HashSet<String> proxyReadSet = mReadSet; int headerItemsSize = proxyHeaderItems.size(); int proxyNumUnread = mNumUnread; // End proxy stuff for (int i = 0; i < headerItemsSize; i++) { article = proxyHeaderItems.get(i).getArticle(); if (from.equalsIgnoreCase(article.getFrom())) { msgId = article.getArticleId(); DBUtils.markAsRead(msgId, getApplicationContext()); if (!proxyReadSet.contains(msgId)) proxyNumUnread--; } } mNumUnread = proxyNumUnread; mTitleBar.setText(mGroup + ":" + mNumUnread); mReadSet = DBUtils.getReadMessagesSet(mGroup, getApplicationContext()); DBUtils.updateUnreadInGroupsTable(mNumUnread, mGroupID, getApplicationContext()); mMsgList.invalidateViews(); }
From source file:com.almarsoft.GroundhogReader.lib.ServerManager.java
public Vector<Object> getArticleInfoAndHeaderFromHEAD(long serverNumber, String charset, SQLiteDatabase catchedDB, String group) throws IOException, UsenetReaderException, ServerAuthException { clientConnectIfNot();//from w w w . j a v a2 s . c o m long ddbbId = -1; Vector<Object> ret = null; Reader reader = null; try { reader = (DotTerminatedMessageReader) mClient.retrieveArticleHeader(serverNumber); } catch (IOException e) { connect(); reader = (DotTerminatedMessageReader) mClient.retrieveArticleHeader(serverNumber); } if (reader != null) { Header header = new Header(new ReaderInputStream(reader)); Article article = new Article(); article.setArticleNumber(serverNumber); article.setSubject(header.getField("Subject").getBody().trim()); article.setFrom(header.getField("From").getBody().trim()); article.setDate(header.getField("Date").getBody().trim()); article.setArticleId(header.getField("Message-ID").getBody().trim()); // Take the references Field refsField = header.getField("References"); String refsStr = null; if (refsField != null) refsStr = header.getField("References").getBody().trim(); if (refsStr != null) { String[] refs = refsStr.split(" "); for (String r : refs) { if (r.trim().length() == 0) continue; article.addReference(r.trim()); } } if (article != null) { String from = article.getFrom(); if ((!mBannedThreadsSet.contains(article.simplifiedSubject())) && (!mBannedTrollsSet.contains(from))) { ddbbId = insertArticleInDB(article, serverNumber, from, charset, catchedDB); } } // Meter la cabecera en la BBDD String outputPath = UsenetConstants.EXTERNALSTORAGE + "/" + UsenetConstants.APPNAME + "/offlinecache/groups/" + group + "/header/"; FSUtils.writeStringToDiskFile(header.toString(), outputPath, Long.toString(ddbbId)); DBUtils.setMessageCatched(ddbbId, true, mContext); ret = new Vector<Object>(2); ret.add(ddbbId); ret.add(article.getArticleId()); } return ret; }
From source file:com.almarsoft.GroundhogReader.MessageListActivity.java
private void fillListNonRecursive(Article root, int depth, String replyto) { Stack<MiniHeader> stack = new Stack<MiniHeader>(); boolean markReplies = mPrefs.getBoolean("markReplies", true); boolean finished = false; String clean_subject;//from w w w.j a v a2s . co m MiniHeader tmpMiniItem; HeaderItemClass ih = null; String[] refsArray; String msgId; ArrayList<HeaderItemClass> nonStarredItems = new ArrayList<HeaderItemClass>(); HashSet<String> bannedTrollsSet = DBUtils.getBannedTrolls(getApplicationContext()); HashSet<String> starredSet = DBUtils.getStarredSubjectsSet(getApplicationContext()); // Proxy for speed HashSet<String> myPostsSetProxy = mMyPostsSet; ArrayList<HeaderItemClass> headerItemsListProxy = new ArrayList<HeaderItemClass>(); int refsArrayLen; while (!finished) { if (root == null) finished = true; root.setReplyTo(replyto); if (!root.isDummy()) { ih = new HeaderItemClass(root, depth); // Don't feed the troll if (!bannedTrollsSet.contains(root.getFrom())) { // Put the replies in red (if configured) if (markReplies) { refsArray = root.getReferences(); refsArrayLen = refsArray.length; msgId = null; if (refsArray != null && refsArrayLen > 0) { msgId = refsArray[refsArrayLen - 1]; } if (msgId != null && myPostsSetProxy != null && myPostsSetProxy.contains(msgId)) ih.myreply = true; else ih.myreply = false; } clean_subject = root.simplifiedSubject(); if (starredSet.contains(clean_subject)) { ih.starred = true; headerItemsListProxy.add(ih); // Starred items first } else { // Nonstarred items will be added to mHeaderItemsList at the end nonStarredItems.add(ih); } } } if (root.next != null) { tmpMiniItem = new MiniHeader(root.next, depth, replyto); stack.push(tmpMiniItem); } if (root.kid != null) { replyto = root.getFrom(); if (!root.isDummy()) ++depth; root = root.kid; } else if (!stack.empty()) { tmpMiniItem = stack.pop(); root = tmpMiniItem.article; depth = tmpMiniItem.depth; replyto = tmpMiniItem.replyto; } else finished = true; } // Now add the non starred items after the starred ones int nonStarredItemsLen = nonStarredItems.size(); for (int i = 0; i < nonStarredItemsLen; i++) { headerItemsListProxy.add(nonStarredItems.get(i)); } mHeaderItemsList = headerItemsListProxy; nonStarredItems = null; }
From source file:org.ossmeter.platform.communicationchannel.nntp.local.NNTPDownloader.java
public void downloadMessages(NntpNewsGroup newsgroup) throws Exception { final long startTime = System.currentTimeMillis(); long previousTime = startTime; previousTime = printTimeMessage(startTime, previousTime, "Download started"); NNTPClient nntpClient = NntpUtil.connectToNntpServer(newsgroup); NewsgroupInfo newsgroupInfo = NntpUtil.selectNewsgroup(nntpClient, newsgroup); int lastArticleChecked = newsgroupInfo.getFirstArticle(); previousTime = printTimeMessage(startTime, previousTime, "First message in newsgroup:\t" + lastArticleChecked); int lastArticle = newsgroupInfo.getLastArticle(); previousTime = printTimeMessage(startTime, previousTime, "Last message in newsgroup:\t" + lastArticle); previousTime = printTimeMessage(startTime, previousTime, "Articles in newsgroup:\t" + newsgroupInfo.getArticleCount()); System.err.println();//from www . j a va2s. com Mongo mongo = new Mongo(); DB db = mongo.getDB(newsgroup.getName() + "LocalStorage"); Messages dbMessages = new Messages(db); NewsgroupData newsgroupData = dbMessages.getNewsgroup().findOneByName(newsgroup.getName()); if (newsgroupData != null) { int newsgroupLastArticleChecked = Integer.parseInt(newsgroupData.getLastArticleChecked()); if (newsgroupLastArticleChecked > lastArticleChecked) { lastArticleChecked = newsgroupLastArticleChecked; } previousTime = printTimeMessage(startTime, previousTime, "Last article checked set to:\t" + lastArticleChecked); } else { newsgroupData = new NewsgroupData(); newsgroupData.setName(newsgroup.getName()); newsgroupData.setUrl(newsgroup.getUrl()); newsgroupData.setAuthenticationRequired(newsgroup.getAuthenticationRequired()); newsgroupData.setUsername(newsgroup.getUsername()); newsgroupData.setPassword(newsgroup.getPassword()); newsgroupData.setPort(newsgroup.getPort()); newsgroupData.setInterval(newsgroup.getInterval()); newsgroupData.setFirstArticle(lastArticleChecked + ""); dbMessages.getNewsgroup().add(newsgroupData); } int retrievalStep = RETRIEVAL_STEP; while (lastArticleChecked < lastArticle) { if (lastArticleChecked + retrievalStep > lastArticle) { retrievalStep = lastArticle - lastArticleChecked; } Article[] articles = NntpUtil.getArticleInfo(nntpClient, lastArticleChecked + 1, lastArticleChecked + retrievalStep); if (articles.length > 0) { Article lastArticleRetrieved = articles[articles.length - 1]; lastArticleChecked = lastArticleRetrieved.getArticleNumber(); newsgroupData.setLastArticleChecked(lastArticleChecked + ""); } previousTime = printTimeMessage(startTime, previousTime, "downloaded:\t" + articles.length + " nntp articles"); previousTime = printTimeMessage(startTime, previousTime, "downloading contents\t"); for (Article article : articles) { ArticleData articleData = new ArticleData(); articleData.setUrl(newsgroup.getUrl()); articleData.setArticleNumber(article.getArticleNumber()); articleData.setArticleId(article.getArticleId()); articleData.setDate(article.getDate()); articleData.setFrom(article.getFrom()); articleData.setSubject(article.getSubject()); for (String referenceId : article.getReferences()) articleData.getReferences().add(referenceId); articleData.setBody(NntpUtil.getArticleBody(nntpClient, article.getArticleNumber())); dbMessages.getArticles().add(articleData); } dbMessages.sync(); previousTime = printTimeMessage(startTime, previousTime, "stored:\t" + dbMessages.getArticles().size() + " / " + newsgroupInfo.getArticleCount() + " nntp articles sofar"); System.err.println(); } nntpClient.disconnect(); dbMessages.sync(); previousTime = printTimeMessage(startTime, previousTime, "stored:\t" + dbMessages.getArticles().size() + " / " + newsgroupInfo.getArticleCount() + " nntp articles"); }
From source file:org.ossmeter.platform.communicationchannel.nntp.NntpManager.java
@Override public CommunicationChannelDelta getDelta(DB db, NntpNewsGroup newsgroup, Date date) throws Exception { NNTPClient nntpClient = NntpUtil.connectToNntpServer(newsgroup); NewsgroupInfo newsgroupInfo = NntpUtil.selectNewsgroup(nntpClient, newsgroup); int lastArticle = newsgroupInfo.getLastArticle(); // The following statement is not really needed, but I added it to speed up running, // in the date is far latter than the first day of the newsgroup. // if (Integer.parseInt(newsgroup.getLastArticleChecked())<134500) // newsgroup.setLastArticleChecked("134500"); //137500"); String lac = newsgroup.getLastArticleChecked(); if (lac == null || lac.equals("") || lac.equals("null")) lac = "-1"; int lastArticleChecked = Integer.parseInt(lac); if (lastArticleChecked < 0) lastArticleChecked = newsgroupInfo.getFirstArticle(); // FIXME: certain eclipse newsgroups return 0 for both FirstArticle and LastArticle which causes exceptions if (lastArticleChecked == 0) return null; CommunicationChannelDelta delta = new CommunicationChannelDelta(); delta.setNewsgroup(newsgroup);/*w w w . j a v a 2 s .c o m*/ int retrievalStep = RETRIEVAL_STEP; Boolean dayCompleted = false; while (!dayCompleted) { if (lastArticleChecked + retrievalStep > lastArticle) { retrievalStep = lastArticle - lastArticleChecked; dayCompleted = true; } Article[] articles; Date articleDate = date; // The following loop discards messages for days earlier than the required one. do { articles = NntpUtil.getArticleInfo(nntpClient, lastArticleChecked + 1, lastArticleChecked + retrievalStep); if (articles.length > 0) { Article lastArticleRetrieved = articles[articles.length - 1]; java.util.Date javaArticleDate = NntpUtil.parseDate(lastArticleRetrieved.getDate()); articleDate = new Date(javaArticleDate); if (date.compareTo(articleDate) > 0) lastArticleChecked = lastArticleRetrieved.getArticleNumber(); } } while (date.compareTo(articleDate) > 0); for (Article article : articles) { java.util.Date javaArticleDate = NntpUtil.parseDate(article.getDate()); if (javaArticleDate != null) { articleDate = new Date(javaArticleDate); if (date.compareTo(articleDate) < 0) { dayCompleted = true; // System.out.println("dayCompleted"); } else if (date.compareTo(articleDate) == 0) { CommunicationChannelArticle communicationChannelArticle = new CommunicationChannelArticle(); communicationChannelArticle.setArticleId(article.getArticleId()); communicationChannelArticle.setArticleNumber(article.getArticleNumber()); communicationChannelArticle.setDate(javaArticleDate); // I haven't seen any messageThreadIds on NNTP servers, yet. // communicationChannelArticle.setMessageThreadId(article.messageThreadId()); NntpNewsGroup newNewsgroup = new NntpNewsGroup(); newNewsgroup.setUrl(newsgroup.getUrl()); newNewsgroup.setAuthenticationRequired(newsgroup.getAuthenticationRequired()); newNewsgroup.setUsername(newsgroup.getUsername()); newNewsgroup.setPassword(newsgroup.getPassword()); newNewsgroup.setNewsGroupName(newsgroup.getNewsGroupName()); newNewsgroup.setPort(newsgroup.getPort()); newNewsgroup.setInterval(newsgroup.getInterval()); communicationChannelArticle.setNewsgroup(newNewsgroup); communicationChannelArticle.setReferences(article.getReferences()); communicationChannelArticle.setSubject(article.getSubject()); communicationChannelArticle.setUser(article.getFrom()); communicationChannelArticle .setText(getContents(db, newNewsgroup, communicationChannelArticle)); delta.getArticles().add(communicationChannelArticle); lastArticleChecked = article.getArticleNumber(); // System.out.println("dayNOTCompleted"); } else { //TODO: In this case, there are unprocessed articles whose date is earlier than the date requested. // This means that the deltas of those article dates are incomplete, // i.e. the deltas did not contain all articles of those dates. } } else { // If an article has no correct date, then ignore it System.err.println("\t\tUnparsable article date: " + article.getDate()); } } } nntpClient.disconnect(); newsgroup.setLastArticleChecked(lastArticleChecked + ""); System.out.println( "delta (" + date.toString() + ") contains:\t" + delta.getArticles().size() + " nntp articles"); return delta; }