// Fallback method if news server doesnt' support listNewNews -> this is much slower // but at least we get the messages private String[] applyNextCommand(NNTPClient client, String group) throws IOException { ArrayList<String> articleList = new ArrayList<>(); client.selectNewsgroup(group); ArticleInfo pointer = new ArticleInfo(); int i = 0; while (client.selectNextArticle(pointer) && i < 100) { // TODO while date > sync start date // client.selectArticle(pointer.articleNumber, pointer); Log.d( TAG, "pointer.articleNumber = " + pointer.articleNumber + ", pointer.articleId = " + pointer.articleId); articleList.add(pointer.articleId); i++; } String[] articleArray = new String[articleList.size()]; return articleList.toArray(articleArray); }
public static void main(String[] args) throws SocketException, IOException { if (args.length != 2 && args.length != 4) { System.out.println("Usage: MessageThreading <hostname> <groupname> [<user> <password>]"); return; } String hostname = args[0]; String newsgroup = args[1]; NNTPClient client = new NNTPClient(); client.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out), true)); client.connect(hostname); if (args.length == 4) { // Optional auth String user = args[2]; String password = args[3]; if (!client.authenticate(user, password)) { System.out.println("Authentication failed for user " + user + "!"); System.exit(1); } } String fmt[] = client.listOverviewFmt(); if (fmt != null) { System.out.println("LIST OVERVIEW.FMT:"); for (String s : fmt) { System.out.println(s); } } else { System.out.println("Failed to get OVERVIEW.FMT"); } NewsgroupInfo group = new NewsgroupInfo(); client.selectNewsgroup(newsgroup, group); long lowArticleNumber = group.getFirstArticleLong(); long highArticleNumber = lowArticleNumber + 5000; System.out.println( "Retrieving articles between [" + lowArticleNumber + "] and [" + highArticleNumber + "]"); Iterable<Article> articles = client.iterateArticleInfo(lowArticleNumber, highArticleNumber); System.out.println("Building message thread tree..."); Threader threader = new Threader(); Article root = (Article) threader.thread(articles); Article.printThread(root, 0); }
private void getNewNewsForNewsgroup( long serverId, NNTPClient client, long groupId, String groupName, int syncTime) throws IOException, LoginException { currentNewsgroupId = groupId; // Create a GregorianCalendar instance with date of last sync. NewsgroupQueries newsgroupQueries = new NewsgroupQueries(context); long lastSyncDate = newsgroupQueries.getLastSyncDate(groupId); GregorianCalendar calendar = new GregorianCalendar(); if (lastSyncDate != -1) { calendar.setTimeInMillis( lastSyncDate); // TODO compare mails that arrived in this second with database entries to // not lose messages. Log.d(TAG, "Last synced: " + NNTPDateFormatter.getPrettyDateString(lastSyncDate, context)); } else { // Set sync interval; TODO get sync interval from settings calendar.setTimeInMillis( System.currentTimeMillis() - TimeUnit.MILLISECONDS.convert(syncTime, TimeUnit.DAYS)); Log.d( TAG, "Complete sync: " + NNTPDateFormatter.getPrettyDateString(calendar.getTimeInMillis(), context)); } // get list of message id's from server NewGroupsOrNewsQuery query = new NewGroupsOrNewsQuery(calendar, false); query.addNewsgroup(groupName); String[] messages = client.listNewNews(query); if (messages == null) { messages = applyNextCommand(client, groupName); } // Get messages and add them to database. for (String s : messages) { fetchMessage(serverId, groupId, s); } // Store date of last message that we fetched in newsgroup table and reset values. if (currentNewsgroupId != -1 && currentMessageDate != -1) { newsgroupQueries.setLastSyncDate(groupId, currentMessageDate); } currentNewsgroupId = -1; currentMessageDate = -1; }