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