Example usage for org.apache.commons.net.nntp Article getFrom

List of usage examples for org.apache.commons.net.nntp Article getFrom

Introduction

In this page you can find the example usage for org.apache.commons.net.nntp Article getFrom.

Prototype

public String getFrom() 

Source Link

Usage

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;
}