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