Skip to content

Commit afc5c50

Browse files
committed
Merge branch 'Development-btremote999' into Development
# Conflicts: # library/src/main/java/com/pokegoapi/api/PokemonGo.java
2 parents 1e854c2 + 9871552 commit afc5c50

File tree

2 files changed

+142
-2
lines changed

2 files changed

+142
-2
lines changed

library/src/main/java/com/pokegoapi/api/PokemonGo.java

+28-2
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,14 @@
2121
import POGOProtos.Networking.Platform.PlatformRequestTypeOuterClass.PlatformRequestType;
2222
import POGOProtos.Networking.Platform.Requests.GetStoreItemsRequestOuterClass.GetStoreItemsRequest;
2323
import POGOProtos.Networking.Requests.Messages.CheckChallengeMessageOuterClass.CheckChallengeMessage;
24+
import POGOProtos.Networking.Requests.Messages.FetchAllNewsMessageOuterClass;
2425
import POGOProtos.Networking.Requests.Messages.GetAssetDigestMessageOuterClass.GetAssetDigestMessage;
2526
import POGOProtos.Networking.Requests.Messages.LevelUpRewardsMessageOuterClass.LevelUpRewardsMessage;
2627
import POGOProtos.Networking.Requests.Messages.VerifyChallengeMessageOuterClass.VerifyChallengeMessage;
2728
import POGOProtos.Networking.Requests.RequestTypeOuterClass.RequestType;
2829
import POGOProtos.Networking.Responses.CheckChallengeResponseOuterClass.CheckChallengeResponse;
2930
import POGOProtos.Networking.Responses.DownloadRemoteConfigVersionResponseOuterClass.DownloadRemoteConfigVersionResponse;
31+
import POGOProtos.Networking.Responses.FetchAllNewsResponseOuterClass;
3032
import POGOProtos.Networking.Responses.LevelUpRewardsResponseOuterClass.LevelUpRewardsResponse;
3133
import POGOProtos.Networking.Responses.LevelUpRewardsResponseOuterClass.LevelUpRewardsResponse.Result;
3234
import POGOProtos.Networking.Responses.VerifyChallengeResponseOuterClass.VerifyChallengeResponse;
@@ -42,6 +44,7 @@
4244
import com.pokegoapi.api.listener.LoginListener;
4345
import com.pokegoapi.api.map.Map;
4446
import com.pokegoapi.api.map.Point;
47+
import com.pokegoapi.api.news.News;
4548
import com.pokegoapi.api.player.PlayerProfile;
4649
import com.pokegoapi.api.settings.Settings;
4750
import com.pokegoapi.api.settings.templates.ItemTemplateProvider;
@@ -56,6 +59,7 @@
5659
import com.pokegoapi.main.ServerRequest;
5760
import com.pokegoapi.main.ServerRequestEnvelope;
5861
import com.pokegoapi.util.ClientInterceptor;
62+
import com.pokegoapi.util.Log;
5963
import com.pokegoapi.util.SystemTimeImpl;
6064
import com.pokegoapi.util.Time;
6165
import com.pokegoapi.util.hash.HashProvider;
@@ -85,6 +89,7 @@ public class PokemonGo {
8589
public Inventories inventories;
8690
@Getter
8791
public double latitude;
92+
private News news;
8893
@Getter
8994
public double longitude;
9095
@Getter
@@ -232,7 +237,8 @@ private void reset() {
232237
active = false;
233238
new Random().nextBytes(sessionHash);
234239
inventories = new Inventories(this);
235-
settings = new Settings(this);
240+
news = new News(this);
241+
settings = new Settings(this);
236242
playerProfile = new PlayerProfile(this);
237243
map = new Map(this);
238244
longitude = Double.NaN;
@@ -287,7 +293,27 @@ private void initialize() throws RequestFailedException {
287293

288294
requestHandler.sendServerRequests(envelope);
289295

290-
List<LoginListener> loginListeners = getListeners(LoginListener.class);
296+
try {
297+
FetchAllNewsMessageOuterClass.FetchAllNewsMessage msg = FetchAllNewsMessageOuterClass.FetchAllNewsMessage.newBuilder().build();
298+
ServerRequest request = new ServerRequest(RequestType.FETCH_ALL_NEWS, msg);
299+
envelope = ServerRequestEnvelope.create(request);
300+
getRequestHandler().sendServerRequests(envelope);
301+
FetchAllNewsResponseOuterClass.FetchAllNewsResponse response = FetchAllNewsResponseOuterClass.FetchAllNewsResponse.parseFrom(request.getData());
302+
if (response.getResult() == FetchAllNewsResponseOuterClass.FetchAllNewsResponse.Result.SUCCESS) {
303+
Log.i(TAG, "FetchAllNewsMessage Success: total News=" + response.getCurrentNews().getNewsArticlesCount());
304+
this.news.setCurrentNews(response.getCurrentNews());
305+
306+
// mark all un-read new to read
307+
this.news.markUnreadNews();
308+
} else {
309+
Log.d(TAG, "FetchAllNewsMessage Failed. Result=" + response.getResult());
310+
}
311+
} catch (Exception e) {
312+
Log.d(TAG, "Exceptions FetchAllNew");
313+
}
314+
315+
316+
List<LoginListener> loginListeners = getListeners(LoginListener.class);
291317

292318
for (LoginListener listener : loginListeners) {
293319
listener.onLogin(this);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
/*
2+
* This program is free software: you can redistribute it and/or modify
3+
* it under the terms of the GNU General Public License as published by
4+
* the Free Software Foundation, either version 3 of the License, or
5+
* (at your option) any later version.
6+
*
7+
* This program is distributed in the hope that it will be useful,
8+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
9+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10+
* GNU General Public License for more details.
11+
*
12+
* You should have received a copy of the GNU General Public License
13+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
14+
*/
15+
16+
package com.pokegoapi.api.news;
17+
18+
import POGOProtos.Data.News.CurrentNewsOuterClass;
19+
import POGOProtos.Data.News.NewsArticleOuterClass;
20+
import POGOProtos.Data.News.NewsArticleOuterClass.NewsArticle;
21+
import POGOProtos.Networking.Requests.Messages.MarkReadNewsArticleMessageOuterClass;
22+
import POGOProtos.Networking.Requests.Messages.MarkReadNewsArticleMessageOuterClass.MarkReadNewsArticleMessage;
23+
import POGOProtos.Networking.Requests.RequestTypeOuterClass;
24+
import POGOProtos.Networking.Responses.MarkReadNewsArticleResponseOuterClass;
25+
import POGOProtos.Networking.Responses.MarkReadNewsArticleResponseOuterClass.MarkReadNewsArticleResponse;
26+
import com.google.protobuf.InvalidProtocolBufferException;
27+
import com.pokegoapi.api.PokemonGo;
28+
import com.pokegoapi.exceptions.request.RequestFailedException;
29+
import com.pokegoapi.main.ServerRequest;
30+
import com.pokegoapi.main.ServerRequestEnvelope;
31+
import com.pokegoapi.util.ClientInterceptor;
32+
import com.pokegoapi.util.Log;
33+
import lombok.Getter;
34+
import okhttp3.OkHttpClient;
35+
import okhttp3.Request;
36+
import okhttp3.Response;
37+
38+
import java.io.BufferedReader;
39+
import java.io.IOException;
40+
import java.io.InputStreamReader;
41+
import java.util.*;
42+
import java.util.stream.Collector;
43+
import java.util.stream.Collectors;
44+
import java.util.stream.Stream;
45+
46+
47+
public class News {
48+
private static final java.lang.String TAG = News.class.getSimpleName();
49+
50+
private final PokemonGo api;
51+
@Getter
52+
private CurrentNewsOuterClass.CurrentNews currentNews;
53+
// the Key of the Language = Key
54+
55+
/**
56+
* Constructor
57+
* @param api Pokemon Go Core Api
58+
*/
59+
public News(PokemonGo api) {
60+
this.api = api;
61+
}
62+
63+
public void setCurrentNews(CurrentNewsOuterClass.CurrentNews currentNews) {
64+
this.currentNews = currentNews;
65+
}
66+
67+
/**
68+
* Mark Unread News to read
69+
*/
70+
public void markUnreadNews(){
71+
72+
if(currentNews == null || currentNews.getNewsArticlesCount() <= 0){
73+
// do nothing
74+
return;
75+
}
76+
77+
// Stored enabled and un-read article
78+
List<String> unReadNewsList = new ArrayList<>();
79+
for(NewsArticle newsArticle:currentNews.getNewsArticlesList()){
80+
if(newsArticle.getEnabled() && !newsArticle.getArticleRead())
81+
unReadNewsList.add(newsArticle.getId());
82+
}
83+
84+
Log.i(TAG, "markUnreadNews total Article count:"+ unReadNewsList.size());
85+
86+
if(unReadNewsList.size() > 0) {
87+
MarkReadNewsArticleMessage msg = MarkReadNewsArticleMessage.newBuilder()
88+
.addAllNewsIds(unReadNewsList).build();
89+
ServerRequest request = new ServerRequest(RequestTypeOuterClass.RequestType.MARK_READ_NEWS_ARTICLE, msg);
90+
ServerRequestEnvelope envelope = ServerRequestEnvelope.create(request);
91+
try {
92+
api.getRequestHandler().sendServerRequests(envelope);
93+
MarkReadNewsArticleResponse response = MarkReadNewsArticleResponse.parseFrom(request.getData());
94+
if(response.getResult() == MarkReadNewsArticleResponse.Result.SUCCESS){
95+
Log.i(TAG, "Mark News Article -> success");
96+
}else{
97+
Log.w(TAG, "Mark News Article -> !success");
98+
}
99+
} catch (RequestFailedException e) {
100+
e.printStackTrace();
101+
Log.e(TAG, "RequestFailedException: cause:" + e.getCause() + " message:" + e.getMessage());
102+
} catch (InvalidProtocolBufferException e) {
103+
e.printStackTrace();
104+
Log.e(TAG, "InvalidProtocolBufferException: cause:" + e.getCause() + " message:" + e.getMessage());
105+
}
106+
}else {
107+
Log.i(TAG, "no unmarked news found -> skipped");
108+
}
109+
}
110+
111+
112+
113+
114+
}

0 commit comments

Comments
 (0)