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.

155 lines
4.1 KiB

package ru.defend.defdevteam.tstu;
import android.util.Log;
/**
* Created by thedefend on 29.11.16.
*/
public class FeedController implements FeedReader.ReaderCallback, FeedParser.ParserCallback{
private FeedReader feedReader;
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) {
feedReader = new FeedReader(this, rssUrl);
feedReader.registerCallback(this);
newsItemList = new NewsItemList();
feedUpdater = new FeedUpdater();
this.activity = activity;
this.updateRate = updateRate;
feedUpdater.start();
}
private void startFeedReader() {
switch (feedReader.getThreadState()) {
case THREAD_FAIL:
feedReader.start();
break;
case THREAD_NULL:
feedReader.start();
break;
}
}
private boolean checkFeedReader() throws Exception{
switch (feedReader.getThreadState()) {
case THREAD_COMPLETE:
return true;
case THREAD_NULL:
return false;
default:
throw new Exception("Failed to get rss source string from FeedReader class");
}
}
//
// public void feedUpdateAction(final String result) {
// activity.runOnUiThread(new Runnable() {
// @Override
// public void run() {
// //activity.newsTextView.setText(result);
// }
// });
// }
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 NewsItemList().new Group(
title,
text,
link
));
}
public void drawNewsList(NewsItemList newsItemList) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
activity.clearNewsFeed();
}
});
for (int i = 0; i < newsItemList.size(); i++) {
NewsItemList.Group item = newsItemList.get(i);
final String title = item.getTitle();
final String text = item.getText();
final String link = item.getLink();
if(i < newsItemList.size() - 1) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
activity.addNewsItem(title, text, link, false);
}
});
} else {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
activity.addNewsItem(title, text, link, true);
}
});
}
}
}
public void logIt(final String LOGIT) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Log.i("MAIN DEBUG MESSAGE:", LOGIT);
}
});
}
@Override
public void onSuccess(final String result){
FeedParser parser = new FeedParser(result);
parser.registerCallback(this);
parser.parseXML();
}
@Override
public void onFailure(){
//Ill add this code later!
}
@Override
public void onSuccessParsing() {
drawNewsList(newsItemList);
}
@Override
public void onFailureParsing() {
}
@Override
public void contentDispatcher(String title, String text, String link) {
addNewsList(title, text, link);
}
}