You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
3.1 KiB

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