v0.8.2: added a news checker service
This commit is contained in:
parent
d406230821
commit
94809385d4
|
@ -27,6 +27,7 @@ android {
|
|||
versionNameSuffix '-INDEV'
|
||||
dependencies {
|
||||
debugImplementation project(':services:updates:debugUpdates')
|
||||
debugImplementation project(':services:news:debugNews')
|
||||
}
|
||||
}
|
||||
release {
|
||||
|
@ -41,6 +42,7 @@ android {
|
|||
|
||||
dependencies {
|
||||
releaseImplementation project(':services:updates:githubUpdates')
|
||||
releaseImplementation project(':services:news:shatteredNews')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,6 +32,8 @@ import com.badlogic.gdx.backends.android.AndroidApplication;
|
|||
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.services.news.News;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.services.news.NewsImpl;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.services.updates.UpdateImpl;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.services.updates.Updates;
|
||||
import com.watabou.noosa.Game;
|
||||
|
@ -60,10 +62,13 @@ public class AndroidGame extends AndroidApplication {
|
|||
} catch (PackageManager.NameNotFoundException e) {
|
||||
Game.versionCode = 0;
|
||||
}
|
||||
|
||||
|
||||
if (UpdateImpl.supportsUpdates()){
|
||||
Updates.service = UpdateImpl.getUpdateService();
|
||||
}
|
||||
if (NewsImpl.supportsNews()){
|
||||
News.service = NewsImpl.getNewsService();
|
||||
}
|
||||
|
||||
FileUtils.setDefaultFileProperties( Files.FileType.Local, "" );
|
||||
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
* Pixel Dungeon
|
||||
* Copyright (C) 2012-2015 Oleg Dolya
|
||||
*
|
||||
* Shattered Pixel Dungeon
|
||||
* Copyright (C) 2014-2020 Evan Debenham
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.services.news;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
|
||||
public class News {
|
||||
|
||||
public static NewsService service;
|
||||
|
||||
public static boolean supportsNews(){
|
||||
return service != null;
|
||||
}
|
||||
|
||||
private static Date lastCheck = null;
|
||||
private static final long CHECK_DELAY = 1000*60*60; //1 hour
|
||||
|
||||
public static void checkForNews(){
|
||||
if (!supportsNews()) return;
|
||||
if (lastCheck != null && (new Date().getTime() - lastCheck.getTime()) < CHECK_DELAY) return;
|
||||
|
||||
service.checkForArticles(new NewsService.NewsResultCallback() {
|
||||
@Override
|
||||
public void onArticlesFound(ArrayList<NewsArticle> articles) {
|
||||
lastCheck = new Date();
|
||||
News.articles = articles;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectionFailed() {
|
||||
lastCheck = null;
|
||||
News.articles = null;
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private static ArrayList<NewsArticle> articles;
|
||||
|
||||
public static boolean articlesAvailable(){
|
||||
return articles != null;
|
||||
}
|
||||
|
||||
public static ArrayList<NewsArticle> articles(){
|
||||
return articles;
|
||||
}
|
||||
|
||||
public static int unreadArticles(Date lastRead){
|
||||
int unread = 0;
|
||||
for (NewsArticle article : articles){
|
||||
if (article.date.after(lastRead)) unread++;
|
||||
}
|
||||
return unread;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -23,6 +23,7 @@ task debug(dependsOn: classes, type: JavaExec) {
|
|||
|
||||
dependencies {
|
||||
debugImplementation project(':services:updates:debugUpdates')
|
||||
debugImplementation project(':services:news:debugNews')
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -45,6 +46,7 @@ task release(dependsOn: compileForRelease, type: Jar) {
|
|||
|
||||
dependencies {
|
||||
releaseImplementation project(':services:updates:githubUpdates')
|
||||
releaseImplementation project(':services:news:shatteredNews')
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -65,4 +67,5 @@ dependencies {
|
|||
//Need these at compile time to prevent errors there.
|
||||
// The actual dependency used at runtime will vary based on source set.
|
||||
compileOnly project(':services:updates:debugUpdates')
|
||||
compileOnly project(':services:news:debugNews')
|
||||
}
|
|
@ -31,6 +31,8 @@ import com.badlogic.gdx.files.FileHandle;
|
|||
import com.badlogic.gdx.utils.SharedLibraryLoader;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.services.news.News;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.services.news.NewsImpl;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.services.updates.UpdateImpl;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.services.updates.Updates;
|
||||
import com.watabou.noosa.Game;
|
||||
|
@ -98,6 +100,9 @@ public class DesktopLauncher {
|
|||
if (UpdateImpl.supportsUpdates()){
|
||||
Updates.service = UpdateImpl.getUpdateService();
|
||||
}
|
||||
if (NewsImpl.supportsNews()){
|
||||
News.service = NewsImpl.getNewsService();
|
||||
}
|
||||
|
||||
Lwjgl3ApplicationConfiguration config = new Lwjgl3ApplicationConfiguration();
|
||||
|
||||
|
|
30
services/news/debugNews/build.gradle
Normal file
30
services/news/debugNews/build.gradle
Normal file
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Pixel Dungeon
|
||||
* Copyright (C) 2012-2015 Oleg Dolya
|
||||
*
|
||||
* Shattered Pixel Dungeon
|
||||
* Copyright (C) 2014-2020 Evan Debenham
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
apply plugin: 'java-library'
|
||||
|
||||
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
|
||||
sourceCompatibility = targetCompatibility = appJavaCompatibility
|
||||
|
||||
dependencies {
|
||||
implementation project(':SPD-classes')
|
||||
api project(':services')
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
* Pixel Dungeon
|
||||
* Copyright (C) 2012-2015 Oleg Dolya
|
||||
*
|
||||
* Shattered Pixel Dungeon
|
||||
* Copyright (C) 2014-2020 Evan Debenham
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.services.news;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
||||
public class DebugNews extends NewsService {
|
||||
|
||||
@Override
|
||||
public void checkForArticles(NewsResultCallback callback) {
|
||||
|
||||
//turn on to test connection failure
|
||||
if (false){
|
||||
callback.onConnectionFailed();
|
||||
return;
|
||||
}
|
||||
|
||||
ArrayList<NewsArticle> articles = new ArrayList<>();
|
||||
for (int i = 0; i < 10; i++){
|
||||
NewsArticle article = new NewsArticle();
|
||||
article.title = "TEST ARTICLE " + i;
|
||||
article.summary = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do " +
|
||||
"eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim " +
|
||||
"veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea " +
|
||||
"commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit " +
|
||||
"esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat " +
|
||||
"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
|
||||
article.URL = "http://www.google.com";
|
||||
// a year in the past, plus one day for each article
|
||||
long daysBack = 365+i;
|
||||
article.date = new Date(System.currentTimeMillis() - (daysBack*1000*60*60*24));
|
||||
articles.add(article);
|
||||
}
|
||||
|
||||
callback.onArticlesFound(articles);
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* Pixel Dungeon
|
||||
* Copyright (C) 2012-2015 Oleg Dolya
|
||||
*
|
||||
* Shattered Pixel Dungeon
|
||||
* Copyright (C) 2014-2020 Evan Debenham
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.services.news;
|
||||
|
||||
public class NewsImpl {
|
||||
|
||||
private static NewsService newsChecker = new DebugNews();
|
||||
|
||||
public static NewsService getNewsService(){
|
||||
return newsChecker;
|
||||
}
|
||||
|
||||
public static boolean supportsNews(){
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
30
services/news/shatteredNews/build.gradle
Normal file
30
services/news/shatteredNews/build.gradle
Normal file
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Pixel Dungeon
|
||||
* Copyright (C) 2012-2015 Oleg Dolya
|
||||
*
|
||||
* Shattered Pixel Dungeon
|
||||
* Copyright (C) 2014-2020 Evan Debenham
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
apply plugin: 'java-library'
|
||||
|
||||
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
|
||||
sourceCompatibility = targetCompatibility = appJavaCompatibility
|
||||
|
||||
dependencies {
|
||||
implementation project(':SPD-classes')
|
||||
api project(':services')
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* Pixel Dungeon
|
||||
* Copyright (C) 2012-2015 Oleg Dolya
|
||||
*
|
||||
* Shattered Pixel Dungeon
|
||||
* Copyright (C) 2014-2020 Evan Debenham
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.services.news;
|
||||
|
||||
public class NewsImpl {
|
||||
|
||||
private static NewsService newsChecker = new ShatteredNews();
|
||||
|
||||
public static NewsService getNewsService(){
|
||||
return newsChecker;
|
||||
}
|
||||
|
||||
public static boolean supportsNews(){
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
* Pixel Dungeon
|
||||
* Copyright (C) 2012-2015 Oleg Dolya
|
||||
*
|
||||
* Shattered Pixel Dungeon
|
||||
* Copyright (C) 2014-2020 Evan Debenham
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.services.news;
|
||||
|
||||
import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.Net;
|
||||
import com.badlogic.gdx.utils.XmlReader;
|
||||
import com.watabou.noosa.Game;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Locale;
|
||||
|
||||
public class ShatteredNews extends NewsService {
|
||||
|
||||
@Override
|
||||
public void checkForArticles(NewsResultCallback callback) {
|
||||
|
||||
if (!Game.platform.connectedToUnmeteredNetwork()){
|
||||
callback.onConnectionFailed();
|
||||
}
|
||||
|
||||
Net.HttpRequest httpGet = new Net.HttpRequest(Net.HttpMethods.GET);
|
||||
httpGet.setUrl("http://shatteredpixel.com/feed");
|
||||
|
||||
Gdx.net.sendHttpRequest(httpGet, new Net.HttpResponseListener() {
|
||||
@Override
|
||||
public void handleHttpResponse(Net.HttpResponse httpResponse) {
|
||||
ArrayList<NewsArticle> articles = new ArrayList<>();
|
||||
XmlReader reader = new XmlReader();
|
||||
XmlReader.Element xmlDoc = reader.parse(httpResponse.getResultAsStream());
|
||||
|
||||
SimpleDateFormat dateParser = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
|
||||
|
||||
for (XmlReader.Element xmlArticle : xmlDoc.getChildrenByName("entry")){
|
||||
NewsArticle article = new NewsArticle();
|
||||
article.title = xmlArticle.get("title");
|
||||
try {
|
||||
article.date = dateParser.parse(xmlArticle.get("published"));
|
||||
} catch (ParseException e) {
|
||||
Game.reportException(e);
|
||||
}
|
||||
article.summary = xmlArticle.get("summary");
|
||||
article.URL = xmlArticle.get("id").replace("https://", "http://");
|
||||
articles.add(article);
|
||||
}
|
||||
callback.onArticlesFound(articles);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failed(Throwable t) {
|
||||
callback.onConnectionFailed();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancelled() {
|
||||
callback.onConnectionFailed();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* Pixel Dungeon
|
||||
* Copyright (C) 2012-2015 Oleg Dolya
|
||||
*
|
||||
* Shattered Pixel Dungeon
|
||||
* Copyright (C) 2014-2020 Evan Debenham
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.services.news;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public class NewsArticle {
|
||||
|
||||
public String title;
|
||||
public String summary;
|
||||
public String URL;
|
||||
public Date date;
|
||||
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* Pixel Dungeon
|
||||
* Copyright (C) 2012-2015 Oleg Dolya
|
||||
*
|
||||
* Shattered Pixel Dungeon
|
||||
* Copyright (C) 2014-2020 Evan Debenham
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.services.news;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public abstract class NewsService {
|
||||
|
||||
public static abstract class NewsResultCallback {
|
||||
public abstract void onArticlesFound(ArrayList<NewsArticle> articles);
|
||||
public abstract void onConnectionFailed();
|
||||
}
|
||||
|
||||
public abstract void checkForArticles( NewsResultCallback callback );
|
||||
|
||||
}
|
|
@ -1,2 +1,3 @@
|
|||
include ':core', ':SPD-classes', ':android', ':desktop', ':services',
|
||||
':services:updates:debugUpdates', ':services:updates:githubUpdates'
|
||||
':services:updates:debugUpdates', ':services:updates:githubUpdates',
|
||||
':services:news:debugNews', ':services:news:shatteredNews'
|
Loading…
Reference in New Issue
Block a user