package ru.defend.defdevteam.tstu; /** * Created by thedefend on 29.11.16. */ public class FeedController implements FeedReader.ReaderCallback, FeedParser.ParserCallback{ private FeedReader feedReader; private FeedParser parser; private FeedUpdater feedUpdater; NewsItemList newsItemList; private int updateRate; //in minutes private CabinetActivity activity; FeedController(CabinetActivity activity, int updateRate) { this(activity, updateRate, "http://press.tstu.ru/?format=feed"); } FeedController(CabinetActivity activity, int updateRate, String rssUrl) { this.activity = activity; this.updateRate = updateRate; feedReader = new FeedReader(this, rssUrl); newsItemList = new NewsItemList(); feedUpdater = new FeedUpdater(); parser = new FeedParser(); feedReader.registerCallback(this); parser.registerCallback(this); feedUpdater.start(); } private void startFeedReader() { switch (feedReader.getThreadState()) { case THREAD_FAIL: feedReader.start(); break; case THREAD_NULL: feedReader.start(); break; } } private class FeedUpdater extends Thread { @Override public void run() { startFeedReader(); try { sleep(updateRate*60*1000); } catch (InterruptedException e) { e.printStackTrace(); } } public FeedUpdater() { } } public void addNewsList(String title, String text, String link) { newsItemList.add(new NewsItemGroup(title, text, link)); } public void drawNewsList(NewsItemList newsItemList) { activity.runOnUiThread(new Runnable() { @Override public void run() { activity.clearNewsFeed(); } }); NewsItemGroup array[] = newsItemList.toArray(); for (int i = 0; i < array.length; i++) { final NewsItemGroup item = array[i]; if(i < newsItemList.size() - 1) { activity.runOnUiThread(new Runnable() { @Override public void run() { activity.addNewsItem(item, false); } }); } else { activity.runOnUiThread(new Runnable() { @Override public void run() { activity.addNewsItem(item, true); } }); } } } @Override public void onSuccess(final String result){ parser.parseXML(result); } @Override public void onFailure(){ //Ill add this code later! } @Override public void onSuccessParsing() { drawNewsList(newsItemList); } @Override public void onFailureParsing() { //Ill add this code later! } @Override public void contentDispatcher(String title, String text, String link) { addNewsList(title, text, link); } }